From d971a2657901731657b036d6958f82e26ee4de7e Mon Sep 17 00:00:00 2001 From: Tim Stair Date: Sun, 21 May 2023 10:26:59 -0700 Subject: [PATCH] Prep for 2.2.1.0 release Added more capability around multiple-output remaps. --- Format/RemapEntry.cs | 37 +++++++- Forms/KeyCaptureConfig.cs | 131 +++++++++++++++++++++++++++-- Forms/KeyCaptureConfig.designer.cs | 79 ++++++++++++++--- Properties/AssemblyInfo.cs | 4 +- bin/Release/History.txt | 4 + bin/Release/KeyCap.odt | Bin 23479 -> 23579 bytes 6 files changed, 233 insertions(+), 22 deletions(-) diff --git a/Format/RemapEntry.cs b/Format/RemapEntry.cs index 96b8e22..fb182bc 100644 --- a/Format/RemapEntry.cs +++ b/Format/RemapEntry.cs @@ -56,6 +56,18 @@ public RemapEntry(InputConfig zInputConfig, OutputConfig zOutputConfig) m_nHash = CalculateHashCode(InputConfig); } + /// + /// Constructor based on input/output definitions + /// + /// the input definition + /// the output definition + public RemapEntry(InputConfig zInputConfig, List listOutputConfigs) + { + InputConfig = zInputConfig; + OutputConfigs = listOutputConfigs; + m_nHash = CalculateHashCode(InputConfig); + } + /// /// Constructor based on an input stream /// @@ -92,7 +104,7 @@ public RemapEntry(FileStream zFileStream) /// /// Appends an output definition /// - /// + /// The output to append /// public bool AppendOutputConfig(OutputConfig zOutputConfig) { @@ -100,6 +112,29 @@ public bool AppendOutputConfig(OutputConfig zOutputConfig) return true; } + /// + /// Appends an output definition at a specific index + /// + /// The output to append + /// The index to append the output at + /// + public bool AppendOutputConfigAt(OutputConfig zOutputConfig, int nZeroBasedIndex) + { + OutputConfigs.Insert(nZeroBasedIndex, zOutputConfig); + return true; + } + + /// + /// Removes an output definition + /// + /// The index to remove the output at + /// + public bool RemoveOutputConfigAt(int nZeroBasedIndex) + { + OutputConfigs.RemoveAt(nZeroBasedIndex); + return true; + } + public byte[] SerializeToBytes() { var zStream = new MemoryStream(); diff --git a/Forms/KeyCaptureConfig.cs b/Forms/KeyCaptureConfig.cs index 70a45fd..9a7eb8a 100644 --- a/Forms/KeyCaptureConfig.cs +++ b/Forms/KeyCaptureConfig.cs @@ -28,6 +28,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; +using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; @@ -547,9 +548,7 @@ private void recentConfiguration_Click(object sender, EventArgs e) private void listViewKeys_SelectedIndexChanged(object sender, EventArgs e) { - btnAppend.Enabled = (1 == listViewKeys.SelectedIndices.Count); - btnUpdate.Enabled = (1 == listViewKeys.SelectedIndices.Count); - btnRemove.Enabled = (0 < listViewKeys.SelectedIndices.Count); + UpdateActionEnableStates(); } private void listViewKeys_Resize(object sender, EventArgs e) @@ -646,12 +645,46 @@ private void btnUpdate_Click(object sender, EventArgs e) { if (listViewKeys.SelectedItems.Count == 1) { + var zSelectedEntry = (RemapEntry)listViewKeys.SelectedItems[0].Tag; + if (zSelectedEntry.OutputConfigCount > 1) + { + switch (MessageBox.Show(this, "This entry has multiple outputs. Do you want to overwrite the outputs?" + + "\nYES - overwrite input & outputs." + + "\nNO - overwrite input only.", "Remap has multiple outputs", MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)) + { + case DialogResult.Yes: + // nothing + break; + case DialogResult.No: + btnUpdateInput_Click(sender, e); + return; + case DialogResult.Cancel: + return; + } + } RemapEntry zRemapEntry = null; - if (!CreateRemapEntryFromActiveConfigs(ref zRemapEntry, (RemapEntry)listViewKeys.SelectedItems[0].Tag)) return; + if (!CreateRemapEntryFromActiveConfigs(ref zRemapEntry, (RemapEntry)listViewKeys.SelectedItems[0].Tag)) + { + MessageBox.Show("Unable to determine remap from configuration.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } AddRemapEntryToListView(zRemapEntry, true, listViewKeys.SelectedItems[0]); } } + private void btnUpdateInput_Click(object sender, EventArgs e) + { + RemapEntry zRemapEntry = null; + if (!CreateRemapEntryFromActiveConfigs(ref zRemapEntry, (RemapEntry)listViewKeys.SelectedItems[0].Tag, + true)) + { + MessageBox.Show("Unable to determine remap from configuration.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + AddRemapEntryToListView(zRemapEntry, true, listViewKeys.SelectedItems[0]); + } + private void btnAppend_Click(object sender, EventArgs e) { if (1 != listViewKeys.SelectedItems.Count) @@ -662,12 +695,84 @@ private void btnAppend_Click(object sender, EventArgs e) var zItem = listViewKeys.SelectedItems[0]; var zRemapEntry = (RemapEntry)zItem.Tag; OutputConfig zOutputConfig = null; - if (!RetrieveOutputConfigForAppend(zRemapEntry, ref zOutputConfig)) return; + if (!RetrieveOutputConfigForAppend(zRemapEntry, ref zOutputConfig)) + { + MessageBox.Show("Unable to determine remap from configuration.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } zRemapEntry.AppendOutputConfig(zOutputConfig); zItem.SubItems[1].Text = zRemapEntry.GetOutputString(); MarkDirty(); txtKeyOut.Focus(); // restore focus to the output + UpdateActionEnableStates(); + } + + private void btnAppendAt_Click(object sender, EventArgs e) + { + if (1 != listViewKeys.SelectedItems.Count) + { + return; + } + + var zItem = listViewKeys.SelectedItems[0]; + var zRemapEntry = (RemapEntry)zItem.Tag; + OutputConfig zOutputConfig = null; + if (!RetrieveOutputConfigForAppend(zRemapEntry, ref zOutputConfig)) + { + MessageBox.Show("Unable to determine remap from configuration.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + const string IDX_QUERY_KEY = "idx"; + var zQuery = new QueryPanelDialog("Append output config", 450, false); + zQuery.SetIcon(Icon); + zQuery.AddLabel("Select the index to append the output at (the selected output will be pushed forward to insert the new output).", 48); + var arrayOutputs = zRemapEntry.OutputConfigs.Select((zOutput, nIdx) => $"{nIdx}:{zOutput.GetDescription()}").ToArray(); + zQuery.AddPullDownBox("Output To Append At", arrayOutputs, 0, IDX_QUERY_KEY); + if(DialogResult.Cancel == zQuery.ShowDialog(this)) + { + return; + } + + zRemapEntry.AppendOutputConfigAt(zOutputConfig, zQuery.GetIndex(IDX_QUERY_KEY)); + zItem.SubItems[1].Text = zRemapEntry.GetOutputString(); + MarkDirty(); + txtKeyOut.Focus(); // restore focus to the output + UpdateActionEnableStates(); + } + + private void btnRemoveAt_Click(object sender, EventArgs e) + { + if (1 != listViewKeys.SelectedItems.Count) + { + return; + } + + var zItem = listViewKeys.SelectedItems[0]; + var zRemapEntry = (RemapEntry)zItem.Tag; + OutputConfig zOutputConfig = null; + if (!RetrieveOutputConfigForAppend(zRemapEntry, ref zOutputConfig)) + { + MessageBox.Show("Unable to determine remap from configuration.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + const string IDX_QUERY_KEY = "idx"; + var zQuery = new QueryPanelDialog("Remove output config at index", 450, false); + zQuery.SetIcon(Icon); + zQuery.AddLabel("Select the output to remove.", 24); + var arrayOutputs = zRemapEntry.OutputConfigs.Select((zOutput, nIdx) => $"{nIdx}:{zOutput.GetDescription()}").ToArray(); + zQuery.AddPullDownBox("Output To Remove", arrayOutputs, 0, IDX_QUERY_KEY); + if (DialogResult.Cancel == zQuery.ShowDialog(this)) + { + return; + } + + zRemapEntry.RemoveOutputConfigAt(zQuery.GetIndex(IDX_QUERY_KEY)); + zItem.SubItems[1].Text = zRemapEntry.GetOutputString(); + MarkDirty(); + UpdateActionEnableStates(); } private void btnRemove_Click(object sender, EventArgs e) @@ -722,6 +827,16 @@ private void numericUpDownOutputParameter_ValueChanged(object sender, EventArgs #region Support Methods + private void UpdateActionEnableStates() + { + btnAppend.Enabled = (1 == listViewKeys.SelectedIndices.Count); + btnAppendAt.Enabled = (1 == listViewKeys.SelectedIndices.Count); + btnUpdate.Enabled = (1 == listViewKeys.SelectedIndices.Count); + btnUpdateInput.Enabled = (1 == listViewKeys.SelectedIndices.Count); + btnRemoveAt.Enabled = (listViewKeys.SelectedItems.Count == 1) && + (((RemapEntry)listViewKeys.SelectedItems[0].Tag).OutputConfigCount > 1); + } + private void ResetInputOutputUI() { m_zActiveInputConfig.Reset(); @@ -897,7 +1012,7 @@ private void FlushIniSettings() m_zIniManager.FlushIniSettings(); } - private bool CreateRemapEntryFromActiveConfigs(ref RemapEntry zRemapEntry, RemapEntry updateEntry = null) + private bool CreateRemapEntryFromActiveConfigs(ref RemapEntry zRemapEntry, RemapEntry updateEntry = null, bool bKeepOutputs = false) { var zCurrentInputConfig = CreateInputConfigFromUI(); var zCurrentOutputConfig = CreateOutputConfigFromUI(); @@ -906,7 +1021,8 @@ private bool CreateRemapEntryFromActiveConfigs(ref RemapEntry zRemapEntry, Remap return false; } - zRemapEntry = new RemapEntry(new InputConfig(zCurrentInputConfig), new OutputConfig(zCurrentOutputConfig)); + zRemapEntry = new RemapEntry(new InputConfig(zCurrentInputConfig), + (bKeepOutputs && updateEntry != null) ? updateEntry.OutputConfigs : new List {new OutputConfig(zCurrentOutputConfig)}); // flip this result for indicator of a good remap entry return !IsInputAlreadyDefined(zRemapEntry, updateEntry); @@ -1018,6 +1134,5 @@ public override void Reset() } #endregion - } } \ No newline at end of file diff --git a/Forms/KeyCaptureConfig.designer.cs b/Forms/KeyCaptureConfig.designer.cs index 694d5be..d426255 100644 --- a/Forms/KeyCaptureConfig.designer.cs +++ b/Forms/KeyCaptureConfig.designer.cs @@ -76,10 +76,13 @@ private void InitializeComponent() this.checkOutputToggle = new System.Windows.Forms.CheckBox(); this.numericUpDownOutputParameter = new System.Windows.Forms.NumericUpDown(); this.panelKeySetupControls = new System.Windows.Forms.Panel(); + this.btnUpdateInput = new System.Windows.Forms.Button(); + this.btnAppendAt = new System.Windows.Forms.Button(); this.btnUpdate = new System.Windows.Forms.Button(); this.groupBoxInputKey = new System.Windows.Forms.GroupBox(); this.numericUpDownInputParameter = new System.Windows.Forms.NumericUpDown(); this.checkInputLongPress = new System.Windows.Forms.CheckBox(); + this.btnRemoveAt = new System.Windows.Forms.Button(); this.menuStripMain.SuspendLayout(); this.contextMenuStripNotify.SuspendLayout(); this.panelKeySetup.SuspendLayout(); @@ -205,7 +208,7 @@ private void InitializeComponent() this.listViewKeys.HideSelection = false; this.listViewKeys.Location = new System.Drawing.Point(12, 170); this.listViewKeys.Name = "listViewKeys"; - this.listViewKeys.Size = new System.Drawing.Size(672, 240); + this.listViewKeys.Size = new System.Drawing.Size(651, 240); this.listViewKeys.TabIndex = 75; this.listViewKeys.UseCompatibleStateImageBehavior = false; this.listViewKeys.View = System.Windows.Forms.View.Details; @@ -221,13 +224,15 @@ private void InitializeComponent() // columnHeaderOutput // this.columnHeaderOutput.Text = "Output"; - this.columnHeaderOutput.Width = 425; + this.columnHeaderOutput.Width = 405; // // btnRemove // - this.btnRemove.Location = new System.Drawing.Point(3, 90); + this.btnRemove.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnRemove.Location = new System.Drawing.Point(3, 177); this.btnRemove.Name = "btnRemove"; - this.btnRemove.Size = new System.Drawing.Size(75, 23); + this.btnRemove.Size = new System.Drawing.Size(96, 23); this.btnRemove.TabIndex = 92; this.btnRemove.Text = "Remove"; this.btnRemove.UseVisualStyleBackColor = true; @@ -235,9 +240,11 @@ private void InitializeComponent() // // btnAdd // + this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.btnAdd.Location = new System.Drawing.Point(3, 3); this.btnAdd.Name = "btnAdd"; - this.btnAdd.Size = new System.Drawing.Size(75, 23); + this.btnAdd.Size = new System.Drawing.Size(96, 23); this.btnAdd.TabIndex = 90; this.btnAdd.Text = "Add"; this.btnAdd.UseVisualStyleBackColor = true; @@ -245,10 +252,12 @@ private void InitializeComponent() // // btnAppend // + this.btnAppend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.btnAppend.Enabled = false; - this.btnAppend.Location = new System.Drawing.Point(3, 61); + this.btnAppend.Location = new System.Drawing.Point(3, 90); this.btnAppend.Name = "btnAppend"; - this.btnAppend.Size = new System.Drawing.Size(75, 23); + this.btnAppend.Size = new System.Drawing.Size(96, 23); this.btnAppend.TabIndex = 91; this.btnAppend.Text = "Append"; this.btnAppend.UseVisualStyleBackColor = true; @@ -573,22 +582,54 @@ private void InitializeComponent() // // panelKeySetupControls // - this.panelKeySetupControls.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelKeySetupControls.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.panelKeySetupControls.Controls.Add(this.btnRemoveAt); + this.panelKeySetupControls.Controls.Add(this.btnUpdateInput); + this.panelKeySetupControls.Controls.Add(this.btnAppendAt); this.panelKeySetupControls.Controls.Add(this.btnUpdate); this.panelKeySetupControls.Controls.Add(this.btnAdd); this.panelKeySetupControls.Controls.Add(this.btnRemove); this.panelKeySetupControls.Controls.Add(this.btnAppend); - this.panelKeySetupControls.Location = new System.Drawing.Point(690, 170); + this.panelKeySetupControls.Location = new System.Drawing.Point(669, 170); this.panelKeySetupControls.Name = "panelKeySetupControls"; - this.panelKeySetupControls.Size = new System.Drawing.Size(82, 121); + this.panelKeySetupControls.Size = new System.Drawing.Size(103, 240); this.panelKeySetupControls.TabIndex = 18; // + // btnUpdateInput + // + this.btnUpdateInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnUpdateInput.Enabled = false; + this.btnUpdateInput.Location = new System.Drawing.Point(3, 61); + this.btnUpdateInput.Name = "btnUpdateInput"; + this.btnUpdateInput.Size = new System.Drawing.Size(96, 23); + this.btnUpdateInput.TabIndex = 95; + this.btnUpdateInput.Text = "Update Input"; + this.btnUpdateInput.UseVisualStyleBackColor = true; + this.btnUpdateInput.Click += new System.EventHandler(this.btnUpdateInput_Click); + // + // btnAppendAt + // + this.btnAppendAt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnAppendAt.Enabled = false; + this.btnAppendAt.Location = new System.Drawing.Point(3, 119); + this.btnAppendAt.Name = "btnAppendAt"; + this.btnAppendAt.Size = new System.Drawing.Size(96, 23); + this.btnAppendAt.TabIndex = 94; + this.btnAppendAt.Text = "Append At..."; + this.btnAppendAt.UseVisualStyleBackColor = true; + this.btnAppendAt.Click += new System.EventHandler(this.btnAppendAt_Click); + // // btnUpdate // + this.btnUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.btnUpdate.Enabled = false; this.btnUpdate.Location = new System.Drawing.Point(3, 32); this.btnUpdate.Name = "btnUpdate"; - this.btnUpdate.Size = new System.Drawing.Size(75, 23); + this.btnUpdate.Size = new System.Drawing.Size(96, 23); this.btnUpdate.TabIndex = 93; this.btnUpdate.Text = "Update"; this.btnUpdate.UseVisualStyleBackColor = true; @@ -651,6 +692,19 @@ private void InitializeComponent() this.checkInputLongPress.UseVisualStyleBackColor = true; this.checkInputLongPress.CheckedChanged += new System.EventHandler(this.checkGenericInputOutput_CheckedChanged); // + // btnRemoveAt + // + this.btnRemoveAt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnRemoveAt.Enabled = false; + this.btnRemoveAt.Location = new System.Drawing.Point(3, 148); + this.btnRemoveAt.Name = "btnRemoveAt"; + this.btnRemoveAt.Size = new System.Drawing.Size(96, 23); + this.btnRemoveAt.TabIndex = 96; + this.btnRemoveAt.Text = "Remove At..."; + this.btnRemoveAt.UseVisualStyleBackColor = true; + this.btnRemoveAt.Click += new System.EventHandler(this.btnRemoveAt_Click); + // // KeyCaptureConfig // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -735,6 +789,9 @@ private void InitializeComponent() private System.Windows.Forms.Button btnMouseMiddle; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button btnMouseLeft; + private System.Windows.Forms.Button btnAppendAt; + private System.Windows.Forms.Button btnUpdateInput; + private System.Windows.Forms.Button btnRemoveAt; } } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 247b670..c478500 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -55,5 +55,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.2.0.0")] -[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyVersion("2.2.1.0")] +[assembly: AssemblyFileVersion("2.2.1.0")] diff --git a/bin/Release/History.txt b/bin/Release/History.txt index f5a6922..ec17ec0 100644 --- a/bin/Release/History.txt +++ b/bin/Release/History.txt @@ -1,5 +1,9 @@ KeyCap Version History -------------------------- +2.2.1.0 +- Added logic around updating existing entries with multiple outputs (avoid accidentally losing the outputs!) +- Added ability to append/remove the output at a specific index. + 2.2.0.0 - Added ability to double click to load up an existing entry for convenience - Added ability to update/replace an existing entry (cannot edit items performing multiple outputs at this time) diff --git a/bin/Release/KeyCap.odt b/bin/Release/KeyCap.odt index 46ceb39aeff02be27ab1cd21944c1c64a97d4b1c..db7250e5df9697cad6349f91667f0d4898f48df9 100644 GIT binary patch delta 20723 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 W(bFO$Keu5x+sa8VTre{}*Zu?3Ucv?d delta 20649 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