1
0
mirror of https://github.com/Ylianst/MeshCentralRouter synced 2025-12-31 23:43:14 +00:00

Added settings for device visilibity and sorting.

This commit is contained in:
Ylian Saint-Hilaire
2020-03-25 20:26:11 -07:00
parent 6840b9018b
commit 9ecafc5af2
6 changed files with 195 additions and 132 deletions

View File

@@ -8,6 +8,13 @@ namespace MeshCentralRouter
public NodeClass node;
public MainForm parent;
public bool present;
private bool xShowDeviceGroupName = true;
public bool showDeviceGroupName
{
get { return xShowDeviceGroupName; }
set { xShowDeviceGroupName = value; }
}
public DeviceUserControl()
{
@@ -16,7 +23,7 @@ namespace MeshCentralRouter
public void UpdateInfo()
{
deviceNameLabel.Text = node.name;
if (parent.getShowGroupNames()) { deviceNameLabel.Text = mesh.name + ", " + node.name; } else { deviceNameLabel.Text = node.name; }
if (node.conn == 0) {
devicePictureBox.Image = disabledDeviceImageList.Images[node.icon - 1];
} else {
@@ -25,9 +32,10 @@ namespace MeshCentralRouter
string status = "";
if ((node.conn & 1) != 0) { if (status.Length > 0) { status += ", "; } status += "Agent"; }
if ((node.conn & 2) != 0) { if (status.Length > 0) { status += ", "; } status += "AMT"; }
if ((node.conn & 4) != 0) { if (status.Length > 0) { status += ", "; } status += "CIRA"; }
if ((node.conn & 8) != 0) { if (status.Length > 0) { status += ", "; } status += "MQTT"; }
if ((node.conn & 2) != 0) { if (status.Length > 0) { status += ", "; } status += "CIRA"; }
if ((node.conn & 4) != 0) { if (status.Length > 0) { status += ", "; } status += "AMT"; }
if ((node.conn & 8) != 0) { if (status.Length > 0) { status += ", "; } status += "Relay"; }
if ((node.conn & 16) != 0) { if (status.Length > 0) { status += ", "; } status += "MQTT"; }
if (status == "") { status = "Offline"; }
deviceStatusLabel.Text = status;

119
MainForm.Designer.cs generated
View File

@@ -50,6 +50,8 @@
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.panel2 = new System.Windows.Forms.Panel();
this.tokenEmailSentLabel = new System.Windows.Forms.Label();
this.emailTokenButton = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.tokenTextBox = new System.Windows.Forms.TextBox();
this.pictureBox6 = new System.Windows.Forms.PictureBox();
@@ -93,8 +95,13 @@
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.emailTokenButton = new System.Windows.Forms.Button();
this.tokenEmailSentLabel = new System.Windows.Forms.Label();
this.menuLabel = new System.Windows.Forms.Label();
this.mainContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.showGroupNamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.showOfflineDevicesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
this.sortByNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.sortByGroupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.panel5.SuspendLayout();
this.mainPanel.SuspendLayout();
this.mainTabControl.SuspendLayout();
@@ -121,6 +128,7 @@
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.trayIconContextMenuStrip.SuspendLayout();
this.mainContextMenuStrip.SuspendLayout();
this.SuspendLayout();
//
// panel5
@@ -369,6 +377,27 @@
this.panel2.Size = new System.Drawing.Size(478, 316);
this.panel2.TabIndex = 7;
//
// tokenEmailSentLabel
//
this.tokenEmailSentLabel.AutoSize = true;
this.tokenEmailSentLabel.Location = new System.Drawing.Point(238, 182);
this.tokenEmailSentLabel.Name = "tokenEmailSentLabel";
this.tokenEmailSentLabel.Size = new System.Drawing.Size(55, 13);
this.tokenEmailSentLabel.TabIndex = 21;
this.tokenEmailSentLabel.Text = "Email sent";
this.tokenEmailSentLabel.Visible = false;
//
// emailTokenButton
//
this.emailTokenButton.Location = new System.Drawing.Point(241, 177);
this.emailTokenButton.Name = "emailTokenButton";
this.emailTokenButton.Size = new System.Drawing.Size(75, 23);
this.emailTokenButton.TabIndex = 20;
this.emailTokenButton.Text = "Email";
this.emailTokenButton.UseVisualStyleBackColor = true;
this.emailTokenButton.Visible = false;
this.emailTokenButton.Click += new System.EventHandler(this.emailTokenButton_Click);
//
// label3
//
this.label3.AutoSize = true;
@@ -567,6 +596,7 @@
//
// panel4
//
this.panel4.Controls.Add(this.menuLabel);
this.panel4.Controls.Add(this.searchTextBox);
this.panel4.Controls.Add(this.devicesTabControl);
this.panel4.Controls.Add(this.openWebSiteButton);
@@ -582,7 +612,7 @@
// searchTextBox
//
this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.searchTextBox.Location = new System.Drawing.Point(330, 5);
this.searchTextBox.Location = new System.Drawing.Point(306, 5);
this.searchTextBox.Name = "searchTextBox";
this.searchTextBox.Size = new System.Drawing.Size(146, 20);
this.searchTextBox.TabIndex = 9;
@@ -845,26 +875,67 @@
this.exitToolStripMenuItem.Text = "E&xit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click_1);
//
// emailTokenButton
// menuLabel
//
this.emailTokenButton.Location = new System.Drawing.Point(241, 177);
this.emailTokenButton.Name = "emailTokenButton";
this.emailTokenButton.Size = new System.Drawing.Size(75, 23);
this.emailTokenButton.TabIndex = 20;
this.emailTokenButton.Text = "Email";
this.emailTokenButton.UseVisualStyleBackColor = true;
this.emailTokenButton.Visible = false;
this.emailTokenButton.Click += new System.EventHandler(this.emailTokenButton_Click);
this.menuLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.menuLabel.AutoSize = true;
this.menuLabel.ContextMenuStrip = this.mainContextMenuStrip;
this.menuLabel.Cursor = System.Windows.Forms.Cursors.Hand;
this.menuLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.menuLabel.Location = new System.Drawing.Point(454, 2);
this.menuLabel.Name = "menuLabel";
this.menuLabel.Size = new System.Drawing.Size(25, 25);
this.menuLabel.TabIndex = 6;
this.menuLabel.Text = "≡";
this.menuLabel.Click += new System.EventHandler(this.menuLabel_Click);
//
// tokenEmailSentLabel
// mainContextMenuStrip
//
this.tokenEmailSentLabel.AutoSize = true;
this.tokenEmailSentLabel.Location = new System.Drawing.Point(238, 182);
this.tokenEmailSentLabel.Name = "tokenEmailSentLabel";
this.tokenEmailSentLabel.Size = new System.Drawing.Size(55, 13);
this.tokenEmailSentLabel.TabIndex = 21;
this.tokenEmailSentLabel.Text = "Email sent";
this.tokenEmailSentLabel.Visible = false;
this.mainContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.showGroupNamesToolStripMenuItem,
this.showOfflineDevicesToolStripMenuItem,
this.toolStripMenuItem2,
this.sortByNameToolStripMenuItem,
this.sortByGroupToolStripMenuItem});
this.mainContextMenuStrip.Name = "mainContextMenuStrip";
this.mainContextMenuStrip.Size = new System.Drawing.Size(186, 120);
//
// showGroupNamesToolStripMenuItem
//
this.showGroupNamesToolStripMenuItem.Checked = true;
this.showGroupNamesToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.showGroupNamesToolStripMenuItem.Name = "showGroupNamesToolStripMenuItem";
this.showGroupNamesToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
this.showGroupNamesToolStripMenuItem.Text = "Show &Group Names";
this.showGroupNamesToolStripMenuItem.Click += new System.EventHandler(this.showGroupNamesToolStripMenuItem_Click);
//
// showOfflineDevicesToolStripMenuItem
//
this.showOfflineDevicesToolStripMenuItem.Name = "showOfflineDevicesToolStripMenuItem";
this.showOfflineDevicesToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
this.showOfflineDevicesToolStripMenuItem.Text = "Show &Offline Devices";
this.showOfflineDevicesToolStripMenuItem.Click += new System.EventHandler(this.hideOfflineDevicesToolStripMenuItem_Click);
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(182, 6);
//
// sortByNameToolStripMenuItem
//
this.sortByNameToolStripMenuItem.Checked = true;
this.sortByNameToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.sortByNameToolStripMenuItem.Name = "sortByNameToolStripMenuItem";
this.sortByNameToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
this.sortByNameToolStripMenuItem.Text = "Sort by &Name";
this.sortByNameToolStripMenuItem.Click += new System.EventHandler(this.sortByNameToolStripMenuItem_Click);
//
// sortByGroupToolStripMenuItem
//
this.sortByGroupToolStripMenuItem.Name = "sortByGroupToolStripMenuItem";
this.sortByGroupToolStripMenuItem.Size = new System.Drawing.Size(185, 22);
this.sortByGroupToolStripMenuItem.Text = "Sort by G&roup";
this.sortByGroupToolStripMenuItem.Click += new System.EventHandler(this.sortByGroupToolStripMenuItem_Click);
//
// MainForm
//
@@ -910,6 +981,7 @@
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.trayIconContextMenuStrip.ResumeLayout(false);
this.mainContextMenuStrip.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -980,6 +1052,13 @@
private System.Windows.Forms.Label noSearchResultsLabel;
private System.Windows.Forms.Button emailTokenButton;
private System.Windows.Forms.Label tokenEmailSentLabel;
private System.Windows.Forms.Label menuLabel;
private System.Windows.Forms.ContextMenuStrip mainContextMenuStrip;
private System.Windows.Forms.ToolStripMenuItem showGroupNamesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem showOfflineDevicesToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem sortByNameToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem sortByGroupToolStripMenuItem;
}
}

