Provide context menu on tree view and list view for EXE sections to improve usability

This commit is contained in:
Michael Becker 2016-02-04 13:00:27 -05:00
parent e71a683f96
commit c0f0297c71
3 changed files with 131 additions and 92 deletions

View File

@ -31,27 +31,28 @@
this.components = new System.ComponentModel.Container();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tv = new System.Windows.Forms.TreeView();
this.mnuContextSections = new AwesomeControls.CommandBars.CBContextMenu(this.components);
this.mnuContextSectionsDelete = new System.Windows.Forms.ToolStripMenuItem();
this.mnuContextSectionsSep1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuContextSectionsImport = new System.Windows.Forms.ToolStripMenuItem();
this.mnuContextSectionsExport = new System.Windows.Forms.ToolStripMenuItem();
this.pnlSections = new System.Windows.Forms.Panel();
this.lvSections = new System.Windows.Forms.ListView();
this.chSectionName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chSectionOffset = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chSectionLength = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.mnuContextListViewSections = new AwesomeControls.CommandBars.CBContextMenu(this.components);
this.mnuContextListViewSectionsDelete = new System.Windows.Forms.ToolStripMenuItem();
this.mnuContextListViewSectionsSep1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuContextListViewSectionsImport = new System.Windows.Forms.ToolStripMenuItem();
this.mnuContextListViewSectionsExport = new System.Windows.Forms.ToolStripMenuItem();
this.pnlSection = new System.Windows.Forms.Panel();
this.lblSectionName = new System.Windows.Forms.Label();
this.txtSectionName = new System.Windows.Forms.TextBox();
this.fraSectionCharacteristics = new System.Windows.Forms.GroupBox();
this.lvSectionCharacteristics = new System.Windows.Forms.ListView();
this.chTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.txtSectionName = new System.Windows.Forms.TextBox();
this.lblSectionName = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.mnuContextSections.SuspendLayout();
this.pnlSections.SuspendLayout();
this.mnuContextListViewSections.SuspendLayout();
this.pnlSection.SuspendLayout();
this.fraSectionCharacteristics.SuspendLayout();
this.SuspendLayout();
@ -69,21 +70,61 @@
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.pnlSection);
this.splitContainer1.Panel2.Controls.Add(this.pnlSections);
this.splitContainer1.Size = new System.Drawing.Size(502, 247);
this.splitContainer1.Panel2.Controls.Add(this.pnlSection);
this.splitContainer1.Size = new System.Drawing.Size(590, 332);
this.splitContainer1.SplitterDistance = 167;
this.splitContainer1.TabIndex = 0;
//
// tv
//
this.tv.ContextMenuStrip = this.mnuContextSections;
this.tv.Dock = System.Windows.Forms.DockStyle.Fill;
this.tv.HideSelection = false;
this.tv.Location = new System.Drawing.Point(0, 0);
this.tv.Name = "tv";
this.tv.Size = new System.Drawing.Size(167, 247);
this.tv.Size = new System.Drawing.Size(167, 332);
this.tv.TabIndex = 0;
this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect);
this.tv.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tv_MouseDown);
//
// mnuContextSections
//
this.mnuContextSections.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuContextSectionsDelete,
this.mnuContextSectionsSep1,
this.mnuContextSectionsImport,
this.mnuContextSectionsExport});
this.mnuContextSections.Name = "mnuContextListViewSections";
this.mnuContextSections.Size = new System.Drawing.Size(119, 76);
this.mnuContextSections.Opening += new System.ComponentModel.CancelEventHandler(this.mnuContextListViewSections_Opening);
//
// mnuContextSectionsDelete
//
this.mnuContextSectionsDelete.Name = "mnuContextSectionsDelete";
this.mnuContextSectionsDelete.Size = new System.Drawing.Size(118, 22);
this.mnuContextSectionsDelete.Text = "&Delete";
this.mnuContextSectionsDelete.Click += new System.EventHandler(this.mnuContextListViewSectionsDelete_Click);
//
// mnuContextSectionsSep1
//
this.mnuContextSectionsSep1.Name = "mnuContextSectionsSep1";
this.mnuContextSectionsSep1.Size = new System.Drawing.Size(115, 6);
//
// mnuContextSectionsImport
//
this.mnuContextSectionsImport.Name = "mnuContextSectionsImport";
this.mnuContextSectionsImport.Size = new System.Drawing.Size(118, 22);
this.mnuContextSectionsImport.Text = "&Import...";
this.mnuContextSectionsImport.Click += new System.EventHandler(this.mnuContextListViewSectionsImport_Click);
//
// mnuContextSectionsExport
//
this.mnuContextSectionsExport.Enabled = false;
this.mnuContextSectionsExport.Name = "mnuContextSectionsExport";
this.mnuContextSectionsExport.Size = new System.Drawing.Size(118, 22);
this.mnuContextSectionsExport.Text = "&Export...";
this.mnuContextSectionsExport.Click += new System.EventHandler(this.mnuContextListViewSectionsExport_Click);
//
// pnlSections
//
@ -91,7 +132,7 @@
this.pnlSections.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlSections.Location = new System.Drawing.Point(0, 0);
this.pnlSections.Name = "pnlSections";
this.pnlSections.Size = new System.Drawing.Size(331, 247);
this.pnlSections.Size = new System.Drawing.Size(419, 332);
this.pnlSections.TabIndex = 0;
//
// lvSections
@ -100,14 +141,14 @@
this.chSectionName,
this.chSectionOffset,
this.chSectionLength});
this.lvSections.ContextMenuStrip = this.mnuContextListViewSections;
this.lvSections.ContextMenuStrip = this.mnuContextSections;
this.lvSections.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvSections.FullRowSelect = true;
this.lvSections.GridLines = true;
this.lvSections.HideSelection = false;
this.lvSections.Location = new System.Drawing.Point(0, 0);
this.lvSections.Name = "lvSections";
this.lvSections.Size = new System.Drawing.Size(331, 247);
this.lvSections.Size = new System.Drawing.Size(419, 332);
this.lvSections.TabIndex = 0;
this.lvSections.UseCompatibleStateImageBehavior = false;
this.lvSections.View = System.Windows.Forms.View.Details;
@ -125,44 +166,6 @@
//
this.chSectionLength.Text = "Length";
//
// mnuContextListViewSections
//
this.mnuContextListViewSections.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuContextListViewSectionsDelete,
this.mnuContextListViewSectionsSep1,
this.mnuContextListViewSectionsImport,
this.mnuContextListViewSectionsExport});
this.mnuContextListViewSections.Name = "mnuContextListViewSections";
this.mnuContextListViewSections.Size = new System.Drawing.Size(119, 76);
this.mnuContextListViewSections.Opening += new System.ComponentModel.CancelEventHandler(this.mnuContextListViewSections_Opening);
//
// mnuContextListViewSectionsDelete
//
this.mnuContextListViewSectionsDelete.Name = "mnuContextListViewSectionsDelete";
this.mnuContextListViewSectionsDelete.Size = new System.Drawing.Size(118, 22);
this.mnuContextListViewSectionsDelete.Text = "&Delete";
this.mnuContextListViewSectionsDelete.Click += new System.EventHandler(this.mnuContextListViewSectionsDelete_Click);
//
// mnuContextListViewSectionsSep1
//
this.mnuContextListViewSectionsSep1.Name = "mnuContextListViewSectionsSep1";
this.mnuContextListViewSectionsSep1.Size = new System.Drawing.Size(115, 6);
//
// mnuContextListViewSectionsImport
//
this.mnuContextListViewSectionsImport.Name = "mnuContextListViewSectionsImport";
this.mnuContextListViewSectionsImport.Size = new System.Drawing.Size(118, 22);
this.mnuContextListViewSectionsImport.Text = "&Import...";
this.mnuContextListViewSectionsImport.Click += new System.EventHandler(this.mnuContextListViewSectionsImport_Click);
//
// mnuContextListViewSectionsExport
//
this.mnuContextListViewSectionsExport.Enabled = false;
this.mnuContextListViewSectionsExport.Name = "mnuContextListViewSectionsExport";
this.mnuContextListViewSectionsExport.Size = new System.Drawing.Size(118, 22);
this.mnuContextListViewSectionsExport.Text = "&Export...";
this.mnuContextListViewSectionsExport.Click += new System.EventHandler(this.mnuContextListViewSectionsExport_Click);
//
// pnlSection
//
this.pnlSection.Controls.Add(this.fraSectionCharacteristics);
@ -171,27 +174,9 @@
this.pnlSection.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlSection.Location = new System.Drawing.Point(0, 0);
this.pnlSection.Name = "pnlSection";
this.pnlSection.Size = new System.Drawing.Size(331, 247);
this.pnlSection.Size = new System.Drawing.Size(419, 332);
this.pnlSection.TabIndex = 1;
//
// lblSectionName
//
this.lblSectionName.AutoSize = true;
this.lblSectionName.Location = new System.Drawing.Point(3, 6);
this.lblSectionName.Name = "lblSectionName";
this.lblSectionName.Size = new System.Drawing.Size(75, 13);
this.lblSectionName.TabIndex = 0;
this.lblSectionName.Text = "Section &name:";
//
// txtSectionName
//
this.txtSectionName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSectionName.Location = new System.Drawing.Point(84, 3);
this.txtSectionName.Name = "txtSectionName";
this.txtSectionName.Size = new System.Drawing.Size(244, 20);
this.txtSectionName.TabIndex = 1;
//
// fraSectionCharacteristics
//
this.fraSectionCharacteristics.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -200,7 +185,7 @@
this.fraSectionCharacteristics.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.fraSectionCharacteristics.Location = new System.Drawing.Point(3, 29);
this.fraSectionCharacteristics.Name = "fraSectionCharacteristics";
this.fraSectionCharacteristics.Size = new System.Drawing.Size(325, 161);
this.fraSectionCharacteristics.Size = new System.Drawing.Size(413, 161);
this.fraSectionCharacteristics.TabIndex = 2;
this.fraSectionCharacteristics.TabStop = false;
this.fraSectionCharacteristics.Text = "Characteristics";
@ -218,7 +203,7 @@
this.lvSectionCharacteristics.HideSelection = false;
this.lvSectionCharacteristics.Location = new System.Drawing.Point(6, 19);
this.lvSectionCharacteristics.Name = "lvSectionCharacteristics";
this.lvSectionCharacteristics.Size = new System.Drawing.Size(313, 136);
this.lvSectionCharacteristics.Size = new System.Drawing.Size(401, 136);
this.lvSectionCharacteristics.TabIndex = 0;
this.lvSectionCharacteristics.UseCompatibleStateImageBehavior = false;
this.lvSectionCharacteristics.View = System.Windows.Forms.View.Details;
@ -228,18 +213,37 @@
this.chTitle.Text = "Characteristic";
this.chTitle.Width = 300;
//
// txtSectionName
//
this.txtSectionName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSectionName.Location = new System.Drawing.Point(84, 3);
this.txtSectionName.Name = "txtSectionName";
this.txtSectionName.Size = new System.Drawing.Size(332, 20);
this.txtSectionName.TabIndex = 1;
//
// lblSectionName
//
this.lblSectionName.AutoSize = true;
this.lblSectionName.Location = new System.Drawing.Point(3, 6);
this.lblSectionName.Name = "lblSectionName";
this.lblSectionName.Size = new System.Drawing.Size(75, 13);
this.lblSectionName.TabIndex = 0;
this.lblSectionName.Text = "Section &name:";
//
// ExecutableEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.splitContainer1);
this.Name = "ExecutableEditor";
this.Size = new System.Drawing.Size(502, 247);
this.Size = new System.Drawing.Size(590, 332);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.mnuContextSections.ResumeLayout(false);
this.pnlSections.ResumeLayout(false);
this.mnuContextListViewSections.ResumeLayout(false);
this.pnlSection.ResumeLayout(false);
this.pnlSection.PerformLayout();
this.fraSectionCharacteristics.ResumeLayout(false);
@ -256,11 +260,11 @@
private System.Windows.Forms.ColumnHeader chSectionName;
private System.Windows.Forms.ColumnHeader chSectionOffset;
private System.Windows.Forms.ColumnHeader chSectionLength;
private AwesomeControls.CommandBars.CBContextMenu mnuContextListViewSections;
private System.Windows.Forms.ToolStripMenuItem mnuContextListViewSectionsExport;
private System.Windows.Forms.ToolStripMenuItem mnuContextListViewSectionsImport;
private System.Windows.Forms.ToolStripMenuItem mnuContextListViewSectionsDelete;
private System.Windows.Forms.ToolStripSeparator mnuContextListViewSectionsSep1;
private AwesomeControls.CommandBars.CBContextMenu mnuContextSections;
private System.Windows.Forms.ToolStripMenuItem mnuContextSectionsExport;
private System.Windows.Forms.ToolStripMenuItem mnuContextSectionsImport;
private System.Windows.Forms.ToolStripMenuItem mnuContextSectionsDelete;
private System.Windows.Forms.ToolStripSeparator mnuContextSectionsSep1;
private System.Windows.Forms.Panel pnlSection;
private System.Windows.Forms.TextBox txtSectionName;
private System.Windows.Forms.Label lblSectionName;

