[WIP] - Mostly working DisplayProfilesForm

The DisplayProfilesForm is mostly working, but it doesnt
cope with invalid profiles yet. This is where the profile
was set in a different configuration of screens, but those
screens have physically or OS level changed, meaning the
profile can't be used. This is handled in the Profile.IsPossible
function, and currently that appears to be broken. It needs
fixing.
This commit is contained in:
temacdonald 2020-05-11 23:11:26 +12:00
parent 861f1585b2
commit c1d69ab8e1
3 changed files with 173 additions and 82 deletions

View File

@ -222,17 +222,61 @@ namespace HeliosPlus.Shared
/// <inheritdoc />
public bool Equals(Profile other)
{
//if the other profile points to null, it's not equal
if (ReferenceEquals(null, other))
{
return false;
}
//if the other profile is the same object, it's equal
if (ReferenceEquals(this, other))
{
return true;
}
return Paths.All(path => other.Paths.Contains(path));
//return Paths.All(path => other.Paths.Contains(path));
if (Paths.Length != other.Paths.Length)
{
return false;
}
int thisToOtherPathCount = 0;
int otherToThisPathCount = 0;
foreach (ProfilePath myProfilePath in Paths)
{
foreach (ProfilePath otherProfilePath in other.Paths)
{
if (myProfilePath.Equals(otherProfilePath))
{
thisToOtherPathCount++;
}
}
}
foreach (ProfilePath otherProfilePath in other.Paths)
{
foreach (ProfilePath myProfilePath in Paths)
{
if (myProfilePath.Equals(otherProfilePath))
{
otherToThisPathCount++;
}
}
}
if (thisToOtherPathCount == otherToThisPathCount)
{
return true;
}
else
{
return false;
}
return false;
}
public static IEnumerable<Profile> LoadAllProfiles()
@ -281,7 +325,7 @@ namespace HeliosPlus.Shared
loadedProfile.ProfileIcon = new ProfileIcon(loadedProfile);
loadedProfile.ProfileBitmap = loadedProfile.ProfileIcon.ToBitmap(128,128);
if (loadedProfile == myCurrentProfile) {
if (loadedProfile.Equals(myCurrentProfile)) {
_currentProfile = loadedProfile;
}

View File

@ -53,6 +53,7 @@ namespace HeliosPlus.UIForms
this.txt_profile_save_name = new System.Windows.Forms.TextBox();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.ilv_saved_profiles = new Manina.Windows.Forms.ImageListView();
this.lbl_profile_shown_subtitle = new System.Windows.Forms.Label();
this.menu_profiles.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pb_down_arrow)).BeginInit();
this.SuspendLayout();
@ -161,6 +162,16 @@ namespace HeliosPlus.UIForms
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(64, 6);
//
// cloneToolStripMenuItem
//
this.cloneToolStripMenuItem.Name = "cloneToolStripMenuItem";
this.cloneToolStripMenuItem.Size = new System.Drawing.Size(67, 22);
//
// createShortcutToolStripMenuItem
//
this.createShortcutToolStripMenuItem.Name = "createShortcutToolStripMenuItem";
this.createShortcutToolStripMenuItem.Size = new System.Drawing.Size(67, 22);
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
@ -242,6 +253,7 @@ namespace HeliosPlus.UIForms
this.txt_profile_save_name.Name = "txt_profile_save_name";
this.txt_profile_save_name.Size = new System.Drawing.Size(384, 35);
this.txt_profile_save_name.TabIndex = 20;
this.txt_profile_save_name.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txt_profile_save_name_KeyDown);
//
// imageList1
//
@ -267,6 +279,18 @@ namespace HeliosPlus.UIForms
this.ilv_saved_profiles.View = Manina.Windows.Forms.View.HorizontalStrip;
this.ilv_saved_profiles.ItemClick += new Manina.Windows.Forms.ItemClickEventHandler(this.ilv_saved_profiles_ItemClick);
//
// lbl_profile_shown_subtitle
//
this.lbl_profile_shown_subtitle.AutoSize = true;
this.lbl_profile_shown_subtitle.BackColor = System.Drawing.Color.DimGray;
this.lbl_profile_shown_subtitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbl_profile_shown_subtitle.ForeColor = System.Drawing.Color.White;
this.lbl_profile_shown_subtitle.Location = new System.Drawing.Point(21, 45);
this.lbl_profile_shown_subtitle.Name = "lbl_profile_shown_subtitle";
this.lbl_profile_shown_subtitle.Size = new System.Drawing.Size(132, 20);
this.lbl_profile_shown_subtitle.TabIndex = 22;
this.lbl_profile_shown_subtitle.Text = "My Display Profile";
//
// DisplayProfileForm
//
this.AcceptButton = this.btn_apply;
@ -275,6 +299,7 @@ namespace HeliosPlus.UIForms
this.BackColor = System.Drawing.Color.Black;
this.CancelButton = this.btn_back;
this.ClientSize = new System.Drawing.Size(976, 812);
this.Controls.Add(this.lbl_profile_shown_subtitle);
this.Controls.Add(this.ilv_saved_profiles);
this.Controls.Add(this.txt_profile_save_name);
this.Controls.Add(this.lbl_profile_shown);
@ -325,6 +350,7 @@ namespace HeliosPlus.UIForms
private System.Windows.Forms.TextBox txt_profile_save_name;
private System.Windows.Forms.ImageList imageList1;
private Manina.Windows.Forms.ImageListView ilv_saved_profiles;
private System.Windows.Forms.Label lbl_profile_shown_subtitle;
}
}

