Skip to content

Commit

Permalink
WinForms/KeyInfoView: replace buttons with toolbar
Browse files Browse the repository at this point in the history
This replaces the text buttons at the bottom with a toolbar with icon
buttons at the top.

This fixes messed up text in the add button and adds a copy button
corresponding to the same context menu item.
  • Loading branch information
dlech committed May 4, 2022
1 parent eac1714 commit 621a58f
Show file tree
Hide file tree
Showing 6 changed files with 1,108 additions and 1,469 deletions.
645 changes: 326 additions & 319 deletions Ui/WinForms/KeyInfoView.Designer.cs

Large diffs are not rendered by default.

100 changes: 38 additions & 62 deletions Ui/WinForms/KeyInfoView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,16 @@ public partial class KeyInfoView : UserControl
private IAgent mAgent;
private BindingList<KeyWrapper> mKeyCollection;
private PasswordDialog mPasswordDialog;
private bool mSelectionChangedBroken;
private int mButtonLayoutInitialColumnCount;
private Dictionary<OpenFileDialog, XPOpenFileDialog> mOpenFileDialogMap;
private readonly bool mSelectionChangedBroken;
private readonly Dictionary<OpenFileDialog, XPOpenFileDialog> mOpenFileDialogMap;

public ContextMenuStrip AddButtonSplitMenu
public ToolStripDropDown AddButtonSplitMenu
{
get { return addKeyButton.SplitMenuStrip; }
get { return addKeyButton.DropDown; }
set
{
addKeyButton.SplitMenuStrip = value;
addKeyButton.ShowSplit = (value != null);
addKeyButton.DropDown = value;
addKeyButton.ShowDropDownArrow = value != null;
}
}

Expand Down Expand Up @@ -103,11 +102,6 @@ public KeyInfoView()
}

InitializeComponent();
mButtonLayoutInitialColumnCount = buttonTableLayoutPanel.ColumnCount;
if (monoRuntimeType != null)
{
buttonTableLayoutPanel.Margin = new Padding();
}
}

public void SetAgent(IAgent aAgent)
Expand All @@ -124,69 +118,40 @@ public void SetAgent(IAgent aAgent)
}
}

buttonTableLayoutPanel.ColumnCount = mButtonLayoutInitialColumnCount;
buttonTableLayoutPanel.Controls.Clear();

mAgent = aAgent;
if (mAgent is Agent)
{
var agent = mAgent as Agent;
refreshAgentButton.Visible = false;
lockAgentButton.Visible = true;
unlockAgentButton.Visible = true;
confirmDataGridViewCheckBoxColumn.Visible = true;
lifetimeDataGridViewCheckBoxColumn.Visible = true;
sourceDataGridViewTextBoxColumn.Visible = true;
agent.KeyAdded += AgentKeyAddedHandler;
agent.KeyRemoved += AgentKeyRemovedHandler;
agent.Locked += AgentLockHandler;
buttonTableLayoutPanel.ColumnCount -= 1;

buttonTableLayoutPanel.Controls.Add(lockButton, 0, 0);
buttonTableLayoutPanel.Controls.Add(unlockButton, 1, 0);
buttonTableLayoutPanel.Controls.Add(addKeyButton, 2, 0);
buttonTableLayoutPanel.Controls.Add(removeKeyButton, 3, 0);
buttonTableLayoutPanel.Controls.Add(removeAllButton, 4, 0);
}
else
{
refreshAgentButton.Visible = true;
// hide lock/unlock buttons if using Pageant since they are not supported
if (mAgent is PageantClient)
{
buttonTableLayoutPanel.ColumnCount -= 2;
lockAgentButton.Visible = false;
unlockAgentButton.Visible = false;
}
else
{
buttonTableLayoutPanel.Controls.Add(lockButton, 0, 0);
buttonTableLayoutPanel.Controls.Add(unlockButton, 1, 0);
lockAgentButton.Visible = true;
unlockAgentButton.Visible = true;
}
var colCount = buttonTableLayoutPanel.ColumnCount;
buttonTableLayoutPanel.Controls.Add(addKeyButton, colCount - 4, 0);
buttonTableLayoutPanel.Controls.Add(removeKeyButton, colCount - 3, 0);
buttonTableLayoutPanel.Controls.Add(removeAllButton, colCount - 2, 0);
buttonTableLayoutPanel.Controls.Add(refreshButton, colCount - 1, 0);

confirmDataGridViewCheckBoxColumn.Visible = false;
lifetimeDataGridViewCheckBoxColumn.Visible = false;
sourceDataGridViewTextBoxColumn.Visible = false;
}