View File

@ -120,23 +120,50 @@ namespace UniversalEditor.Editors.Executable
private void mnuContextListViewSections_Opening(object sender, CancelEventArgs e)
{
mnuContextListViewSectionsDelete.Enabled = (lvSections.SelectedItems.Count > 0);
mnuContextListViewSectionsExport.Enabled = (lvSections.SelectedItems.Count > 0);
if (lvSections.Focused)
{
mnuContextSectionsDelete.Enabled = (lvSections.SelectedItems.Count > 0);
mnuContextSectionsExport.Enabled = (lvSections.SelectedItems.Count > 0);
}
else if (tv.Focused)
{
mnuContextSectionsDelete.Enabled = (tv.SelectedNode != null && tv.SelectedNode.Tag is ExecutableSection);
mnuContextSectionsExport.Enabled = (tv.SelectedNode != null && tv.SelectedNode.Tag is ExecutableSection);
}
}
private void mnuContextListViewSectionsExport_Click(object sender, EventArgs e)
{
foreach (ListViewItem lvi in lvSections.SelectedItems)
if (lvSections.Focused)
{
ExecutableSection section = (lvi.Tag as ExecutableSection);
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = section.Name;
if (sfd.ShowDialog() == DialogResult.OK)
foreach (ListViewItem lvi in lvSections.SelectedItems)
{
section.Save(sfd.FileName);
ExecutableSection section = (lvi.Tag as ExecutableSection);
UISaveSection(section);
}
}
else if (tv.Focused)
{
ExecutableSection section = (tv.SelectedNode.Tag as ExecutableSection);
UISaveSection(section);
}
}
/// <summary>
/// Displays the Save file dialog and saves the specified section if the user clicks the Save button.
/// </summary>
/// <param name="section">The section to save.</param>
/// <returns>True if the user clicks the Save button and saves the section; false otherwise.</returns>
private bool UISaveSection(ExecutableSection section)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = section.Name;
if (sfd.ShowDialog() == DialogResult.OK)
{
section.Save(sfd.FileName);
return true;
}
return false;
}
private void mnuContextListViewSectionsImport_Click(object sender, EventArgs e)
@ -199,5 +226,13 @@ namespace UniversalEditor.Editors.Executable
SwitchTo(null);
}
}
private void tv_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
tv.SelectedNode = tv.HitTest(e.Location).Node;
}
}
}
}

View File

@ -112,12 +112,12 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="mnuContextListViewSections.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="mnuContextSections.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>