View File

@ -140,7 +140,7 @@ namespace HeliosPlus.UIForms
public DisplayProfileForm()
{
InitializeComponent();
this.AcceptButton = this.btn_save_or_rename;
//txt_profile_save_name.Validating += new System.ComponentModel.CancelEventHandler(txt_profile_save_name_Validating);
//lv_profiles.Groups.Add(GroupCurrent, Language.Current);
//lv_profiles.Groups.Add(GroupActive, Language.Active_Profiles);
@ -381,8 +381,9 @@ namespace HeliosPlus.UIForms
_savedProfiles = (List<Profile>)Profile.LoadAllProfiles();
dv_profile.Profile = Profile.CurrentProfile;
_selectedProfile = Profile.CurrentProfile;
//dv_profile.Profile = Profile.CurrentProfile;
//_selectedProfile = Profile.CurrentProfile;
// Temporarily stop updating the saved_profiles listview
ilv_saved_profiles.SuspendLayout();
@ -403,33 +404,10 @@ namespace HeliosPlus.UIForms
{
// We have already saved the current profile!
// so we need to show the current profile
// and make sure the current profile name has
// been updated with the name saved last time
// So as the current profile was already saved, we need to change
// the save button to a rename one
_saveOrRenameMode = "rename";
btn_save_or_rename.Text = "Rename to";
// And finally we need to select the currentProfile, as it's the one we're using now
newItem.Selected = true;
}
else
{
// We haven't saved the current profile yet, but we've saved others!
// This is a new one
_saveOrRenameMode = "save";
btn_save_or_rename.Text = "Save As";
if (!loadedProfile.IsPossible)
{
// TODO mark the imagelist view netItem in some way
// to identify that it's not avalid profile, but
// still allow users to select it to rename it and
// see what the profile looks like.
}
}
}
ChangeSelectedProfile(Profile.CurrentProfile);
}
else
@ -437,8 +415,6 @@ namespace HeliosPlus.UIForms
// If there are no profiles at all then we are starting from scratch!
// Show the profile in the DV window
// Use the current profile name in the label and the save name
_saveOrRenameMode = "save";
btn_save_or_rename.Text = "Save As";
ChangeSelectedProfile(Profile.CurrentProfile);
}
@ -460,22 +436,51 @@ namespace HeliosPlus.UIForms
private void ChangeSelectedProfile(Profile profile)
{
// We also need to load the saved profile name to show the user
ChangeSelectedProfileDetails(profile.Name);
// And we need to update the actual selected profile too!
_selectedProfile = profile;
// We also need to load the saved profile name to show the user
lbl_profile_shown.Text = _selectedProfile.Name;
// And update the save/rename textbox
txt_profile_save_name.Text = _selectedProfile.Name;
if (_selectedProfile.Name == Profile.CurrentProfile.Name)
{
lbl_profile_shown_subtitle.Text = "(Current Display Profile in use)";
if (_savedProfiles.Contains(_selectedProfile))
{
_saveOrRenameMode = "rename";
btn_save_or_rename.Text = "Rename To";
}
else
{
_saveOrRenameMode = "save";
btn_save_or_rename.Text = "Save As";
}
btn_apply.Visible = false;
}
else
{
_saveOrRenameMode = "rename";
btn_save_or_rename.Text = "Rename To";
if (!_selectedProfile.IsPossible)
{
lbl_profile_shown_subtitle.Text = "(Display Profile is not valid so cannot be used)";
btn_apply.Visible = false;
}
else
{
lbl_profile_shown_subtitle.Text = "";
btn_apply.Visible = true;
}
}
// And finally show the profile in the display view
dv_profile.Profile = profile;
dv_profile.Refresh();
}
private void ChangeSelectedProfileDetails(string profileName)
{
// We also need to load the saved profile name to show the user
lbl_profile_shown.Text = profileName;
txt_profile_save_name.Text = profileName;
}
private bool IsValidFilename(string testName)
{
@ -522,6 +527,12 @@ namespace HeliosPlus.UIForms
private void btn_save_as_Click(object sender, EventArgs e)
{
// Check the name is the same, and if so do nothing
if (_selectedProfile.Name.Equals(txt_profile_save_name.Text))
{
return;
}
// Check the name is valid
if (!IsValidFilename(txt_profile_save_name.Text))
{
@ -530,51 +541,45 @@ namespace HeliosPlus.UIForms
return;
}
// Check we're not already using the name
foreach (Profile savedProfile in Profile.AllSavedProfiles)
{
//if (String.Equals(txt_profile_save_name.Text, savedProfile.Name, StringComparison.InvariantCultureIgnoreCase))
if (savedProfile.Name.Equals(txt_profile_save_name.Text))
{
MessageBox.Show("Sorry, each saved display profile needs a unique name.", "Profile name already exists", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
// If we're saving the current profile as a new item
// then we'll be in "save" mode
if (_saveOrRenameMode == "save")
{
// Check we're not already using the name
foreach (Profile savedProfile in Profile.AllSavedProfiles)
{
//if (String.Equals(txt_profile_save_name.Text, savedProfile.Name, StringComparison.InvariantCultureIgnoreCase))
if (_selectedProfile.Equals(Profile.CurrentProfile))
{
MessageBox.Show("Sorry, you can only have one saved display profile for each display configuration.", "Display profile already exists", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
// We're in 'save' mode!
// Add the current profile to the list of profiles
// So we've already passed the check that says this profile is unique
// Add the current profile to the list of profiles so it gets saved later
_savedProfiles.Add(_selectedProfile);
// Then save the profiles so we always have it updated
Profile.SaveAllProfiles(_savedProfiles);
/*// Also update the imagelistview so that
// Load the currentProfile image into the imagelistview
ImageListViewItem newItem = new ImageListViewItem(_selectedProfile.SavedProfileCacheFilename, _selectedProfile.Name);
newItem.Selected = true;
ilv_saved_profiles.Items.Add(newItem);
ilv_saved_profiles.Items.Add(newItem);*/
//ilv_saved_profiles.Refresh();
/*foreach (ImageListViewItem myItem in ilv_saved_profiles.Items)
{
if (_selectedProfile.Name == myItem.Text)
{
myItem.Selected = true;
myItem.Focused = true;
}
}*/
}
else
{
// We're in 'rename' mode!
// THen rename the imagelistview item
// Lets save the old names for usage next
string oldProfileName = _selectedProfile.Name;
string oldProfileCacheFilename = _selectedProfile.SavedProfileCacheFilename;
// Lets rename the entry in the imagelistview to the new name
foreach (ImageListViewItem myItem in ilv_saved_profiles.Items)
{
if (myItem.Text == oldProfileName)
@ -582,23 +587,29 @@ namespace HeliosPlus.UIForms
myItem.Text = txt_profile_save_name.Text;
}
}
// So lets rename the profile itself in the saved profiles
// and the selectprofile name too
foreach (Profile savedProfile in _savedProfiles)
{
if (savedProfile.Equals(_selectedProfile))
{
_selectedProfile.Name = txt_profile_save_name.Text;
savedProfile.Name = txt_profile_save_name.Text;
ChangeSelectedProfileDetails(_selectedProfile.Name);
}
}
// Lets rename the selectedProfile to the new name
_selectedProfile.Name = txt_profile_save_name.Text;
// TODO - delete the old PNG that we renamed from so we don't get a buildup of them!
// Then save all the profiles to lock it in
Profile.SaveAllProfiles(_savedProfiles);
// Lets update the rest of the profile screen too
lbl_profile_shown.Text = txt_profile_save_name.Text;
// Then we'll delete the old PNG that we renamed from so we don't get a buildup of them!
// as a new one will be created when we save later
try
{
File.Delete(oldProfileCacheFilename);
}
catch(Exception ex)
{
// TODO write error to console
// TODO specify the correct the exceptions
}
}
// Then save the profiles so we always have it updated
// Generating the imagelistview images automatically as we save.
Profile.SaveAllProfiles(_savedProfiles);
// now update the profiles image listview
//ilv_saved_profiles.Refresh();
@ -621,6 +632,16 @@ namespace HeliosPlus.UIForms
ChangeSelectedProfile(Profile.CurrentProfile);
}
private void txt_profile_save_name_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.Equals(Keys.Enter))
{
MessageBox.Show("Click works!", "Click works", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/*protected void txt_profile_save_name_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
try