using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net.NetworkInformation; using System.Threading; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Connection.Protocol.RDP; using mRemoteNG.Connection.Protocol.VNC; using mRemoteNG.Container; using mRemoteNG.Messages; using mRemoteNG.Security; using mRemoteNG.Themes; using mRemoteNG.Tools; using mRemoteNG.Tree.Root; using mRemoteNG.UI.Controls.FilteredPropertyGrid; using WeifenLuo.WinFormsUI.Docking; namespace mRemoteNG.UI.Window { public class ConfigWindow : BaseWindow { private bool _originalPropertyGridToolStripItemCountValid; private int _originalPropertyGridToolStripItemCount; private System.ComponentModel.Container _components; private ToolStripButton _btnShowProperties; private ToolStripButton _btnShowDefaultProperties; private ToolStripButton _btnShowInheritance; private ToolStripButton _btnShowDefaultInheritance; private ToolStripButton _btnIcon; private ToolStripButton _btnHostStatus; internal ContextMenuStrip CMenIcons; internal ContextMenuStrip PropertyGridContextMenu; private ToolStripMenuItem _propertyGridContextMenuShowHelpText; private ToolStripMenuItem _propertyGridContextMenuReset; private ToolStripSeparator _toolStripSeparator1; private FilteredPropertyGrid _pGrid; private ThemeManager _themeManager; private AbstractConnectionRecord _selectedTreeNode; public AbstractConnectionRecord SelectedTreeNode { get { return _selectedTreeNode; } set { _selectedTreeNode = value; SetPropertyGridObject(_selectedTreeNode); } } private void InitializeComponent() { _components = new System.ComponentModel.Container(); Load += Config_Load; SystemColorsChanged += Config_SystemColorsChanged; _pGrid = new FilteredPropertyGrid(); _pGrid.PropertyValueChanged += pGrid_PropertyValueChanged; _pGrid.PropertySortChanged += pGrid_PropertySortChanged; PropertyGridContextMenu = new ContextMenuStrip(_components); PropertyGridContextMenu.Opening += propertyGridContextMenu_Opening; _propertyGridContextMenuReset = new ToolStripMenuItem(); _propertyGridContextMenuReset.Click += propertyGridContextMenuReset_Click; _toolStripSeparator1 = new ToolStripSeparator(); _propertyGridContextMenuShowHelpText = new ToolStripMenuItem(); _propertyGridContextMenuShowHelpText.Click += propertyGridContextMenuShowHelpText_Click; _propertyGridContextMenuShowHelpText.CheckedChanged += propertyGridContextMenuShowHelpText_CheckedChanged; _btnShowInheritance = new ToolStripButton(); _btnShowInheritance.Click += btnShowInheritance_Click; _btnShowDefaultInheritance = new ToolStripButton(); _btnShowDefaultInheritance.Click += btnShowDefaultInheritance_Click; _btnShowProperties = new ToolStripButton(); _btnShowProperties.Click += btnShowProperties_Click; _btnShowDefaultProperties = new ToolStripButton(); _btnShowDefaultProperties.Click += btnShowDefaultProperties_Click; _btnIcon = new ToolStripButton(); _btnIcon.MouseUp += btnIcon_Click; _btnHostStatus = new ToolStripButton(); _btnHostStatus.Click += btnHostStatus_Click; CMenIcons = new ContextMenuStrip(_components); PropertyGridContextMenu.SuspendLayout(); SuspendLayout(); // //pGrid // _pGrid.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right; _pGrid.BrowsableProperties = null; _pGrid.ContextMenuStrip = PropertyGridContextMenu; _pGrid.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, Convert.ToByte(0)); _pGrid.HiddenAttributes = null; _pGrid.HiddenProperties = null; _pGrid.Location = new Point(0, 0); _pGrid.Name = "_pGrid"; _pGrid.PropertySort = PropertySort.Categorized; _pGrid.Size = new Size(226, 530); _pGrid.TabIndex = 0; _pGrid.UseCompatibleTextRendering = true; // //propertyGridContextMenu // PropertyGridContextMenu.Items.AddRange(new ToolStripItem[] { _propertyGridContextMenuReset, _toolStripSeparator1, _propertyGridContextMenuShowHelpText }); PropertyGridContextMenu.Name = "PropertyGridContextMenu"; PropertyGridContextMenu.Size = new Size(157, 76); // //propertyGridContextMenuReset // _propertyGridContextMenuReset.Name = "_propertyGridContextMenuReset"; _propertyGridContextMenuReset.Size = new Size(156, 22); _propertyGridContextMenuReset.Text = @"&Reset"; // //ToolStripSeparator1 // _toolStripSeparator1.Name = "_toolStripSeparator1"; _toolStripSeparator1.Size = new Size(153, 6); // //propertyGridContextMenuShowHelpText // _propertyGridContextMenuShowHelpText.Name = "_propertyGridContextMenuShowHelpText"; _propertyGridContextMenuShowHelpText.Size = new Size(156, 22); _propertyGridContextMenuShowHelpText.Text = @"&Show Help Text"; // //btnShowInheritance // _btnShowInheritance.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnShowInheritance.Image = Resources.Inheritance; _btnShowInheritance.ImageTransparentColor = Color.Magenta; _btnShowInheritance.Name = "_btnShowInheritance"; _btnShowInheritance.Size = new Size(23, 22); _btnShowInheritance.Text = @"Inheritance"; // //btnShowDefaultInheritance // _btnShowDefaultInheritance.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnShowDefaultInheritance.Image = Resources.Inheritance_Default; _btnShowDefaultInheritance.ImageTransparentColor = Color.Magenta; _btnShowDefaultInheritance.Name = "_btnShowDefaultInheritance"; _btnShowDefaultInheritance.Size = new Size(23, 22); _btnShowDefaultInheritance.Text = @"Default Inheritance"; // //btnShowProperties // _btnShowProperties.Checked = true; _btnShowProperties.CheckState = CheckState.Checked; _btnShowProperties.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnShowProperties.Image = Resources.Properties; _btnShowProperties.ImageTransparentColor = Color.Magenta; _btnShowProperties.Name = "_btnShowProperties"; _btnShowProperties.Size = new Size(23, 22); _btnShowProperties.Text = @"Properties"; // //btnShowDefaultProperties // _btnShowDefaultProperties.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnShowDefaultProperties.Image = Resources.Properties_Default; _btnShowDefaultProperties.ImageTransparentColor = Color.Magenta; _btnShowDefaultProperties.Name = "_btnShowDefaultProperties"; _btnShowDefaultProperties.Size = new Size(23, 22); _btnShowDefaultProperties.Text = @"Default Properties"; // //btnIcon // _btnIcon.Alignment = ToolStripItemAlignment.Right; _btnIcon.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnIcon.ImageTransparentColor = Color.Magenta; _btnIcon.Name = "_btnIcon"; _btnIcon.Size = new Size(23, 22); _btnIcon.Text = @"Icon"; // //btnHostStatus // _btnHostStatus.Alignment = ToolStripItemAlignment.Right; _btnHostStatus.DisplayStyle = ToolStripItemDisplayStyle.Image; _btnHostStatus.Image = Resources.HostStatus_Check; _btnHostStatus.ImageTransparentColor = Color.Magenta; _btnHostStatus.Name = "_btnHostStatus"; _btnHostStatus.Size = new Size(23, 22); _btnHostStatus.Tag = "checking"; _btnHostStatus.Text = @"Status"; // //cMenIcons // CMenIcons.Name = "CMenIcons"; CMenIcons.Size = new Size(61, 4); // //Config // ClientSize = new Size(226, 530); Controls.Add(_pGrid); Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, Convert.ToByte(0)); HideOnClose = true; Icon = Resources.Config_Icon; Name = "ConfigWindow"; TabText = @"Config"; Text = @"Config"; PropertyGridContextMenu.ResumeLayout(false); ResumeLayout(false); } #region Public Properties public bool PropertiesVisible { get { return _btnShowProperties.Checked; } set { _btnShowProperties.Checked = value; if (!value) return; _btnShowInheritance.Checked = false; _btnShowDefaultInheritance.Checked = false; _btnShowDefaultProperties.Checked = false; } } public bool InheritanceVisible { get { return _btnShowInheritance.Checked; } set { _btnShowInheritance.Checked = value; if (!value) return; _btnShowProperties.Checked = false; _btnShowDefaultInheritance.Checked = false; _btnShowDefaultProperties.Checked = false; } } public bool DefaultPropertiesVisible { get { return _btnShowDefaultProperties.Checked; } set { _btnShowDefaultProperties.Checked = value; if (!value) return; _btnShowProperties.Checked = false; _btnShowDefaultInheritance.Checked = false; _btnShowInheritance.Checked = false; } } public bool DefaultInheritanceVisible { get { return _btnShowDefaultInheritance.Checked; } set { _btnShowDefaultInheritance.Checked = value; if (!value) return; _btnShowProperties.Checked = false; _btnShowDefaultProperties.Checked = false; _btnShowInheritance.Checked = false; } } /// /// A list of properties being shown for the current object. /// public IEnumerable VisibleObjectProperties => _pGrid.VisibleProperties; #endregion #region Constructors public ConfigWindow() : this(new DockContent()) { } public ConfigWindow(DockContent panel) { WindowType = WindowType.Config; DockPnl = panel; InitializeComponent(); } #endregion #region Public Methods protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, Keys keyData) { // Main form handle command key events // Adapted from http://kiwigis.blogspot.com/2009/05/adding-tab-key-support-to-propertygrid.html if ((keyData & Keys.KeyCode) != Keys.Tab) return base.ProcessCmdKey(ref msg, keyData); var selectedItem = _pGrid.SelectedGridItem; var gridRoot = selectedItem; while (gridRoot.GridItemType != GridItemType.Root) { gridRoot = gridRoot.Parent; } var gridItems = new List(); FindChildGridItems(gridRoot, ref gridItems); if (!ContainsGridItemProperty(gridItems)) return true; var newItem = selectedItem; // ReSharper disable once SwitchStatementMissingSomeCases switch (keyData) { case (Keys.Tab | Keys.Shift): newItem = FindPreviousGridItemProperty(gridItems, selectedItem); break; case Keys.Tab: newItem = FindNextGridItemProperty(gridItems, selectedItem); break; } _pGrid.SelectedGridItem = newItem; return true; // Handled } private void FindChildGridItems(GridItem item, ref List gridItems) { gridItems.Add(item); if (item.Expandable && !item.Expanded) return; foreach (GridItem child in item.GridItems) { FindChildGridItems(child, ref gridItems); } } private bool ContainsGridItemProperty(IEnumerable gridItems) { return gridItems.Any(item => item.GridItemType == GridItemType.Property); } private GridItem FindPreviousGridItemProperty(IList gridItems, GridItem startItem) { if (gridItems.Count == 0 || startItem == null) return null; var startIndex = gridItems.IndexOf(startItem); if (startItem.GridItemType == GridItemType.Property) { startIndex--; if (startIndex < 0) { startIndex = gridItems.Count - 1; } } var previousIndex = 0; var previousIndexValid = false; for (var index = startIndex; index >= 0; index--) { if (gridItems[index].GridItemType != GridItemType.Property) continue; previousIndex = index; previousIndexValid = true; break; } if (previousIndexValid) return gridItems[previousIndex]; for (var index = gridItems.Count - 1; index >= startIndex + 1; index--) { if (gridItems[index].GridItemType != GridItemType.Property) continue; previousIndex = index; previousIndexValid = true; break; } return !previousIndexValid ? null : gridItems[previousIndex]; } private GridItem FindNextGridItemProperty(IList gridItems, GridItem startItem) { if (gridItems.Count == 0 || startItem == null) return null; var startIndex = gridItems.IndexOf(startItem); if (startItem.GridItemType == GridItemType.Property) { startIndex++; if (startIndex >= gridItems.Count) { startIndex = 0; } } var nextIndex = 0; var nextIndexValid = false; for (var index = startIndex; index <= gridItems.Count - 1; index++) { if (gridItems[index].GridItemType != GridItemType.Property) continue; nextIndex = index; nextIndexValid = true; break; } if (nextIndexValid) return gridItems[nextIndex]; for (var index = 0; index <= startIndex - 1; index++) { if (gridItems[index].GridItemType != GridItemType.Property) continue; nextIndex = index; nextIndexValid = true; break; } return !nextIndexValid ? null : gridItems[nextIndex]; } private void SetPropertyGridObject(object propertyGridObject) { try { _btnShowProperties.Enabled = false; _btnShowInheritance.Enabled = false; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = false; _btnHostStatus.Enabled = false; _btnIcon.Image = null; var gridObjectAsConnectionInfo = propertyGridObject as ConnectionInfo; if (gridObjectAsConnectionInfo != null) //CONNECTION INFO { var gridObjectAsContainerInfo = propertyGridObject as ContainerInfo; if (gridObjectAsContainerInfo != null) //CONTAINER { var gridObjectAsRootNodeInfo = propertyGridObject as RootNodeInfo; if (gridObjectAsRootNodeInfo != null) // ROOT { // ReSharper disable once SwitchStatementMissingSomeCases switch (gridObjectAsRootNodeInfo.Type) { case RootNodeType.Connection: PropertiesVisible = true; DefaultPropertiesVisible = false; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = false; _btnShowDefaultProperties.Enabled = true; _btnShowDefaultInheritance.Enabled = true; _btnIcon.Enabled = false; _btnHostStatus.Enabled = false; break; case RootNodeType.PuttySessions: PropertiesVisible = true; DefaultPropertiesVisible = false; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = false; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = false; _btnHostStatus.Enabled = false; break; } _pGrid.SelectedObject = propertyGridObject; } else { _pGrid.SelectedObject = propertyGridObject; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = gridObjectAsContainerInfo.Parent != null && !(gridObjectAsContainerInfo.Parent is RootNodeInfo); _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = false; PropertiesVisible = true; } } else //NO CONTAINER { if (PropertiesVisible) //Properties selected { _pGrid.SelectedObject = propertyGridObject; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = !(gridObjectAsConnectionInfo is PuttySessionInfo) && gridObjectAsConnectionInfo.Parent != null && !(gridObjectAsConnectionInfo.Parent is RootNodeInfo); _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = true; } else if (DefaultPropertiesVisible) //Defaults selected { _pGrid.SelectedObject = propertyGridObject; if (propertyGridObject is DefaultConnectionInfo) //Is the default connection { _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = false; _btnShowDefaultProperties.Enabled = true; _btnShowDefaultInheritance.Enabled = true; _btnIcon.Enabled = true; _btnHostStatus.Enabled = false; } else //is not the default connection { _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = true; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = true; PropertiesVisible = true; } } else if (InheritanceVisible) //Inheritance selected { _pGrid.SelectedObject = gridObjectAsConnectionInfo.Inheritance; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = true; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = true; } else if (DefaultInheritanceVisible) //Default Inhertiance selected { _pGrid.SelectedObject = propertyGridObject; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = true; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = true; PropertiesVisible = true; } } var conIcon = ConnectionIcon.FromString(Convert.ToString(gridObjectAsConnectionInfo.Icon)); if (conIcon != null) { _btnIcon.Image = conIcon.ToBitmap(); } } else if (propertyGridObject is ConnectionInfoInheritance) //INHERITANCE { _pGrid.SelectedObject = propertyGridObject; if (InheritanceVisible) { InheritanceVisible = true; _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = true; _btnShowDefaultProperties.Enabled = false; _btnShowDefaultInheritance.Enabled = false; _btnIcon.Enabled = true; _btnHostStatus.Enabled = !((ConnectionInfo)((ConnectionInfoInheritance)propertyGridObject).Parent).IsContainer; InheritanceVisible = true; var conIcon = ConnectionIcon.FromString(Convert.ToString(((ConnectionInfo)((ConnectionInfoInheritance)propertyGridObject).Parent).Icon)); if (conIcon != null) { _btnIcon.Image = conIcon.ToBitmap(); } } else if (DefaultInheritanceVisible) { _btnShowProperties.Enabled = true; _btnShowInheritance.Enabled = false; _btnShowDefaultProperties.Enabled = true; _btnShowDefaultInheritance.Enabled = true; _btnIcon.Enabled = false; _btnHostStatus.Enabled = false; DefaultInheritanceVisible = true; } } ShowHideGridItems(); SetHostStatus(propertyGridObject); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridObjectFailed + Environment.NewLine + ex.Message, true); } } #endregion #region Private Methods private void ApplyLanguage() { _btnShowInheritance.Text = Language.strButtonInheritance; _btnShowDefaultInheritance.Text = Language.strButtonDefaultInheritance; _btnShowProperties.Text = Language.strButtonProperties; _btnShowDefaultProperties.Text = Language.strButtonDefaultProperties; _btnIcon.Text = Language.strButtonIcon; _btnHostStatus.Text = Language.strStatus; Text = Language.strMenuConfig; TabText = Language.strMenuConfig; _propertyGridContextMenuShowHelpText.Text = Language.strMenuShowHelpText; } private new void ApplyTheme() { if (Themes.ThemeManager.getInstance().ThemingActive) { _pGrid.BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Background"); _pGrid.ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Foreground"); _pGrid.ViewBackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Background"); _pGrid.ViewForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Foreground"); _pGrid.LineColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Border"); _pGrid.HelpBackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Background"); _pGrid.HelpForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Foreground"); _pGrid.CategoryForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Header_Foreground"); _pGrid.CommandsDisabledLinkColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Disabled_Foreground"); _pGrid.CommandsBackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Disabled_Background"); _pGrid.CommandsForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Item_Disabled_Foreground"); } } private void AddToolStripItems() { try { var customToolStrip = new ToolStrip(); customToolStrip.Items.Add(_btnShowProperties); customToolStrip.Items.Add(_btnShowInheritance); customToolStrip.Items.Add(_btnShowDefaultProperties); customToolStrip.Items.Add(_btnShowDefaultInheritance); customToolStrip.Items.Add(_btnHostStatus); customToolStrip.Items.Add(_btnIcon); customToolStrip.Show(); var propertyGridToolStrip = new ToolStrip(); ToolStrip toolStrip = null; foreach (Control control in _pGrid.Controls) { toolStrip = control as ToolStrip; if (toolStrip == null) continue; propertyGridToolStrip = toolStrip; break; } if (toolStrip == null) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strCouldNotFindToolStripInFilteredPropertyGrid, true); return; } if (!_originalPropertyGridToolStripItemCountValid) { _originalPropertyGridToolStripItemCount = propertyGridToolStrip.Items.Count; _originalPropertyGridToolStripItemCountValid = true; } Debug.Assert(_originalPropertyGridToolStripItemCount == 5); // Hide the "Property Pages" button propertyGridToolStrip.Items[_originalPropertyGridToolStripItemCount - 1].Visible = false; var expectedToolStripItemCount = _originalPropertyGridToolStripItemCount + customToolStrip.Items.Count; if (propertyGridToolStrip.Items.Count == expectedToolStripItemCount) return; propertyGridToolStrip.AllowMerge = true; ToolStripManager.Merge(customToolStrip, propertyGridToolStrip); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigUiLoadFailed + Environment.NewLine + ex.Message, true); } } private void Config_Load(object sender, EventArgs e) { ApplyLanguage(); _themeManager = ThemeManager.getInstance(); _themeManager.ThemeChanged += ApplyTheme; ApplyTheme(); AddToolStripItems(); _pGrid.HelpVisible = Settings.Default.ShowConfigHelpText; } private void Config_SystemColorsChanged(object sender, EventArgs e) { AddToolStripItems(); } private void pGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { try { UpdateConnectionInfoNode(e); UpdateRootInfoNode(e); UpdateInheritanceNode(); ShowHideGridItems(); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridValueFailed + Environment.NewLine + ex.Message, true); } } private void UpdateConnectionInfoNode(PropertyValueChangedEventArgs e) { Debug.WriteLine("update config"); var selectedGridObject = _pGrid.SelectedObject as ConnectionInfo; if (selectedGridObject == null) return; if (e.ChangedItem.Label == Language.strPropertyNameProtocol) { selectedGridObject.SetDefaultPort(); } else if (e.ChangedItem.Label == Language.strPropertyNameName) { if (Settings.Default.SetHostnameLikeDisplayName) { var connectionInfo = selectedGridObject; if (!string.IsNullOrEmpty(connectionInfo.Name)) connectionInfo.Hostname = connectionInfo.Name; } } else if (e.ChangedItem.Label == Language.strPropertyNameIcon) { var conIcon = ConnectionIcon.FromString(Convert.ToString(selectedGridObject.Icon)); if (conIcon != null) _btnIcon.Image = conIcon.ToBitmap(); } else if (e.ChangedItem.Label == Language.strPropertyNameAddress) { SetHostStatus(selectedGridObject); } if (selectedGridObject is DefaultConnectionInfo) DefaultConnectionInfo.Instance.SaveTo(Settings.Default, a=>"ConDefault"+a); } private void UpdateRootInfoNode(PropertyValueChangedEventArgs e) { var rootInfo = _pGrid.SelectedObject as RootNodeInfo; if (rootInfo == null) return; if (e.ChangedItem.PropertyDescriptor?.Name != "Password") return; if (rootInfo.Password) { var passwordName = Settings.Default.UseSQLServer ? Language.strSQLServer.TrimEnd(':') : Path.GetFileName(Runtime.ConnectionsService.GetStartupConnectionFileName()); var password = MiscTools.PasswordDialog(passwordName); // operation cancelled, dont set a password if (!password.Any() || password.First().Length == 0) { rootInfo.Password = false; return; } rootInfo.PasswordString = password.First().ConvertToUnsecureString(); } else { rootInfo.PasswordString = ""; } } private void UpdateInheritanceNode() { if (!(_pGrid.SelectedObject is DefaultConnectionInheritance)) return; DefaultConnectionInheritance.Instance.SaveTo(Settings.Default, a=>"InhDefault"+a); } private void pGrid_PropertySortChanged(object sender, EventArgs e) { if (_pGrid.PropertySort == PropertySort.CategorizedAlphabetical) _pGrid.PropertySort = PropertySort.Categorized; } private void ShowHideGridItems() { try { var strHide = new List(); var o = _pGrid.SelectedObject as RootNodeInfo; if (o != null) { var rootInfo = o; if (rootInfo.Type == RootNodeType.PuttySessions) { strHide.Add("Password"); } strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("Icon"); strHide.Add("Panel"); strHide.Add("Hostname"); strHide.Add("Username"); strHide.Add("Protocol"); strHide.Add("Port"); strHide.Add("PuttySession"); strHide.Add("PreExtApp"); strHide.Add("PostExtApp"); strHide.Add("MacAddress"); strHide.Add("UserField"); strHide.Add("Description"); strHide.Add("SoundQuality"); strHide.Add("CredentialRecord"); } else if (_pGrid.SelectedObject is ConnectionInfo) { var conI = (ConnectionInfo)_pGrid.SelectedObject; // ReSharper disable once SwitchStatementMissingSomeCases switch (conI.Protocol) { case ProtocolType.RDP: strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RenderingEngine"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); if (conI.RDPMinutesToIdleTimeout <= 0) { strHide.Add("RDPAlertIdleTimeout"); } if (conI.RDGatewayUsageMethod == RdpProtocol.RDGatewayUsageMethod.Never) { strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); } else if (conI.RDGatewayUseConnectionCredentials == RdpProtocol.RDGatewayUseConnectionCredentials.Yes) { strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsername"); } if (!(conI.Resolution == RdpProtocol.RDPResolutions.FitToWindow || conI.Resolution == RdpProtocol.RDPResolutions.Fullscreen)) { strHide.Add("AutomaticResize"); } if (conI.RedirectSound != RdpProtocol.RDPSounds.BringToThisComputer) { strHide.Add("SoundQuality"); } break; case ProtocolType.VNC: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); if (conI.VNCAuthMode == ProtocolVNC.AuthMode.AuthVNC) { strHide.Add("Username"); strHide.Add("Domain"); } if (conI.VNCProxyType == ProtocolVNC.ProxyType.ProxyNone) { strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyUsername"); } strHide.Add("SoundQuality"); break; case ProtocolType.SSH1: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.SSH2: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.Telnet: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("Username"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.Rlogin: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("Username"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.RAW: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("Username"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.HTTP: case ProtocolType.HTTPS: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.ICA: strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("ExtApp"); strHide.Add("Port"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; case ProtocolType.IntApp: strHide.Add("CacheBitmaps"); strHide.Add("Colors"); strHide.Add("DisplayThemes"); strHide.Add("DisplayWallpaper"); strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); strHide.Add("RDGatewayUsageMethod"); strHide.Add("RDGatewayUseConnectionCredentials"); strHide.Add("RDGatewayUsername"); strHide.Add("RDPAuthenticationLevel"); strHide.Add("RDPMinutesToIdleTimeout"); strHide.Add("RDPAlertIdleTimeout"); strHide.Add("LoadBalanceInfo"); strHide.Add("RedirectDiskDrives"); strHide.Add("RedirectKeys"); strHide.Add("RedirectPorts"); strHide.Add("RedirectPrinters"); strHide.Add("RedirectSmartCards"); strHide.Add("RedirectSound"); strHide.Add("RenderingEngine"); strHide.Add("Resolution"); strHide.Add("AutomaticResize"); strHide.Add("UseConsoleSession"); strHide.Add("UseCredSsp"); strHide.Add("VNCAuthMode"); strHide.Add("VNCColors"); strHide.Add("VNCCompression"); strHide.Add("VNCEncoding"); strHide.Add("VNCProxyIP"); strHide.Add("VNCProxyPassword"); strHide.Add("VNCProxyPort"); strHide.Add("VNCProxyType"); strHide.Add("VNCProxyUsername"); strHide.Add("VNCSmartSizeMode"); strHide.Add("VNCViewOnly"); strHide.Add("SoundQuality"); break; } if (!(conI is DefaultConnectionInfo)) { if (conI.Inheritance.CacheBitmaps) strHide.Add("CacheBitmaps"); if (conI.Inheritance.Colors) strHide.Add("Colors"); if (conI.Inheritance.Description) strHide.Add("Description"); if (conI.Inheritance.DisplayThemes) strHide.Add("DisplayThemes"); if (conI.Inheritance.DisplayWallpaper) strHide.Add("DisplayWallpaper"); if (conI.Inheritance.EnableFontSmoothing) strHide.Add("EnableFontSmoothing"); if (conI.Inheritance.EnableDesktopComposition) strHide.Add("EnableDesktopComposition"); if (conI.Inheritance.Domain) strHide.Add("Domain"); if (conI.Inheritance.Icon) strHide.Add("Icon"); if (conI.Inheritance.Password) strHide.Add("Password"); if (conI.Inheritance.Port) strHide.Add("Port"); if (conI.Inheritance.Protocol) strHide.Add("Protocol"); if (conI.Inheritance.PuttySession) strHide.Add("PuttySession"); if (conI.Inheritance.RedirectDiskDrives) strHide.Add("RedirectDiskDrives"); if (conI.Inheritance.RedirectKeys) strHide.Add("RedirectKeys"); if (conI.Inheritance.RedirectPorts) strHide.Add("RedirectPorts"); if (conI.Inheritance.RedirectPrinters) strHide.Add("RedirectPrinters"); if (conI.Inheritance.RedirectSmartCards) strHide.Add("RedirectSmartCards"); if (conI.Inheritance.RedirectSound) strHide.Add("RedirectSound"); if (conI.Inheritance.Resolution) strHide.Add("Resolution"); if (conI.Inheritance.AutomaticResize) strHide.Add("AutomaticResize"); if (conI.Inheritance.UseConsoleSession) strHide.Add("UseConsoleSession"); if (conI.Inheritance.UseCredSsp) strHide.Add("UseCredSsp"); if (conI.Inheritance.RenderingEngine) strHide.Add("RenderingEngine"); if (conI.Inheritance.ICAEncryptionStrength) strHide.Add("ICAEncryptionStrength"); if (conI.Inheritance.RDPAuthenticationLevel) strHide.Add("RDPAuthenticationLevel"); if (conI.Inheritance.RDPMinutesToIdleTimeout) strHide.Add("RDPMinutesToIdleTimeout"); if (conI.Inheritance.RDPAlertIdleTimeout) strHide.Add("RDPAlertIdleTimeout"); if (conI.Inheritance.LoadBalanceInfo) strHide.Add("LoadBalanceInfo"); if (conI.Inheritance.Username) strHide.Add("Username"); if (conI.Inheritance.Panel) strHide.Add("Panel"); if (conI.IsContainer) strHide.Add("Hostname"); if (conI.Inheritance.PreExtApp) strHide.Add("PreExtApp"); if (conI.Inheritance.PostExtApp) strHide.Add("PostExtApp"); if (conI.Inheritance.MacAddress) strHide.Add("MacAddress"); if (conI.Inheritance.UserField) strHide.Add("UserField"); if (conI.Inheritance.VNCAuthMode) strHide.Add("VNCAuthMode"); if (conI.Inheritance.VNCColors) strHide.Add("VNCColors"); if (conI.Inheritance.VNCCompression) strHide.Add("VNCCompression"); if (conI.Inheritance.VNCEncoding) strHide.Add("VNCEncoding"); if (conI.Inheritance.VNCProxyIP) strHide.Add("VNCProxyIP"); if (conI.Inheritance.VNCProxyPassword) strHide.Add("VNCProxyPassword"); if (conI.Inheritance.VNCProxyPort) strHide.Add("VNCProxyPort"); if (conI.Inheritance.VNCProxyType) strHide.Add("VNCProxyType"); if (conI.Inheritance.VNCProxyUsername) strHide.Add("VNCProxyUsername"); if (conI.Inheritance.VNCViewOnly) strHide.Add("VNCViewOnly"); if (conI.Inheritance.VNCSmartSizeMode) strHide.Add("VNCSmartSizeMode"); if (conI.Inheritance.ExtApp) strHide.Add("ExtApp"); if (conI.Inheritance.RDGatewayUsageMethod) strHide.Add("RDGatewayUsageMethod"); if (conI.Inheritance.RDGatewayHostname) strHide.Add("RDGatewayHostname"); if (conI.Inheritance.RDGatewayUsername) strHide.Add("RDGatewayUsername"); if (conI.Inheritance.RDGatewayPassword) strHide.Add("RDGatewayPassword"); if (conI.Inheritance.RDGatewayDomain) strHide.Add("RDGatewayDomain"); if (conI.Inheritance.RDGatewayUseConnectionCredentials) strHide.Add("RDGatewayUseConnectionCredentials"); if (conI.Inheritance.RDGatewayHostname) strHide.Add("RDGatewayHostname"); if(conI.Inheritance.SoundQuality) strHide.Add("SoundQuality"); } else { strHide.Add("Hostname"); strHide.Add("Name"); } } _pGrid.HiddenProperties = strHide.ToArray(); _pGrid.Refresh(); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridHideItemsFailed + Environment.NewLine + ex.Message, true); } } private void btnShowProperties_Click(object sender, EventArgs e) { var o = _pGrid.SelectedObject as ConnectionInfoInheritance; if (o != null) { if (_pGrid.SelectedObject is DefaultConnectionInheritance) { PropertiesVisible = true; InheritanceVisible = false; DefaultPropertiesVisible = false; DefaultInheritanceVisible = false; SetPropertyGridObject((RootNodeInfo)_selectedTreeNode); } else { PropertiesVisible = true; InheritanceVisible = false; DefaultPropertiesVisible = false; DefaultInheritanceVisible = false; SetPropertyGridObject(o.Parent); } } else if (_pGrid.SelectedObject is ConnectionInfo) { if (!((ConnectionInfo) _pGrid.SelectedObject).IsDefault) return; PropertiesVisible = true; InheritanceVisible = false; DefaultPropertiesVisible = false; DefaultInheritanceVisible = false; SetPropertyGridObject((RootNodeInfo)_selectedTreeNode); } } private void btnShowDefaultProperties_Click(object sender, EventArgs e) { if (!(_pGrid.SelectedObject is RootNodeInfo) && !(_pGrid.SelectedObject is ConnectionInfoInheritance)) return; PropertiesVisible = false; InheritanceVisible = false; DefaultPropertiesVisible = true; DefaultInheritanceVisible = false; SetPropertyGridObject(DefaultConnectionInfo.Instance); } private void btnShowInheritance_Click(object sender, EventArgs e) { if (!(_pGrid.SelectedObject is ConnectionInfo)) return; PropertiesVisible = false; InheritanceVisible = true; DefaultPropertiesVisible = false; DefaultInheritanceVisible = false; SetPropertyGridObject(((ConnectionInfo)_pGrid.SelectedObject).Inheritance); } private void btnShowDefaultInheritance_Click(object sender, EventArgs e) { if (!(_pGrid.SelectedObject is RootNodeInfo) && !(_pGrid.SelectedObject is ConnectionInfo)) return; PropertiesVisible = false; InheritanceVisible = false; DefaultPropertiesVisible = false; DefaultInheritanceVisible = true; SetPropertyGridObject(DefaultConnectionInheritance.Instance); } private void btnHostStatus_Click(object sender, EventArgs e) { SetHostStatus(_pGrid.SelectedObject); } private void btnIcon_Click(object sender, MouseEventArgs e) { try { if (!(_pGrid.SelectedObject is ConnectionInfo) || _pGrid.SelectedObject is PuttySessionInfo) return; CMenIcons.Items.Clear(); foreach (var iStr in ConnectionIcon.Icons) { var tI = new ToolStripMenuItem { Text = iStr, Image = ConnectionIcon.FromString(iStr).ToBitmap() }; tI.Click += IconMenu_Click; CMenIcons.Items.Add(tI); } var mPos = new Point(new Size(PointToScreen(new Point(e.Location.X + _pGrid.Width - 100, e.Location.Y)))); CMenIcons.Show(mPos); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridButtonIconClickFailed + Environment.NewLine + ex.Message, true); } } private void IconMenu_Click(object sender, EventArgs e) { try { var connectionInfo = (ConnectionInfo)_pGrid.SelectedObject; if (connectionInfo == null) return; var selectedMenuItem = (ToolStripMenuItem)sender; var iconName = selectedMenuItem?.Text; if (string.IsNullOrEmpty(iconName)) return; var connectionIcon = ConnectionIcon.FromString(iconName); if (connectionIcon == null) return; _btnIcon.Image = connectionIcon.ToBitmap(); connectionInfo.Icon = iconName; _pGrid.Refresh(); Runtime.ConnectionsService.SaveConnectionsAsync(); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridMenuClickFailed + Environment.NewLine + ex.Message, true); } } #endregion #region Host Status (Ping) private Thread _pThread; private void CheckHostAlive(object hostName) { if (string.IsNullOrEmpty(hostName as string)) { ShowStatusImage(Resources.HostStatus_Off); return; } var pingSender = new Ping(); try { var pReply = pingSender.Send((string)hostName); if (pReply?.Status == IPStatus.Success) { if ((string)_btnHostStatus.Tag == "checking") ShowStatusImage(Resources.HostStatus_On); } else { if ((string)_btnHostStatus.Tag == "checking") ShowStatusImage(Resources.HostStatus_Off); } } catch (Exception) { if ((string)_btnHostStatus.Tag == "checking") ShowStatusImage(Resources.HostStatus_Off); } } private delegate void ShowStatusImageCb(Image image); private void ShowStatusImage(Image image) { if (_pGrid.InvokeRequired) { ShowStatusImageCb d = ShowStatusImage; _pGrid.Invoke(d, image); } else { _btnHostStatus.Image = image; _btnHostStatus.Tag = "checkfinished"; } } private void SetHostStatus(object connectionInfo) { try { _btnHostStatus.Image = Resources.HostStatus_Check; // To check status, ConnectionInfo must be an mRemoteNG.Connection.Info that is not a container var info = connectionInfo as ConnectionInfo; if (info == null) return; if (info.IsContainer) return; _btnHostStatus.Tag = "checking"; _pThread = new Thread(CheckHostAlive); _pThread.SetApartmentState(ApartmentState.STA); _pThread.IsBackground = true; _pThread.Start(((ConnectionInfo)connectionInfo).Hostname); } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strConfigPropertyGridSetHostStatusFailed + Environment.NewLine + ex.Message, true); } } #endregion #region Event Handlers private void propertyGridContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e) { try { _propertyGridContextMenuShowHelpText.Checked = Settings.Default.ShowConfigHelpText; var gridItem = _pGrid.SelectedGridItem; _propertyGridContextMenuReset.Enabled = Convert.ToBoolean(_pGrid.SelectedObject != null && gridItem?.PropertyDescriptor != null && gridItem.PropertyDescriptor.CanResetValue(_pGrid.SelectedObject)); } catch (Exception ex) { Runtime.MessageCollector.AddExceptionMessage("UI.Window.Config.propertyGridContextMenu_Opening() failed.", ex); } } private void propertyGridContextMenuReset_Click(object sender, EventArgs e) { try { var gridItem = _pGrid.SelectedGridItem; if (_pGrid.SelectedObject != null && gridItem?.PropertyDescriptor != null && gridItem.PropertyDescriptor.CanResetValue(_pGrid.SelectedObject)) { _pGrid.ResetSelectedProperty(); } } catch (Exception ex) { Runtime.MessageCollector.AddExceptionMessage("UI.Window.Config.propertyGridContextMenuReset_Click() failed.", ex); } } private void propertyGridContextMenuShowHelpText_Click(object sender, EventArgs e) { _propertyGridContextMenuShowHelpText.Checked = !_propertyGridContextMenuShowHelpText.Checked; } private void propertyGridContextMenuShowHelpText_CheckedChanged(object sender, EventArgs e) { Settings.Default.ShowConfigHelpText = _propertyGridContextMenuShowHelpText.Checked; _pGrid.HelpVisible = _propertyGridContextMenuShowHelpText.Checked; } #endregion } }