for (var i = 0; i < buttonTableLayoutPanel.ColumnCount; i++)
{
if (Type.GetType("Mono.Runtime") == null)
{
buttonTableLayoutPanel.ColumnStyles[i] = new ColumnStyle(
SizeType.Percent,
100F / buttonTableLayoutPanel.ColumnCount
);
}
else
{
// Mono doens't do automatic layouts correctly, so use fixed width
buttonTableLayoutPanel.ColumnStyles[i] = new ColumnStyle(
SizeType.Absolute,
buttonTableLayoutPanel.Width / buttonTableLayoutPanel.ColumnCount
);
}
}

ReloadKeyListView();
}

Expand Down Expand Up @@ -487,16 +452,18 @@ private void UpdateButtonStates()
{
var isLocked = false;
var agent = mAgent as Agent;

if (agent != null)
{
isLocked = agent.IsLocked;
}
lockButton.Enabled = !isLocked;
unlockButton.Enabled = agent == null || isLocked;

lockAgentButton.Enabled = !isLocked;
unlockAgentButton.Enabled = agent == null || isLocked;
addKeyButton.Enabled = !isLocked;
removeKeyButton.Enabled =
removeKeyButton.Enabled = copyPublicKeyButton.Enabled =
mSelectionChangedBroken || (dataGridView.SelectedRows.Count > 0 && !isLocked);
removeAllButton.Enabled = dataGridView.Rows.Count > 0 && !isLocked;
removeAllKeysButton.Enabled = dataGridView.Rows.Count > 0 && !isLocked;
}

private void AgentLockHandler(object sender, Agent.LockEventArgs e)
Expand Down Expand Up @@ -630,10 +597,6 @@ private void addKeyButton_Click(object sender, EventArgs e)
{
ShowFileOpenDialog();
}
else
{
addKeyButton.ShowContextMenuStrip();
}
}

private void removeRow(DataGridViewRow row)
Expand All @@ -655,7 +618,7 @@ private void removeRow(DataGridViewRow row)
}
}

private void removeButton_Click(object sender, EventArgs e)
private void removeKeyButton_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView.SelectedRows)
{
Expand All @@ -667,7 +630,7 @@ private void removeButton_Click(object sender, EventArgs e)
}
}

private void lockButton_Click(object sender, EventArgs e)
private void lockAgentButton_Click(object sender, EventArgs e)
{
var result = PasswordDialog.ShowDialog();
if (result != DialogResult.OK)
Expand Down Expand Up @@ -730,7 +693,7 @@ private void lockButton_Click(object sender, EventArgs e)
}
}

private void unlockButton_Click(object sender, EventArgs e)
private void unlockAgentButton_Click(object sender, EventArgs e)
{
var result = PasswordDialog.ShowDialog();
if (result != DialogResult.OK)
Expand Down Expand Up @@ -786,7 +749,7 @@ private void unlockButton_Click(object sender, EventArgs e)
ReloadKeyListView();
}

private void removeAllButton_Click(object sender, EventArgs e)
private void removeAllKeysButton_Click(object sender, EventArgs e)
{
mAgent.RemoveAllKeys();
if (!(mAgent is Agent))
Expand All @@ -795,7 +758,7 @@ private void removeAllButton_Click(object sender, EventArgs e)
}
}

private void refreshButton_Click(object sender, EventArgs e)
private void refreshAgentButton_Click(object sender, EventArgs e)
{
ReloadKeyListView();
}
Expand Down Expand Up @@ -1030,5 +993,18 @@ private void toolStripMenuItemCopyAuthorizedKeys_Click(object sender, EventArgs
var key = keyWrapper.GetKey();
Clipboard.SetText(key.GetAuthorizedKeyString());
}

private void copyPublicKeyButton_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count < 1)
{
return;
}