View File

@@ -40,6 +40,9 @@ namespace MeshCentralRouter
public bool forceExit = false;
public bool sendEmailToken = false;
public void setRegValue(string name, string value) { Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Open Source\MeshCentral Router", name, value); }
public string getRegValue(string name, string value) { return Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Open Source\MeshCentral Router", name, value).ToString(); }
public class DeviceComparer : IComparer
{
public int Compare(Object a, Object b)
@@ -49,6 +52,15 @@ namespace MeshCentralRouter
return bx.CompareTo(ax);
}
}
public class DeviceGroupComparer : IComparer
{
public int Compare(Object a, Object b)
{
string ax = ((DeviceUserControl)a).mesh.name.ToLower() + ", " + ((DeviceUserControl)a).node.name.ToLower();
string bx = ((DeviceUserControl)a).mesh.name.ToLower() + ", " + ((DeviceUserControl)b).node.name.ToLower();
return bx.CompareTo(ax);
}
}
private const int EM_SETCUEBANNER = 0x1501;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
@@ -110,6 +122,17 @@ namespace MeshCentralRouter
private void MainForm_Load(object sender, EventArgs e)
{
// Load registry settings
showGroupNamesToolStripMenuItem.Checked = (getRegValue("Show Group Names", "1") == "1");
showOfflineDevicesToolStripMenuItem.Checked = (getRegValue("Show Offline Devices", "1") == "1");
if (getRegValue("Device Sort", "Name") == "Name") {
sortByNameToolStripMenuItem.Checked = true;
sortByGroupToolStripMenuItem.Checked = false;
} else {
sortByNameToolStripMenuItem.Checked = false;
sortByGroupToolStripMenuItem.Checked = true;
}
//Text += " - v" + Application.ProductVersion;
//installPathTextBox.Text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Open Source", "MeshCentral");
//serverModeComboBox.SelectedIndex = 0;
@@ -278,8 +301,7 @@ namespace MeshCentralRouter
}
// Clear all untagged devices
foreach (Control c in devicesPanel.Controls)
{
foreach (Control c in devicesPanel.Controls) {
if ((c.GetType() == typeof(DeviceUserControl)) && ((DeviceUserControl)c).present == false) {
devicesPanel.Controls.Remove(c); c.Dispose();
}
@@ -287,12 +309,12 @@ namespace MeshCentralRouter
// Filter devices
int visibleDevices = 0;
foreach (Control c in devicesPanel.Controls)
{
foreach (Control c in devicesPanel.Controls) {
if (c.GetType() == typeof(DeviceUserControl)) {
NodeClass n = ((DeviceUserControl)c).node;
if ((search == "") || (n.name.ToLower().IndexOf(search) >= 0)) {
c.Visible = true;
bool connVisible = ((showOfflineDevicesToolStripMenuItem.Checked) || ((n.conn & 1) != 0));
if ((search == "") || (n.name.ToLower().IndexOf(search) >= 0) || (showGroupNamesToolStripMenuItem.Checked && (((DeviceUserControl)c).mesh.name.ToLower().IndexOf(search) >= 0))) {
c.Visible = connVisible;
visibleDevices++;
} else {
c.Visible = false;
@@ -303,8 +325,13 @@ namespace MeshCentralRouter
// Sort devices
ArrayList sortlist = new ArrayList();
foreach (Control c in devicesPanel.Controls) { if (c.GetType() == typeof(DeviceUserControl)) { sortlist.Add(c); } }
if (sortByNameToolStripMenuItem.Checked) {
DeviceComparer comp = new DeviceComparer();
sortlist.Sort(comp);
} else {
DeviceGroupComparer comp = new DeviceGroupComparer();
sortlist.Sort(comp);
}
devicesPanel.Controls.Clear();
devicesPanel.Controls.AddRange((DeviceUserControl[])sortlist.ToArray(typeof(DeviceUserControl)));
@@ -313,6 +340,8 @@ namespace MeshCentralRouter
noSearchResultsLabel.Visible = ((devicesPanel.Controls.Count > 0) && (visibleDevices == 0));
}
public bool getShowGroupNames() { return showGroupNamesToolStripMenuItem.Checked; }
private void Meshcentral_onStateChanged(int state)
{
if (meshcentral == null) return;
@@ -730,13 +759,13 @@ namespace MeshCentralRouter
if (c.GetType() == typeof(DeviceUserControl))
{
NodeClass n = ((DeviceUserControl)c).node;
if ((search == "") || (n.name.ToLower().IndexOf(search) >= 0))
bool connVisible = ((showOfflineDevicesToolStripMenuItem.Checked) || ((n.conn & 1) != 0));
if ((search == "") || (n.name.ToLower().IndexOf(search) >= 0) || (showGroupNamesToolStripMenuItem.Checked && (((DeviceUserControl)c).mesh.name.ToLower().IndexOf(search) >= 0)))
{
c.Visible = true;
//if ((search == "") || (n.name.ToLower().IndexOf(search) >= 0)) {
c.Visible = connVisible;
visibleDevices++;
}
else
{
} else {
c.Visible = false;
}
}
@@ -748,7 +777,7 @@ namespace MeshCentralRouter
private void devicesTabControl_SelectedIndexChanged(object sender, EventArgs e)
{
searchTextBox.Visible = (devicesTabControl.SelectedIndex == 0);
menuLabel.Visible = searchTextBox.Visible = (devicesTabControl.SelectedIndex == 0);
}
private void searchTextBox_KeyPress(object sender, KeyPressEventArgs e)
@@ -812,6 +841,41 @@ namespace MeshCentralRouter
nextButton2.Enabled = (tokenTextBox.Text.Replace(" ", "") != "");
}
private void menuLabel_Click(object sender, EventArgs e)
{
mainContextMenuStrip.Show(menuLabel, menuLabel.PointToClient(Cursor.Position));
}
private void showGroupNamesToolStripMenuItem_Click(object sender, EventArgs e)
{
showGroupNamesToolStripMenuItem.Checked = !showGroupNamesToolStripMenuItem.Checked;
setRegValue("Show Group Names", showGroupNamesToolStripMenuItem.Checked ? "1" : "0");
updateDeviceList();
}
private void hideOfflineDevicesToolStripMenuItem_Click(object sender, EventArgs e)
{
showOfflineDevicesToolStripMenuItem.Checked = !showOfflineDevicesToolStripMenuItem.Checked;
setRegValue("Show Offline Devices", showOfflineDevicesToolStripMenuItem.Checked?"1":"0");
updateDeviceList();
}
private void sortByNameToolStripMenuItem_Click(object sender, EventArgs e)
{
sortByNameToolStripMenuItem.Checked = true;
sortByGroupToolStripMenuItem.Checked = false;
setRegValue("Device Sort", "Name");
updateDeviceList();
}
private void sortByGroupToolStripMenuItem_Click(object sender, EventArgs e)
{
sortByNameToolStripMenuItem.Checked = false;
sortByGroupToolStripMenuItem.Checked = true;
setRegValue("Device Sort", "Group");
updateDeviceList();
}
/*
private delegate void displayMessageHandler(string msg, int buttons, string extra, int progress);
private void displayMessage(string msg, int buttons = 0, string extra = "", int progress = 0)

View File

@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="mainContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>613, 17</value>
</metadata>
<data name="label5.Text" xml:space="preserve">
<value>This server presented a un-trusted certificate. This may indicate that this is not the correct server or that the server does not have a valid certificate. It is not recommanded, but you can press the ignore button to continue connection to this server.</value>
</data>

View File

@@ -22,77 +22,5 @@ namespace MeshCentralRouter.Properties {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public int ViewType {
get {
return ((int)(this["ViewType"]));
}
set {
this["ViewType"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1")]
public int GraphType {
get {
return ((int)(this["GraphType"]));
}
set {
this["GraphType"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool ShowHiddenNodes {
get {
return ((bool)(this["ShowHiddenNodes"]));
}
set {
this["ShowHiddenNodes"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ServerCertHash {
get {
return ((string)(this["ServerCertHash"]));
}
set {
this["ServerCertHash"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool AllowsAgentDownloads {
get {
return ((bool)(this["AllowsAgentDownloads"]));
}
set {
this["AllowsAgentDownloads"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool AllowsAgentUploads {
get {
return ((bool)(this["AllowsAgentUploads"]));
}
set {
this["AllowsAgentUploads"] = value;
}
}
}
}

View File

@@ -1,24 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MeshServer.Properties" GeneratedClassName="Settings">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings>
<Setting Name="ViewType" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="GraphType" Type="System.Int32" Scope="User">
<Value Profile="(Default)">1</Value>
</Setting>
<Setting Name="ShowHiddenNodes" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="ServerCertHash" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="AllowsAgentDownloads" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="AllowsAgentUploads" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
<Settings />
</SettingsFile>