var row = dataGridView.SelectedRows[0];
var keyWrapper = row.DataBoundItem as KeyWrapper;
var key = keyWrapper.GetKey();
Clipboard.SetText(key.GetAuthorizedKeyString());
}
}
}
70 changes: 67 additions & 3 deletions Ui/WinForms/KeyInfoView.resx
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,74 @@
<metadata name="sourceDataGridViewTextBoxColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>256, 17</value>
</metadata>
<metadata name="keyWrapperBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>18, 17</value>
</metadata>
<metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>411, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="addKeyButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAsSURBVDhPY6ApkG+Q/w9lkgdGDSDBAJBCUjFUK35AtEJc
YNQAKhhAB8DAAAAOayt2eZNNEQAAAABJRU5ErkJggg==
</value>
</data>
<data name="removeKeyButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAiSURBVDhPYxgFwwoc5Rb/TwqGakMAbIrwYai2UTAcAAMD
AI08LZE2dst4AAAAAElFTkSuQmCC
</value>
</data>
<data name="removeAllKeysButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACBSURBVDhPY6AaOM4urgBl4gVY1YEEj7IJvTrMLe4AFcIK
QPIgdVgNOcwjanOATejlUW5xJ6gQCjjCI2KLTx4McBlCyHAUgK6YJM0wAPIrWBOXaAmIJhQ2WAFIM9DW
/yAaKkQ8oMgFFIUBrqgiyhBC8YzXEKqkRKyCWACx6ugFGBgABG9XMttToscAAAAASUVORK5CYII=
</value>
</data>
<data name="refreshAgentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFGSURBVDhPrZI9SwQxEIansrLwo1DU/yCIKIIfnZ0gwnEf
yayFP8JWC0UtRRD1H1jf3SbZg+tsBRtLQRAVFQtRsNJJfD1huTXNPRB23tmZl0wS6g1st4jdV2cpd4M/
f5TO+4izYagCtFklbj4EkzyczZF2t6TtCjI52K0RN+7kO93VwKPNZNhdYpeRAZXWiDQ9hmZPkYHHm/ja
9fYAMoK225I8gfJnsoeoO9oeyjibUIJ2l6TSBag42s6SshdQQtW9U60+CBWn1O6ncuMZSmDzQRtmCCqO
N+D6G5TA5krOYAkqjh/Bj92B3a6YnEHFYXck9TtQQsWNUTl9pcTMIFOMSqek+UmucRQZoI2imr3/1yQ0
y2NTropMjsTqsBNtTyVeDG/f3w5n83JtxzL3S3HzL6o5IYUHsq5l1s+wfuJ9SlrjqOoVRN8kcIOT3ZSG
iAAAAABJRU5ErkJggg==
</value>
</data>
<data name="lockAgentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACVSURBVDhPY6AJUFRUdJGXlz8kLS39AkQrKSk5Q6UIAwUF
BXegpsdAQ7yBWByIfaB8V6gS/EBOTu4kyBAoFwyABngCDTgO5eIHkpKSP1RUVNihXDAA8UHiUC5+ALTp
P5SJAnCJwwFQwQOQIiLwA6gWVACSBPpfkhAGqYNqQQU0MQCXGFQLKhicBmDDNDWAsnRAHmBgAACeS2Se
rRnAUQAAAABJRU5ErkJggg==
</value>
</data>
<data name="unlockAgentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACRSURBVDhPY6AbUFRUdJGXlz8kLS39AkQrKSk5Q6UIAwUF
BXegpsdAQ7yBWByIfaB8V6gS/EBOTu4kyBAoFwyABngCDTgO5eIHkpKSP1RUVNihXDAA8UHiUC5+ALTp
P5SJHQAVPAApIgI/gGpBBSBJoD8lCWGQOqgWVEATA3CJQbWggsFpADZMUwMoSwfkAwYGAMZfYzzCgRa/
AAAAAElFTkSuQmCC
</value>
</data>
<data name="copyPublicKeyButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhPY6AZUFRUXAHE+/HgFVCl2AFIkZSUlDAuDJKH
KsUOSDIAyHkAxP/x4AeEDPgvJycniQuD5EcNGAwGgDSgYURKBHIIGgBVih1QwwCCKRGqlNqAgQEAAGd5
kV4IDocAAAAASUVORK5CYII=
</value>
</data>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>256, 17</value>
</metadata>
</root>
Loading

0 comments on commit 621a58f

Please sign in to comment.