From 82808be0c70100fabb5cf48645f80e67ce32bba3 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Tue, 1 Jan 2019 13:43:03 -0600 Subject: [PATCH 01/22] deleted confcons 2.8 schema since this version doesnt exist --- mRemoteV1/Schemas/mremoteng_confcons_v2_8.xsd | 141 ------------------ mRemoteV1/mRemoteV1.csproj | 4 - 2 files changed, 145 deletions(-) delete mode 100644 mRemoteV1/Schemas/mremoteng_confcons_v2_8.xsd diff --git a/mRemoteV1/Schemas/mremoteng_confcons_v2_8.xsd b/mRemoteV1/Schemas/mremoteng_confcons_v2_8.xsd deleted file mode 100644 index 1c08ef98..00000000 --- a/mRemoteV1/Schemas/mremoteng_confcons_v2_8.xsd +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 734b439c..a6a173ea 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -981,10 +981,6 @@ Designer PreserveNewest - - Designer - PreserveNewest - Designer PreserveNewest From ce371e45aeb59becc462c0afdd023dfe3ea34aea Mon Sep 17 00:00:00 2001 From: David Sparer Date: Tue, 1 Jan 2019 13:50:00 -0600 Subject: [PATCH 02/22] xml deserialization can now tolerate missing attributes --- .../Xml/XmlConnectionsDeserializer.cs | 277 +++++++++--------- .../Xml/XmlExtensions.cs | 48 +++ mRemoteV1/mRemoteV1.csproj | 1 + 3 files changed, 184 insertions(+), 142 deletions(-) create mode 100644 mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index 270f5fb1..2ddf4532 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -18,6 +18,7 @@ using System.Globalization; using System.Security; using System.Windows.Forms; using System.Xml; +using mRemoteNG.Config.Serializers.ConnectionSerializers.Xml; namespace mRemoteNG.Config.Serializers.Xml { @@ -67,8 +68,8 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 2.6) { - var fullFileEncryptionValue = rootXmlElement?.Attributes["FullFileEncryption"].Value ?? ""; - if (bool.Parse(fullFileEncryptionValue)) + var fullFileEncryptionValue = rootXmlElement.GetAttributeAsBool("FullFileEncryption"); + if (fullFileEncryptionValue) { var decryptedContent = _decryptor.Decrypt(rootXmlElement.InnerText); rootXmlElement.InnerXml = decryptedContent; @@ -139,14 +140,9 @@ namespace mRemoteNG.Config.Serializers.Xml { if (_confVersion >= 2.6) { - BlockCipherEngines engine; - Enum.TryParse(connectionsRootElement?.Attributes["EncryptionEngine"].Value, true, out engine); - - BlockCipherModes mode; - Enum.TryParse(connectionsRootElement?.Attributes["BlockCipherMode"].Value, true, out mode); - - int keyDerivationIterations; - int.TryParse(connectionsRootElement?.Attributes["KdfIterations"].Value, out keyDerivationIterations); + var engine = connectionsRootElement.GetAttributeAsEnum("EncryptionEngine"); + var mode = connectionsRootElement.GetAttributeAsEnum("BlockCipherMode"); + var keyDerivationIterations = connectionsRootElement.GetAttributeAsInt("KdfIterations"); _decryptor = new XmlConnectionsDecryptor(engine, mode, rootNodeInfo) { @@ -167,8 +163,7 @@ namespace mRemoteNG.Config.Serializers.Xml if (!parentXmlNode.HasChildNodes) return; foreach (XmlNode xmlNode in parentXmlNode.ChildNodes) { - var treeNodeTypeString = xmlNode.Attributes?["Type"].Value ?? "connection"; - var nodeType = (TreeNodeType)Enum.Parse(typeof(TreeNodeType), treeNodeTypeString, true); + var nodeType = xmlNode.GetAttributeAsEnum("Type", TreeNodeType.Connection); // ReSharper disable once SwitchStatementMissingSomeCases switch (nodeType) @@ -184,8 +179,7 @@ namespace mRemoteNG.Config.Serializers.Xml containerInfo.CopyFrom(GetConnectionInfoFromXml(xmlNode)); if (_confVersion >= 0.8) { - var expandedValue = xmlNode.Attributes?["Expanded"].Value ?? ""; - containerInfo.IsExpanded = bool.Parse(expandedValue); + containerInfo.IsExpanded = xmlNode.GetAttributeAsBool("Expanded"); } parentContainer.AddChild(containerInfo); @@ -203,9 +197,10 @@ namespace mRemoteNG.Config.Serializers.Xml private ConnectionInfo GetConnectionInfoFromXml(XmlNode xmlnode) { - if (xmlnode.Attributes == null) return null; + if (xmlnode?.Attributes == null) + return null; - var connectionId = xmlnode.Attributes["Id"]?.Value; + var connectionId = xmlnode.GetAttributeAsString("Id"); if (string.IsNullOrWhiteSpace(connectionId)) connectionId = Guid.NewGuid().ToString(); var connectionInfo = new ConnectionInfo(connectionId); @@ -214,16 +209,16 @@ namespace mRemoteNG.Config.Serializers.Xml { if (_confVersion >= 0.2) { - connectionInfo.Name = xmlnode.Attributes["Name"].Value; - connectionInfo.Description = xmlnode.Attributes["Descr"].Value; - connectionInfo.Hostname = xmlnode.Attributes["Hostname"].Value; - connectionInfo.DisplayWallpaper = bool.Parse(xmlnode.Attributes["DisplayWallpaper"].Value); - connectionInfo.DisplayThemes = bool.Parse(xmlnode.Attributes["DisplayThemes"].Value); - connectionInfo.CacheBitmaps = bool.Parse(xmlnode.Attributes["CacheBitmaps"].Value); + connectionInfo.Name = xmlnode.GetAttributeAsString("Name"); + connectionInfo.Description = xmlnode.GetAttributeAsString("Descr"); + connectionInfo.Hostname = xmlnode.GetAttributeAsString("Hostname"); + connectionInfo.DisplayWallpaper = xmlnode.GetAttributeAsBool("DisplayWallpaper"); + connectionInfo.DisplayThemes = xmlnode.GetAttributeAsBool("DisplayThemes"); + connectionInfo.CacheBitmaps = xmlnode.GetAttributeAsBool("CacheBitmaps"); if (_confVersion < 1.1) //1.0 - 0.1 { - connectionInfo.Resolution = Convert.ToBoolean(xmlnode.Attributes["Fullscreen"].Value) + connectionInfo.Resolution = xmlnode.GetAttributeAsBool("Fullscreen") ? RdpProtocol.RDPResolutions.Fullscreen : RdpProtocol.RDPResolutions.FitToWindow; } @@ -231,9 +226,9 @@ namespace mRemoteNG.Config.Serializers.Xml if (!Runtime.UseCredentialManager || _confVersion <= 2.6) // 0.2 - 2.6 { #pragma warning disable 618 - connectionInfo.Username = xmlnode.Attributes["Username"].Value; - connectionInfo.Password = _decryptor.Decrypt(xmlnode.Attributes["Password"].Value); - connectionInfo.Domain = xmlnode.Attributes["Domain"].Value; + connectionInfo.Username = xmlnode.GetAttributeAsString("Username"); + connectionInfo.Password = _decryptor.Decrypt(xmlnode.GetAttributeAsString("Password")); + connectionInfo.Domain = xmlnode.GetAttributeAsString("Domain"); #pragma warning restore 618 } } @@ -242,10 +237,10 @@ namespace mRemoteNG.Config.Serializers.Xml { if (_confVersion < 0.7) { - if (Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value)) + if (xmlnode.GetAttributeAsBool("UseVNC")) { connectionInfo.Protocol = ProtocolType.VNC; - connectionInfo.Port = Convert.ToInt32(xmlnode.Attributes["VNCPort"].Value); + connectionInfo.Port = xmlnode.GetAttributeAsInt("VNCPort"); } else { @@ -263,18 +258,18 @@ namespace mRemoteNG.Config.Serializers.Xml { if (_confVersion < 0.7) { - connectionInfo.Port = Convert.ToInt32(Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value) - ? xmlnode.Attributes["VNCPort"].Value - : xmlnode.Attributes["RDPPort"].Value); + connectionInfo.Port = xmlnode.GetAttributeAsBool("UseVNC") + ? xmlnode.GetAttributeAsInt("VNCPort") + : xmlnode.GetAttributeAsInt("RDPPort"); } - connectionInfo.UseConsoleSession = bool.Parse(xmlnode.Attributes["ConnectToConsole"].Value); + connectionInfo.UseConsoleSession = xmlnode.GetAttributeAsBool("ConnectToConsole"); } else { if (_confVersion < 0.7) { - if (Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value)) + if (xmlnode.GetAttributeAsBool("UseVNC")) connectionInfo.Port = (int)ProtocolVNC.Defaults.Port; else connectionInfo.Port = (int)RdpProtocol.Defaults.Port; @@ -284,10 +279,10 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 0.5) { - connectionInfo.RedirectDiskDrives = bool.Parse(xmlnode.Attributes["RedirectDiskDrives"].Value); - connectionInfo.RedirectPrinters = bool.Parse(xmlnode.Attributes["RedirectPrinters"].Value); - connectionInfo.RedirectPorts = bool.Parse(xmlnode.Attributes["RedirectPorts"].Value); - connectionInfo.RedirectSmartCards = bool.Parse(xmlnode.Attributes["RedirectSmartCards"].Value); + connectionInfo.RedirectDiskDrives = xmlnode.GetAttributeAsBool("RedirectDiskDrives"); + connectionInfo.RedirectPrinters = xmlnode.GetAttributeAsBool("RedirectPrinters"); + connectionInfo.RedirectPorts = xmlnode.GetAttributeAsBool("RedirectPorts"); + connectionInfo.RedirectSmartCards = xmlnode.GetAttributeAsBool("RedirectSmartCards"); } else { @@ -299,31 +294,29 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 0.7) { - ProtocolType protocolType; - Enum.TryParse(xmlnode.Attributes["Protocol"].Value, true, out protocolType); - connectionInfo.Protocol = protocolType; - connectionInfo.Port = Convert.ToInt32(xmlnode.Attributes["Port"].Value); + connectionInfo.Protocol = xmlnode.GetAttributeAsEnum("Protocol"); + connectionInfo.Port = xmlnode.GetAttributeAsInt("Port"); } if (_confVersion >= 1.0) { - connectionInfo.RedirectKeys = bool.Parse(xmlnode.Attributes["RedirectKeys"].Value); + connectionInfo.RedirectKeys = xmlnode.GetAttributeAsBool("RedirectKeys"); } if (_confVersion >= 1.2) { - connectionInfo.PuttySession = xmlnode.Attributes["PuttySession"].Value; + connectionInfo.PuttySession = xmlnode.GetAttributeAsString("PuttySession"); } if (_confVersion >= 1.3) { - connectionInfo.Colors = (RdpProtocol.RDPColors)Enum.Parse(typeof(RdpProtocol.RDPColors), xmlnode.Attributes["Colors"].Value, true); - connectionInfo.Resolution = (RdpProtocol.RDPResolutions)Enum.Parse(typeof(RdpProtocol.RDPResolutions), xmlnode.Attributes["Resolution"].Value, true); - connectionInfo.RedirectSound = (RdpProtocol.RDPSounds)Enum.Parse(typeof(RdpProtocol.RDPSounds), xmlnode.Attributes["RedirectSound"].Value, true); + connectionInfo.Colors = xmlnode.GetAttributeAsEnum("Colors"); + connectionInfo.Resolution = xmlnode.GetAttributeAsEnum("Resolution"); + connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); } else { - switch (Convert.ToInt32(xmlnode.Attributes["Colors"].Value)) + switch (xmlnode.GetAttributeAsInt("Colors")) { case 0: connectionInfo.Colors = RdpProtocol.RDPColors.Colors256; @@ -344,171 +337,171 @@ namespace mRemoteNG.Config.Serializers.Xml break; } - connectionInfo.RedirectSound = (RdpProtocol.RDPSounds)Convert.ToInt32(xmlnode.Attributes["RedirectSound"].Value); + connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); } if (_confVersion >= 1.3) { - connectionInfo.Inheritance.CacheBitmaps = bool.Parse(xmlnode.Attributes["InheritCacheBitmaps"].Value); - connectionInfo.Inheritance.Colors = bool.Parse(xmlnode.Attributes["InheritColors"].Value); - connectionInfo.Inheritance.Description = bool.Parse(xmlnode.Attributes["InheritDescription"].Value); - connectionInfo.Inheritance.DisplayThemes = bool.Parse(xmlnode.Attributes["InheritDisplayThemes"].Value); - connectionInfo.Inheritance.DisplayWallpaper = bool.Parse(xmlnode.Attributes["InheritDisplayWallpaper"].Value); - connectionInfo.Inheritance.Icon = bool.Parse(xmlnode.Attributes["InheritIcon"].Value); - connectionInfo.Inheritance.Panel = bool.Parse(xmlnode.Attributes["InheritPanel"].Value); - connectionInfo.Inheritance.Port = bool.Parse(xmlnode.Attributes["InheritPort"].Value); - connectionInfo.Inheritance.Protocol = bool.Parse(xmlnode.Attributes["InheritProtocol"].Value); - connectionInfo.Inheritance.PuttySession = bool.Parse(xmlnode.Attributes["InheritPuttySession"].Value); - connectionInfo.Inheritance.RedirectDiskDrives = bool.Parse(xmlnode.Attributes["InheritRedirectDiskDrives"].Value); - connectionInfo.Inheritance.RedirectKeys = bool.Parse(xmlnode.Attributes["InheritRedirectKeys"].Value); - connectionInfo.Inheritance.RedirectPorts = bool.Parse(xmlnode.Attributes["InheritRedirectPorts"].Value); - connectionInfo.Inheritance.RedirectPrinters = bool.Parse(xmlnode.Attributes["InheritRedirectPrinters"].Value); - connectionInfo.Inheritance.RedirectSmartCards = bool.Parse(xmlnode.Attributes["InheritRedirectSmartCards"].Value); - connectionInfo.Inheritance.RedirectSound = bool.Parse(xmlnode.Attributes["InheritRedirectSound"].Value); - connectionInfo.Inheritance.Resolution = bool.Parse(xmlnode.Attributes["InheritResolution"].Value); - connectionInfo.Inheritance.UseConsoleSession = bool.Parse(xmlnode.Attributes["InheritUseConsoleSession"].Value); + connectionInfo.Inheritance.CacheBitmaps = xmlnode.GetAttributeAsBool("InheritCacheBitmaps"); + connectionInfo.Inheritance.Colors = xmlnode.GetAttributeAsBool("InheritColors"); + connectionInfo.Inheritance.Description = xmlnode.GetAttributeAsBool("InheritDescription"); + connectionInfo.Inheritance.DisplayThemes = xmlnode.GetAttributeAsBool("InheritDisplayThemes"); + connectionInfo.Inheritance.DisplayWallpaper = xmlnode.GetAttributeAsBool("InheritDisplayWallpaper"); + connectionInfo.Inheritance.Icon = xmlnode.GetAttributeAsBool("InheritIcon"); + connectionInfo.Inheritance.Panel = xmlnode.GetAttributeAsBool("InheritPanel"); + connectionInfo.Inheritance.Port = xmlnode.GetAttributeAsBool("InheritPort"); + connectionInfo.Inheritance.Protocol = xmlnode.GetAttributeAsBool("InheritProtocol"); + connectionInfo.Inheritance.PuttySession = xmlnode.GetAttributeAsBool("InheritPuttySession"); + connectionInfo.Inheritance.RedirectDiskDrives = xmlnode.GetAttributeAsBool("InheritRedirectDiskDrives"); + connectionInfo.Inheritance.RedirectKeys = xmlnode.GetAttributeAsBool("InheritRedirectKeys"); + connectionInfo.Inheritance.RedirectPorts = xmlnode.GetAttributeAsBool("InheritRedirectPorts"); + connectionInfo.Inheritance.RedirectPrinters = xmlnode.GetAttributeAsBool("InheritRedirectPrinters"); + connectionInfo.Inheritance.RedirectSmartCards = xmlnode.GetAttributeAsBool("InheritRedirectSmartCards"); + connectionInfo.Inheritance.RedirectSound = xmlnode.GetAttributeAsBool("InheritRedirectSound"); + connectionInfo.Inheritance.Resolution = xmlnode.GetAttributeAsBool("InheritResolution"); + connectionInfo.Inheritance.UseConsoleSession = xmlnode.GetAttributeAsBool("InheritUseConsoleSession"); if (!Runtime.UseCredentialManager || _confVersion <= 2.6) // 1.3 - 2.6 { - connectionInfo.Inheritance.Domain = bool.Parse(xmlnode.Attributes["InheritDomain"].Value); - connectionInfo.Inheritance.Password = bool.Parse(xmlnode.Attributes["InheritPassword"].Value); - connectionInfo.Inheritance.Username = bool.Parse(xmlnode.Attributes["InheritUsername"].Value); + connectionInfo.Inheritance.Domain = xmlnode.GetAttributeAsBool("InheritDomain"); + connectionInfo.Inheritance.Password = xmlnode.GetAttributeAsBool("InheritPassword"); + connectionInfo.Inheritance.Username = xmlnode.GetAttributeAsBool("InheritUsername"); } - connectionInfo.Icon = xmlnode.Attributes["Icon"].Value; - connectionInfo.Panel = xmlnode.Attributes["Panel"].Value; + connectionInfo.Icon = xmlnode.GetAttributeAsString("Icon"); + connectionInfo.Panel = xmlnode.GetAttributeAsString("Panel"); } else { - if (Convert.ToBoolean(xmlnode.Attributes["Inherit"].Value)) + if (xmlnode.GetAttributeAsBool("Inherit")) connectionInfo.Inheritance.TurnOnInheritanceCompletely(); - connectionInfo.Icon = Convert.ToString(xmlnode.Attributes["Icon"].Value.Replace(".ico", "")); + connectionInfo.Icon = xmlnode.GetAttributeAsString("Icon").Replace(".ico", ""); connectionInfo.Panel = Language.strGeneral; } if (_confVersion >= 1.5) { - connectionInfo.PleaseConnect = bool.Parse(xmlnode.Attributes["Connected"].Value); + connectionInfo.PleaseConnect = xmlnode.GetAttributeAsBool("Connected"); } if (_confVersion >= 1.6) { - connectionInfo.ICAEncryptionStrength = (IcaProtocol.EncryptionStrength)Enum.Parse(typeof(IcaProtocol.EncryptionStrength), xmlnode.Attributes["ICAEncryptionStrength"].Value, true); - connectionInfo.Inheritance.ICAEncryptionStrength = bool.Parse(xmlnode.Attributes["InheritICAEncryptionStrength"].Value); - connectionInfo.PreExtApp = xmlnode.Attributes["PreExtApp"].Value; - connectionInfo.PostExtApp = xmlnode.Attributes["PostExtApp"].Value; - connectionInfo.Inheritance.PreExtApp = bool.Parse(xmlnode.Attributes["InheritPreExtApp"].Value); - connectionInfo.Inheritance.PostExtApp = bool.Parse(xmlnode.Attributes["InheritPostExtApp"].Value); + connectionInfo.ICAEncryptionStrength = xmlnode.GetAttributeAsEnum("ICAEncryptionStrength"); + connectionInfo.Inheritance.ICAEncryptionStrength = xmlnode.GetAttributeAsBool("InheritICAEncryptionStrength"); + connectionInfo.PreExtApp = xmlnode.GetAttributeAsString("PreExtApp"); + connectionInfo.PostExtApp = xmlnode.GetAttributeAsString("PostExtApp"); + connectionInfo.Inheritance.PreExtApp = xmlnode.GetAttributeAsBool("InheritPreExtApp"); + connectionInfo.Inheritance.PostExtApp = xmlnode.GetAttributeAsBool("InheritPostExtApp"); } if (_confVersion >= 1.7) { - connectionInfo.VNCCompression = (ProtocolVNC.Compression)Enum.Parse(typeof(ProtocolVNC.Compression), xmlnode.Attributes["VNCCompression"].Value, true); - connectionInfo.VNCEncoding = (ProtocolVNC.Encoding)Enum.Parse(typeof(ProtocolVNC.Encoding), xmlnode.Attributes["VNCEncoding"].Value, true); - connectionInfo.VNCAuthMode = (ProtocolVNC.AuthMode)Enum.Parse(typeof(ProtocolVNC.AuthMode), xmlnode.Attributes["VNCAuthMode"].Value, true); - connectionInfo.VNCProxyType = (ProtocolVNC.ProxyType)Enum.Parse(typeof(ProtocolVNC.ProxyType), xmlnode.Attributes["VNCProxyType"].Value, true); - connectionInfo.VNCProxyIP = xmlnode.Attributes["VNCProxyIP"].Value; - connectionInfo.VNCProxyPort = Convert.ToInt32(xmlnode.Attributes["VNCProxyPort"].Value); - connectionInfo.VNCProxyUsername = xmlnode.Attributes["VNCProxyUsername"].Value; - connectionInfo.VNCProxyPassword = _decryptor.Decrypt(xmlnode.Attributes["VNCProxyPassword"].Value); - connectionInfo.VNCColors = (ProtocolVNC.Colors)Enum.Parse(typeof(ProtocolVNC.Colors), xmlnode.Attributes["VNCColors"].Value, true); - connectionInfo.VNCSmartSizeMode = (ProtocolVNC.SmartSizeMode)Enum.Parse(typeof(ProtocolVNC.SmartSizeMode), xmlnode.Attributes["VNCSmartSizeMode"].Value, true); - connectionInfo.VNCViewOnly = bool.Parse(xmlnode.Attributes["VNCViewOnly"].Value); - connectionInfo.Inheritance.VNCCompression = bool.Parse(xmlnode.Attributes["InheritVNCCompression"].Value); - connectionInfo.Inheritance.VNCEncoding = bool.Parse(xmlnode.Attributes["InheritVNCEncoding"].Value); - connectionInfo.Inheritance.VNCAuthMode = bool.Parse(xmlnode.Attributes["InheritVNCAuthMode"].Value); - connectionInfo.Inheritance.VNCProxyType = bool.Parse(xmlnode.Attributes["InheritVNCProxyType"].Value); - connectionInfo.Inheritance.VNCProxyIP = bool.Parse(xmlnode.Attributes["InheritVNCProxyIP"].Value); - connectionInfo.Inheritance.VNCProxyPort = bool.Parse(xmlnode.Attributes["InheritVNCProxyPort"].Value); - connectionInfo.Inheritance.VNCProxyUsername = bool.Parse(xmlnode.Attributes["InheritVNCProxyUsername"].Value); - connectionInfo.Inheritance.VNCProxyPassword = bool.Parse(xmlnode.Attributes["InheritVNCProxyPassword"].Value); - connectionInfo.Inheritance.VNCColors = bool.Parse(xmlnode.Attributes["InheritVNCColors"].Value); - connectionInfo.Inheritance.VNCSmartSizeMode = bool.Parse(xmlnode.Attributes["InheritVNCSmartSizeMode"].Value); - connectionInfo.Inheritance.VNCViewOnly = bool.Parse(xmlnode.Attributes["InheritVNCViewOnly"].Value); + connectionInfo.VNCCompression = xmlnode.GetAttributeAsEnum("VNCCompression"); + connectionInfo.VNCEncoding = xmlnode.GetAttributeAsEnum("VNCEncoding"); + connectionInfo.VNCAuthMode = xmlnode.GetAttributeAsEnum("VNCAuthMode"); + connectionInfo.VNCProxyType = xmlnode.GetAttributeAsEnum("VNCProxyType"); + connectionInfo.VNCProxyIP = xmlnode.GetAttributeAsString("VNCProxyIP"); + connectionInfo.VNCProxyPort = xmlnode.GetAttributeAsInt("VNCProxyPort"); + connectionInfo.VNCProxyUsername = xmlnode.GetAttributeAsString("VNCProxyUsername"); + connectionInfo.VNCProxyPassword = _decryptor.Decrypt(xmlnode.GetAttributeAsString("VNCProxyPassword")); + connectionInfo.VNCColors = xmlnode.GetAttributeAsEnum("VNCColors"); + connectionInfo.VNCSmartSizeMode = xmlnode.GetAttributeAsEnum("VNCSmartSizeMode"); + connectionInfo.VNCViewOnly = xmlnode.GetAttributeAsBool("VNCViewOnly"); + connectionInfo.Inheritance.VNCCompression = xmlnode.GetAttributeAsBool("InheritVNCCompression"); + connectionInfo.Inheritance.VNCEncoding = xmlnode.GetAttributeAsBool("InheritVNCEncoding"); + connectionInfo.Inheritance.VNCAuthMode = xmlnode.GetAttributeAsBool("InheritVNCAuthMode"); + connectionInfo.Inheritance.VNCProxyType = xmlnode.GetAttributeAsBool("InheritVNCProxyType"); + connectionInfo.Inheritance.VNCProxyIP = xmlnode.GetAttributeAsBool("InheritVNCProxyIP"); + connectionInfo.Inheritance.VNCProxyPort = xmlnode.GetAttributeAsBool("InheritVNCProxyPort"); + connectionInfo.Inheritance.VNCProxyUsername = xmlnode.GetAttributeAsBool("InheritVNCProxyUsername"); + connectionInfo.Inheritance.VNCProxyPassword = xmlnode.GetAttributeAsBool("InheritVNCProxyPassword"); + connectionInfo.Inheritance.VNCColors = xmlnode.GetAttributeAsBool("InheritVNCColors"); + connectionInfo.Inheritance.VNCSmartSizeMode = xmlnode.GetAttributeAsBool("InheritVNCSmartSizeMode"); + connectionInfo.Inheritance.VNCViewOnly = xmlnode.GetAttributeAsBool("InheritVNCViewOnly"); } if (_confVersion >= 1.8) { - connectionInfo.RDPAuthenticationLevel = (RdpProtocol.AuthenticationLevel)Enum.Parse(typeof(RdpProtocol.AuthenticationLevel), xmlnode.Attributes["RDPAuthenticationLevel"].Value, true); - connectionInfo.Inheritance.RDPAuthenticationLevel = bool.Parse(xmlnode.Attributes["InheritRDPAuthenticationLevel"].Value); + connectionInfo.RDPAuthenticationLevel = xmlnode.GetAttributeAsEnum("RDPAuthenticationLevel"); + connectionInfo.Inheritance.RDPAuthenticationLevel = xmlnode.GetAttributeAsBool("InheritRDPAuthenticationLevel"); } if (_confVersion >= 1.9) { - connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), xmlnode.Attributes["RenderingEngine"].Value, true); - connectionInfo.MacAddress = xmlnode.Attributes["MacAddress"].Value; - connectionInfo.Inheritance.RenderingEngine = bool.Parse(xmlnode.Attributes["InheritRenderingEngine"].Value); - connectionInfo.Inheritance.MacAddress = bool.Parse(xmlnode.Attributes["InheritMacAddress"].Value); + connectionInfo.RenderingEngine = xmlnode.GetAttributeAsEnum("RenderingEngine"); + connectionInfo.MacAddress = xmlnode.GetAttributeAsString("MacAddress"); + connectionInfo.Inheritance.RenderingEngine = xmlnode.GetAttributeAsBool("InheritRenderingEngine"); + connectionInfo.Inheritance.MacAddress = xmlnode.GetAttributeAsBool("InheritMacAddress"); } if (_confVersion >= 2.0) { - connectionInfo.UserField = xmlnode.Attributes["UserField"].Value; - connectionInfo.Inheritance.UserField = bool.Parse(xmlnode.Attributes["InheritUserField"].Value); + connectionInfo.UserField = xmlnode.GetAttributeAsString("UserField"); + connectionInfo.Inheritance.UserField = xmlnode.GetAttributeAsBool("InheritUserField"); } if (_confVersion >= 2.1) { - connectionInfo.ExtApp = xmlnode.Attributes["ExtApp"].Value; - connectionInfo.Inheritance.ExtApp = bool.Parse(xmlnode.Attributes["InheritExtApp"].Value); + connectionInfo.ExtApp = xmlnode.GetAttributeAsString("ExtApp"); + connectionInfo.Inheritance.ExtApp = xmlnode.GetAttributeAsBool("InheritExtApp"); } if (_confVersion >= 2.2) { // Get settings - connectionInfo.RDGatewayUsageMethod = (RdpProtocol.RDGatewayUsageMethod)Enum.Parse(typeof(RdpProtocol.RDGatewayUsageMethod), xmlnode.Attributes["RDGatewayUsageMethod"].Value, true); - connectionInfo.RDGatewayHostname = xmlnode.Attributes["RDGatewayHostname"].Value; - connectionInfo.RDGatewayUseConnectionCredentials = (RdpProtocol.RDGatewayUseConnectionCredentials)Enum.Parse(typeof(RdpProtocol.RDGatewayUseConnectionCredentials), xmlnode.Attributes["RDGatewayUseConnectionCredentials"].Value, true); - connectionInfo.RDGatewayUsername = xmlnode.Attributes["RDGatewayUsername"].Value; - connectionInfo.RDGatewayPassword = _decryptor.Decrypt(Convert.ToString(xmlnode.Attributes["RDGatewayPassword"].Value)); - connectionInfo.RDGatewayDomain = xmlnode.Attributes["RDGatewayDomain"].Value; + connectionInfo.RDGatewayUsageMethod = xmlnode.GetAttributeAsEnum("RDGatewayUsageMethod"); + connectionInfo.RDGatewayHostname = xmlnode.GetAttributeAsString("RDGatewayHostname"); + connectionInfo.RDGatewayUseConnectionCredentials = xmlnode.GetAttributeAsEnum("RDGatewayUseConnectionCredentials"); + connectionInfo.RDGatewayUsername = xmlnode.GetAttributeAsString("RDGatewayUsername"); + connectionInfo.RDGatewayPassword = _decryptor.Decrypt(xmlnode.GetAttributeAsString("RDGatewayPassword")); + connectionInfo.RDGatewayDomain = xmlnode.GetAttributeAsString("RDGatewayDomain"); // Get inheritance settings - connectionInfo.Inheritance.RDGatewayUsageMethod = bool.Parse(xmlnode.Attributes["InheritRDGatewayUsageMethod"].Value); - connectionInfo.Inheritance.RDGatewayHostname = bool.Parse(xmlnode.Attributes["InheritRDGatewayHostname"].Value); - connectionInfo.Inheritance.RDGatewayUseConnectionCredentials = bool.Parse(xmlnode.Attributes["InheritRDGatewayUseConnectionCredentials"].Value); - connectionInfo.Inheritance.RDGatewayUsername = bool.Parse(xmlnode.Attributes["InheritRDGatewayUsername"].Value); - connectionInfo.Inheritance.RDGatewayPassword = bool.Parse(xmlnode.Attributes["InheritRDGatewayPassword"].Value); - connectionInfo.Inheritance.RDGatewayDomain = bool.Parse(xmlnode.Attributes["InheritRDGatewayDomain"].Value); + connectionInfo.Inheritance.RDGatewayUsageMethod = xmlnode.GetAttributeAsBool("InheritRDGatewayUsageMethod"); + connectionInfo.Inheritance.RDGatewayHostname = xmlnode.GetAttributeAsBool("InheritRDGatewayHostname"); + connectionInfo.Inheritance.RDGatewayUseConnectionCredentials = xmlnode.GetAttributeAsBool("InheritRDGatewayUseConnectionCredentials"); + connectionInfo.Inheritance.RDGatewayUsername = xmlnode.GetAttributeAsBool("InheritRDGatewayUsername"); + connectionInfo.Inheritance.RDGatewayPassword = xmlnode.GetAttributeAsBool("InheritRDGatewayPassword"); + connectionInfo.Inheritance.RDGatewayDomain = xmlnode.GetAttributeAsBool("InheritRDGatewayDomain"); } if (_confVersion >= 2.3) { // Get settings - connectionInfo.EnableFontSmoothing = bool.Parse(xmlnode.Attributes["EnableFontSmoothing"].Value); - connectionInfo.EnableDesktopComposition = bool.Parse(xmlnode.Attributes["EnableDesktopComposition"].Value); + connectionInfo.EnableFontSmoothing = xmlnode.GetAttributeAsBool("EnableFontSmoothing"); + connectionInfo.EnableDesktopComposition = xmlnode.GetAttributeAsBool("EnableDesktopComposition"); // Get inheritance settings - connectionInfo.Inheritance.EnableFontSmoothing = bool.Parse(xmlnode.Attributes["InheritEnableFontSmoothing"].Value); - connectionInfo.Inheritance.EnableDesktopComposition = bool.Parse(xmlnode.Attributes["InheritEnableDesktopComposition"].Value); + connectionInfo.Inheritance.EnableFontSmoothing = xmlnode.GetAttributeAsBool("InheritEnableFontSmoothing"); + connectionInfo.Inheritance.EnableDesktopComposition = xmlnode.GetAttributeAsBool("InheritEnableDesktopComposition"); } if (_confVersion >= 2.4) { - connectionInfo.UseCredSsp = bool.Parse(xmlnode.Attributes["UseCredSsp"].Value); - connectionInfo.Inheritance.UseCredSsp = bool.Parse(xmlnode.Attributes["InheritUseCredSsp"].Value); + connectionInfo.UseCredSsp = xmlnode.GetAttributeAsBool("UseCredSsp"); + connectionInfo.Inheritance.UseCredSsp = xmlnode.GetAttributeAsBool("InheritUseCredSsp"); } if (_confVersion >= 2.5) { - connectionInfo.LoadBalanceInfo = xmlnode.Attributes["LoadBalanceInfo"].Value; - connectionInfo.AutomaticResize = bool.Parse(xmlnode.Attributes["AutomaticResize"].Value); - connectionInfo.Inheritance.LoadBalanceInfo = bool.Parse(xmlnode.Attributes["InheritLoadBalanceInfo"].Value); - connectionInfo.Inheritance.AutomaticResize = bool.Parse(xmlnode.Attributes["InheritAutomaticResize"].Value); + connectionInfo.LoadBalanceInfo = xmlnode.GetAttributeAsString("LoadBalanceInfo"); + connectionInfo.AutomaticResize = xmlnode.GetAttributeAsBool("AutomaticResize"); + connectionInfo.Inheritance.LoadBalanceInfo = xmlnode.GetAttributeAsBool("InheritLoadBalanceInfo"); + connectionInfo.Inheritance.AutomaticResize = xmlnode.GetAttributeAsBool("InheritAutomaticResize"); } if (_confVersion >= 2.6) { - connectionInfo.SoundQuality = (RdpProtocol.RDPSoundQuality)Enum.Parse(typeof(RdpProtocol.RDPSoundQuality), xmlnode.Attributes["SoundQuality"].Value, true); - connectionInfo.Inheritance.SoundQuality = bool.Parse(xmlnode.Attributes["InheritSoundQuality"].Value); - connectionInfo.RDPMinutesToIdleTimeout = Convert.ToInt32(xmlnode.Attributes["RDPMinutesToIdleTimeout"]?.Value ?? "0"); - connectionInfo.Inheritance.RDPMinutesToIdleTimeout = bool.Parse(xmlnode.Attributes["InheritRDPMinutesToIdleTimeout"]?.Value ?? "False"); - connectionInfo.RDPAlertIdleTimeout = bool.Parse(xmlnode.Attributes["RDPAlertIdleTimeout"]?.Value ?? "False"); - connectionInfo.Inheritance.RDPAlertIdleTimeout = bool.Parse(xmlnode.Attributes["InheritRDPAlertIdleTimeout"]?.Value ?? "False"); + connectionInfo.SoundQuality = xmlnode.GetAttributeAsEnum("SoundQuality"); + connectionInfo.Inheritance.SoundQuality = xmlnode.GetAttributeAsBool("InheritSoundQuality"); + connectionInfo.RDPMinutesToIdleTimeout = xmlnode.GetAttributeAsInt("RDPMinutesToIdleTimeout"); + connectionInfo.Inheritance.RDPMinutesToIdleTimeout = xmlnode.GetAttributeAsBool("InheritRDPMinutesToIdleTimeout"); + connectionInfo.RDPAlertIdleTimeout = xmlnode.GetAttributeAsBool("RDPAlertIdleTimeout"); + connectionInfo.Inheritance.RDPAlertIdleTimeout = xmlnode.GetAttributeAsBool("InheritRDPAlertIdleTimeout"); } if(_confVersion >= 2.7) { - connectionInfo.RedirectClipboard = bool.Parse(xmlnode.Attributes["RedirectClipboard"].Value); - connectionInfo.Inheritance.RedirectClipboard = bool.Parse(xmlnode.Attributes["InheritRedirectClipboard"].Value); + connectionInfo.RedirectClipboard = xmlnode.GetAttributeAsBool("RedirectClipboard"); + connectionInfo.Inheritance.RedirectClipboard = xmlnode.GetAttributeAsBool("InheritRedirectClipboard"); } } catch (Exception ex) diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs new file mode 100644 index 00000000..71ecbff7 --- /dev/null +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs @@ -0,0 +1,48 @@ +using System; +using System.Xml; + +namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml +{ + public static class XmlExtensions + { + public static string GetAttributeAsString(this XmlNode xmlNode, string attribute, string defaultValue = "") + { + var value = xmlNode?.Attributes?[attribute]?.Value; + return value ?? defaultValue; + } + + public static bool GetAttributeAsBool(this XmlNode xmlNode, string attribute, bool defaultValue = false) + { + var value = xmlNode?.Attributes?[attribute]?.Value; + if (string.IsNullOrWhiteSpace(value)) + return defaultValue; + + return bool.TryParse(value, out var valueAsBool) + ? valueAsBool + : defaultValue; + } + + public static int GetAttributeAsInt(this XmlNode xmlNode, string attribute, int defaultValue = 0) + { + var value = xmlNode?.Attributes?[attribute]?.Value; + if (string.IsNullOrWhiteSpace(value)) + return defaultValue; + + return int.TryParse(value, out var valueAsBool) + ? valueAsBool + : defaultValue; + } + + public static T GetAttributeAsEnum(this XmlNode xmlNode, string attribute, T defaultValue = default(T)) + where T : struct + { + var value = xmlNode?.Attributes?[attribute]?.Value; + if (string.IsNullOrWhiteSpace(value)) + return defaultValue; + + return Enum.TryParse(value, true, out var valueAsEnum) + ? valueAsEnum + : defaultValue; + } + } +} diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index a6a173ea..05c5e4a9 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -164,6 +164,7 @@ + From d3e40d7c3d964a0a47d89f53345389888880ac7a Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Wed, 2 Jan 2019 10:43:33 -0500 Subject: [PATCH 03/22] Speed up Theme Option Page load Fixes #1245 The CheckChanged event was causing load settings to be called more than once on form load. --- mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs index b26c59c7..6035a071 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs @@ -3,7 +3,6 @@ using System.Windows.Forms; using mRemoteNG.Themes; using System.Linq; using System.Collections.Generic; -using System.Drawing; using BrightIdeasSoftware; using mRemoteNG.UI.Forms.Input; @@ -56,6 +55,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages public override void LoadSettings() { + themeEnableCombo.CheckedChanged -= themeEnableCombo_CheckedChanged; base.SaveSettings(); //At first we cannot create or delete themes, depends later on the type of selected theme btnThemeNew.Enabled = false; @@ -81,6 +81,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages // reset to the default theme when disabling theme support _themeManager.ActiveTheme = _themeManager.DefaultTheme; } + themeEnableCombo.CheckedChanged += themeEnableCombo_CheckedChanged; } private void ListPalette_FormatCell(object sender, FormatCellEventArgs e) From 166cec0483504d1a34f5c7f84663234d9d4daee8 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Wed, 2 Jan 2019 12:48:47 -0500 Subject: [PATCH 04/22] minor clean up --- mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs | 32 +++-- .../UI/Forms/OptionsPages/ThemePage.resx | 120 ++++++++++++++++++ mRemoteV1/mRemoteV1.csproj | 3 + 3 files changed, 138 insertions(+), 17 deletions(-) create mode 100644 mRemoteV1/UI/Forms/OptionsPages/ThemePage.resx diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs index 6035a071..722ff462 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs @@ -12,10 +12,10 @@ namespace mRemoteNG.UI.Forms.OptionsPages { #region Private Fields - private ThemeManager _themeManager; - private ThemeInfo _oriTheme; - private bool _oriActiveTheming; - List modifiedThemes = new List(); + private readonly ThemeManager _themeManager; + private readonly ThemeInfo _oriTheme; + private readonly bool _oriActiveTheming; + private readonly List modifiedThemes = new List(); #endregion public ThemePage() @@ -173,21 +173,19 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void btnThemeNew_Click(object sender, EventArgs e) { var name = _themeManager.ActiveTheme.Name; - using (FrmInputBox frmInputBox = new FrmInputBox(Language.strOptionsThemeNewThemeCaption, Language.strOptionsThemeNewThemeText, ref name)) + using (var frmInputBox = new FrmInputBox(Language.strOptionsThemeNewThemeCaption, Language.strOptionsThemeNewThemeText, ref name)) { - DialogResult dr = frmInputBox.ShowDialog(); - if (dr == DialogResult.OK) + var dr = frmInputBox.ShowDialog(); + if (dr != DialogResult.OK) return; + if (_themeManager.isThemeNameOk(frmInputBox.returnValue)) { - if (_themeManager.isThemeNameOk(frmInputBox.returnValue)) - { - var addedTheme = _themeManager.addTheme(_themeManager.ActiveTheme, frmInputBox.returnValue); - _themeManager.ActiveTheme = addedTheme; - LoadSettings(); - } - else - { - TaskDialog.CTaskDialog.ShowTaskDialogBox(this, Language.strErrors, Language.strOptionsThemeNewThemeError, "", "", "", "", "", "", TaskDialog.ETaskDialogButtons.Ok, TaskDialog.ESysIcons.Error, TaskDialog.ESysIcons.Information, 0); - } + var addedTheme = _themeManager.addTheme(_themeManager.ActiveTheme, frmInputBox.returnValue); + _themeManager.ActiveTheme = addedTheme; + LoadSettings(); + } + else + { + TaskDialog.CTaskDialog.ShowTaskDialogBox(this, Language.strErrors, Language.strOptionsThemeNewThemeError, "", "", "", "", "", "", TaskDialog.ETaskDialogButtons.Ok, TaskDialog.ESysIcons.Error, TaskDialog.ESysIcons.Information, 0); } } } diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.resx b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 05c5e4a9..997e8117 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -816,6 +816,9 @@ FrmInputBox.cs + + ThemePage.cs + PasswordForm.cs Designer From 67420e5416dfd37fbc55ddc590a4befbc0b1d538 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Wed, 2 Jan 2019 15:39:53 -0500 Subject: [PATCH 05/22] Segoe UI font on Connections Option page --- .../OptionsPages/ConnectionsPage.Designer.cs | 29 +++-- .../Forms/OptionsPages/ConnectionsPage.resx | 120 ++++++++++++++++++ mRemoteV1/UI/Forms/frmOptions.Designer.cs | 4 +- mRemoteV1/mRemoteV1.csproj | 3 + 4 files changed, 140 insertions(+), 16 deletions(-) create mode 100644 mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.resx diff --git a/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs index 8aaed446..263a249c 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs @@ -71,7 +71,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numRDPConTimeout.Name = "numRDPConTimeout"; - this.numRDPConTimeout.Size = new System.Drawing.Size(53, 20); + this.numRDPConTimeout.Size = new System.Drawing.Size(53, 22); this.numRDPConTimeout.TabIndex = 1; this.numRDPConTimeout.Value = new decimal(new int[] { 20, @@ -109,7 +109,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numRdpReconnectionCount.Name = "numRdpReconnectionCount"; - this.numRdpReconnectionCount.Size = new System.Drawing.Size(53, 20); + this.numRdpReconnectionCount.Size = new System.Drawing.Size(53, 22); this.numRdpReconnectionCount.TabIndex = 1; this.numRdpReconnectionCount.Value = new decimal(new int[] { 5, @@ -123,7 +123,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSingleClickOnConnectionOpensIt.AutoSize = true; this.chkSingleClickOnConnectionOpensIt.Location = new System.Drawing.Point(3, 3); this.chkSingleClickOnConnectionOpensIt.Name = "chkSingleClickOnConnectionOpensIt"; - this.chkSingleClickOnConnectionOpensIt.Size = new System.Drawing.Size(191, 17); + this.chkSingleClickOnConnectionOpensIt.Size = new System.Drawing.Size(206, 17); this.chkSingleClickOnConnectionOpensIt.TabIndex = 0; this.chkSingleClickOnConnectionOpensIt.Text = "Single click on connection opens it"; this.chkSingleClickOnConnectionOpensIt.UseVisualStyleBackColor = true; @@ -134,7 +134,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkHostnameLikeDisplayName.AutoSize = true; this.chkHostnameLikeDisplayName.Location = new System.Drawing.Point(3, 49); this.chkHostnameLikeDisplayName.Name = "chkHostnameLikeDisplayName"; - this.chkHostnameLikeDisplayName.Size = new System.Drawing.Size(328, 17); + this.chkHostnameLikeDisplayName.Size = new System.Drawing.Size(355, 17); this.chkHostnameLikeDisplayName.TabIndex = 2; this.chkHostnameLikeDisplayName.Text = "Set hostname like display name when creating new connections"; this.chkHostnameLikeDisplayName.UseVisualStyleBackColor = true; @@ -145,7 +145,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSingleClickOnOpenedConnectionSwitchesToIt.AutoSize = true; this.chkSingleClickOnOpenedConnectionSwitchesToIt.Location = new System.Drawing.Point(3, 26); this.chkSingleClickOnOpenedConnectionSwitchesToIt.Name = "chkSingleClickOnOpenedConnectionSwitchesToIt"; - this.chkSingleClickOnOpenedConnectionSwitchesToIt.Size = new System.Drawing.Size(457, 17); + this.chkSingleClickOnOpenedConnectionSwitchesToIt.Size = new System.Drawing.Size(490, 17); this.chkSingleClickOnOpenedConnectionSwitchesToIt.TabIndex = 1; this.chkSingleClickOnOpenedConnectionSwitchesToIt.Text = global::mRemoteNG.Language.strSingleClickOnOpenConnectionSwitchesToIt; this.chkSingleClickOnOpenedConnectionSwitchesToIt.UseVisualStyleBackColor = true; @@ -170,7 +170,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numAutoSave.Name = "numAutoSave"; - this.numAutoSave.Size = new System.Drawing.Size(53, 20); + this.numAutoSave.Size = new System.Drawing.Size(53, 22); this.numAutoSave.TabIndex = 1; // // pnlConfirmCloseConnection @@ -190,7 +190,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblClosingConnections.AutoSize = true; this.lblClosingConnections.Location = new System.Drawing.Point(3, 12); this.lblClosingConnections.Name = "lblClosingConnections"; - this.lblClosingConnections.Size = new System.Drawing.Size(136, 13); + this.lblClosingConnections.Size = new System.Drawing.Size(147, 13); this.lblClosingConnections.TabIndex = 0; this.lblClosingConnections.Text = "When closing connections:"; // @@ -199,7 +199,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.radCloseWarnAll.AutoSize = true; this.radCloseWarnAll.Location = new System.Drawing.Point(16, 34); this.radCloseWarnAll.Name = "radCloseWarnAll"; - this.radCloseWarnAll.Size = new System.Drawing.Size(194, 17); + this.radCloseWarnAll.Size = new System.Drawing.Size(209, 17); this.radCloseWarnAll.TabIndex = 1; this.radCloseWarnAll.TabStop = true; this.radCloseWarnAll.Text = "Warn me when closing connections"; @@ -210,7 +210,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.radCloseWarnMultiple.AutoSize = true; this.radCloseWarnMultiple.Location = new System.Drawing.Point(16, 57); this.radCloseWarnMultiple.Name = "radCloseWarnMultiple"; - this.radCloseWarnMultiple.Size = new System.Drawing.Size(254, 17); + this.radCloseWarnMultiple.Size = new System.Drawing.Size(279, 17); this.radCloseWarnMultiple.TabIndex = 2; this.radCloseWarnMultiple.TabStop = true; this.radCloseWarnMultiple.Text = "Warn me only when closing multiple connections"; @@ -221,7 +221,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.radCloseWarnExit.AutoSize = true; this.radCloseWarnExit.Location = new System.Drawing.Point(16, 80); this.radCloseWarnExit.Name = "radCloseWarnExit"; - this.radCloseWarnExit.Size = new System.Drawing.Size(216, 17); + this.radCloseWarnExit.Size = new System.Drawing.Size(233, 17); this.radCloseWarnExit.TabIndex = 3; this.radCloseWarnExit.TabStop = true; this.radCloseWarnExit.Text = "Warn me only when exiting mRemoteNG"; @@ -232,7 +232,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.radCloseWarnNever.AutoSize = true; this.radCloseWarnNever.Location = new System.Drawing.Point(16, 103); this.radCloseWarnNever.Name = "radCloseWarnNever"; - this.radCloseWarnNever.Size = new System.Drawing.Size(226, 17); + this.radCloseWarnNever.Size = new System.Drawing.Size(246, 17); this.radCloseWarnNever.TabIndex = 4; this.radCloseWarnNever.TabStop = true; this.radCloseWarnNever.Text = "Do not warn me when closing connections"; @@ -244,7 +244,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSaveConnectionsAfterEveryEdit.AutoSize = true; this.chkSaveConnectionsAfterEveryEdit.Location = new System.Drawing.Point(3, 72); this.chkSaveConnectionsAfterEveryEdit.Name = "chkSaveConnectionsAfterEveryEdit"; - this.chkSaveConnectionsAfterEveryEdit.Size = new System.Drawing.Size(185, 17); + this.chkSaveConnectionsAfterEveryEdit.Size = new System.Drawing.Size(194, 17); this.chkSaveConnectionsAfterEveryEdit.TabIndex = 7; this.chkSaveConnectionsAfterEveryEdit.Text = "Save connections after every edit"; this.chkSaveConnectionsAfterEveryEdit.UseVisualStyleBackColor = true; @@ -255,7 +255,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkUseFilterSearch.AutoSize = true; this.chkUseFilterSearch.Location = new System.Drawing.Point(3, 95); this.chkUseFilterSearch.Name = "chkUseFilterSearch"; - this.chkUseFilterSearch.Size = new System.Drawing.Size(214, 17); + this.chkUseFilterSearch.Size = new System.Drawing.Size(230, 17); this.chkUseFilterSearch.TabIndex = 8; this.chkUseFilterSearch.Text = "Filter search matches in connection tree"; this.chkUseFilterSearch.UseVisualStyleBackColor = true; @@ -286,7 +286,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkPlaceSearchBarAboveConnectionTree.AutoSize = true; this.chkPlaceSearchBarAboveConnectionTree.Location = new System.Drawing.Point(3, 118); this.chkPlaceSearchBarAboveConnectionTree.Name = "chkPlaceSearchBarAboveConnectionTree"; - this.chkPlaceSearchBarAboveConnectionTree.Size = new System.Drawing.Size(216, 17); + this.chkPlaceSearchBarAboveConnectionTree.Size = new System.Drawing.Size(226, 17); this.chkPlaceSearchBarAboveConnectionTree.TabIndex = 8; this.chkPlaceSearchBarAboveConnectionTree.Text = "Place search bar above connection tree"; this.chkPlaceSearchBarAboveConnectionTree.UseVisualStyleBackColor = true; @@ -303,6 +303,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.chkHostnameLikeDisplayName); this.Controls.Add(this.chkSingleClickOnOpenedConnectionSwitchesToIt); this.Controls.Add(this.pnlConfirmCloseConnection); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "ConnectionsPage"; this.Size = new System.Drawing.Size(610, 490); ((System.ComponentModel.ISupportInitialize)(this.numRDPConTimeout)).EndInit(); diff --git a/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.resx b/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/ConnectionsPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/frmOptions.Designer.cs b/mRemoteV1/UI/Forms/frmOptions.Designer.cs index 658526aa..9858aad7 100644 --- a/mRemoteV1/UI/Forms/frmOptions.Designer.cs +++ b/mRemoteV1/UI/Forms/frmOptions.Designer.cs @@ -135,7 +135,7 @@ this.PageName.ImageAspectName = "IconImage"; this.PageName.IsEditable = false; // - // frmOptions + // FrmOptions // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; @@ -150,7 +150,7 @@ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "frmOptions"; + this.Name = "FrmOptions"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "mRemoteNG Options"; diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 997e8117..c6c63fd5 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -816,6 +816,9 @@ FrmInputBox.cs + + ConnectionsPage.cs + ThemePage.cs From 1ad46b484f36eb2059f8af617beb216624319de3 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Wed, 2 Jan 2019 15:40:46 -0500 Subject: [PATCH 06/22] NGNumericUpDown Theming fix Fixes #1240 --- mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs index 4b6cec61..8a6ae2a2 100644 --- a/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs +++ b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs @@ -11,7 +11,7 @@ namespace mRemoteNG.UI.Controls.Base internal class NGNumericUpDown : NumericUpDown { - private ThemeManager _themeManager; + private readonly ThemeManager _themeManager; private NGButton Up; private NGButton Down; @@ -28,23 +28,42 @@ namespace mRemoteNG.UI.Controls.Base ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Foreground"); BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Background"); SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); - //Hide those nonthemable butons + if (Controls.Count > 0) - Controls[0].Hide(); + { + for (var i = 0; i < Controls.Count; i++) + { + //Remove those non-themable buttons + if (Controls[i].GetType().ToString().Equals("System.Windows.Forms.UpDownBase+UpDownButtons")) + Controls.Remove(Controls[i]); + + /* This is a bit of a hack. + * But if we have the buttons that we created already, redraw/return and don't add any more... + * + * OptionsPages are an example where the control is potentially created twice: + * AddOptionsPagesToListView and then LstOptionPages_SelectedIndexChanged + */ + if (!(Controls[i] is NGButton)) continue; + if (!Controls[i].Text.Equals("\u25B2") && !Controls[i].Text.Equals("\u25BC")) continue; + Invalidate(); + return; + } + } + //Add new themable buttons Up = new NGButton { Text = "\u25B2", - Font = new Font(Font.FontFamily, 6f) + Font = new Font(Font.FontFamily, 5f) }; - Up.SetBounds(Width - 17, 1, 16, Height / 2 - 1); + Up.SetBounds(Controls.Owner.Width - 17, 2, 16, Controls.Owner.Height / 2 - 1); Up.Click += Up_Click; Down = new NGButton { Text = "\u25BC", - Font = new Font(Font.FontFamily, 6f) + Font = new Font(Font.FontFamily, 5f) }; - Down.SetBounds(Width - 17, Height/2, 16, Height / 2 - 1); + Down.SetBounds(Controls.Owner.Width - 17, Controls.Owner.Height /2 + 1, 16, Controls.Owner.Height / 2 - 1); Down.Click += Down_Click; Controls.Add(Up); Controls.Add(Down); From 44c35c7fb38fb43d06e0f3822c651d096f235958 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Wed, 2 Jan 2019 16:06:28 -0500 Subject: [PATCH 07/22] changelog update --- CHANGELOG.TXT | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index c7375563..d19bed2c 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -13,6 +13,8 @@ Features/Enhancements: Fixes: ------ +#1245: Options form takes nearly 3 seconds to appear when Theming is active +#1240: Theming problem with NGNumericUpDown #1238: Connection panel not translated until opened for the first time #1186: Fixed several dialog boxes to use localized button text #1170: Prevent Options window from showing up in taskbar From c36d873636683166b14dd90cfd2fbd0fd43e3b54 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 09:21:58 -0500 Subject: [PATCH 08/22] clean up --- mRemoteV1/Tools/MultiSSHController.cs | 58 ++++++++++------------ mRemoteV1/UI/Controls/MultiSshToolStrip.cs | 9 ++-- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/mRemoteV1/Tools/MultiSSHController.cs b/mRemoteV1/Tools/MultiSSHController.cs index 25d2b08c..ffc14cdb 100644 --- a/mRemoteV1/Tools/MultiSSHController.cs +++ b/mRemoteV1/Tools/MultiSSHController.cs @@ -10,12 +10,12 @@ namespace mRemoteNG.Tools { public class MultiSSHController { - private ArrayList processHandlers = new ArrayList(); - private ArrayList quickConnectConnections = new ArrayList(); - private ArrayList previousCommands = new ArrayList(); - private int previousCommandIndex = 0; + private readonly ArrayList processHandlers = new ArrayList(); + private readonly ArrayList quickConnectConnections = new ArrayList(); + private readonly ArrayList previousCommands = new ArrayList(); + private int previousCommandIndex; - public int CommandHistoryLength { get; set; } = 100; + private int CommandHistoryLength { get; set; } = 100; public MultiSSHController(TextBox txtBox) { @@ -41,7 +41,7 @@ namespace mRemoteNG.Tools private ArrayList ProcessOpenConnections(ConnectionInfo connection) { - ArrayList handlers = new ArrayList(); + var handlers = new ArrayList(); foreach (ProtocolBase _base in connection.OpenConnections) { @@ -77,7 +77,7 @@ namespace mRemoteNG.Tools var connectionTreeConnections = Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveChildList().Where(item => item.OpenConnections.Count > 0); - foreach (ConnectionInfo connection in connectionTreeConnections) + foreach (var connection in connectionTreeConnections) { processHandlers.AddRange(ProcessOpenConnections(connection)); } @@ -85,8 +85,7 @@ namespace mRemoteNG.Tools private void processKeyPress(object sender, KeyEventArgs e) { - TextBox txtMultiSSH = sender as TextBox; - if (txtMultiSSH == null) return; + if (!(sender is TextBox txtMultiSSH)) return; if (processHandlers.Count == 0) { @@ -111,42 +110,37 @@ namespace mRemoteNG.Tools txtMultiSSH.Select(txtMultiSSH.TextLength, 0); } - if (e.Control == true && e.KeyCode != Keys.V && e.Alt == false) + if (e.Control && e.KeyCode != Keys.V && e.Alt == false) { SendAllKeystrokes(NativeMethods.WM_KEYDOWN, e.KeyValue); } - if (e.KeyCode == Keys.Enter) + if (e.KeyCode != Keys.Enter) return; + var strLine = txtMultiSSH.Text; + foreach (var chr1 in strLine) { - string strLine = txtMultiSSH.Text; - foreach (char chr1 in strLine) - { - SendAllKeystrokes(NativeMethods.WM_CHAR, Convert.ToByte(chr1)); - } - SendAllKeystrokes(NativeMethods.WM_KEYDOWN, 13); // Enter = char13 + SendAllKeystrokes(NativeMethods.WM_CHAR, Convert.ToByte(chr1)); } + SendAllKeystrokes(NativeMethods.WM_KEYDOWN, 13); // Enter = char13 } private void processKeyRelease(object sender, KeyEventArgs e) { - TextBox txtMultiSSH = sender as TextBox; - if (txtMultiSSH == null) return; + if (!(sender is TextBox txtMultiSSH)) return; - if (e.KeyCode == Keys.Enter) + if (e.KeyCode != Keys.Enter) return; + if (txtMultiSSH.Text.Trim() != "") { - if (txtMultiSSH.Text.Trim() != "") - { - previousCommands.Add(txtMultiSSH.Text.Trim()); - } - if (previousCommands.Count >= CommandHistoryLength) - { - previousCommands.RemoveAt(0); - } - - previousCommandIndex = previousCommands.Count - 1; - txtMultiSSH.Clear(); - } + previousCommands.Add(txtMultiSSH.Text.Trim()); } + if (previousCommands.Count >= CommandHistoryLength) + { + previousCommands.RemoveAt(0); + } + + previousCommandIndex = previousCommands.Count - 1; + txtMultiSSH.Clear(); + } #endregion } } diff --git a/mRemoteV1/UI/Controls/MultiSshToolStrip.cs b/mRemoteV1/UI/Controls/MultiSshToolStrip.cs index 2e0de653..4771d1e4 100644 --- a/mRemoteV1/UI/Controls/MultiSshToolStrip.cs +++ b/mRemoteV1/UI/Controls/MultiSshToolStrip.cs @@ -10,14 +10,13 @@ namespace mRemoteNG.UI.Controls private IContainer components; private ToolStripLabel _lblMultiSsh; private ToolStripTextBox _txtMultiSsh; - private MultiSSHController _multiSshController; - private readonly DisplayProperties _display; - private ThemeManager _themeManager; + // ReSharper disable once NotAccessedField.Local + private MultiSSHController _multiSshController; + private readonly ThemeManager _themeManager; public MultiSshToolStrip() { - _display = new DisplayProperties(); InitializeComponent(); _themeManager = ThemeManager.getInstance(); _themeManager.ThemeChanged += ApplyTheme; @@ -41,7 +40,7 @@ namespace mRemoteNG.UI.Controls // txtMultiSSH // _txtMultiSsh.Name = "_txtMultiSsh"; - _txtMultiSsh.Size = new System.Drawing.Size(_display.ScaleWidth(300), 25); + _txtMultiSsh.Size = new System.Drawing.Size(new DisplayProperties().ScaleWidth(300), 25); _txtMultiSsh.ToolTipText = "Press ENTER to send. Ctrl+C is sent immediately."; Items.AddRange(new ToolStripItem[] { From f8ed5b37ac27e0fd6e48c8a2c81321e1dec8071a Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 09:24:50 -0500 Subject: [PATCH 09/22] controls -> Segoe UI --- .../CredentialRecordComboBox.Designer.cs | 8 +- .../UI/Controls/CredentialRecordComboBox.resx | 123 +++++++++++ .../CredentialRecordListBox.Designer.cs | 8 +- .../UI/Controls/CredentialRecordListBox.resx | 123 +++++++++++ .../CredentialRecordListView.Designer.cs | 32 +-- .../CredentialRepositoryListView.Designer.cs | 14 +- mRemoteV1/UI/Controls/HeadlessTabControl.cs | 11 + mRemoteV1/UI/Controls/HeadlessTabControl.resx | 123 +++++++++++ mRemoteV1/UI/Controls/IPTextBox.cs | 205 +++++++++--------- .../NewPasswordWithVerification.Designer.cs | 17 +- .../UI/Controls/SecureTextBox.Designer.cs | 8 +- mRemoteV1/UI/Controls/SecureTextBox.resx | 123 +++++++++++ mRemoteV1/mRemoteV1.csproj | 12 + 13 files changed, 673 insertions(+), 134 deletions(-) create mode 100644 mRemoteV1/UI/Controls/CredentialRecordComboBox.resx create mode 100644 mRemoteV1/UI/Controls/CredentialRecordListBox.resx create mode 100644 mRemoteV1/UI/Controls/HeadlessTabControl.resx create mode 100644 mRemoteV1/UI/Controls/SecureTextBox.resx diff --git a/mRemoteV1/UI/Controls/CredentialRecordComboBox.Designer.cs b/mRemoteV1/UI/Controls/CredentialRecordComboBox.Designer.cs index 2c9dbf36..3877645d 100644 --- a/mRemoteV1/UI/Controls/CredentialRecordComboBox.Designer.cs +++ b/mRemoteV1/UI/Controls/CredentialRecordComboBox.Designer.cs @@ -28,7 +28,13 @@ /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + this.SuspendLayout(); + // + // CredentialRecordComboBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Controls/CredentialRecordComboBox.resx b/mRemoteV1/UI/Controls/CredentialRecordComboBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/CredentialRecordComboBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/CredentialRecordListBox.Designer.cs b/mRemoteV1/UI/Controls/CredentialRecordListBox.Designer.cs index 445bad9f..64574505 100644 --- a/mRemoteV1/UI/Controls/CredentialRecordListBox.Designer.cs +++ b/mRemoteV1/UI/Controls/CredentialRecordListBox.Designer.cs @@ -28,7 +28,13 @@ /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + this.SuspendLayout(); + // + // CredentialRecordListBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Controls/CredentialRecordListBox.resx b/mRemoteV1/UI/Controls/CredentialRecordListBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/CredentialRecordListBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/CredentialRecordListView.Designer.cs b/mRemoteV1/UI/Controls/CredentialRecordListView.Designer.cs index 44e7d785..cc002ab4 100644 --- a/mRemoteV1/UI/Controls/CredentialRecordListView.Designer.cs +++ b/mRemoteV1/UI/Controls/CredentialRecordListView.Designer.cs @@ -28,13 +28,13 @@ /// private void InitializeComponent() { - this.objectListView1 = new Base.NGListView(); - this.olvColumnCredentialId = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.objectListView1 = new mRemoteNG.UI.Controls.Base.NGListView(); this.olvColumnTitle = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnUsername = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnDomain = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.olvColumnRepositorySource = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.olvColumnCredentialId = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnRepositoryTitle = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.olvColumnRepositorySource = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); ((System.ComponentModel.ISupportInitialize)(this.objectListView1)).BeginInit(); this.SuspendLayout(); // @@ -55,6 +55,7 @@ this.objectListView1.CopySelectionOnControlC = false; this.objectListView1.CopySelectionOnControlCUsesDragSource = false; this.objectListView1.Cursor = System.Windows.Forms.Cursors.Default; + this.objectListView1.DecorateLines = true; this.objectListView1.Dock = System.Windows.Forms.DockStyle.Fill; this.objectListView1.FullRowSelect = true; this.objectListView1.HideSelection = false; @@ -68,14 +69,6 @@ this.objectListView1.UseNotifyPropertyChanged = true; this.objectListView1.View = System.Windows.Forms.View.Details; // - // olvColumnCredentialId - // - this.olvColumnCredentialId.AspectName = ""; - this.olvColumnCredentialId.DisplayIndex = 0; - this.olvColumnCredentialId.IsEditable = false; - this.olvColumnCredentialId.IsVisible = false; - this.olvColumnCredentialId.Text = "Credential ID"; - // // olvColumnTitle // this.olvColumnTitle.AspectName = ""; @@ -92,21 +85,30 @@ this.olvColumnDomain.AspectName = ""; this.olvColumnDomain.Text = "Domain"; // + // olvColumnCredentialId + // + this.olvColumnCredentialId.AspectName = ""; + this.olvColumnCredentialId.DisplayIndex = 0; + this.olvColumnCredentialId.IsEditable = false; + this.olvColumnCredentialId.IsVisible = false; + this.olvColumnCredentialId.Text = "Credential ID"; + // + // olvColumnRepositoryTitle + // + this.olvColumnRepositoryTitle.Text = "Repository Title"; + // // olvColumnRepositorySource // this.olvColumnRepositorySource.DisplayIndex = 4; this.olvColumnRepositorySource.IsVisible = false; this.olvColumnRepositorySource.Text = "Source"; // - // olvColumnRepositoryTitle - // - this.olvColumnRepositoryTitle.Text = "Repository Title"; - // // CredentialRecordListView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.objectListView1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "CredentialRecordListView"; this.Size = new System.Drawing.Size(367, 204); ((System.ComponentModel.ISupportInitialize)(this.objectListView1)).EndInit(); diff --git a/mRemoteV1/UI/Controls/CredentialRepositoryListView.Designer.cs b/mRemoteV1/UI/Controls/CredentialRepositoryListView.Designer.cs index 17599332..5195dfdb 100644 --- a/mRemoteV1/UI/Controls/CredentialRepositoryListView.Designer.cs +++ b/mRemoteV1/UI/Controls/CredentialRepositoryListView.Designer.cs @@ -15,12 +15,12 @@ /// private void InitializeComponent() { - this.objectListView1 = new Base.NGListView(); + this.objectListView1 = new mRemoteNG.UI.Controls.Base.NGListView(); this.olvColumnTitle = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnProvider = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnIsLoaded = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.olvColumnId = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.olvColumnSource = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.olvColumnId = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); ((System.ComponentModel.ISupportInitialize)(this.objectListView1)).BeginInit(); this.SuspendLayout(); // @@ -41,6 +41,7 @@ this.objectListView1.CopySelectionOnControlC = false; this.objectListView1.CopySelectionOnControlCUsesDragSource = false; this.objectListView1.Cursor = System.Windows.Forms.Cursors.Default; + this.objectListView1.DecorateLines = true; this.objectListView1.Dock = System.Windows.Forms.DockStyle.Fill; this.objectListView1.FullRowSelect = true; this.objectListView1.HideSelection = false; @@ -73,10 +74,6 @@ this.olvColumnIsLoaded.IsEditable = false; this.olvColumnIsLoaded.Text = "Loaded"; // - // olvColumnId - // - this.olvColumnId.Text = "ID"; - // // olvColumnSource // this.olvColumnSource.AspectName = ""; @@ -84,11 +81,16 @@ this.olvColumnSource.Groupable = false; this.olvColumnSource.Text = "Source"; // + // olvColumnId + // + this.olvColumnId.Text = "ID"; + // // CredentialRepositoryListView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.objectListView1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "CredentialRepositoryListView"; this.Size = new System.Drawing.Size(308, 171); ((System.ComponentModel.ISupportInitialize)(this.objectListView1)).EndInit(); diff --git a/mRemoteV1/UI/Controls/HeadlessTabControl.cs b/mRemoteV1/UI/Controls/HeadlessTabControl.cs index dd960bec..d9c821ba 100644 --- a/mRemoteV1/UI/Controls/HeadlessTabControl.cs +++ b/mRemoteV1/UI/Controls/HeadlessTabControl.cs @@ -14,5 +14,16 @@ namespace mRemoteNG.UI.Controls else base.WndProc(ref m); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // HeadlessTabControl + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/HeadlessTabControl.resx b/mRemoteV1/UI/Controls/HeadlessTabControl.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/HeadlessTabControl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/IPTextBox.cs b/mRemoteV1/UI/Controls/IPTextBox.cs index 7dad5a66..7fb4063b 100644 --- a/mRemoteV1/UI/Controls/IPTextBox.cs +++ b/mRemoteV1/UI/Controls/IPTextBox.cs @@ -101,126 +101,127 @@ namespace mRemoteNG.UI.Controls /// the contents of this method with the code editor. private void InitializeComponent() { - components = new System.ComponentModel.Container(); - panel1 = new Panel(); - label3 = new Base.NGLabel(); - label2 = new Base.NGLabel(); - Octet4 = new Base.NGTextBox(); - Octet3 = new Base.NGTextBox(); - Octet2 = new Base.NGTextBox(); - label1 = new Base.NGLabel(); - Octet1 = new Base.NGTextBox(); - toolTip1 = new System.Windows.Forms.ToolTip(components); - panel1.SuspendLayout(); - SuspendLayout(); + this.components = new System.ComponentModel.Container(); + this.panel1 = new System.Windows.Forms.Panel(); + this.Octet4 = new mRemoteNG.UI.Controls.Base.NGTextBox(); + this.Octet3 = new mRemoteNG.UI.Controls.Base.NGTextBox(); + this.Octet2 = new mRemoteNG.UI.Controls.Base.NGTextBox(); + this.Octet1 = new mRemoteNG.UI.Controls.Base.NGTextBox(); + this.label2 = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.label1 = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.label3 = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.panel1.SuspendLayout(); + this.SuspendLayout(); // // panel1 // - panel1.BackColor = System.Drawing.SystemColors.Window; - panel1.Controls.Add(Octet4); - panel1.Controls.Add(Octet3); - panel1.Controls.Add(Octet2); - panel1.Controls.Add(Octet1); - panel1.Controls.Add(label2); - panel1.Controls.Add(label1); - panel1.Controls.Add(label3); - panel1.Font = new System.Drawing.Font("Segoe UI", 9F); - panel1.Location = new System.Drawing.Point(0, 0); - panel1.Name = "panel1"; - panel1.Size = new System.Drawing.Size(124, 18); - panel1.TabIndex = 0; - // - // label3 - // - label3.Location = new System.Drawing.Point(23, 1); - label3.Name = "label3"; - label3.Size = new System.Drawing.Size(8, 13); - label3.TabIndex = 6; - label3.Text = "."; - // - // label2 - // - label2.Location = new System.Drawing.Point(86, 2); - label2.Name = "label2"; - label2.Size = new System.Drawing.Size(8, 13); - label2.TabIndex = 5; - label2.Text = "."; + this.panel1.BackColor = System.Drawing.SystemColors.Window; + this.panel1.Controls.Add(this.Octet4); + this.panel1.Controls.Add(this.Octet3); + this.panel1.Controls.Add(this.Octet2); + this.panel1.Controls.Add(this.Octet1); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.label3); + this.panel1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(124, 18); + this.panel1.TabIndex = 0; // // Octet4 // - Octet4.BackColor = System.Drawing.SystemColors.Menu; - Octet4.BorderStyle = System.Windows.Forms.BorderStyle.None; - Octet4.Font = new System.Drawing.Font("Segoe UI", 9F); - Octet4.Location = new System.Drawing.Point(95, 1); - Octet4.MaxLength = 3; - Octet4.Name = "Octet4"; - Octet4.Size = new System.Drawing.Size(24, 16); - Octet4.TabIndex = 4; - Octet4.TabStop = false; - Octet4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - Octet4.Enter += new System.EventHandler(Box_Enter); - Octet4.KeyPress += new System.Windows.Forms.KeyPressEventHandler(Box4_KeyPress); + this.Octet4.BackColor = System.Drawing.SystemColors.Menu; + this.Octet4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Octet4.Font = new System.Drawing.Font("Segoe UI", 9F); + this.Octet4.Location = new System.Drawing.Point(95, 1); + this.Octet4.MaxLength = 3; + this.Octet4.Name = "Octet4"; + this.Octet4.Size = new System.Drawing.Size(24, 16); + this.Octet4.TabIndex = 4; + this.Octet4.TabStop = false; + this.Octet4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.Octet4.Enter += new System.EventHandler(this.Box_Enter); + this.Octet4.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box4_KeyPress); // // Octet3 // - Octet3.BackColor = System.Drawing.SystemColors.Menu; - Octet3.BorderStyle = System.Windows.Forms.BorderStyle.None; - Octet3.Font = new System.Drawing.Font("Segoe UI", 9F); - Octet3.Location = new System.Drawing.Point(63, 1); - Octet3.MaxLength = 3; - Octet3.Name = "Octet3"; - Octet3.Size = new System.Drawing.Size(24, 16); - Octet3.TabIndex = 3; - Octet3.TabStop = false; - Octet3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - Octet3.Enter += new System.EventHandler(Box_Enter); - Octet3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(Box3_KeyPress); + this.Octet3.BackColor = System.Drawing.SystemColors.Menu; + this.Octet3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Octet3.Font = new System.Drawing.Font("Segoe UI", 9F); + this.Octet3.Location = new System.Drawing.Point(63, 1); + this.Octet3.MaxLength = 3; + this.Octet3.Name = "Octet3"; + this.Octet3.Size = new System.Drawing.Size(24, 16); + this.Octet3.TabIndex = 3; + this.Octet3.TabStop = false; + this.Octet3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.Octet3.Enter += new System.EventHandler(this.Box_Enter); + this.Octet3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box3_KeyPress); // // Octet2 // - Octet2.BackColor = System.Drawing.SystemColors.Menu; - Octet2.BorderStyle = System.Windows.Forms.BorderStyle.None; - Octet2.Font = new System.Drawing.Font("Segoe UI", 9F); - Octet2.Location = new System.Drawing.Point(32, 1); - Octet2.MaxLength = 3; - Octet2.Name = "Octet2"; - Octet2.Size = new System.Drawing.Size(24, 16); - Octet2.TabIndex = 2; - Octet2.TabStop = false; - Octet2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - Octet2.Enter += new System.EventHandler(Box_Enter); - Octet2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(Box2_KeyPress); - // - // label1 - // - label1.Location = new System.Drawing.Point(55, 2); - label1.Name = "label1"; - label1.Size = new System.Drawing.Size(8, 13); - label1.TabIndex = 1; - label1.Text = "."; + this.Octet2.BackColor = System.Drawing.SystemColors.Menu; + this.Octet2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Octet2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.Octet2.Location = new System.Drawing.Point(32, 1); + this.Octet2.MaxLength = 3; + this.Octet2.Name = "Octet2"; + this.Octet2.Size = new System.Drawing.Size(24, 16); + this.Octet2.TabIndex = 2; + this.Octet2.TabStop = false; + this.Octet2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.Octet2.Enter += new System.EventHandler(this.Box_Enter); + this.Octet2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box2_KeyPress); // // Octet1 // - Octet1.BackColor = System.Drawing.SystemColors.Menu; - Octet1.BorderStyle = System.Windows.Forms.BorderStyle.None; - Octet1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - Octet1.Location = new System.Drawing.Point(1, 1); - Octet1.MaxLength = 3; - Octet1.Name = "Octet1"; - Octet1.Size = new System.Drawing.Size(24, 16); - Octet1.TabIndex = 1; - Octet1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - Octet1.Enter += new System.EventHandler(Box_Enter); - Octet1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(Box1_KeyPress); + this.Octet1.BackColor = System.Drawing.SystemColors.Menu; + this.Octet1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Octet1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Octet1.Location = new System.Drawing.Point(1, 1); + this.Octet1.MaxLength = 3; + this.Octet1.Name = "Octet1"; + this.Octet1.Size = new System.Drawing.Size(24, 16); + this.Octet1.TabIndex = 1; + this.Octet1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.Octet1.Enter += new System.EventHandler(this.Box_Enter); + this.Octet1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Box1_KeyPress); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(86, 2); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(8, 13); + this.label2.TabIndex = 5; + this.label2.Text = "."; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(55, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(8, 13); + this.label1.TabIndex = 1; + this.label1.Text = "."; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(23, 1); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(8, 13); + this.label3.TabIndex = 6; + this.label3.Text = "."; // // IPTextBox // - Controls.Add(panel1); - Name = "IPTextBox"; - Size = new System.Drawing.Size(124, 18); - panel1.ResumeLayout(false); - panel1.PerformLayout(); - ResumeLayout(false); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "IPTextBox"; + this.Size = new System.Drawing.Size(124, 18); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); } #endregion diff --git a/mRemoteV1/UI/Controls/NewPasswordWithVerification.Designer.cs b/mRemoteV1/UI/Controls/NewPasswordWithVerification.Designer.cs index 58378b86..fcf158b4 100644 --- a/mRemoteV1/UI/Controls/NewPasswordWithVerification.Designer.cs +++ b/mRemoteV1/UI/Controls/NewPasswordWithVerification.Designer.cs @@ -28,9 +28,9 @@ /// private void InitializeComponent() { - this.labelFirstPasswordBox = new Controls.Base.NGLabel(); - this.labelSecondPasswordBox = new Controls.Base.NGLabel(); - this.labelPasswordsDontMatch = new Controls.Base.NGLabel(); + this.labelFirstPasswordBox = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.labelSecondPasswordBox = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.labelPasswordsDontMatch = new mRemoteNG.UI.Controls.Base.NGLabel(); this.imgError = new System.Windows.Forms.PictureBox(); this.secureTextBox2 = new mRemoteNG.UI.Controls.SecureTextBox(); this.secureTextBox1 = new mRemoteNG.UI.Controls.SecureTextBox(); @@ -42,7 +42,7 @@ this.labelFirstPasswordBox.AutoSize = true; this.labelFirstPasswordBox.Location = new System.Drawing.Point(-3, 0); this.labelFirstPasswordBox.Name = "labelFirstPasswordBox"; - this.labelFirstPasswordBox.Size = new System.Drawing.Size(78, 13); + this.labelFirstPasswordBox.Size = new System.Drawing.Size(82, 13); this.labelFirstPasswordBox.TabIndex = 2; this.labelFirstPasswordBox.Text = "New Password"; // @@ -51,7 +51,7 @@ this.labelSecondPasswordBox.AutoSize = true; this.labelSecondPasswordBox.Location = new System.Drawing.Point(-3, 42); this.labelSecondPasswordBox.Name = "labelSecondPasswordBox"; - this.labelSecondPasswordBox.Size = new System.Drawing.Size(79, 13); + this.labelSecondPasswordBox.Size = new System.Drawing.Size(84, 13); this.labelSecondPasswordBox.TabIndex = 3; this.labelSecondPasswordBox.Text = "VerifyPassword"; // @@ -60,7 +60,7 @@ this.labelPasswordsDontMatch.AutoSize = true; this.labelPasswordsDontMatch.Location = new System.Drawing.Point(23, 83); this.labelPasswordsDontMatch.Name = "labelPasswordsDontMatch"; - this.labelPasswordsDontMatch.Size = new System.Drawing.Size(123, 13); + this.labelPasswordsDontMatch.Size = new System.Drawing.Size(133, 13); this.labelPasswordsDontMatch.TabIndex = 4; this.labelPasswordsDontMatch.Text = "Passwords do not match"; this.labelPasswordsDontMatch.Visible = false; @@ -81,7 +81,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.secureTextBox2.Location = new System.Drawing.Point(0, 58); this.secureTextBox2.Name = "secureTextBox2"; - this.secureTextBox2.Size = new System.Drawing.Size(193, 20); + this.secureTextBox2.Size = new System.Drawing.Size(193, 22); this.secureTextBox2.TabIndex = 1; // // secureTextBox1 @@ -90,7 +90,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.secureTextBox1.Location = new System.Drawing.Point(0, 16); this.secureTextBox1.Name = "secureTextBox1"; - this.secureTextBox1.Size = new System.Drawing.Size(193, 20); + this.secureTextBox1.Size = new System.Drawing.Size(193, 22); this.secureTextBox1.TabIndex = 0; // // NewPasswordWithVerification @@ -103,6 +103,7 @@ this.Controls.Add(this.labelFirstPasswordBox); this.Controls.Add(this.secureTextBox2); this.Controls.Add(this.secureTextBox1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.MinimumSize = new System.Drawing.Size(0, 100); this.Name = "NewPasswordWithVerification"; this.Size = new System.Drawing.Size(193, 100); diff --git a/mRemoteV1/UI/Controls/SecureTextBox.Designer.cs b/mRemoteV1/UI/Controls/SecureTextBox.Designer.cs index c0e72fce..5e7f73fa 100644 --- a/mRemoteV1/UI/Controls/SecureTextBox.Designer.cs +++ b/mRemoteV1/UI/Controls/SecureTextBox.Designer.cs @@ -36,7 +36,13 @@ /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + this.SuspendLayout(); + // + // SecureTextBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Controls/SecureTextBox.resx b/mRemoteV1/UI/Controls/SecureTextBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/SecureTextBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index c6c63fd5..2cf997f1 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -787,18 +787,30 @@ ColorMapTheme.Designer.cs mRemoteNG + + CredentialRecordComboBox.cs + + + CredentialRecordListBox.cs + CredentialRecordListView.cs CredentialRepositoryListView.cs + + HeadlessTabControl.cs + IPTextBox.cs NewPasswordWithVerification.cs + + SecureTextBox.cs + FrmChoosePanel.cs Designer From e442cacf5f2004f5d39b4b85716ae30a8a4c5eef Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 09:28:48 -0500 Subject: [PATCH 10/22] Controls.Base -> Segoe UI --- mRemoteV1/UI/Controls/Base/NGButton.cs | 11 ++ mRemoteV1/UI/Controls/Base/NGButton.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGCheckBox.cs | 11 ++ mRemoteV1/UI/Controls/Base/NGCheckBox.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGComboBox.cs | 11 ++ mRemoteV1/UI/Controls/Base/NGComboBox.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGGroupBox.cs | 13 +- mRemoteV1/UI/Controls/Base/NGGroupBox.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGLabel.cs | 13 +- mRemoteV1/UI/Controls/Base/NGLabel.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGListView.cs | 13 ++ mRemoteV1/UI/Controls/Base/NGListView.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs | 13 +- .../UI/Controls/Base/NGNumericUpDown.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGRadioButton.cs | 11 ++ mRemoteV1/UI/Controls/Base/NGRadioButton.resx | 123 ++++++++++++++++++ mRemoteV1/UI/Controls/Base/NGTextBox.cs | 11 +- mRemoteV1/UI/Controls/Base/NGTextBox.resx | 123 ++++++++++++++++++ mRemoteV1/mRemoteV1.csproj | 27 ++++ 19 files changed, 1237 insertions(+), 4 deletions(-) create mode 100644 mRemoteV1/UI/Controls/Base/NGButton.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGCheckBox.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGComboBox.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGGroupBox.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGLabel.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGListView.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGNumericUpDown.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGRadioButton.resx create mode 100644 mRemoteV1/UI/Controls/Base/NGTextBox.resx diff --git a/mRemoteV1/UI/Controls/Base/NGButton.cs b/mRemoteV1/UI/Controls/Base/NGButton.cs index 5403d93d..c4f266a3 100644 --- a/mRemoteV1/UI/Controls/Base/NGButton.cs +++ b/mRemoteV1/UI/Controls/Base/NGButton.cs @@ -128,5 +128,16 @@ namespace mRemoteNG.UI.Controls.Base } TextRenderer.DrawText(e.Graphics, Text, Font, ClientRectangle, fore, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGButton + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGButton.resx b/mRemoteV1/UI/Controls/Base/NGButton.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGButton.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGCheckBox.cs b/mRemoteV1/UI/Controls/Base/NGCheckBox.cs index 1902e382..393d15a5 100644 --- a/mRemoteV1/UI/Controls/Base/NGCheckBox.cs +++ b/mRemoteV1/UI/Controls/Base/NGCheckBox.cs @@ -120,6 +120,17 @@ namespace mRemoteNG.UI.Controls.Base var textRect = new Rectangle(_textXCoord, 0, Width - 16, Height); TextRenderer.DrawText(e.Graphics, Text, Font, textRect, fore, Parent.BackColor, TextFormatFlags.PathEllipsis); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGCheckBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGCheckBox.resx b/mRemoteV1/UI/Controls/Base/NGCheckBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGCheckBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGComboBox.cs b/mRemoteV1/UI/Controls/Base/NGComboBox.cs index 4163aade..5a9f6903 100644 --- a/mRemoteV1/UI/Controls/Base/NGComboBox.cs +++ b/mRemoteV1/UI/Controls/Base/NGComboBox.cs @@ -135,5 +135,16 @@ namespace mRemoteNG.UI.Controls.Base var textRect = new Rectangle(2, 2, Width - 20, Height - 4); TextRenderer.DrawText(e.Graphics, Text, Font, textRect, Fore, Back, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGComboBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGComboBox.resx b/mRemoteV1/UI/Controls/Base/NGComboBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGComboBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGGroupBox.cs b/mRemoteV1/UI/Controls/Base/NGGroupBox.cs index 3d369529..8b52dbb8 100644 --- a/mRemoteV1/UI/Controls/Base/NGGroupBox.cs +++ b/mRemoteV1/UI/Controls/Base/NGGroupBox.cs @@ -86,6 +86,17 @@ namespace mRemoteNG.UI.Controls.Base e.Graphics.DrawLine(pen, bounds.Width - Padding.Right, num - Padding.Top, bounds.Width - Padding.Right, bounds.Height - Padding.Bottom); } RaisePaintEvent(this, e); - } + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGGroupBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGGroupBox.resx b/mRemoteV1/UI/Controls/Base/NGGroupBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGGroupBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGLabel.cs b/mRemoteV1/UI/Controls/Base/NGLabel.cs index 47bb5f52..987bc55d 100644 --- a/mRemoteV1/UI/Controls/Base/NGLabel.cs +++ b/mRemoteV1/UI/Controls/Base/NGLabel.cs @@ -96,6 +96,17 @@ namespace mRemoteNG.UI.Controls.Base var disabledtextLabel = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Disabled_Foreground"); TextRenderer.DrawText(e.Graphics, Text, Font, ClientRectangle, disabledtextLabel, _textFormatFlags); } - } + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGLabel + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGLabel.resx b/mRemoteV1/UI/Controls/Base/NGLabel.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGLabel.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGListView.cs b/mRemoteV1/UI/Controls/Base/NGListView.cs index 35c69c7a..3c551d73 100644 --- a/mRemoteV1/UI/Controls/Base/NGListView.cs +++ b/mRemoteV1/UI/Controls/Base/NGListView.cs @@ -66,5 +66,18 @@ namespace mRemoteNG.UI.Controls.Base e.SubItem.Decoration = deco; } } + + private void InitializeComponent() + { + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + this.SuspendLayout(); + // + // NGListView + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGListView.resx b/mRemoteV1/UI/Controls/Base/NGListView.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGListView.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs index 8a6ae2a2..532470e1 100644 --- a/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs +++ b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.cs @@ -110,6 +110,17 @@ namespace mRemoteNG.UI.Controls.Base e.Graphics.DrawRectangle(new Pen(_themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Border"), 1), 0, 0, Width - 1, Height - 1); } - + private void InitializeComponent() + { + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + this.SuspendLayout(); + // + // NGNumericUpDown + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGNumericUpDown.resx b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGNumericUpDown.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGRadioButton.cs b/mRemoteV1/UI/Controls/Base/NGRadioButton.cs index e4a7949c..fc16b226 100644 --- a/mRemoteV1/UI/Controls/Base/NGRadioButton.cs +++ b/mRemoteV1/UI/Controls/Base/NGRadioButton.cs @@ -119,5 +119,16 @@ namespace mRemoteNG.UI.Controls.Base g.FillEllipse(new SolidBrush(center), _circleSmall); g.DrawEllipse(new Pen(outline), _circle); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGRadioButton + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGRadioButton.resx b/mRemoteV1/UI/Controls/Base/NGRadioButton.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGRadioButton.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGTextBox.cs b/mRemoteV1/UI/Controls/Base/NGTextBox.cs index 0d51c25e..0356bf1d 100644 --- a/mRemoteV1/UI/Controls/Base/NGTextBox.cs +++ b/mRemoteV1/UI/Controls/Base/NGTextBox.cs @@ -50,6 +50,15 @@ namespace mRemoteNG.UI.Controls.Base Invalidate(); } - + private void InitializeComponent() + { + this.SuspendLayout(); + // + // NGTextBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Controls/Base/NGTextBox.resx b/mRemoteV1/UI/Controls/Base/NGTextBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/Base/NGTextBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 2cf997f1..c1c109d2 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -787,6 +787,33 @@ ColorMapTheme.Designer.cs mRemoteNG + + NGButton.cs + + + NGCheckBox.cs + + + NGComboBox.cs + + + NGGroupBox.cs + + + NGLabel.cs + + + NGListView.cs + + + NGNumericUpDown.cs + + + NGRadioButton.cs + + + NGTextBox.cs + CredentialRecordComboBox.cs From d87283b7d7686b9d6927e29ea3a60fa5fe7431b8 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:09:17 -0500 Subject: [PATCH 11/22] UI.ConnTree -> Segoe UI --- .../ConnectionTree/ConnectionTree.Designer.cs | 10 +- .../Controls/ConnectionTree/ConnectionTree.cs | 38 +++--- .../ConnectionTree/ConnectionTree.resx | 123 ++++++++++++++++++ .../ConnectionTreeSearchTextFilter.cs | 12 +- 4 files changed, 151 insertions(+), 32 deletions(-) create mode 100644 mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.resx diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.Designer.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.Designer.cs index 637ff174..f8c8d7b0 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.Designer.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.Designer.cs @@ -15,7 +15,15 @@ /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); + this.SuspendLayout(); + // + // ConnectionTree + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs index 14615af5..cfa2edb9 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -109,15 +109,13 @@ namespace mRemoteNG.UI.Controls { Collapsed += (sender, args) => { - var container = args.Model as ContainerInfo; - if (container == null) return; + if (!(args.Model is ContainerInfo container)) return; container.IsExpanded = false; AutoResizeColumn(Columns[0]); }; Expanded += (sender, args) => { - var container = args.Model as ContainerInfo; - if (container == null) return; + if (!(args.Model is ContainerInfo container)) return; container.IsExpanded = true; AutoResizeColumn(Columns[0]); }; @@ -204,8 +202,7 @@ namespace mRemoteNG.UI.Controls return; } - var senderAsConnectionInfo = sender as ConnectionInfo; - if (senderAsConnectionInfo == null) + if (!(sender is ConnectionInfo senderAsConnectionInfo)) return; RefreshObject(senderAsConnectionInfo); @@ -309,11 +306,9 @@ namespace mRemoteNG.UI.Controls public void RenameSelectedNode() { - if (SelectedItem != null) - { - _allowEdit = true; - SelectedItem.BeginEdit(); - } + if (SelectedItem == null) return; + _allowEdit = true; + SelectedItem.BeginEdit(); } public void DeleteSelectedNode() @@ -335,8 +330,7 @@ namespace mRemoteNG.UI.Controls Runtime.ConnectionsService.BeginBatchingSaves(); - var sortTargetAsContainer = sortTarget as ContainerInfo; - if (sortTargetAsContainer != null) + if (sortTarget is ContainerInfo sortTargetAsContainer) sortTargetAsContainer.SortRecursive(sortDirection); else SelectedNode.Parent.SortRecursive(sortDirection); @@ -389,12 +383,10 @@ namespace mRemoteNG.UI.Controls AutoResizeColumn(Columns[0]); // turn filtering back on - if (filteringEnabled) - { - ModelFilter = filter; - UpdateFiltering(); - } - } + if (!filteringEnabled) return; + ModelFilter = filter; + UpdateFiltering(); + } protected override void UpdateFiltering() { @@ -417,20 +409,20 @@ namespace mRemoteNG.UI.Controls private void OnMouse_DoubleClick(object sender, MouseEventArgs mouseEventArgs) { if (mouseEventArgs.Clicks < 2) return; + // ReSharper disable once NotAccessedVariable OLVColumn column; var listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - var clickedNode = listItem?.RowObject as ConnectionInfo; - if (clickedNode == null) return; + if (!(listItem?.RowObject is ConnectionInfo clickedNode)) return; DoubleClickHandler.Execute(clickedNode); } private void OnMouse_SingleClick(object sender, MouseEventArgs mouseEventArgs) { if (mouseEventArgs.Clicks > 1) return; + // ReSharper disable once NotAccessedVariable OLVColumn column; var listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - var clickedNode = listItem?.RowObject as ConnectionInfo; - if (clickedNode == null) return; + if (!(listItem?.RowObject is ConnectionInfo clickedNode)) return; SingleClickHandler.Execute(clickedNode); } diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.resx b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs index 82e38858..425c329d 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs @@ -17,8 +17,7 @@ namespace mRemoteNG.UI.Controls public bool Filter(object modelObject) { - var objectAsConnectionInfo = modelObject as ConnectionInfo; - if (objectAsConnectionInfo == null) + if (!(modelObject is ConnectionInfo objectAsConnectionInfo)) return false; if (SpecialInclusionList.Contains(objectAsConnectionInfo)) @@ -26,12 +25,9 @@ namespace mRemoteNG.UI.Controls var filterTextLower = FilterText.ToLowerInvariant(); - if (objectAsConnectionInfo.Name.ToLowerInvariant().Contains(filterTextLower) || - objectAsConnectionInfo.Hostname.ToLowerInvariant().Contains(filterTextLower) || - objectAsConnectionInfo.Description.ToLowerInvariant().Contains(filterTextLower)) - return true; - - return false; + return objectAsConnectionInfo.Name.ToLowerInvariant().Contains(filterTextLower) || + objectAsConnectionInfo.Hostname.ToLowerInvariant().Contains(filterTextLower) || + objectAsConnectionInfo.Description.ToLowerInvariant().Contains(filterTextLower); } } } From 9e962b468eb308251a3308ee002a32bb45eed907 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:11:08 -0500 Subject: [PATCH 12/22] FilteredPropertyGrid -> Segoe UI --- .../FilteredPropertyGrid.cs | 28 ++-- .../FilteredPropertyGrid.designer.cs | 9 +- .../FilteredPropertyGrid.resx | 123 ++++++++++++++++++ mRemoteV1/mRemoteV1.csproj | 6 + 4 files changed, 149 insertions(+), 17 deletions(-) create mode 100644 mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.resx diff --git a/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs index 127654ba..57c74538 100644 --- a/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs +++ b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs @@ -50,8 +50,8 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid public IEnumerable VisibleProperties => _propertyDescriptors.Select(p => p.Name); public new AttributeCollection BrowsableAttributes { - get { return _browsableAttributes; } - set { + get => _browsableAttributes; + set { if (_browsableAttributes == value) return; _hiddenAttributes = null; _browsableAttributes = value; @@ -63,8 +63,8 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// Get or set the categories to hide. /// public AttributeCollection HiddenAttributes { - get { return _hiddenAttributes; } - set { + get => _hiddenAttributes; + set { if (value == _hiddenAttributes) return; _hiddenAttributes = value; _browsableAttributes = null; @@ -77,8 +77,8 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// /// if one or several properties don't exist. public string[] BrowsableProperties { - get { return _mBrowsableProperties; } - set { + get => _mBrowsableProperties; + set { if (value == _mBrowsableProperties) return; _mBrowsableProperties = value; RefreshProperties(); @@ -87,8 +87,8 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// Get or set the properties to hide. public string[] HiddenProperties { - get { return _mHiddenProperties; } - set { + get => _mHiddenProperties; + set { if (value == _mHiddenProperties) return; _mHiddenProperties = value; RefreshProperties(); @@ -100,13 +100,11 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// /// The object passed to the base PropertyGrid is the wrapper. public new object SelectedObject { - get - { - return _mWrapper != null - ? ((ObjectWrapper)base.SelectedObject).SelectedObject - : null; - } - set { + get => + _mWrapper != null + ? ((ObjectWrapper)base.SelectedObject).SelectedObject + : null; + set { // Set the new object to the wrapper and create one if necessary. if(_mWrapper == null) { diff --git a/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.designer.cs b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.designer.cs index 586b8813..1113c99d 100644 --- a/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.designer.cs +++ b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.designer.cs @@ -25,8 +25,13 @@ /// the contents of this method with the code editor. /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.SuspendLayout(); + // + // FilteredPropertyGrid + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.resx b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index c1c109d2..d0e53cff 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -814,6 +814,9 @@ NGTextBox.cs + + ConnectionTree.cs + CredentialRecordComboBox.cs @@ -826,6 +829,9 @@ CredentialRepositoryListView.cs + + FilteredPropertyGrid.cs + HeadlessTabControl.cs From 3dcb0b2c69d2cc4fec6690dfee36f5b16de46f3a Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:20:10 -0500 Subject: [PATCH 13/22] PageSequence -> Segoe UI and some cleanup --- .../UI/Controls/PageSequence/PageSequence.cs | 4 +- .../Controls/PageSequence/SequencedControl.cs | 13 ++ .../PageSequence/SequencedControl.resx | 120 ++++++++++++++++++ .../SequencedPageReplcementRequestArgs.cs | 4 +- 4 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 mRemoteV1/UI/Controls/PageSequence/SequencedControl.resx diff --git a/mRemoteV1/UI/Controls/PageSequence/PageSequence.cs b/mRemoteV1/UI/Controls/PageSequence/PageSequence.cs index dca897c0..2384518e 100644 --- a/mRemoteV1/UI/Controls/PageSequence/PageSequence.cs +++ b/mRemoteV1/UI/Controls/PageSequence/PageSequence.cs @@ -19,12 +19,10 @@ namespace mRemoteNG.UI.Controls.PageSequence public PageSequence(Control pageContainer, params SequencedControl[] pages) { - if (pageContainer == null) - throw new ArgumentNullException(nameof(pageContainer)); if (pages == null) throw new ArgumentNullException(nameof(pages)); - _pageContainer = pageContainer; + _pageContainer = pageContainer ?? throw new ArgumentNullException(nameof(pageContainer)); foreach (var page in pages) { SubscribeToPageEvents(page); diff --git a/mRemoteV1/UI/Controls/PageSequence/SequencedControl.cs b/mRemoteV1/UI/Controls/PageSequence/SequencedControl.cs index 8a9111d0..f503f997 100644 --- a/mRemoteV1/UI/Controls/PageSequence/SequencedControl.cs +++ b/mRemoteV1/UI/Controls/PageSequence/SequencedControl.cs @@ -12,6 +12,7 @@ namespace mRemoteNG.UI.Controls.PageSequence public SequencedControl() { Themes.ThemeManager.getInstance().ThemeChanged += ApplyTheme; + InitializeComponent(); } protected virtual void RaiseNextPageEvent() @@ -35,5 +36,17 @@ namespace mRemoteNG.UI.Controls.PageSequence { PageReplacementRequested?.Invoke(this, new SequencedPageReplcementRequestArgs(control, pagetoReplace)); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // SequencedControl + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "SequencedControl"; + this.ResumeLayout(false); + + } } } \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/PageSequence/SequencedControl.resx b/mRemoteV1/UI/Controls/PageSequence/SequencedControl.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Controls/PageSequence/SequencedControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/PageSequence/SequencedPageReplcementRequestArgs.cs b/mRemoteV1/UI/Controls/PageSequence/SequencedPageReplcementRequestArgs.cs index 5c5d4327..4cd85108 100644 --- a/mRemoteV1/UI/Controls/PageSequence/SequencedPageReplcementRequestArgs.cs +++ b/mRemoteV1/UI/Controls/PageSequence/SequencedPageReplcementRequestArgs.cs @@ -18,9 +18,7 @@ namespace mRemoteNG.UI.Controls.PageSequence public SequencedPageReplcementRequestArgs(SequencedControl newControl, RelativePagePosition pageToReplace) { - if (newControl == null) - throw new ArgumentNullException(nameof(newControl)); - NewControl = newControl; + NewControl = newControl ?? throw new ArgumentNullException(nameof(newControl)); PagePosition = pageToReplace; } } From 62f734717835aa78c31590b3e1aeadc28e36e641 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:24:04 -0500 Subject: [PATCH 14/22] Forms -> Segoe UI --- .../UI/Forms/Input/FrmInputBox.Designer.cs | 3 +- .../OptionsPages/AdvancedPage.Designer.cs | 15 ++- .../UI/Forms/OptionsPages/AdvancedPage.resx | 120 +++++++++++++++++ .../OptionsPages/AppearancePage.Designer.cs | 13 +- .../UI/Forms/OptionsPages/AppearancePage.resx | 120 +++++++++++++++++ .../OptionsPages/CredentialsPage.Designer.cs | 15 ++- .../Forms/OptionsPages/CredentialsPage.resx | 120 +++++++++++++++++ .../NotificationsPage.Designer.cs | 51 ++++---- .../Forms/OptionsPages/NotificationsPage.resx | 123 ++++++++++++++++++ .../UI/Forms/OptionsPages/OptionsPage.cs | 12 ++ .../UI/Forms/OptionsPages/OptionsPage.resx | 120 +++++++++++++++++ .../OptionsPages/SecurityPage.Designer.cs | 11 +- .../UI/Forms/OptionsPages/SecurityPage.resx | 120 +++++++++++++++++ .../OptionsPages/SqlServerPage.Designer.cs | 13 +- .../UI/Forms/OptionsPages/SqlServerPage.resx | 120 +++++++++++++++++ .../OptionsPages/StartupExitPage.Designer.cs | 9 +- .../Forms/OptionsPages/StartupExitPage.resx | 120 +++++++++++++++++ .../OptionsPages/TabsPanelsPage.Designer.cs | 21 +-- .../UI/Forms/OptionsPages/TabsPanelsPage.resx | 120 +++++++++++++++++ .../Forms/OptionsPages/ThemePage.Designer.cs | 1 + .../OptionsPages/UpdatesPage.Designer.cs | 17 +-- .../UI/Forms/OptionsPages/UpdatesPage.resx | 120 +++++++++++++++++ mRemoteV1/mRemoteV1.csproj | 33 +++++ 23 files changed, 1338 insertions(+), 79 deletions(-) create mode 100644 mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/AppearancePage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/OptionsPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/SecurityPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.resx create mode 100644 mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.resx diff --git a/mRemoteV1/UI/Forms/Input/FrmInputBox.Designer.cs b/mRemoteV1/UI/Forms/Input/FrmInputBox.Designer.cs index 6e5b7532..daf744f8 100644 --- a/mRemoteV1/UI/Forms/Input/FrmInputBox.Designer.cs +++ b/mRemoteV1/UI/Forms/Input/FrmInputBox.Designer.cs @@ -87,7 +87,7 @@ this.textBox.Dock = System.Windows.Forms.DockStyle.Fill; this.textBox.Location = new System.Drawing.Point(3, 27); this.textBox.Name = "textBox"; - this.textBox.Size = new System.Drawing.Size(278, 20); + this.textBox.Size = new System.Drawing.Size(278, 22); this.textBox.TabIndex = 2; // // label @@ -110,6 +110,7 @@ this.ControlBox = false; this.Controls.Add(this.tableLayoutPanel1); this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; diff --git a/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.Designer.cs index 3c365e58..bb837bc3 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.Designer.cs @@ -53,7 +53,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkAutomaticallyGetSessionInfo.AutoSize = true; this.chkAutomaticallyGetSessionInfo.Location = new System.Drawing.Point(3, 3); this.chkAutomaticallyGetSessionInfo.Name = "chkAutomaticallyGetSessionInfo"; - this.chkAutomaticallyGetSessionInfo.Size = new System.Drawing.Size(198, 17); + this.chkAutomaticallyGetSessionInfo.Size = new System.Drawing.Size(220, 17); this.chkAutomaticallyGetSessionInfo.TabIndex = 0; this.chkAutomaticallyGetSessionInfo.Text = "Automatically get session information"; this.chkAutomaticallyGetSessionInfo.UseVisualStyleBackColor = true; @@ -73,7 +73,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkAutomaticReconnect.AutoSize = true; this.chkAutomaticReconnect.Location = new System.Drawing.Point(3, 26); this.chkAutomaticReconnect.Name = "chkAutomaticReconnect"; - this.chkAutomaticReconnect.Size = new System.Drawing.Size(399, 17); + this.chkAutomaticReconnect.Size = new System.Drawing.Size(430, 17); this.chkAutomaticReconnect.TabIndex = 1; this.chkAutomaticReconnect.Text = "Automatically try to reconnect when disconnected from server (RDP && ICA only)"; this.chkAutomaticReconnect.UseVisualStyleBackColor = true; @@ -88,7 +88,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numPuttyWaitTime.Name = "numPuttyWaitTime"; - this.numPuttyWaitTime.Size = new System.Drawing.Size(49, 20); + this.numPuttyWaitTime.Size = new System.Drawing.Size(49, 22); this.numPuttyWaitTime.TabIndex = 7; this.numPuttyWaitTime.Value = new decimal(new int[] { 5, @@ -127,7 +127,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numUVNCSCPort.Name = "numUVNCSCPort"; - this.numUVNCSCPort.Size = new System.Drawing.Size(72, 20); + this.numUVNCSCPort.Size = new System.Drawing.Size(72, 22); this.numUVNCSCPort.TabIndex = 8; this.numUVNCSCPort.Value = new decimal(new int[] { 5500, @@ -142,7 +142,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtCustomPuttyPath.Enabled = false; this.txtCustomPuttyPath.Location = new System.Drawing.Point(21, 95); this.txtCustomPuttyPath.Name = "txtCustomPuttyPath"; - this.txtCustomPuttyPath.Size = new System.Drawing.Size(346, 20); + this.txtCustomPuttyPath.Size = new System.Drawing.Size(346, 22); this.txtCustomPuttyPath.TabIndex = 4; this.txtCustomPuttyPath.TextChanged += new System.EventHandler(this.txtCustomPuttyPath_TextChanged); // @@ -175,7 +175,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblSeconds.AutoSize = true; this.lblSeconds.Location = new System.Drawing.Point(428, 175); this.lblSeconds.Name = "lblSeconds"; - this.lblSeconds.Size = new System.Drawing.Size(47, 13); + this.lblSeconds.Size = new System.Drawing.Size(49, 13); this.lblSeconds.TabIndex = 9; this.lblSeconds.Text = "seconds"; // @@ -197,7 +197,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLoadBalanceInfoUseUtf8.AutoSize = true; this.chkLoadBalanceInfoUseUtf8.Location = new System.Drawing.Point(3, 49); this.chkLoadBalanceInfoUseUtf8.Name = "chkLoadBalanceInfoUseUtf8"; - this.chkLoadBalanceInfoUseUtf8.Size = new System.Drawing.Size(304, 17); + this.chkLoadBalanceInfoUseUtf8.Size = new System.Drawing.Size(317, 17); this.chkLoadBalanceInfoUseUtf8.TabIndex = 2; this.chkLoadBalanceInfoUseUtf8.Text = "Use UTF8 encoding for RDP \"Load Balance Info\" property"; this.chkLoadBalanceInfoUseUtf8.UseVisualStyleBackColor = true; @@ -219,6 +219,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.lblUVNCSCPort); this.Controls.Add(this.lblSeconds); this.Controls.Add(this.btnBrowseCustomPuttyPath); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "AdvancedPage"; this.Size = new System.Drawing.Size(610, 490); ((System.ComponentModel.ISupportInitialize)(this.numPuttyWaitTime)).EndInit(); diff --git a/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.resx b/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/AdvancedPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.Designer.cs index ac519b50..155bb781 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.Designer.cs @@ -44,7 +44,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblLanguageRestartRequired.AutoSize = true; this.lblLanguageRestartRequired.Location = new System.Drawing.Point(3, 56); this.lblLanguageRestartRequired.Name = "lblLanguageRestartRequired"; - this.lblLanguageRestartRequired.Size = new System.Drawing.Size(380, 13); + this.lblLanguageRestartRequired.Size = new System.Drawing.Size(414, 13); this.lblLanguageRestartRequired.TabIndex = 2; this.lblLanguageRestartRequired.Text = "mRemoteNG must be restarted before changes to the language will take effect."; // @@ -64,7 +64,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblLanguage.AutoSize = true; this.lblLanguage.Location = new System.Drawing.Point(3, 3); this.lblLanguage.Name = "lblLanguage"; - this.lblLanguage.Size = new System.Drawing.Size(55, 13); + this.lblLanguage.Size = new System.Drawing.Size(58, 13); this.lblLanguage.TabIndex = 0; this.lblLanguage.Text = "Language"; // @@ -74,7 +74,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowFullConnectionsFilePathInTitle.AutoSize = true; this.chkShowFullConnectionsFilePathInTitle.Location = new System.Drawing.Point(3, 127); this.chkShowFullConnectionsFilePathInTitle.Name = "chkShowFullConnectionsFilePathInTitle"; - this.chkShowFullConnectionsFilePathInTitle.Size = new System.Drawing.Size(239, 17); + this.chkShowFullConnectionsFilePathInTitle.Size = new System.Drawing.Size(268, 17); this.chkShowFullConnectionsFilePathInTitle.TabIndex = 4; this.chkShowFullConnectionsFilePathInTitle.Text = "Show full connections file path in window title"; this.chkShowFullConnectionsFilePathInTitle.UseVisualStyleBackColor = true; @@ -85,7 +85,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowDescriptionTooltipsInTree.AutoSize = true; this.chkShowDescriptionTooltipsInTree.Location = new System.Drawing.Point(3, 104); this.chkShowDescriptionTooltipsInTree.Name = "chkShowDescriptionTooltipsInTree"; - this.chkShowDescriptionTooltipsInTree.Size = new System.Drawing.Size(231, 17); + this.chkShowDescriptionTooltipsInTree.Size = new System.Drawing.Size(256, 17); this.chkShowDescriptionTooltipsInTree.TabIndex = 3; this.chkShowDescriptionTooltipsInTree.Text = "Show description tooltips in connection tree"; this.chkShowDescriptionTooltipsInTree.UseVisualStyleBackColor = true; @@ -96,7 +96,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowSystemTrayIcon.AutoSize = true; this.chkShowSystemTrayIcon.Location = new System.Drawing.Point(3, 173); this.chkShowSystemTrayIcon.Name = "chkShowSystemTrayIcon"; - this.chkShowSystemTrayIcon.Size = new System.Drawing.Size(172, 17); + this.chkShowSystemTrayIcon.Size = new System.Drawing.Size(177, 17); this.chkShowSystemTrayIcon.TabIndex = 5; this.chkShowSystemTrayIcon.Text = "Always show System Tray Icon"; this.chkShowSystemTrayIcon.UseVisualStyleBackColor = true; @@ -107,7 +107,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkMinimizeToSystemTray.AutoSize = true; this.chkMinimizeToSystemTray.Location = new System.Drawing.Point(3, 196); this.chkMinimizeToSystemTray.Name = "chkMinimizeToSystemTray"; - this.chkMinimizeToSystemTray.Size = new System.Drawing.Size(139, 17); + this.chkMinimizeToSystemTray.Size = new System.Drawing.Size(146, 17); this.chkMinimizeToSystemTray.TabIndex = 6; this.chkMinimizeToSystemTray.Text = "Minimize to System Tray"; this.chkMinimizeToSystemTray.UseVisualStyleBackColor = true; @@ -123,6 +123,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.chkShowDescriptionTooltipsInTree); this.Controls.Add(this.chkShowSystemTrayIcon); this.Controls.Add(this.chkMinimizeToSystemTray); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "AppearancePage"; this.Size = new System.Drawing.Size(610, 490); this.ResumeLayout(false); diff --git a/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.resx b/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/AppearancePage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.Designer.cs index da464926..18357166 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.Designer.cs @@ -64,7 +64,7 @@ this.radCredentialsCustom.AutoSize = true; this.radCredentialsCustom.Location = new System.Drawing.Point(3, 62); this.radCredentialsCustom.Name = "radCredentialsCustom"; - this.radCredentialsCustom.Size = new System.Drawing.Size(87, 17); + this.radCredentialsCustom.Size = new System.Drawing.Size(98, 17); this.radCredentialsCustom.TabIndex = 3; this.radCredentialsCustom.Text = "the following:"; this.radCredentialsCustom.UseVisualStyleBackColor = true; @@ -75,7 +75,7 @@ this.lblDefaultCredentials.AutoSize = true; this.lblDefaultCredentials.Location = new System.Drawing.Point(0, 0); this.lblDefaultCredentials.Name = "lblDefaultCredentials"; - this.lblDefaultCredentials.Size = new System.Drawing.Size(257, 13); + this.lblDefaultCredentials.Size = new System.Drawing.Size(279, 13); this.lblDefaultCredentials.TabIndex = 0; this.lblDefaultCredentials.Text = "For empty Username, Password or Domain fields use:"; // @@ -85,7 +85,7 @@ this.radCredentialsNoInfo.Checked = true; this.radCredentialsNoInfo.Location = new System.Drawing.Point(3, 16); this.radCredentialsNoInfo.Name = "radCredentialsNoInfo"; - this.radCredentialsNoInfo.Size = new System.Drawing.Size(91, 17); + this.radCredentialsNoInfo.Size = new System.Drawing.Size(103, 17); this.radCredentialsNoInfo.TabIndex = 1; this.radCredentialsNoInfo.TabStop = true; this.radCredentialsNoInfo.Text = "no information"; @@ -96,7 +96,7 @@ this.radCredentialsWindows.AutoSize = true; this.radCredentialsWindows.Location = new System.Drawing.Point(3, 39); this.radCredentialsWindows.Name = "radCredentialsWindows"; - this.radCredentialsWindows.Size = new System.Drawing.Size(227, 17); + this.radCredentialsWindows.Size = new System.Drawing.Size(252, 17); this.radCredentialsWindows.TabIndex = 2; this.radCredentialsWindows.Text = "my current credentials (windows logon info)"; this.radCredentialsWindows.UseVisualStyleBackColor = true; @@ -107,7 +107,7 @@ this.txtCredentialsDomain.Enabled = false; this.txtCredentialsDomain.Location = new System.Drawing.Point(126, 138); this.txtCredentialsDomain.Name = "txtCredentialsDomain"; - this.txtCredentialsDomain.Size = new System.Drawing.Size(150, 20); + this.txtCredentialsDomain.Size = new System.Drawing.Size(150, 22); this.txtCredentialsDomain.TabIndex = 9; // // lblCredentialsUsername @@ -126,7 +126,7 @@ this.txtCredentialsPassword.Enabled = false; this.txtCredentialsPassword.Location = new System.Drawing.Point(126, 112); this.txtCredentialsPassword.Name = "txtCredentialsPassword"; - this.txtCredentialsPassword.Size = new System.Drawing.Size(150, 20); + this.txtCredentialsPassword.Size = new System.Drawing.Size(150, 22); this.txtCredentialsPassword.TabIndex = 7; this.txtCredentialsPassword.UseSystemPasswordChar = true; // @@ -146,7 +146,7 @@ this.txtCredentialsUsername.Enabled = false; this.txtCredentialsUsername.Location = new System.Drawing.Point(126, 86); this.txtCredentialsUsername.Name = "txtCredentialsUsername"; - this.txtCredentialsUsername.Size = new System.Drawing.Size(150, 20); + this.txtCredentialsUsername.Size = new System.Drawing.Size(150, 22); this.txtCredentialsUsername.TabIndex = 5; // // lblCredentialsDomain @@ -164,6 +164,7 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.pnlDefaultCredentials); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "CredentialsPage"; this.Size = new System.Drawing.Size(610, 490); this.pnlDefaultCredentials.ResumeLayout(false); diff --git a/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.resx b/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/CredentialsPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.Designer.cs index d21e15a4..45d1dc74 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.Designer.cs @@ -73,7 +73,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.labelSwitchToErrorsAndInfos.AutoSize = true; this.labelSwitchToErrorsAndInfos.Location = new System.Drawing.Point(177, 25); this.labelSwitchToErrorsAndInfos.Name = "labelSwitchToErrorsAndInfos"; - this.labelSwitchToErrorsAndInfos.Size = new System.Drawing.Size(159, 13); + this.labelSwitchToErrorsAndInfos.Size = new System.Drawing.Size(176, 13); this.labelSwitchToErrorsAndInfos.TabIndex = 5; this.labelSwitchToErrorsAndInfos.Text = "Switch to Notifications panel on:"; // @@ -83,7 +83,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSwitchToMCInformation.AutoSize = true; this.chkSwitchToMCInformation.Location = new System.Drawing.Point(195, 67); this.chkSwitchToMCInformation.Name = "chkSwitchToMCInformation"; - this.chkSwitchToMCInformation.Size = new System.Drawing.Size(78, 17); + this.chkSwitchToMCInformation.Size = new System.Drawing.Size(87, 17); this.chkSwitchToMCInformation.TabIndex = 6; this.chkSwitchToMCInformation.Text = "Information"; this.chkSwitchToMCInformation.UseVisualStyleBackColor = true; @@ -94,7 +94,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSwitchToMCErrors.AutoSize = true; this.chkSwitchToMCErrors.Location = new System.Drawing.Point(195, 113); this.chkSwitchToMCErrors.Name = "chkSwitchToMCErrors"; - this.chkSwitchToMCErrors.Size = new System.Drawing.Size(48, 17); + this.chkSwitchToMCErrors.Size = new System.Drawing.Size(51, 17); this.chkSwitchToMCErrors.TabIndex = 8; this.chkSwitchToMCErrors.Text = "Error"; this.chkSwitchToMCErrors.UseVisualStyleBackColor = true; @@ -105,7 +105,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSwitchToMCWarnings.AutoSize = true; this.chkSwitchToMCWarnings.Location = new System.Drawing.Point(195, 90); this.chkSwitchToMCWarnings.Name = "chkSwitchToMCWarnings"; - this.chkSwitchToMCWarnings.Size = new System.Drawing.Size(66, 17); + this.chkSwitchToMCWarnings.Size = new System.Drawing.Size(71, 17); this.chkSwitchToMCWarnings.TabIndex = 7; this.chkSwitchToMCWarnings.Text = "Warning"; this.chkSwitchToMCWarnings.UseVisualStyleBackColor = true; @@ -133,7 +133,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.labelNotificationsShowTypes.AutoSize = true; this.labelNotificationsShowTypes.Location = new System.Drawing.Point(6, 25); this.labelNotificationsShowTypes.Name = "labelNotificationsShowTypes"; - this.labelNotificationsShowTypes.Size = new System.Drawing.Size(139, 13); + this.labelNotificationsShowTypes.Size = new System.Drawing.Size(147, 13); this.labelNotificationsShowTypes.TabIndex = 0; this.labelNotificationsShowTypes.Text = "Show these message types:"; // @@ -143,7 +143,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowErrorInMC.AutoSize = true; this.chkShowErrorInMC.Location = new System.Drawing.Point(20, 113); this.chkShowErrorInMC.Name = "chkShowErrorInMC"; - this.chkShowErrorInMC.Size = new System.Drawing.Size(48, 17); + this.chkShowErrorInMC.Size = new System.Drawing.Size(51, 17); this.chkShowErrorInMC.TabIndex = 4; this.chkShowErrorInMC.Text = "Error"; this.chkShowErrorInMC.UseVisualStyleBackColor = true; @@ -154,7 +154,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowWarningInMC.AutoSize = true; this.chkShowWarningInMC.Location = new System.Drawing.Point(20, 90); this.chkShowWarningInMC.Name = "chkShowWarningInMC"; - this.chkShowWarningInMC.Size = new System.Drawing.Size(66, 17); + this.chkShowWarningInMC.Size = new System.Drawing.Size(71, 17); this.chkShowWarningInMC.TabIndex = 3; this.chkShowWarningInMC.Text = "Warning"; this.chkShowWarningInMC.UseVisualStyleBackColor = true; @@ -165,7 +165,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowInfoInMC.AutoSize = true; this.chkShowInfoInMC.Location = new System.Drawing.Point(20, 67); this.chkShowInfoInMC.Name = "chkShowInfoInMC"; - this.chkShowInfoInMC.Size = new System.Drawing.Size(78, 17); + this.chkShowInfoInMC.Size = new System.Drawing.Size(87, 17); this.chkShowInfoInMC.TabIndex = 2; this.chkShowInfoInMC.Text = "Information"; this.chkShowInfoInMC.UseVisualStyleBackColor = true; @@ -176,7 +176,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowDebugInMC.AutoSize = true; this.chkShowDebugInMC.Location = new System.Drawing.Point(20, 44); this.chkShowDebugInMC.Name = "chkShowDebugInMC"; - this.chkShowDebugInMC.Size = new System.Drawing.Size(58, 17); + this.chkShowDebugInMC.Size = new System.Drawing.Size(61, 17); this.chkShowDebugInMC.TabIndex = 1; this.chkShowDebugInMC.Text = "Debug"; this.chkShowDebugInMC.UseVisualStyleBackColor = true; @@ -223,7 +223,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLogDebugMsgs.AutoSize = true; this.chkLogDebugMsgs.Location = new System.Drawing.Point(3, 3); this.chkLogDebugMsgs.Name = "chkLogDebugMsgs"; - this.chkLogDebugMsgs.Size = new System.Drawing.Size(58, 17); + this.chkLogDebugMsgs.Size = new System.Drawing.Size(61, 17); this.chkLogDebugMsgs.TabIndex = 0; this.chkLogDebugMsgs.Text = "Debug"; this.chkLogDebugMsgs.UseVisualStyleBackColor = true; @@ -234,7 +234,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLogInfoMsgs.AutoSize = true; this.chkLogInfoMsgs.Location = new System.Drawing.Point(149, 3); this.chkLogInfoMsgs.Name = "chkLogInfoMsgs"; - this.chkLogInfoMsgs.Size = new System.Drawing.Size(78, 17); + this.chkLogInfoMsgs.Size = new System.Drawing.Size(87, 17); this.chkLogInfoMsgs.TabIndex = 1; this.chkLogInfoMsgs.Text = "Information"; this.chkLogInfoMsgs.UseVisualStyleBackColor = true; @@ -245,7 +245,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLogWarningMsgs.AutoSize = true; this.chkLogWarningMsgs.Location = new System.Drawing.Point(295, 3); this.chkLogWarningMsgs.Name = "chkLogWarningMsgs"; - this.chkLogWarningMsgs.Size = new System.Drawing.Size(66, 17); + this.chkLogWarningMsgs.Size = new System.Drawing.Size(71, 17); this.chkLogWarningMsgs.TabIndex = 2; this.chkLogWarningMsgs.Text = "Warning"; this.chkLogWarningMsgs.UseVisualStyleBackColor = true; @@ -256,7 +256,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLogErrorMsgs.AutoSize = true; this.chkLogErrorMsgs.Location = new System.Drawing.Point(441, 3); this.chkLogErrorMsgs.Name = "chkLogErrorMsgs"; - this.chkLogErrorMsgs.Size = new System.Drawing.Size(48, 17); + this.chkLogErrorMsgs.Size = new System.Drawing.Size(51, 17); this.chkLogErrorMsgs.TabIndex = 3; this.chkLogErrorMsgs.Text = "Error"; this.chkLogErrorMsgs.UseVisualStyleBackColor = true; @@ -267,7 +267,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkLogToCurrentDir.AutoSize = true; this.chkLogToCurrentDir.Location = new System.Drawing.Point(9, 18); this.chkLogToCurrentDir.Name = "chkLogToCurrentDir"; - this.chkLogToCurrentDir.Size = new System.Drawing.Size(153, 17); + this.chkLogToCurrentDir.Size = new System.Drawing.Size(168, 17); this.chkLogToCurrentDir.TabIndex = 0; this.chkLogToCurrentDir.Text = "Log to application directory"; this.chkLogToCurrentDir.UseVisualStyleBackColor = true; @@ -311,7 +311,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.labelLogTheseMsgTypes.AutoSize = true; this.labelLogTheseMsgTypes.Location = new System.Drawing.Point(6, 108); this.labelLogTheseMsgTypes.Name = "labelLogTheseMsgTypes"; - this.labelLogTheseMsgTypes.Size = new System.Drawing.Size(130, 13); + this.labelLogTheseMsgTypes.Size = new System.Drawing.Size(137, 13); this.labelLogTheseMsgTypes.TabIndex = 6; this.labelLogTheseMsgTypes.Text = "Log these message types:"; // @@ -320,7 +320,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.labelLogFilePath.AutoSize = true; this.labelLogFilePath.Location = new System.Drawing.Point(6, 38); this.labelLogFilePath.Name = "labelLogFilePath"; - this.labelLogFilePath.Size = new System.Drawing.Size(68, 13); + this.labelLogFilePath.Size = new System.Drawing.Size(75, 13); this.labelLogFilePath.TabIndex = 1; this.labelLogFilePath.Text = "Log file path:"; // @@ -330,7 +330,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.textBoxLogPath.Location = new System.Drawing.Point(9, 57); this.textBoxLogPath.Name = "textBoxLogPath"; this.textBoxLogPath.ReadOnly = true; - this.textBoxLogPath.Size = new System.Drawing.Size(585, 20); + this.textBoxLogPath.Size = new System.Drawing.Size(585, 22); this.textBoxLogPath.TabIndex = 2; // // groupBoxPopups @@ -369,7 +369,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkPopupDebug.AutoSize = true; this.chkPopupDebug.Location = new System.Drawing.Point(3, 3); this.chkPopupDebug.Name = "chkPopupDebug"; - this.chkPopupDebug.Size = new System.Drawing.Size(58, 17); + this.chkPopupDebug.Size = new System.Drawing.Size(61, 17); this.chkPopupDebug.TabIndex = 0; this.chkPopupDebug.Text = "Debug"; this.chkPopupDebug.UseVisualStyleBackColor = true; @@ -380,7 +380,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkPopupError.AutoSize = true; this.chkPopupError.Location = new System.Drawing.Point(441, 3); this.chkPopupError.Name = "chkPopupError"; - this.chkPopupError.Size = new System.Drawing.Size(48, 17); + this.chkPopupError.Size = new System.Drawing.Size(51, 17); this.chkPopupError.TabIndex = 3; this.chkPopupError.Text = "Error"; this.chkPopupError.UseVisualStyleBackColor = true; @@ -391,7 +391,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkPopupInfo.AutoSize = true; this.chkPopupInfo.Location = new System.Drawing.Point(149, 3); this.chkPopupInfo.Name = "chkPopupInfo"; - this.chkPopupInfo.Size = new System.Drawing.Size(78, 17); + this.chkPopupInfo.Size = new System.Drawing.Size(87, 17); this.chkPopupInfo.TabIndex = 1; this.chkPopupInfo.Text = "Information"; this.chkPopupInfo.UseVisualStyleBackColor = true; @@ -402,7 +402,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkPopupWarning.AutoSize = true; this.chkPopupWarning.Location = new System.Drawing.Point(295, 3); this.chkPopupWarning.Name = "chkPopupWarning"; - this.chkPopupWarning.Size = new System.Drawing.Size(66, 17); + this.chkPopupWarning.Size = new System.Drawing.Size(71, 17); this.chkPopupWarning.TabIndex = 2; this.chkPopupWarning.Text = "Warning"; this.chkPopupWarning.UseVisualStyleBackColor = true; @@ -412,7 +412,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.labelPopupShowTypes.AutoSize = true; this.labelPopupShowTypes.Location = new System.Drawing.Point(8, 24); this.labelPopupShowTypes.Name = "labelPopupShowTypes"; - this.labelPopupShowTypes.Size = new System.Drawing.Size(139, 13); + this.labelPopupShowTypes.Size = new System.Drawing.Size(147, 13); this.labelPopupShowTypes.TabIndex = 0; this.labelPopupShowTypes.Text = "Show these message types:"; // @@ -423,6 +423,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.groupBoxPopups); this.Controls.Add(this.groupBoxLogging); this.Controls.Add(this.groupBoxNotifications); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "NotificationsPage"; this.Size = new System.Drawing.Size(610, 490); this.groupBoxNotifications.ResumeLayout(false); @@ -443,13 +444,11 @@ namespace mRemoteNG.UI.Forms.OptionsPages internal Controls.Base.NGCheckBox chkSwitchToMCInformation; internal Controls.Base.NGCheckBox chkSwitchToMCErrors; internal Controls.Base.NGCheckBox chkSwitchToMCWarnings; - private System.Windows.Forms.GroupBox groupBoxNotifications; private Controls.Base.NGLabel labelNotificationsShowTypes; private Controls.Base.NGCheckBox chkShowErrorInMC; private Controls.Base.NGCheckBox chkShowWarningInMC; private Controls.Base.NGCheckBox chkShowInfoInMC; private Controls.Base.NGCheckBox chkShowDebugInMC; - private System.Windows.Forms.GroupBox groupBoxLogging; private System.Windows.Forms.SaveFileDialog saveFileDialogLogging; private Controls.Base.NGLabel labelLogFilePath; private Controls.Base.NGTextBox textBoxLogPath; @@ -461,7 +460,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages private Controls.Base.NGCheckBox chkLogDebugMsgs; private Controls.Base.NGButton buttonOpenLogFile; private Controls.Base.NGButton buttonRestoreDefaultLogPath; - private System.Windows.Forms.GroupBox groupBoxPopups; private Controls.Base.NGCheckBox chkPopupError; private Controls.Base.NGLabel labelPopupShowTypes; private Controls.Base.NGCheckBox chkPopupWarning; @@ -470,5 +468,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages private Controls.Base.NGCheckBox chkLogToCurrentDir; private System.Windows.Forms.TableLayoutPanel tblLogging; private System.Windows.Forms.TableLayoutPanel tblPopups; + private Controls.Base.NGGroupBox groupBoxNotifications; + private Controls.Base.NGGroupBox groupBoxLogging; + private Controls.Base.NGGroupBox groupBoxPopups; } } diff --git a/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.resx b/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.resx new file mode 100644 index 00000000..5324ee22 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/NotificationsPage.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.cs b/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.cs index 63357fd1..dbbb1113 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.cs @@ -64,5 +64,17 @@ namespace mRemoteNG.UI.Forms.OptionsPages ForeColor = Themes.ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"); Invalidate(); } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // OptionsPage + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "OptionsPage"; + this.ResumeLayout(false); + + } } } diff --git a/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.resx b/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/OptionsPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs index b073e913..9e9e88aa 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs @@ -46,7 +46,7 @@ this.chkEncryptCompleteFile.AutoSize = true; this.chkEncryptCompleteFile.Location = new System.Drawing.Point(3, 3); this.chkEncryptCompleteFile.Name = "chkEncryptCompleteFile"; - this.chkEncryptCompleteFile.Size = new System.Drawing.Size(180, 17); + this.chkEncryptCompleteFile.Size = new System.Drawing.Size(194, 17); this.chkEncryptCompleteFile.TabIndex = 0; this.chkEncryptCompleteFile.Text = "Encrypt complete connection file"; this.chkEncryptCompleteFile.UseVisualStyleBackColor = true; @@ -67,7 +67,7 @@ this.labelEncryptionEngine.AutoSize = true; this.labelEncryptionEngine.Location = new System.Drawing.Point(9, 28); this.labelEncryptionEngine.Name = "labelEncryptionEngine"; - this.labelEncryptionEngine.Size = new System.Drawing.Size(93, 13); + this.labelEncryptionEngine.Size = new System.Drawing.Size(101, 13); this.labelEncryptionEngine.TabIndex = 0; this.labelEncryptionEngine.Text = "Encryption Engine"; // @@ -76,7 +76,7 @@ this.labelBlockCipher.AutoSize = true; this.labelBlockCipher.Location = new System.Drawing.Point(9, 60); this.labelBlockCipher.Name = "labelBlockCipher"; - this.labelBlockCipher.Size = new System.Drawing.Size(97, 13); + this.labelBlockCipher.Size = new System.Drawing.Size(105, 13); this.labelBlockCipher.TabIndex = 2; this.labelBlockCipher.Text = "Block Cipher Mode"; // @@ -124,7 +124,7 @@ 0, 0}); this.numberBoxKdfIterations.Name = "numberBoxKdfIterations"; - this.numberBoxKdfIterations.Size = new System.Drawing.Size(90, 20); + this.numberBoxKdfIterations.Size = new System.Drawing.Size(90, 22); this.numberBoxKdfIterations.TabIndex = 5; this.numberBoxKdfIterations.ThousandsSeparator = true; this.numberBoxKdfIterations.Value = new decimal(new int[] { @@ -138,7 +138,7 @@ this.labelKdfIterations.AutoSize = true; this.labelKdfIterations.Location = new System.Drawing.Point(9, 90); this.labelKdfIterations.Name = "labelKdfIterations"; - this.labelKdfIterations.Size = new System.Drawing.Size(166, 13); + this.labelKdfIterations.Size = new System.Drawing.Size(181, 13); this.labelKdfIterations.TabIndex = 4; this.labelKdfIterations.Text = "Key Derivation Function Iterations"; // @@ -148,6 +148,7 @@ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.chkEncryptCompleteFile); this.Controls.Add(this.groupAdvancedSecurityOptions); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "SecurityPage"; this.Size = new System.Drawing.Size(610, 490); this.groupAdvancedSecurityOptions.ResumeLayout(false); diff --git a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.resx b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.Designer.cs index 53df8409..e91509ae 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.Designer.cs @@ -63,7 +63,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtSQLDatabaseName.Enabled = false; this.txtSQLDatabaseName.Location = new System.Drawing.Point(140, 130); this.txtSQLDatabaseName.Name = "txtSQLDatabaseName"; - this.txtSQLDatabaseName.Size = new System.Drawing.Size(153, 20); + this.txtSQLDatabaseName.Size = new System.Drawing.Size(153, 22); this.txtSQLDatabaseName.TabIndex = 6; // // lblExperimental @@ -86,7 +86,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkUseSQLServer.AutoSize = true; this.chkUseSQLServer.Location = new System.Drawing.Point(3, 76); this.chkUseSQLServer.Name = "chkUseSQLServer"; - this.chkUseSQLServer.Size = new System.Drawing.Size(234, 17); + this.chkUseSQLServer.Size = new System.Drawing.Size(244, 17); this.chkUseSQLServer.TabIndex = 2; this.chkUseSQLServer.Text = "Use SQL Server to load && save connections"; this.chkUseSQLServer.UseVisualStyleBackColor = true; @@ -108,7 +108,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtSQLPassword.Enabled = false; this.txtSQLPassword.Location = new System.Drawing.Point(140, 182); this.txtSQLPassword.Name = "txtSQLPassword"; - this.txtSQLPassword.Size = new System.Drawing.Size(153, 20); + this.txtSQLPassword.Size = new System.Drawing.Size(153, 22); this.txtSQLPassword.TabIndex = 10; this.txtSQLPassword.UseSystemPasswordChar = true; // @@ -142,7 +142,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtSQLUsername.Enabled = false; this.txtSQLUsername.Location = new System.Drawing.Point(140, 156); this.txtSQLUsername.Name = "txtSQLUsername"; - this.txtSQLUsername.Size = new System.Drawing.Size(153, 20); + this.txtSQLUsername.Size = new System.Drawing.Size(153, 22); this.txtSQLUsername.TabIndex = 8; // // txtSQLServer @@ -151,7 +151,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtSQLServer.Enabled = false; this.txtSQLServer.Location = new System.Drawing.Point(140, 103); this.txtSQLServer.Name = "txtSQLServer"; - this.txtSQLServer.Size = new System.Drawing.Size(153, 20); + this.txtSQLServer.Size = new System.Drawing.Size(153, 22); this.txtSQLServer.TabIndex = 4; // // lblSQLPassword @@ -191,7 +191,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblTestConnectionResults.AutoSize = true; this.lblTestConnectionResults.Location = new System.Drawing.Point(137, 254); this.lblTestConnectionResults.Name = "lblTestConnectionResults"; - this.lblTestConnectionResults.Size = new System.Drawing.Size(117, 13); + this.lblTestConnectionResults.Size = new System.Drawing.Size(124, 13); this.lblTestConnectionResults.TabIndex = 13; this.lblTestConnectionResults.Text = "Test connection details"; // @@ -235,6 +235,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.txtSQLUsername); this.Controls.Add(this.txtSQLServer); this.Controls.Add(this.lblSQLPassword); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "SqlServerPage"; this.Size = new System.Drawing.Size(610, 490); ((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).EndInit(); diff --git a/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.resx b/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/SqlServerPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.Designer.cs index 2309fdd8..f0ad70b5 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.Designer.cs @@ -43,7 +43,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkReconnectOnStart.AutoSize = true; this.chkReconnectOnStart.Location = new System.Drawing.Point(3, 26); this.chkReconnectOnStart.Name = "chkReconnectOnStart"; - this.chkReconnectOnStart.Size = new System.Drawing.Size(273, 17); + this.chkReconnectOnStart.Size = new System.Drawing.Size(295, 17); this.chkReconnectOnStart.TabIndex = 1; this.chkReconnectOnStart.Text = "Reconnect to previously opened sessions on startup"; this.chkReconnectOnStart.UseVisualStyleBackColor = true; @@ -54,7 +54,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSaveConsOnExit.AutoSize = true; this.chkSaveConsOnExit.Location = new System.Drawing.Point(3, 2); this.chkSaveConsOnExit.Name = "chkSaveConsOnExit"; - this.chkSaveConsOnExit.Size = new System.Drawing.Size(146, 17); + this.chkSaveConsOnExit.Size = new System.Drawing.Size(153, 17); this.chkSaveConsOnExit.TabIndex = 0; this.chkSaveConsOnExit.Text = "Save connections on exit"; this.chkSaveConsOnExit.UseVisualStyleBackColor = true; @@ -65,7 +65,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSingleInstance.AutoSize = true; this.chkSingleInstance.Location = new System.Drawing.Point(3, 50); this.chkSingleInstance.Name = "chkSingleInstance"; - this.chkSingleInstance.Size = new System.Drawing.Size(366, 17); + this.chkSingleInstance.Size = new System.Drawing.Size(404, 17); this.chkSingleInstance.TabIndex = 2; this.chkSingleInstance.Text = "Allow only a single instance of the application (mRemote restart required)"; this.chkSingleInstance.UseVisualStyleBackColor = true; @@ -76,7 +76,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkProperInstallationOfComponentsAtStartup.AutoSize = true; this.chkProperInstallationOfComponentsAtStartup.Location = new System.Drawing.Point(3, 74); this.chkProperInstallationOfComponentsAtStartup.Name = "chkProperInstallationOfComponentsAtStartup"; - this.chkProperInstallationOfComponentsAtStartup.Size = new System.Drawing.Size(262, 17); + this.chkProperInstallationOfComponentsAtStartup.Size = new System.Drawing.Size(290, 17); this.chkProperInstallationOfComponentsAtStartup.TabIndex = 3; this.chkProperInstallationOfComponentsAtStartup.Text = "Check proper installation of components at startup"; this.chkProperInstallationOfComponentsAtStartup.UseVisualStyleBackColor = true; @@ -89,6 +89,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.chkSaveConsOnExit); this.Controls.Add(this.chkSingleInstance); this.Controls.Add(this.chkProperInstallationOfComponentsAtStartup); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "StartupExitPage"; this.Size = new System.Drawing.Size(610, 490); this.Load += new System.EventHandler(this.StartupExitPage_Load); diff --git a/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.resx b/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/StartupExitPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs index eecb603b..582ebe57 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs @@ -49,7 +49,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkAlwaysShowPanelTabs.AutoSize = true; this.chkAlwaysShowPanelTabs.Location = new System.Drawing.Point(3, 3); this.chkAlwaysShowPanelTabs.Name = "chkAlwaysShowPanelTabs"; - this.chkAlwaysShowPanelTabs.Size = new System.Drawing.Size(139, 17); + this.chkAlwaysShowPanelTabs.Size = new System.Drawing.Size(149, 17); this.chkAlwaysShowPanelTabs.TabIndex = 0; this.chkAlwaysShowPanelTabs.Text = "Always show panel tabs"; this.chkAlwaysShowPanelTabs.UseVisualStyleBackColor = true; @@ -60,7 +60,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkIdentifyQuickConnectTabs.AutoSize = true; this.chkIdentifyQuickConnectTabs.Location = new System.Drawing.Point(3, 95); this.chkIdentifyQuickConnectTabs.Name = "chkIdentifyQuickConnectTabs"; - this.chkIdentifyQuickConnectTabs.Size = new System.Drawing.Size(293, 17); + this.chkIdentifyQuickConnectTabs.Size = new System.Drawing.Size(315, 17); this.chkIdentifyQuickConnectTabs.TabIndex = 4; this.chkIdentifyQuickConnectTabs.Text = global::mRemoteNG.Language.strIdentifyQuickConnectTabs; this.chkIdentifyQuickConnectTabs.UseVisualStyleBackColor = true; @@ -71,7 +71,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkOpenNewTabRightOfSelected.AutoSize = true; this.chkOpenNewTabRightOfSelected.Location = new System.Drawing.Point(3, 26); this.chkOpenNewTabRightOfSelected.Name = "chkOpenNewTabRightOfSelected"; - this.chkOpenNewTabRightOfSelected.Size = new System.Drawing.Size(280, 17); + this.chkOpenNewTabRightOfSelected.Size = new System.Drawing.Size(309, 17); this.chkOpenNewTabRightOfSelected.TabIndex = 1; this.chkOpenNewTabRightOfSelected.Text = "Open new tab to the right of the currently selected tab"; this.chkOpenNewTabRightOfSelected.UseVisualStyleBackColor = true; @@ -82,7 +82,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkAlwaysShowPanelSelectionDlg.AutoSize = true; this.chkAlwaysShowPanelSelectionDlg.Location = new System.Drawing.Point(3, 141); this.chkAlwaysShowPanelSelectionDlg.Name = "chkAlwaysShowPanelSelectionDlg"; - this.chkAlwaysShowPanelSelectionDlg.Size = new System.Drawing.Size(317, 17); + this.chkAlwaysShowPanelSelectionDlg.Size = new System.Drawing.Size(347, 17); this.chkAlwaysShowPanelSelectionDlg.TabIndex = 6; this.chkAlwaysShowPanelSelectionDlg.Text = "Always show panel selection dialog when opening connectins"; this.chkAlwaysShowPanelSelectionDlg.UseVisualStyleBackColor = true; @@ -93,7 +93,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowLogonInfoOnTabs.AutoSize = true; this.chkShowLogonInfoOnTabs.Location = new System.Drawing.Point(3, 49); this.chkShowLogonInfoOnTabs.Name = "chkShowLogonInfoOnTabs"; - this.chkShowLogonInfoOnTabs.Size = new System.Drawing.Size(203, 17); + this.chkShowLogonInfoOnTabs.Size = new System.Drawing.Size(226, 17); this.chkShowLogonInfoOnTabs.TabIndex = 2; this.chkShowLogonInfoOnTabs.Text = "Show logon information on tab names"; this.chkShowLogonInfoOnTabs.UseVisualStyleBackColor = true; @@ -104,7 +104,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkDoubleClickClosesTab.AutoSize = true; this.chkDoubleClickClosesTab.Location = new System.Drawing.Point(3, 118); this.chkDoubleClickClosesTab.Name = "chkDoubleClickClosesTab"; - this.chkDoubleClickClosesTab.Size = new System.Drawing.Size(159, 17); + this.chkDoubleClickClosesTab.Size = new System.Drawing.Size(170, 17); this.chkDoubleClickClosesTab.TabIndex = 5; this.chkDoubleClickClosesTab.Text = "Double click on tab closes it"; this.chkDoubleClickClosesTab.UseVisualStyleBackColor = true; @@ -115,7 +115,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkShowProtocolOnTabs.AutoSize = true; this.chkShowProtocolOnTabs.Location = new System.Drawing.Point(3, 72); this.chkShowProtocolOnTabs.Name = "chkShowProtocolOnTabs"; - this.chkShowProtocolOnTabs.Size = new System.Drawing.Size(166, 17); + this.chkShowProtocolOnTabs.Size = new System.Drawing.Size(180, 17); this.chkShowProtocolOnTabs.TabIndex = 3; this.chkShowProtocolOnTabs.Text = "Show protocols on tab names"; this.chkShowProtocolOnTabs.UseVisualStyleBackColor = true; @@ -126,7 +126,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkCreateEmptyPanelOnStart.AutoSize = true; this.chkCreateEmptyPanelOnStart.Location = new System.Drawing.Point(3, 164); this.chkCreateEmptyPanelOnStart.Name = "chkCreateEmptyPanelOnStart"; - this.chkCreateEmptyPanelOnStart.Size = new System.Drawing.Size(253, 17); + this.chkCreateEmptyPanelOnStart.Size = new System.Drawing.Size(271, 17); this.chkCreateEmptyPanelOnStart.TabIndex = 7; this.chkCreateEmptyPanelOnStart.Text = "Create an empty panel when mRemoteNG starts"; this.chkCreateEmptyPanelOnStart.UseVisualStyleBackColor = true; @@ -136,7 +136,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages // this.txtBoxPanelName.Location = new System.Drawing.Point(43, 200); this.txtBoxPanelName.Name = "txtBoxPanelName"; - this.txtBoxPanelName.Size = new System.Drawing.Size(213, 20); + this.txtBoxPanelName.Size = new System.Drawing.Size(213, 22); this.txtBoxPanelName.TabIndex = 8; // // lblPanelName @@ -144,7 +144,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblPanelName.AutoSize = true; this.lblPanelName.Location = new System.Drawing.Point(40, 184); this.lblPanelName.Name = "lblPanelName"; - this.lblPanelName.Size = new System.Drawing.Size(66, 13); + this.lblPanelName.Size = new System.Drawing.Size(69, 13); this.lblPanelName.TabIndex = 9; this.lblPanelName.Text = "Panel name:"; // @@ -162,6 +162,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.chkShowLogonInfoOnTabs); this.Controls.Add(this.chkDoubleClickClosesTab); this.Controls.Add(this.chkShowProtocolOnTabs); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "TabsPanelsPage"; this.Size = new System.Drawing.Size(610, 490); this.ResumeLayout(false); diff --git a/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.resx b/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/TabsPanelsPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs index f8343473..1ffe8c3b 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs @@ -206,6 +206,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.Controls.Add(this.tlpMain); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "ThemePage"; this.Size = new System.Drawing.Size(610, 490); ((System.ComponentModel.ISupportInitialize)(this.listPalette)).EndInit(); diff --git a/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.Designer.cs index 92f08880..35fd5e2f 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.Designer.cs @@ -96,7 +96,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkCheckForUpdatesOnStartup.AutoSize = true; this.chkCheckForUpdatesOnStartup.Location = new System.Drawing.Point(3, 4); this.chkCheckForUpdatesOnStartup.Name = "chkCheckForUpdatesOnStartup"; - this.chkCheckForUpdatesOnStartup.Size = new System.Drawing.Size(113, 17); + this.chkCheckForUpdatesOnStartup.Size = new System.Drawing.Size(120, 17); this.chkCheckForUpdatesOnStartup.TabIndex = 0; this.chkCheckForUpdatesOnStartup.Text = "Check for updates"; this.chkCheckForUpdatesOnStartup.UseVisualStyleBackColor = true; @@ -132,7 +132,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.lblReleaseChannel.Location = new System.Drawing.Point(0, 3); this.lblReleaseChannel.Margin = new System.Windows.Forms.Padding(3); this.lblReleaseChannel.Name = "lblReleaseChannel"; - this.lblReleaseChannel.Size = new System.Drawing.Size(91, 13); + this.lblReleaseChannel.Size = new System.Drawing.Size(95, 13); this.lblReleaseChannel.TabIndex = 0; this.lblReleaseChannel.Text = "Release Channel:"; // @@ -184,7 +184,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtProxyAddress.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtProxyAddress.Location = new System.Drawing.Point(110, 4); this.txtProxyAddress.Name = "txtProxyAddress"; - this.txtProxyAddress.Size = new System.Drawing.Size(240, 20); + this.txtProxyAddress.Size = new System.Drawing.Size(240, 22); this.txtProxyAddress.TabIndex = 1; // // lblProxyPort @@ -211,7 +211,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages 0, 0}); this.numProxyPort.Name = "numProxyPort"; - this.numProxyPort.Size = new System.Drawing.Size(64, 20); + this.numProxyPort.Size = new System.Drawing.Size(64, 22); this.numProxyPort.TabIndex = 3; this.numProxyPort.Value = new decimal(new int[] { 80, @@ -225,7 +225,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkUseProxyForAutomaticUpdates.AutoSize = true; this.chkUseProxyForAutomaticUpdates.Location = new System.Drawing.Point(6, 0); this.chkUseProxyForAutomaticUpdates.Name = "chkUseProxyForAutomaticUpdates"; - this.chkUseProxyForAutomaticUpdates.Size = new System.Drawing.Size(168, 17); + this.chkUseProxyForAutomaticUpdates.Size = new System.Drawing.Size(176, 17); this.chkUseProxyForAutomaticUpdates.TabIndex = 0; this.chkUseProxyForAutomaticUpdates.Text = "Use a proxy server to connect"; this.chkUseProxyForAutomaticUpdates.UseVisualStyleBackColor = true; @@ -238,7 +238,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkUseProxyAuthentication.Enabled = false; this.chkUseProxyAuthentication.Location = new System.Drawing.Point(27, 70); this.chkUseProxyAuthentication.Name = "chkUseProxyAuthentication"; - this.chkUseProxyAuthentication.Size = new System.Drawing.Size(216, 17); + this.chkUseProxyAuthentication.Size = new System.Drawing.Size(234, 17); this.chkUseProxyAuthentication.TabIndex = 2; this.chkUseProxyAuthentication.Text = "This proxy server requires authentication"; this.chkUseProxyAuthentication.UseVisualStyleBackColor = true; @@ -270,7 +270,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtProxyUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtProxyUsername.Location = new System.Drawing.Point(110, 4); this.txtProxyUsername.Name = "txtProxyUsername"; - this.txtProxyUsername.Size = new System.Drawing.Size(240, 20); + this.txtProxyUsername.Size = new System.Drawing.Size(240, 22); this.txtProxyUsername.TabIndex = 1; // // lblProxyPassword @@ -287,7 +287,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.txtProxyPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtProxyPassword.Location = new System.Drawing.Point(110, 30); this.txtProxyPassword.Name = "txtProxyPassword"; - this.txtProxyPassword.Size = new System.Drawing.Size(240, 20); + this.txtProxyPassword.Size = new System.Drawing.Size(240, 22); this.txtProxyPassword.TabIndex = 3; this.txtProxyPassword.UseSystemPasswordChar = true; // @@ -320,6 +320,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.Controls.Add(this.lblUpdatesExplanation); this.Controls.Add(this.pnlUpdateCheck); this.Controls.Add(this.pnlProxy); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "UpdatesPage"; this.Size = new System.Drawing.Size(610, 490); this.pnlUpdateCheck.ResumeLayout(false); diff --git a/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.resx b/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Forms/OptionsPages/UpdatesPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index d0e53cff..6ea16986 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -841,6 +841,9 @@ NewPasswordWithVerification.cs + + SequencedControl.cs + SecureTextBox.cs @@ -861,12 +864,42 @@ FrmInputBox.cs + + AdvancedPage.cs + + + AppearancePage.cs + ConnectionsPage.cs + + CredentialsPage.cs + + + NotificationsPage.cs + + + OptionsPage.cs + + + SecurityPage.cs + + + SqlServerPage.cs + + + StartupExitPage.cs + + + TabsPanelsPage.cs + ThemePage.cs + + UpdatesPage.cs + PasswordForm.cs Designer From 132713f27439109ab0fd22202304915da9fdfe9c Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:38:09 -0500 Subject: [PATCH 15/22] more Forms -> Segoe UI --- mRemoteV1/UI/Forms/ExportForm.Designer.cs | 29 +++-- mRemoteV1/UI/Forms/ExportForm.cs | 86 ++++-------- .../UI/Forms/FrmSplashScreen.Designer.cs | 1 + mRemoteV1/UI/Forms/FullscreenHandler.cs | 5 +- mRemoteV1/UI/Forms/PasswordForm.Designer.cs | 31 ++--- mRemoteV1/UI/Forms/PasswordForm.cs | 3 +- mRemoteV1/UI/Forms/TextBox.cs | 55 ++++---- mRemoteV1/UI/Forms/TextBox.resx | 123 ++++++++++++++++++ .../UnhandledExceptionWindow.Designer.cs | 21 +-- mRemoteV1/UI/Forms/frmChoosePanel.Designer.cs | 5 +- mRemoteV1/UI/Forms/frmChoosePanel.cs | 16 +-- mRemoteV1/UI/Forms/frmMain.Designer.cs | 1 + mRemoteV1/UI/Forms/frmOptions.Designer.cs | 1 + mRemoteV1/mRemoteV1.csproj | 3 + 14 files changed, 236 insertions(+), 144 deletions(-) create mode 100644 mRemoteV1/UI/Forms/TextBox.resx diff --git a/mRemoteV1/UI/Forms/ExportForm.Designer.cs b/mRemoteV1/UI/Forms/ExportForm.Designer.cs index 026534c8..d70ac834 100644 --- a/mRemoteV1/UI/Forms/ExportForm.Designer.cs +++ b/mRemoteV1/UI/Forms/ExportForm.Designer.cs @@ -63,7 +63,7 @@ namespace mRemoteNG.UI.Forms this.lblUncheckProperties.AutoSize = true; this.lblUncheckProperties.Location = new System.Drawing.Point(12, 134); this.lblUncheckProperties.Name = "lblUncheckProperties"; - this.lblUncheckProperties.Size = new System.Drawing.Size(244, 13); + this.lblUncheckProperties.Size = new System.Drawing.Size(264, 13); this.lblUncheckProperties.TabIndex = 4; this.lblUncheckProperties.Text = "Uncheck the properties you want not to be saved!"; // @@ -75,7 +75,7 @@ namespace mRemoteNG.UI.Forms this.chkUsername.CheckState = System.Windows.Forms.CheckState.Checked; this.chkUsername.Location = new System.Drawing.Point(15, 32); this.chkUsername.Name = "chkUsername"; - this.chkUsername.Size = new System.Drawing.Size(74, 17); + this.chkUsername.Size = new System.Drawing.Size(77, 17); this.chkUsername.TabIndex = 0; this.chkUsername.Text = "Username"; this.chkUsername.UseVisualStyleBackColor = true; @@ -88,7 +88,7 @@ namespace mRemoteNG.UI.Forms this.chkPassword.CheckState = System.Windows.Forms.CheckState.Checked; this.chkPassword.Location = new System.Drawing.Point(15, 55); this.chkPassword.Name = "chkPassword"; - this.chkPassword.Size = new System.Drawing.Size(72, 17); + this.chkPassword.Size = new System.Drawing.Size(75, 17); this.chkPassword.TabIndex = 1; this.chkPassword.Text = "Password"; this.chkPassword.UseVisualStyleBackColor = true; @@ -101,7 +101,7 @@ namespace mRemoteNG.UI.Forms this.chkDomain.CheckState = System.Windows.Forms.CheckState.Checked; this.chkDomain.Location = new System.Drawing.Point(15, 78); this.chkDomain.Name = "chkDomain"; - this.chkDomain.Size = new System.Drawing.Size(62, 17); + this.chkDomain.Size = new System.Drawing.Size(66, 17); this.chkDomain.TabIndex = 2; this.chkDomain.Text = "Domain"; this.chkDomain.UseVisualStyleBackColor = true; @@ -114,7 +114,7 @@ namespace mRemoteNG.UI.Forms this.chkInheritance.CheckState = System.Windows.Forms.CheckState.Checked; this.chkInheritance.Location = new System.Drawing.Point(15, 101); this.chkInheritance.Name = "chkInheritance"; - this.chkInheritance.Size = new System.Drawing.Size(79, 17); + this.chkInheritance.Size = new System.Drawing.Size(84, 17); this.chkInheritance.TabIndex = 3; this.chkInheritance.Text = "Inheritance"; this.chkInheritance.UseVisualStyleBackColor = true; @@ -124,7 +124,7 @@ namespace mRemoteNG.UI.Forms this.txtFileName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtFileName.Location = new System.Drawing.Point(15, 47); this.txtFileName.Name = "txtFileName"; - this.txtFileName.Size = new System.Drawing.Size(396, 20); + this.txtFileName.Size = new System.Drawing.Size(396, 22); this.txtFileName.TabIndex = 1; this.txtFileName.TextChanged += new System.EventHandler(this.txtFileName_TextChanged); // @@ -162,7 +162,7 @@ namespace mRemoteNG.UI.Forms this.chkAssignedCredential.CheckState = System.Windows.Forms.CheckState.Checked; this.chkAssignedCredential.Location = new System.Drawing.Point(143, 32); this.chkAssignedCredential.Name = "chkAssignedCredential"; - this.chkAssignedCredential.Size = new System.Drawing.Size(119, 17); + this.chkAssignedCredential.Size = new System.Drawing.Size(129, 17); this.chkAssignedCredential.TabIndex = 5; this.chkAssignedCredential.Text = "Assigned Credential"; this.chkAssignedCredential.UseVisualStyleBackColor = true; @@ -187,7 +187,7 @@ namespace mRemoteNG.UI.Forms this.lblFileFormat.AutoSize = true; this.lblFileFormat.Location = new System.Drawing.Point(12, 80); this.lblFileFormat.Name = "lblFileFormat"; - this.lblFileFormat.Size = new System.Drawing.Size(61, 13); + this.lblFileFormat.Size = new System.Drawing.Size(67, 13); this.lblFileFormat.TabIndex = 3; this.lblFileFormat.Text = "File &Format:"; // @@ -196,7 +196,7 @@ namespace mRemoteNG.UI.Forms this.lblFileName.AutoSize = true; this.lblFileName.Location = new System.Drawing.Point(12, 28); this.lblFileName.Name = "lblFileName"; - this.lblFileName.Size = new System.Drawing.Size(52, 13); + this.lblFileName.Size = new System.Drawing.Size(56, 13); this.lblFileName.TabIndex = 0; this.lblFileName.Text = "Filename:"; // @@ -230,7 +230,7 @@ namespace mRemoteNG.UI.Forms this.lblSelectedConnection.AutoSize = true; this.lblSelectedConnection.Location = new System.Drawing.Point(48, 111); this.lblSelectedConnection.Name = "lblSelectedConnection"; - this.lblSelectedConnection.Size = new System.Drawing.Size(92, 13); + this.lblSelectedConnection.Size = new System.Drawing.Size(99, 13); this.lblSelectedConnection.TabIndex = 4; this.lblSelectedConnection.Text = "Connection Name"; // @@ -239,7 +239,7 @@ namespace mRemoteNG.UI.Forms this.lblSelectedFolder.AutoSize = true; this.lblSelectedFolder.Location = new System.Drawing.Point(48, 75); this.lblSelectedFolder.Name = "lblSelectedFolder"; - this.lblSelectedFolder.Size = new System.Drawing.Size(67, 13); + this.lblSelectedFolder.Size = new System.Drawing.Size(72, 13); this.lblSelectedFolder.TabIndex = 3; this.lblSelectedFolder.Text = "Folder Name"; // @@ -249,7 +249,7 @@ namespace mRemoteNG.UI.Forms this.rdoExportSelectedConnection.BackColor = System.Drawing.Color.Transparent; this.rdoExportSelectedConnection.Location = new System.Drawing.Point(15, 91); this.rdoExportSelectedConnection.Name = "rdoExportSelectedConnection"; - this.rdoExportSelectedConnection.Size = new System.Drawing.Size(215, 17); + this.rdoExportSelectedConnection.Size = new System.Drawing.Size(232, 17); this.rdoExportSelectedConnection.TabIndex = 2; this.rdoExportSelectedConnection.TabStop = true; this.rdoExportSelectedConnection.Text = "Export the currently selected connection"; @@ -261,7 +261,7 @@ namespace mRemoteNG.UI.Forms this.rdoExportSelectedFolder.BackColor = System.Drawing.Color.Transparent; this.rdoExportSelectedFolder.Location = new System.Drawing.Point(15, 55); this.rdoExportSelectedFolder.Name = "rdoExportSelectedFolder"; - this.rdoExportSelectedFolder.Size = new System.Drawing.Size(188, 17); + this.rdoExportSelectedFolder.Size = new System.Drawing.Size(205, 17); this.rdoExportSelectedFolder.TabIndex = 1; this.rdoExportSelectedFolder.TabStop = true; this.rdoExportSelectedFolder.Text = "Export the currently selected folder"; @@ -274,7 +274,7 @@ namespace mRemoteNG.UI.Forms this.rdoExportEverything.Checked = true; this.rdoExportEverything.Location = new System.Drawing.Point(15, 32); this.rdoExportEverything.Name = "rdoExportEverything"; - this.rdoExportEverything.Size = new System.Drawing.Size(107, 17); + this.rdoExportEverything.Size = new System.Drawing.Size(115, 17); this.rdoExportEverything.TabIndex = 0; this.rdoExportEverything.TabStop = true; this.rdoExportEverything.Text = "Export everything"; @@ -292,6 +292,7 @@ namespace mRemoteNG.UI.Forms this.Controls.Add(this.grpProperties); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnOK); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = global::mRemoteNG.Resources.ConnectionsSaveAs_Icon; this.MaximizeBox = false; diff --git a/mRemoteV1/UI/Forms/ExportForm.cs b/mRemoteV1/UI/Forms/ExportForm.cs index 7daedde4..d4396d8c 100644 --- a/mRemoteV1/UI/Forms/ExportForm.cs +++ b/mRemoteV1/UI/Forms/ExportForm.cs @@ -16,15 +16,9 @@ namespace mRemoteNG.UI.Forms #region Public Properties public string FileName { - get - { - return txtFileName.Text; - } - set - { - txtFileName.Text = value; - } - } + get => txtFileName.Text; + set => txtFileName.Text = value; + } public SaveFormat SaveFormat { @@ -75,11 +69,8 @@ namespace mRemoteNG.UI.Forms private ContainerInfo _selectedFolder; public ContainerInfo SelectedFolder { - get - { - return _selectedFolder; - } - set + get => _selectedFolder; + set { _selectedFolder = value; lblSelectedFolder.Text = value?.Name; @@ -90,11 +81,8 @@ namespace mRemoteNG.UI.Forms private ConnectionInfo _selectedConnection; public ConnectionInfo SelectedConnection { - get - { - return _selectedConnection; - } - set + get => _selectedConnection; + set { _selectedConnection = value; lblSelectedConnection.Text = value?.Name; @@ -104,57 +92,33 @@ namespace mRemoteNG.UI.Forms public bool IncludeUsername { - get - { - return chkUsername.Checked; - } - set - { - chkUsername.Checked = value; - } - } + get => chkUsername.Checked; + set => chkUsername.Checked = value; + } public bool IncludePassword { - get - { - return chkPassword.Checked; - } - set - { - chkPassword.Checked = value; - } - } + get => chkPassword.Checked; + set => chkPassword.Checked = value; + } public bool IncludeDomain { - get - { - return chkDomain.Checked; - } - set - { - chkDomain.Checked = value; - } - } + get => chkDomain.Checked; + set => chkDomain.Checked = value; + } public bool IncludeAssignedCredential { - get { return chkAssignedCredential.Checked; } - set { chkAssignedCredential.Checked = value; } + get => chkAssignedCredential.Checked; + set => chkAssignedCredential.Checked = value; } public bool IncludeInheritance { - get - { - return chkInheritance.Checked; - } - set - { - chkInheritance.Checked = value; - } - } + get => chkInheritance.Checked; + set => chkInheritance.Checked = value; + } #endregion #region Constructors @@ -247,11 +211,9 @@ namespace mRemoteNG.UI.Forms private void ApplyTheme() { _themeManager = ThemeManager.getInstance(); - if(_themeManager.ThemingActive) - { - BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Background"); - ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"); - } + if (!_themeManager.ThemingActive) return; + BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Background"); + ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"); } diff --git a/mRemoteV1/UI/Forms/FrmSplashScreen.Designer.cs b/mRemoteV1/UI/Forms/FrmSplashScreen.Designer.cs index ef265c3c..53864ab5 100644 --- a/mRemoteV1/UI/Forms/FrmSplashScreen.Designer.cs +++ b/mRemoteV1/UI/Forms/FrmSplashScreen.Designer.cs @@ -39,6 +39,7 @@ this.ClientSize = new System.Drawing.Size(450, 120); this.ControlBox = false; this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Margin = new System.Windows.Forms.Padding(2); this.MaximizeBox = false; diff --git a/mRemoteV1/UI/Forms/FullscreenHandler.cs b/mRemoteV1/UI/Forms/FullscreenHandler.cs index e85fd155..b601a8e2 100644 --- a/mRemoteV1/UI/Forms/FullscreenHandler.cs +++ b/mRemoteV1/UI/Forms/FullscreenHandler.cs @@ -13,10 +13,7 @@ namespace mRemoteNG.UI.Forms public bool Value { - get - { - return _value; - } + get => _value; set { if (_value == value) return; diff --git a/mRemoteV1/UI/Forms/PasswordForm.Designer.cs b/mRemoteV1/UI/Forms/PasswordForm.Designer.cs index d1786f4b..4f5a270a 100644 --- a/mRemoteV1/UI/Forms/PasswordForm.Designer.cs +++ b/mRemoteV1/UI/Forms/PasswordForm.Designer.cs @@ -48,18 +48,18 @@ namespace mRemoteNG.UI.Forms // lblPassword // this.lblPassword.AutoSize = true; - this.lblPassword.Location = new System.Drawing.Point(73, 10); + this.lblPassword.Location = new System.Drawing.Point(73, 9); this.lblPassword.Name = "lblPassword"; - this.lblPassword.Size = new System.Drawing.Size(56, 13); + this.lblPassword.Size = new System.Drawing.Size(59, 13); this.lblPassword.TabIndex = 1; this.lblPassword.Text = "Password:"; // // lblVerify // this.lblVerify.AutoSize = true; - this.lblVerify.Location = new System.Drawing.Point(73, 49); + this.lblVerify.Location = new System.Drawing.Point(73, 50); this.lblVerify.Name = "lblVerify"; - this.lblVerify.Size = new System.Drawing.Size(36, 13); + this.lblVerify.Size = new System.Drawing.Size(38, 13); this.lblVerify.TabIndex = 3; this.lblVerify.Text = "Verify:"; // @@ -67,7 +67,7 @@ namespace mRemoteNG.UI.Forms // this.btnOK._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER; this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnOK.Location = new System.Drawing.Point(219, 128); + this.btnOK.Location = new System.Drawing.Point(215, 124); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(75, 23); this.btnOK.TabIndex = 7; @@ -80,7 +80,7 @@ namespace mRemoteNG.UI.Forms this.btnCancel._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER; this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(300, 128); + this.btnCancel.Location = new System.Drawing.Point(296, 124); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(75, 23); this.btnCancel.TabIndex = 6; @@ -94,9 +94,9 @@ namespace mRemoteNG.UI.Forms | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.lblStatus, 2); this.lblStatus.ForeColor = System.Drawing.Color.Red; - this.lblStatus.Location = new System.Drawing.Point(73, 88); + this.lblStatus.Location = new System.Drawing.Point(73, 91); this.lblStatus.Name = "lblStatus"; - this.lblStatus.Size = new System.Drawing.Size(302, 13); + this.lblStatus.Size = new System.Drawing.Size(298, 13); this.lblStatus.TabIndex = 5; this.lblStatus.Text = "Status"; this.lblStatus.TextAlign = System.Drawing.ContentAlignment.TopRight; @@ -105,7 +105,7 @@ namespace mRemoteNG.UI.Forms // pbLock // this.pbLock.Image = global::mRemoteNG.Resources.Lock; - this.pbLock.Location = new System.Drawing.Point(3, 13); + this.pbLock.Location = new System.Drawing.Point(3, 12); this.pbLock.Name = "pbLock"; this.tableLayoutPanel1.SetRowSpan(this.pbLock, 6); this.pbLock.Size = new System.Drawing.Size(64, 64); @@ -118,10 +118,10 @@ namespace mRemoteNG.UI.Forms this.txtVerify.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.txtVerify, 2); - this.txtVerify.Location = new System.Drawing.Point(73, 65); + this.txtVerify.Location = new System.Drawing.Point(73, 66); this.txtVerify.Name = "txtVerify"; this.txtVerify.SelectAllOnFocus = true; - this.txtVerify.Size = new System.Drawing.Size(302, 20); + this.txtVerify.Size = new System.Drawing.Size(298, 22); this.txtVerify.TabIndex = 4; this.txtVerify.UseSystemPasswordChar = true; this.txtVerify.TextChanged += new System.EventHandler(this.txtPassword_TextChanged); @@ -131,10 +131,10 @@ namespace mRemoteNG.UI.Forms this.txtPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.txtPassword, 2); - this.txtPassword.Location = new System.Drawing.Point(73, 26); + this.txtPassword.Location = new System.Drawing.Point(73, 25); this.txtPassword.Name = "txtPassword"; this.txtPassword.SelectAllOnFocus = true; - this.txtPassword.Size = new System.Drawing.Size(302, 20); + this.txtPassword.Size = new System.Drawing.Size(298, 22); this.txtPassword.TabIndex = 2; this.txtPassword.UseSystemPasswordChar = true; this.txtPassword.TextChanged += new System.EventHandler(this.txtPassword_TextChanged); @@ -164,7 +164,7 @@ namespace mRemoteNG.UI.Forms this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 83.33334F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(378, 154); + this.tableLayoutPanel1.Size = new System.Drawing.Size(374, 150); this.tableLayoutPanel1.TabIndex = 8; // // PasswordForm @@ -173,9 +173,10 @@ namespace mRemoteNG.UI.Forms this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.CancelButton = this.btnCancel; - this.ClientSize = new System.Drawing.Size(378, 154); + this.ClientSize = new System.Drawing.Size(374, 150); this.ControlBox = false; this.Controls.Add(this.tableLayoutPanel1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; diff --git a/mRemoteV1/UI/Forms/PasswordForm.cs b/mRemoteV1/UI/Forms/PasswordForm.cs index 9fbbabfa..33b05d27 100644 --- a/mRemoteV1/UI/Forms/PasswordForm.cs +++ b/mRemoteV1/UI/Forms/PasswordForm.cs @@ -98,7 +98,8 @@ namespace mRemoteNG.UI.Forms btnOK.Text = Language.strButtonOK; } - private bool VerifyNewPassword() + // ReSharper disable once UnusedMethodReturnValue.Local + private bool VerifyNewPassword() { if (txtPassword.Text.Length >= 3) { diff --git a/mRemoteV1/UI/Forms/TextBox.cs b/mRemoteV1/UI/Forms/TextBox.cs index 2d191ce2..38b238d6 100644 --- a/mRemoteV1/UI/Forms/TextBox.cs +++ b/mRemoteV1/UI/Forms/TextBox.cs @@ -13,28 +13,20 @@ namespace mRemoteNG.UI.Forms DefaultValue(false)]private bool _SelectAllOnFocus; public bool SelectAllOnFocus { - get - { - return _SelectAllOnFocus; - } - set - { - _SelectAllOnFocus = value; - } - } + get => _SelectAllOnFocus; + set => _SelectAllOnFocus = value; + } #endregion #region Protected Methods protected override void OnEnter(EventArgs e) { base.OnEnter(e); - - if (MouseButtons == MouseButtons.None) - { - SelectAll(); - _focusHandled = true; - } - } + + if (MouseButtons != MouseButtons.None) return; + SelectAll(); + _focusHandled = true; + } protected override void OnLeave(EventArgs e) { @@ -46,20 +38,29 @@ namespace mRemoteNG.UI.Forms protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); - - if (!_focusHandled) - { - if (SelectionLength == 0) - { - SelectAll(); - } - _focusHandled = true; - } - } + + if (_focusHandled) return; + if (SelectionLength == 0) + { + SelectAll(); + } + _focusHandled = true; + } #endregion #region Private Fields private bool _focusHandled; #endregion - } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // TextBox + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + + } + } } \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/TextBox.resx b/mRemoteV1/UI/Forms/TextBox.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/Forms/TextBox.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/UnhandledExceptionWindow.Designer.cs b/mRemoteV1/UI/Forms/UnhandledExceptionWindow.Designer.cs index 11d3f0dd..ea19d834 100644 --- a/mRemoteV1/UI/Forms/UnhandledExceptionWindow.Designer.cs +++ b/mRemoteV1/UI/Forms/UnhandledExceptionWindow.Designer.cs @@ -66,7 +66,7 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(534, 311); + this.tableLayoutPanel1.Size = new System.Drawing.Size(534, 334); this.tableLayoutPanel1.TabIndex = 0; // // labelExceptionCaught @@ -84,9 +84,9 @@ // this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonClose.Dock = System.Windows.Forms.DockStyle.Right; - this.buttonClose.Location = new System.Drawing.Point(427, 284); + this.buttonClose.Location = new System.Drawing.Point(427, 306); this.buttonClose.Name = "buttonClose"; - this.buttonClose.Size = new System.Drawing.Size(74, 24); + this.buttonClose.Size = new System.Drawing.Size(74, 25); this.buttonClose.TabIndex = 1; this.buttonClose.Text = "Close"; this.buttonClose.UseVisualStyleBackColor = true; @@ -96,19 +96,19 @@ // this.tableLayoutPanel1.SetColumnSpan(this.textBoxStackTrace, 2); this.textBoxStackTrace.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxStackTrace.Location = new System.Drawing.Point(33, 128); + this.textBoxStackTrace.Location = new System.Drawing.Point(33, 132); this.textBoxStackTrace.Multiline = true; this.textBoxStackTrace.Name = "textBoxStackTrace"; this.textBoxStackTrace.ReadOnly = true; this.textBoxStackTrace.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBoxStackTrace.Size = new System.Drawing.Size(468, 150); + this.textBoxStackTrace.Size = new System.Drawing.Size(468, 168); this.textBoxStackTrace.TabIndex = 0; // // labelStackTraceHeader // this.labelStackTraceHeader.AutoSize = true; this.labelStackTraceHeader.Dock = System.Windows.Forms.DockStyle.Bottom; - this.labelStackTraceHeader.Location = new System.Drawing.Point(33, 112); + this.labelStackTraceHeader.Location = new System.Drawing.Point(33, 116); this.labelStackTraceHeader.Name = "labelStackTraceHeader"; this.labelStackTraceHeader.Size = new System.Drawing.Size(388, 13); this.labelStackTraceHeader.TabIndex = 4; @@ -133,15 +133,15 @@ this.textBoxExceptionMessage.Name = "textBoxExceptionMessage"; this.textBoxExceptionMessage.ReadOnly = true; this.textBoxExceptionMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBoxExceptionMessage.Size = new System.Drawing.Size(468, 33); + this.textBoxExceptionMessage.Size = new System.Drawing.Size(468, 37); this.textBoxExceptionMessage.TabIndex = 6; // // buttonCopyAll // this.buttonCopyAll.Dock = System.Windows.Forms.DockStyle.Right; - this.buttonCopyAll.Location = new System.Drawing.Point(346, 284); + this.buttonCopyAll.Location = new System.Drawing.Point(346, 306); this.buttonCopyAll.Name = "buttonCopyAll"; - this.buttonCopyAll.Size = new System.Drawing.Size(75, 24); + this.buttonCopyAll.Size = new System.Drawing.Size(75, 25); this.buttonCopyAll.TabIndex = 7; this.buttonCopyAll.Text = "Copy All"; this.buttonCopyAll.UseVisualStyleBackColor = true; @@ -163,9 +163,10 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.CancelButton = this.buttonClose; - this.ClientSize = new System.Drawing.Size(534, 311); + this.ClientSize = new System.Drawing.Size(534, 334); this.ControlBox = false; this.Controls.Add(this.tableLayoutPanel1); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.MinimumSize = new System.Drawing.Size(550, 350); this.Name = "UnhandledExceptionWindow"; this.ShowInTaskbar = false; diff --git a/mRemoteV1/UI/Forms/frmChoosePanel.Designer.cs b/mRemoteV1/UI/Forms/frmChoosePanel.Designer.cs index 4dc0dc30..c7a07747 100644 --- a/mRemoteV1/UI/Forms/frmChoosePanel.Designer.cs +++ b/mRemoteV1/UI/Forms/frmChoosePanel.Designer.cs @@ -79,7 +79,7 @@ namespace mRemoteNG.UI.Forms this.btnNew.UseVisualStyleBackColor = true; this.btnNew.Click += new System.EventHandler(this.btnNew_Click); // - // frmChoosePanel + // FrmChoosePanel // this.AcceptButton = this.btnOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -89,11 +89,12 @@ namespace mRemoteNG.UI.Forms this.Controls.Add(this.btnNew); this.Controls.Add(this.btnOK); this.Controls.Add(this.cbPanels); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = global::mRemoteNG.Resources.Panels_Icon; this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "frmChoosePanel"; + this.Name = "FrmChoosePanel"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Select Panel"; diff --git a/mRemoteV1/UI/Forms/frmChoosePanel.cs b/mRemoteV1/UI/Forms/frmChoosePanel.cs index aa98b513..0f7f38a0 100644 --- a/mRemoteV1/UI/Forms/frmChoosePanel.cs +++ b/mRemoteV1/UI/Forms/frmChoosePanel.cs @@ -69,16 +69,14 @@ namespace mRemoteNG.UI.Forms private void btnNew_Click(object sender, System.EventArgs e) { var pnlName = Language.strNewPanel; - using (FrmInputBox frmInputBox = new FrmInputBox(Language.strNewPanel, Language.strPanelName + ":", ref pnlName)) + using (var frmInputBox = new FrmInputBox(Language.strNewPanel, Language.strPanelName + ":", ref pnlName)) { - DialogResult dr = frmInputBox.ShowDialog(); - if (dr == DialogResult.OK && !string.IsNullOrEmpty(frmInputBox.returnValue)) - { - _panelAdder.AddPanel(frmInputBox.returnValue); - AddAvailablePanels(); - cbPanels.SelectedItem = frmInputBox.returnValue; - cbPanels.Focus(); - } + var dr = frmInputBox.ShowDialog(); + if (dr != DialogResult.OK || string.IsNullOrEmpty(frmInputBox.returnValue)) return; + _panelAdder.AddPanel(frmInputBox.returnValue); + AddAvailablePanels(); + cbPanels.SelectedItem = frmInputBox.returnValue; + cbPanels.Focus(); } } diff --git a/mRemoteV1/UI/Forms/frmMain.Designer.cs b/mRemoteV1/UI/Forms/frmMain.Designer.cs index 64f07327..7fb17c4a 100644 --- a/mRemoteV1/UI/Forms/frmMain.Designer.cs +++ b/mRemoteV1/UI/Forms/frmMain.Designer.cs @@ -192,6 +192,7 @@ namespace mRemoteNG.UI.Forms this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.ClientSize = new System.Drawing.Size(1129, 571); this.Controls.Add(this.tsContainer); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MainMenuStrip = this.msMain; this.MinimumSize = new System.Drawing.Size(400, 400); diff --git a/mRemoteV1/UI/Forms/frmOptions.Designer.cs b/mRemoteV1/UI/Forms/frmOptions.Designer.cs index 9858aad7..7371c779 100644 --- a/mRemoteV1/UI/Forms/frmOptions.Designer.cs +++ b/mRemoteV1/UI/Forms/frmOptions.Designer.cs @@ -146,6 +146,7 @@ this.Controls.Add(this.lstOptionPages); this.Controls.Add(this.splitter1); this.Controls.Add(this.pnlBottom); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 6ea16986..d8266bd2 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -967,6 +967,9 @@ ReconnectGroup.cs Designer + + TextBox.cs + UnhandledExceptionWindow.cs From 3ab3b79bc7b917ac38c07ca4521ff64b8ec841bf Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:41:30 -0500 Subject: [PATCH 16/22] minor cleanup --- mRemoteV1/UI/Menu/HelpMenu.cs | 1 - mRemoteV1/UI/Menu/MainFileMenu.cs | 6 ++---- mRemoteV1/UI/Menu/ViewMenu.cs | 6 ++---- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/mRemoteV1/UI/Menu/HelpMenu.cs b/mRemoteV1/UI/Menu/HelpMenu.cs index 2fe249a6..74db6e2f 100644 --- a/mRemoteV1/UI/Menu/HelpMenu.cs +++ b/mRemoteV1/UI/Menu/HelpMenu.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.App.Info; -using mRemoteNG.Connection; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteV1/UI/Menu/MainFileMenu.cs b/mRemoteV1/UI/Menu/MainFileMenu.cs index 85e08c88..e656e95c 100644 --- a/mRemoteV1/UI/Menu/MainFileMenu.cs +++ b/mRemoteV1/UI/Menu/MainFileMenu.cs @@ -445,15 +445,13 @@ namespace mRemoteNG.UI.Menu if (Runtime.WindowList == null || Runtime.WindowList.Count == 0) return; foreach (BaseWindow window in Runtime.WindowList) { - var connectionWindow = window as ConnectionWindow; - if (connectionWindow == null) + if (!(window is ConnectionWindow connectionWindow)) return; var icList = new List(); foreach (Crownwood.Magic.Controls.TabPage tab in connectionWindow.TabController.TabPages) { - var tag = tab.Tag as InterfaceControl; - if (tag != null) + if (tab.Tag is InterfaceControl tag) { icList.Add(tag); } diff --git a/mRemoteV1/UI/Menu/ViewMenu.cs b/mRemoteV1/UI/Menu/ViewMenu.cs index ffc97bbf..38b294d7 100644 --- a/mRemoteV1/UI/Menu/ViewMenu.cs +++ b/mRemoteV1/UI/Menu/ViewMenu.cs @@ -158,8 +158,7 @@ namespace mRemoteNG.UI.Menu // _mMenViewJumpToConnectionsConfig.Image = Resources.Root; _mMenViewJumpToConnectionsConfig.Name = "mMenViewJumpToConnectionsConfig"; - _mMenViewJumpToConnectionsConfig.ShortcutKeys = ((Keys)(((Keys.Control | Keys.Alt) - | Keys.C))); + _mMenViewJumpToConnectionsConfig.ShortcutKeys = Keys.Control | Keys.Alt | Keys.C; _mMenViewJumpToConnectionsConfig.Size = new System.Drawing.Size(258, 22); _mMenViewJumpToConnectionsConfig.Text = Language.strMenuConnectionsAndConfig; _mMenViewJumpToConnectionsConfig.Click += mMenViewJumpToConnectionsConfig_Click; @@ -168,8 +167,7 @@ namespace mRemoteNG.UI.Menu // _mMenViewJumpToErrorsInfos.Image = Resources.InformationSmall; _mMenViewJumpToErrorsInfos.Name = "mMenViewJumpToErrorsInfos"; - _mMenViewJumpToErrorsInfos.ShortcutKeys = ((Keys)(((Keys.Control | Keys.Alt) - | Keys.E))); + _mMenViewJumpToErrorsInfos.ShortcutKeys = Keys.Control | Keys.Alt | Keys.E; _mMenViewJumpToErrorsInfos.Size = new System.Drawing.Size(258, 22); _mMenViewJumpToErrorsInfos.Text = Language.strMenuNotifications; _mMenViewJumpToErrorsInfos.Click += mMenViewJumpToErrorsInfos_Click; From 9692e67aabe811790eed13f6240babba22b965c5 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:42:35 -0500 Subject: [PATCH 17/22] minor cleanup --- mRemoteV1/UI/Panels/PanelAdder.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mRemoteV1/UI/Panels/PanelAdder.cs b/mRemoteV1/UI/Panels/PanelAdder.cs index f835275d..23871029 100644 --- a/mRemoteV1/UI/Panels/PanelAdder.cs +++ b/mRemoteV1/UI/Panels/PanelAdder.cs @@ -97,9 +97,9 @@ namespace mRemoteNG.UI.Panels { var conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag; var nTitle = ""; - using (FrmInputBox frmInputBox = new FrmInputBox(Language.strNewTitle, Language.strNewTitle + ":", ref nTitle)) + using (var frmInputBox = new FrmInputBox(Language.strNewTitle, Language.strNewTitle + ":", ref nTitle)) { - DialogResult dr = frmInputBox.ShowDialog(); + var dr = frmInputBox.ShowDialog(); if (dr == DialogResult.OK && string.IsNullOrEmpty(frmInputBox.returnValue)) conW.SetFormText(frmInputBox.returnValue); } @@ -146,8 +146,7 @@ namespace mRemoteNG.UI.Panels if (tagEnumeration == null) return; foreach (var obj in tagEnumeration) { - var screen1 = obj as Screen; - if (screen1 != null) + if (obj is Screen screen1) { screen = screen1; } From 59155b9f6c7f29947a3db8e99d1a098a283d9f6a Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 11:46:14 -0500 Subject: [PATCH 18/22] TaskDailog -> Segoe UI and minor cleanup --- .../UI/TaskDialog/CommandButton.designer.cs | 8 +- mRemoteV1/UI/TaskDialog/CommandButton.resx | 123 ++++++++++++++++++ mRemoteV1/UI/TaskDialog/frmTaskDialog.cs | 73 ++++++----- mRemoteV1/mRemoteV1.csproj | 3 + 4 files changed, 176 insertions(+), 31 deletions(-) create mode 100644 mRemoteV1/UI/TaskDialog/CommandButton.resx diff --git a/mRemoteV1/UI/TaskDialog/CommandButton.designer.cs b/mRemoteV1/UI/TaskDialog/CommandButton.designer.cs index ea110afb..6aa327f7 100644 --- a/mRemoteV1/UI/TaskDialog/CommandButton.designer.cs +++ b/mRemoteV1/UI/TaskDialog/CommandButton.designer.cs @@ -28,7 +28,13 @@ namespace mRemoteNG.UI.TaskDialog /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + this.SuspendLayout(); + // + // CommandButton + // + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/TaskDialog/CommandButton.resx b/mRemoteV1/UI/TaskDialog/CommandButton.resx new file mode 100644 index 00000000..e5858cc2 --- /dev/null +++ b/mRemoteV1/UI/TaskDialog/CommandButton.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/mRemoteV1/UI/TaskDialog/frmTaskDialog.cs b/mRemoteV1/UI/TaskDialog/frmTaskDialog.cs index ce31a7b6..65096087 100644 --- a/mRemoteV1/UI/TaskDialog/frmTaskDialog.cs +++ b/mRemoteV1/UI/TaskDialog/frmTaskDialog.cs @@ -32,11 +32,20 @@ namespace mRemoteNG.UI.TaskDialog public ESysIcons MainIcon { get; set; } = ESysIcons.Question; public ESysIcons FooterIcon { get; set; } = ESysIcons.Warning; - public string Title { get { return Text; } set { Text = value; } } - public string MainInstruction { get { return _mainInstruction; } set { _mainInstruction = value; Invalidate(); } } - public string Content { get { return lbContent.Text; } set { lbContent.Text = value; } } - public string ExpandedInfo { get { return lbExpandedInfo.Text; } set { lbExpandedInfo.Text = value; } } - public string Footer { get { return lbFooter.Text; } set { lbFooter.Text = value; } } + public string Title { get => Text; + set => Text = value; + } + public string MainInstruction { get => _mainInstruction; + set { _mainInstruction = value; Invalidate(); } } + public string Content { get => lbContent.Text; + set => lbContent.Text = value; + } + public string ExpandedInfo { get => lbExpandedInfo.Text; + set => lbExpandedInfo.Text = value; + } + public string Footer { get => lbFooter.Text; + set => lbFooter.Text = value; + } public int DefaultButtonIndex { get; set; } public string RadioButtons { get; set; } = ""; @@ -57,8 +66,12 @@ namespace mRemoteNG.UI.TaskDialog public ETaskDialogButtons Buttons { get; set; } = ETaskDialogButtons.YesNoCancel; - public string VerificationText { get { return cbVerify.Text; } set { cbVerify.Text = value; } } - public bool VerificationCheckBoxChecked { get { return cbVerify.Checked; } set { cbVerify.Checked = value; } } + public string VerificationText { get => cbVerify.Text; + set => cbVerify.Text = value; + } + public bool VerificationCheckBoxChecked { get => cbVerify.Checked; + set => cbVerify.Checked = value; + } private bool Expanded { get; set; } @@ -123,7 +136,7 @@ namespace mRemoteNG.UI.TaskDialog formHeight += pnlMainInstruction.Height; // Setup Content - pnlContent.Visible = (Content != ""); + pnlContent.Visible = Content != ""; if (Content != "") { AdjustLabelHeight(lbContent); @@ -131,7 +144,7 @@ namespace mRemoteNG.UI.TaskDialog formHeight += pnlContent.Height; } - var showVerifyCheckbox = (cbVerify.Text != ""); + var showVerifyCheckbox = cbVerify.Text != ""; cbVerify.Visible = showVerifyCheckbox; // Setup Expanded Info and Buttons panels @@ -147,8 +160,8 @@ namespace mRemoteNG.UI.TaskDialog AdjustLabelHeight(lbExpandedInfo); pnlExpandedInfo.Height = lbExpandedInfo.Height + _display.ScaleHeight(4); pnlExpandedInfo.Visible = Expanded; - lbShowHideDetails.Text = (Expanded ? " Hide details" : " Show details"); - lbShowHideDetails.ImageIndex = (Expanded ? 0 : 3); + lbShowHideDetails.Text = Expanded ? " Hide details" : " Show details"; + lbShowHideDetails.ImageIndex = Expanded ? 0 : 3; if (!showVerifyCheckbox) pnlButtons.Height = _display.ScaleHeight(40); if (Expanded) @@ -156,19 +169,18 @@ namespace mRemoteNG.UI.TaskDialog } // Setup RadioButtons - pnlRadioButtons.Visible = (RadioButtons != ""); + pnlRadioButtons.Visible = RadioButtons != ""; if (RadioButtons != "") { var arr = RadioButtons.Split('|'); var pnlHeight = _display.ScaleHeight(12); for (var i = 0; i < arr.Length; i++) { - var rb = new NGRadioButton(); - rb.Parent = pnlRadioButtons; - rb.Location = new Point(_display.ScaleWidth(60), _display.ScaleHeight(4) + (i * rb.Height)); + var rb = new NGRadioButton {Parent = pnlRadioButtons}; + rb.Location = new Point(_display.ScaleWidth(60), _display.ScaleHeight(4) + i * rb.Height); rb.Text = arr[i]; rb.Tag = i; - rb.Checked = (DefaultButtonIndex == i); + rb.Checked = DefaultButtonIndex == i; rb.Width = Width - rb.Left - _display.ScaleWidth(15); pnlHeight += rb.Height; _radioButtonCtrls.Add(rb); @@ -178,7 +190,7 @@ namespace mRemoteNG.UI.TaskDialog } // Setup CommandButtons - pnlCommandButtons.Visible = (CommandButtons != ""); + pnlCommandButtons.Visible = CommandButtons != ""; if (CommandButtons != "") { var arr = CommandButtons.Split('|'); @@ -186,9 +198,10 @@ namespace mRemoteNG.UI.TaskDialog var pnlHeight = _display.ScaleHeight(16); for (var i = 0; i < arr.Length; i++) { - var btn = new CommandButton(); - btn.Parent = pnlCommandButtons; - btn.Location = new Point(_display.ScaleWidth(50), t); + var btn = new CommandButton + { + Parent = pnlCommandButtons, Location = new Point(_display.ScaleWidth(50), t) + }; if (_isVista) // <- tweak font if vista btn.Font = new Font(btn.Font, FontStyle.Regular); btn.Text = arr[i]; @@ -266,17 +279,17 @@ namespace mRemoteNG.UI.TaskDialog throw new ArgumentOutOfRangeException(); } - ControlBox = (Buttons == ETaskDialogButtons.Cancel || - Buttons == ETaskDialogButtons.Close || - Buttons == ETaskDialogButtons.OkCancel || - Buttons == ETaskDialogButtons.YesNoCancel); + ControlBox = Buttons == ETaskDialogButtons.Cancel || + Buttons == ETaskDialogButtons.Close || + Buttons == ETaskDialogButtons.OkCancel || + Buttons == ETaskDialogButtons.YesNoCancel; if (!showVerifyCheckbox && ExpandedInfo == "" && Buttons == ETaskDialogButtons.None) pnlButtons.Visible = false; else formHeight += pnlButtons.Height; - pnlFooter.Visible = (Footer != ""); + pnlFooter.Visible = Footer != ""; if (Footer != "") { AdjustLabelHeight(lbFooter); @@ -392,25 +405,25 @@ namespace mRemoteNG.UI.TaskDialog //-------------------------------------------------------------------------------- private void lbDetails_MouseEnter(object sender, EventArgs e) { - lbShowHideDetails.ImageIndex = (Expanded ? 1 : 4); + lbShowHideDetails.ImageIndex = Expanded ? 1 : 4; } //-------------------------------------------------------------------------------- private void lbDetails_MouseLeave(object sender, EventArgs e) { - lbShowHideDetails.ImageIndex = (Expanded ? 0 : 3); + lbShowHideDetails.ImageIndex = Expanded ? 0 : 3; } //-------------------------------------------------------------------------------- private void lbDetails_MouseUp(object sender, MouseEventArgs e) { - lbShowHideDetails.ImageIndex = (Expanded ? 1 : 4); + lbShowHideDetails.ImageIndex = Expanded ? 1 : 4; } //-------------------------------------------------------------------------------- private void lbDetails_MouseDown(object sender, MouseEventArgs e) { - lbShowHideDetails.ImageIndex = (Expanded ? 2 : 5); + lbShowHideDetails.ImageIndex = Expanded ? 2 : 5; } //-------------------------------------------------------------------------------- @@ -418,7 +431,7 @@ namespace mRemoteNG.UI.TaskDialog { Expanded = !Expanded; pnlExpandedInfo.Visible = Expanded; - lbShowHideDetails.Text = (Expanded ? " Hide details" : " Show details"); + lbShowHideDetails.Text = Expanded ? " Hide details" : " Show details"; if (Expanded) Height += pnlExpandedInfo.Height; else diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index d8266bd2..5c805ab3 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -973,6 +973,9 @@ UnhandledExceptionWindow.cs + + CommandButton.cs + frmTaskDialog.cs From 31744be6910e8ba282ce3cdde74fee116937298d Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 12:04:49 -0500 Subject: [PATCH 19/22] Window -> Segoe UI and cleanup --- mRemoteV1/UI/Window/BaseWindow.cs | 45 +++-- mRemoteV1/UI/Window/BaseWindow.resx | 120 ++++++++++++ mRemoteV1/UI/Window/ComponentsCheckWindow.cs | 3 +- mRemoteV1/UI/Window/ConfigWindow.cs | 77 +++----- mRemoteV1/UI/Window/ConnectionTreeWindow.cs | 54 ++--- mRemoteV1/UI/Window/ConnectionWindow.cs | 52 ++--- mRemoteV1/UI/Window/ErrorAndInfoWindow.cs | 4 +- mRemoteV1/UI/Window/ExternalToolsWindow.cs | 5 +- mRemoteV1/UI/Window/HelpWindow.cs | 152 +------------- mRemoteV1/UI/Window/HelpWindow.resx | 9 +- .../UI/Window/PortScanWindow.Designer.cs | 10 +- .../UI/Window/ScreenshotManagerWindow.cs | 185 +++++++++--------- mRemoteV1/UI/Window/UltraVNCWindow.cs | 1 + mRemoteV1/mRemoteV1.csproj | 3 + 14 files changed, 346 insertions(+), 374 deletions(-) create mode 100644 mRemoteV1/UI/Window/BaseWindow.resx diff --git a/mRemoteV1/UI/Window/BaseWindow.cs b/mRemoteV1/UI/Window/BaseWindow.cs index fdf19d9d..877456eb 100644 --- a/mRemoteV1/UI/Window/BaseWindow.cs +++ b/mRemoteV1/UI/Window/BaseWindow.cs @@ -29,7 +29,7 @@ namespace mRemoteNG.UI.Window } #endregion - internal new void ApplyTheme() + internal void ApplyTheme() { _themeManager = ThemeManager.getInstance(); if (!_themeManager.ThemingActive) return; @@ -37,21 +37,34 @@ namespace mRemoteNG.UI.Window ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"); } - + #region Private Methods -/* - private void Base_Load(object sender, EventArgs e) - { - FrmMain.Default.ShowHidePanelTabs(); - } -*/ - -/* - private void Base_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) - { - FrmMain.Default.ShowHidePanelTabs(this); - } -*/ + /* + private void Base_Load(object sender, EventArgs e) + { + FrmMain.Default.ShowHidePanelTabs(); + } + */ + + /* + private void Base_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) + { + FrmMain.Default.ShowHidePanelTabs(this); + } + */ #endregion - } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // BaseWindow + // + this.ClientSize = new System.Drawing.Size(284, 261); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "BaseWindow"; + this.ResumeLayout(false); + + } + } } \ No newline at end of file diff --git a/mRemoteV1/UI/Window/BaseWindow.resx b/mRemoteV1/UI/Window/BaseWindow.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/mRemoteV1/UI/Window/BaseWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteV1/UI/Window/ComponentsCheckWindow.cs b/mRemoteV1/UI/Window/ComponentsCheckWindow.cs index 43c7efa7..9e70cde8 100644 --- a/mRemoteV1/UI/Window/ComponentsCheckWindow.cs +++ b/mRemoteV1/UI/Window/ComponentsCheckWindow.cs @@ -344,7 +344,7 @@ namespace mRemoteNG.UI.Window this.chkAlwaysShow.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.chkAlwaysShow.Location = new System.Drawing.Point(12, 814); this.chkAlwaysShow.Name = "chkAlwaysShow"; - this.chkAlwaysShow.Size = new System.Drawing.Size(185, 17); + this.chkAlwaysShow.Size = new System.Drawing.Size(200, 17); this.chkAlwaysShow.TabIndex = 51; this.chkAlwaysShow.Text = "Always show this screen at startup"; this.chkAlwaysShow.UseVisualStyleBackColor = true; @@ -374,6 +374,7 @@ namespace mRemoteNG.UI.Window this.Controls.Add(this.pnlChecks); this.Controls.Add(this.chkAlwaysShow); this.Controls.Add(this.btnCheckAgain); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Icon = global::mRemoteNG.Resources.ComponentsCheck_Icon; this.Name = "ComponentsCheckWindow"; this.TabText = "Components Check"; diff --git a/mRemoteV1/UI/Window/ConfigWindow.cs b/mRemoteV1/UI/Window/ConfigWindow.cs index 0e2b97f8..cacf7cf1 100644 --- a/mRemoteV1/UI/Window/ConfigWindow.cs +++ b/mRemoteV1/UI/Window/ConfigWindow.cs @@ -46,7 +46,7 @@ namespace mRemoteNG.UI.Window private AbstractConnectionRecord _selectedTreeNode; public AbstractConnectionRecord SelectedTreeNode { - get { return _selectedTreeNode; } + get => _selectedTreeNode; set { _selectedTreeNode = value; @@ -207,11 +207,8 @@ namespace mRemoteNG.UI.Window #region Public Properties public bool PropertiesVisible { - get - { - return _btnShowProperties.Checked; - } - set + get => _btnShowProperties.Checked; + set { _btnShowProperties.Checked = value; if (!value) return; @@ -223,11 +220,8 @@ namespace mRemoteNG.UI.Window public bool InheritanceVisible { - get - { - return _btnShowInheritance.Checked; - } - set + get => _btnShowInheritance.Checked; + set { _btnShowInheritance.Checked = value; if (!value) return; @@ -239,11 +233,8 @@ namespace mRemoteNG.UI.Window public bool DefaultPropertiesVisible { - get - { - return _btnShowDefaultProperties.Checked; - } - set + get => _btnShowDefaultProperties.Checked; + set { _btnShowDefaultProperties.Checked = value; if (!value) return; @@ -255,8 +246,8 @@ namespace mRemoteNG.UI.Window public bool DefaultInheritanceVisible { - get { return _btnShowDefaultInheritance.Checked; } - set + get => _btnShowDefaultInheritance.Checked; + set { _btnShowDefaultInheritance.Checked = value; if (!value) return; @@ -432,14 +423,11 @@ namespace mRemoteNG.UI.Window _btnIcon.Image = null; - var gridObjectAsConnectionInfo = propertyGridObject as ConnectionInfo; - if (gridObjectAsConnectionInfo != null) //CONNECTION INFO + if (propertyGridObject is ConnectionInfo gridObjectAsConnectionInfo) //CONNECTION INFO { - var gridObjectAsContainerInfo = propertyGridObject as ContainerInfo; - if (gridObjectAsContainerInfo != null) //CONTAINER + if (propertyGridObject is ContainerInfo gridObjectAsContainerInfo) //CONTAINER { - var gridObjectAsRootNodeInfo = propertyGridObject as RootNodeInfo; - if (gridObjectAsRootNodeInfo != null) // ROOT + if (propertyGridObject is RootNodeInfo gridObjectAsRootNodeInfo) // ROOT { // ReSharper disable once SwitchStatementMissingSomeCases switch (gridObjectAsRootNodeInfo.Type) @@ -617,20 +605,18 @@ namespace mRemoteNG.UI.Window 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"); - } + if (!ThemeManager.getInstance().ThemingActive) return; + _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() @@ -716,8 +702,7 @@ namespace mRemoteNG.UI.Window private void UpdateConnectionInfoNode(PropertyValueChangedEventArgs e) { Debug.WriteLine("update config"); - var selectedGridObject = _pGrid.SelectedObject as ConnectionInfo; - if (selectedGridObject == null) return; + if (!(_pGrid.SelectedObject is ConnectionInfo selectedGridObject)) return; if (e.ChangedItem.Label == Language.strPropertyNameProtocol) { selectedGridObject.SetDefaultPort(); @@ -748,8 +733,7 @@ namespace mRemoteNG.UI.Window private void UpdateRootInfoNode(PropertyValueChangedEventArgs e) { - var rootInfo = _pGrid.SelectedObject as RootNodeInfo; - if (rootInfo == null) + if (!(_pGrid.SelectedObject is RootNodeInfo rootInfo)) return; if (e.ChangedItem.PropertyDescriptor?.Name != "Password") @@ -795,8 +779,7 @@ namespace mRemoteNG.UI.Window try { var strHide = new List(); - var o = _pGrid.SelectedObject as RootNodeInfo; - if (o != null) + if (_pGrid.SelectedObject is RootNodeInfo o) { var rootInfo = o; if (rootInfo.Type == RootNodeType.PuttySessions) @@ -1456,8 +1439,7 @@ namespace mRemoteNG.UI.Window private void btnShowProperties_Click(object sender, EventArgs e) { - var o = _pGrid.SelectedObject as ConnectionInfoInheritance; - if (o != null) + if (_pGrid.SelectedObject is ConnectionInfoInheritance o) { if (_pGrid.SelectedObject is DefaultConnectionInheritance) { @@ -1633,8 +1615,7 @@ namespace mRemoteNG.UI.Window { _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 (!(connectionInfo is ConnectionInfo info)) return; if (info.IsContainer) return; _btnHostStatus.Tag = "checking"; diff --git a/mRemoteV1/UI/Window/ConnectionTreeWindow.cs b/mRemoteV1/UI/Window/ConnectionTreeWindow.cs index 4daaf428..644123c4 100644 --- a/mRemoteV1/UI/Window/ConnectionTreeWindow.cs +++ b/mRemoteV1/UI/Window/ConnectionTreeWindow.cs @@ -59,10 +59,7 @@ namespace mRemoteNG.UI.Window private void PlaceSearchBar(bool placeSearchBarAboveConnectionTree) { - if (placeSearchBarAboveConnectionTree) - tableLayoutPanel1.Dock = DockStyle.Top; - else - tableLayoutPanel1.Dock = DockStyle.Bottom; + tableLayoutPanel1.Dock = placeSearchBarAboveConnectionTree ? DockStyle.Top : DockStyle.Bottom; } @@ -219,29 +216,32 @@ namespace mRemoteNG.UI.Window private void txtSearch_KeyDown(object sender, KeyEventArgs e) { try - { - if (e.KeyCode == Keys.Escape) - { - e.Handled = true; - olvConnections.Focus(); - } - else if (e.KeyCode == Keys.Up) - { - var match = olvConnections.NodeSearcher.PreviousMatch(); - JumpToNode(match); - e.Handled = true; - } - else if (e.KeyCode == Keys.Down) - { - var match = olvConnections.NodeSearcher.NextMatch(); - JumpToNode(match); - e.Handled = true; - } - else - { - tvConnections_KeyDown(sender, e); - } - } + { + switch (e.KeyCode) + { + case Keys.Escape: + e.Handled = true; + olvConnections.Focus(); + break; + case Keys.Up: + { + var match = olvConnections.NodeSearcher.PreviousMatch(); + JumpToNode(match); + e.Handled = true; + break; + } + case Keys.Down: + { + var match = olvConnections.NodeSearcher.NextMatch(); + JumpToNode(match); + e.Handled = true; + break; + } + default: + tvConnections_KeyDown(sender, e); + break; + } + } catch (Exception ex) { Runtime.MessageCollector.AddExceptionStackTrace("txtSearch_KeyDown (UI.Window.ConnectionTreeWindow) failed", ex); diff --git a/mRemoteV1/UI/Window/ConnectionWindow.cs b/mRemoteV1/UI/Window/ConnectionWindow.cs index 0cf51244..f761d5ee 100644 --- a/mRemoteV1/UI/Window/ConnectionWindow.cs +++ b/mRemoteV1/UI/Window/ConnectionWindow.cs @@ -18,7 +18,6 @@ using mRemoteNG.UI.Forms; using mRemoteNG.UI.Forms.Input; using mRemoteNG.UI.TaskDialog; using WeifenLuo.WinFormsUI.Docking; -using Message = System.Windows.Forms.Message; using TabControl = Crownwood.Magic.Controls.TabControl; using TabPage = Crownwood.Magic.Controls.TabPage; @@ -177,16 +176,16 @@ namespace mRemoteNG.UI.Window private new void ApplyTheme() { - if(ThemeManager.getInstance().ThemingActive) + if (!ThemeManager.getInstance().ThemingActive) return; + base.ApplyTheme(); + vsToolStripExtender = new VisualStudioToolStripExtender(components) { - base.ApplyTheme(); - this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components); - vsToolStripExtender.DefaultRenderer = _toolStripProfessionalRenderer; - vsToolStripExtender.SetStyle(cmenTab, ThemeManager.getInstance().ActiveTheme.Version, ThemeManager.getInstance().ActiveTheme.Theme); - TabController.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Background"); - TabController.TextColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Foreground"); - TabController.TextInactiveColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Disabled_Foreground"); - } + DefaultRenderer = _toolStripProfessionalRenderer + }; + vsToolStripExtender.SetStyle(cmenTab, ThemeManager.getInstance().ActiveTheme.Version, ThemeManager.getInstance().ActiveTheme.Theme); + TabController.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Background"); + TabController.TextColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Foreground"); + TabController.TextInactiveColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("Tab_Item_Disabled_Foreground"); } private bool _documentHandlersAdded; @@ -421,14 +420,7 @@ namespace mRemoteNG.UI.Window cmenTabTransferFile.Visible = true; } - if (interfaceControl.Protocol is PuttyBase) - { - cmenTabPuttySettings.Visible = true; - } - else - { - cmenTabPuttySettings.Visible = false; - } + cmenTabPuttySettings.Visible = interfaceControl.Protocol is PuttyBase; AddExternalApps(); } @@ -447,8 +439,7 @@ namespace mRemoteNG.UI.Window if (!(TabController.SelectedTab?.Tag is InterfaceControl)) return; var interfaceControl = (InterfaceControl)TabController.SelectedTab?.Tag; - var protocol = interfaceControl.Protocol as RdpProtocol; - if (protocol != null) + if (interfaceControl.Protocol is RdpProtocol protocol) { var rdp = protocol; rdp.ToggleSmartSize(); @@ -469,8 +460,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = TabController.SelectedTab?.Tag as InterfaceControl; - if (interfaceControl == null) return; + if (!(TabController.SelectedTab?.Tag is InterfaceControl interfaceControl)) return; if (interfaceControl.Info.Protocol == ProtocolType.SSH1 | interfaceControl.Info.Protocol == ProtocolType.SSH2) SshTransferFile(); @@ -523,8 +513,7 @@ namespace mRemoteNG.UI.Window try { var interfaceControl = TabController.SelectedTab?.Tag as InterfaceControl; - var vnc = interfaceControl?.Protocol as ProtocolVNC; - if (vnc == null) return; + if (!(interfaceControl?.Protocol is ProtocolVNC vnc)) return; cmenTabViewOnly.Checked = !cmenTabViewOnly.Checked; vnc.ToggleViewOnly(); } @@ -617,7 +606,7 @@ namespace mRemoteNG.UI.Window } //add ext apps - foreach (ExternalTool externalTool in Runtime.ExternalToolsService.ExternalTools) + foreach (var externalTool in Runtime.ExternalToolsService.ExternalTools) { var nItem = new ToolStripMenuItem { @@ -755,8 +744,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = TabController.SelectedTab?.Tag as InterfaceControl; - if (interfaceControl == null) return; + if (!(TabController.SelectedTab?.Tag is InterfaceControl interfaceControl)) return; _connectionInitiator.OpenConnection(interfaceControl.Info, ConnectionInfo.Force.DoNotJump); _ignoreChangeSelectedTabClick = false; } @@ -770,8 +758,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = TabController.SelectedTab?.Tag as InterfaceControl; - if (interfaceControl == null) return; + if (!(TabController.SelectedTab?.Tag is InterfaceControl interfaceControl)) return; interfaceControl.Protocol.Close(); _connectionInitiator.OpenConnection(interfaceControl.Info, ConnectionInfo.Force.DoNotJump); } @@ -786,9 +773,9 @@ namespace mRemoteNG.UI.Window try { var title = TabController.SelectedTab.Title; - using (FrmInputBox frmInputBox = new FrmInputBox(Language.strNewTitle, Language.strNewTitle + ":", ref title)) + using (var frmInputBox = new FrmInputBox(Language.strNewTitle, Language.strNewTitle + ":", ref title)) { - DialogResult dr = frmInputBox.ShowDialog(); + var dr = frmInputBox.ShowDialog(); if (dr == DialogResult.OK && !string.IsNullOrEmpty(frmInputBox.returnValue)) TabController.SelectedTab.Title = frmInputBox.returnValue;// newTitle.Replace("&", "&&"); } @@ -811,8 +798,7 @@ namespace mRemoteNG.UI.Window public void Prot_Event_Closed(object sender) { var protocolBase = sender as ProtocolBase; - var tabPage = protocolBase?.InterfaceControl.Parent as TabPage; - if (tabPage != null) + if (protocolBase?.InterfaceControl.Parent is TabPage tabPage) CloseTab(tabPage); } #endregion diff --git a/mRemoteV1/UI/Window/ErrorAndInfoWindow.cs b/mRemoteV1/UI/Window/ErrorAndInfoWindow.cs index 4d7099f3..4b7c2f3d 100644 --- a/mRemoteV1/UI/Window/ErrorAndInfoWindow.cs +++ b/mRemoteV1/UI/Window/ErrorAndInfoWindow.cs @@ -9,6 +9,7 @@ using mRemoteNG.App; using mRemoteNG.Messages; using mRemoteNG.UI.Forms; using mRemoteNG.Themes; +using Message = mRemoteNG.Messages.Message; namespace mRemoteNG.UI.Window { @@ -305,8 +306,7 @@ namespace mRemoteNG.UI.Window foreach (ListViewItem item in items) { - var message = item.Tag as Messages.Message; - if (message == null) + if (!(item.Tag is Message message)) { continue; } diff --git a/mRemoteV1/UI/Window/ExternalToolsWindow.cs b/mRemoteV1/UI/Window/ExternalToolsWindow.cs index 4ba070f9..3c96cd4a 100644 --- a/mRemoteV1/UI/Window/ExternalToolsWindow.cs +++ b/mRemoteV1/UI/Window/ExternalToolsWindow.cs @@ -314,11 +314,10 @@ namespace mRemoteNG.UI.Window if (e.Column != WaitForExitColumnHeader) return; - var rowItemAsExternalTool = e.Model as ExternalTool; - if (rowItemAsExternalTool == null || !rowItemAsExternalTool.TryIntegrate) + if (!(e.Model is ExternalTool rowItemAsExternalTool) || !rowItemAsExternalTool.TryIntegrate) return; - e.Text = string.Format("'{0}' cannot be enabled if '{1}' is enabled", Language.strCheckboxWaitForExit, Language.strTryIntegrate); + e.Text = $"'{Language.strCheckboxWaitForExit}' cannot be enabled if '{Language.strTryIntegrate}' is enabled"; } #endregion } diff --git a/mRemoteV1/UI/Window/HelpWindow.cs b/mRemoteV1/UI/Window/HelpWindow.cs index 6310223c..fd71db34 100644 --- a/mRemoteV1/UI/Window/HelpWindow.cs +++ b/mRemoteV1/UI/Window/HelpWindow.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.UI.Window #region Form Init private TreeView tvIndex; - internal ImageList imgListHelp; + private ImageList imgListHelp; private System.ComponentModel.Container components; private SplitContainer pnlSplitter; private Label lblDocName; @@ -20,147 +20,15 @@ namespace mRemoteNG.UI.Window private void InitializeComponent() { - components = new System.ComponentModel.Container(); - Load += Help_Load; - Shown += Help_Shown; - var TreeNode1 = new TreeNode("Introduction"); - var TreeNode2 = new TreeNode("Prerequisites"); - var TreeNode3 = new TreeNode("Installation"); - var TreeNode4 = new TreeNode("Configuration"); - var TreeNode5 = new TreeNode("SQL Configuration"); - var TreeNode6 = new TreeNode("Command-Line Switches"); - var TreeNode7 = new TreeNode("Getting Started", new[] {TreeNode2, TreeNode3, TreeNode4, TreeNode5, TreeNode6}); - var TreeNode8 = new TreeNode("Main Menu"); - var TreeNode9 = new TreeNode("Connections"); - var TreeNode10 = new TreeNode("Config"); - var TreeNode11 = new TreeNode("Errors and Infos"); - var TreeNode12 = new TreeNode("Save As / Export"); - var TreeNode14 = new TreeNode("Screenshot Manager"); - var TreeNode15 = new TreeNode("Connection"); - var TreeNode16 = new TreeNode("Options"); - var TreeNode17 = new TreeNode("Update"); - var TreeNode18 = new TreeNode("SSH File Transfer"); - var TreeNode19 = new TreeNode("Quick Connect"); - var TreeNode20 = new TreeNode("Import From Active Directory"); - var TreeNode21 = new TreeNode("External Applications"); - var TreeNode22 = new TreeNode("Port Scan"); - var TreeNode23 = new TreeNode("User Interface", new[] {TreeNode8, TreeNode9, TreeNode10, TreeNode11, TreeNode12, TreeNode14, TreeNode15, TreeNode16, TreeNode17, TreeNode18, TreeNode19, TreeNode20, TreeNode21, TreeNode22}); - var TreeNode24 = new TreeNode("Quick Reference"); - var TreeNode25 = new TreeNode("Help", new[] {TreeNode1, TreeNode7, TreeNode23, TreeNode24}); - wbHelp = new WebBrowser(); - wbHelp.DocumentTitleChanged += wbHelp_DocumentTitleChanged; - tvIndex = new TreeView(); - tvIndex.NodeMouseClick += tvIndex_NodeMouseClick; - tvIndex.AfterSelect += tvIndex_AfterSelect; - imgListHelp = new ImageList(components); - pnlSplitter = new SplitContainer(); - lblDocName = new Label(); - pnlSplitter.Panel1.SuspendLayout(); - pnlSplitter.Panel2.SuspendLayout(); - pnlSplitter.SuspendLayout(); - SuspendLayout(); - // - //wbHelp - // - wbHelp.Anchor = AnchorStyles.Top | AnchorStyles.Bottom - | AnchorStyles.Left - | AnchorStyles.Right; - wbHelp.Location = new System.Drawing.Point(1, 36); - wbHelp.MinimumSize = new System.Drawing.Size(20, 20); - wbHelp.Name = "wbHelp"; - wbHelp.ScriptErrorsSuppressed = true; - wbHelp.Size = new System.Drawing.Size(327, 286); - wbHelp.TabIndex = 1; - // - //tvIndex - // - tvIndex.Anchor = AnchorStyles.Top | AnchorStyles.Bottom - | AnchorStyles.Left - | AnchorStyles.Right; - tvIndex.BorderStyle = BorderStyle.None; - tvIndex.HideSelection = false; - tvIndex.Location = new System.Drawing.Point(1, 1); - tvIndex.Name = "tvIndex"; - TreeNode1.Tag = "Introduction"; - TreeNode2.Tag = "Prerequisites"; - TreeNode3.Tag = "Installation"; - TreeNode4.Tag = "Configuration"; - TreeNode5.Tag = "ConfigurationSQL"; - TreeNode6.Tag = "CMDSwitches"; - TreeNode8.Tag = "MainMenu"; - TreeNode9.Tag = "Connections"; - TreeNode10.Tag = "Config"; - TreeNode11.Tag = "ErrorsAndInfos"; - TreeNode12.Tag = "SaveAsExport"; - TreeNode14.Tag = "ScreenshotManager"; - TreeNode15.Tag = "Connection"; - TreeNode16.Tag = "Options"; - TreeNode17.Tag = "Update"; - TreeNode18.Tag = "SSHFileTransfer"; - TreeNode19.Tag = "QuickConnect"; - TreeNode20.Tag = "ImportFromAD"; - TreeNode21.Tag = "ExternalTools"; - TreeNode22.Tag = "PortScan"; - TreeNode24.Tag = "QuickReference"; - TreeNode25.Tag = "Index"; - tvIndex.Nodes.AddRange(new[] {TreeNode25}); - tvIndex.ShowRootLines = false; - tvIndex.Size = new System.Drawing.Size(207, 321); - tvIndex.TabIndex = 0; - // - //imgListHelp - // - imgListHelp.ColorDepth = ColorDepth.Depth32Bit; - imgListHelp.ImageSize = new System.Drawing.Size(16, 16); - imgListHelp.TransparentColor = System.Drawing.Color.Transparent; - // - //pnlSplitter - // - pnlSplitter.Anchor = AnchorStyles.Top | AnchorStyles.Bottom - | AnchorStyles.Left - | AnchorStyles.Right; - pnlSplitter.FixedPanel = FixedPanel.Panel1; - pnlSplitter.Location = new System.Drawing.Point(0, 0); - pnlSplitter.Name = "pnlSplitter"; - // - //pnlSplitter.Panel1 - // - pnlSplitter.Panel1.Controls.Add(tvIndex); - // - //pnlSplitter.Panel2 - // - pnlSplitter.Panel2.Controls.Add(lblDocName); - pnlSplitter.Panel2.Controls.Add(wbHelp); - pnlSplitter.Size = new System.Drawing.Size(542, 323); - pnlSplitter.SplitterDistance = 209; - pnlSplitter.TabIndex = 2; - // - //lblDocName - // - lblDocName.Anchor = AnchorStyles.Top | AnchorStyles.Left - | AnchorStyles.Right; - lblDocName.BackColor = System.Drawing.Color.DimGray; - lblDocName.Font = new System.Drawing.Font("Segoe UI", 12.0F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, Convert.ToByte(0)); - lblDocName.ForeColor = System.Drawing.Color.White; - lblDocName.Location = new System.Drawing.Point(1, 1); - lblDocName.Name = "lblDocName"; - lblDocName.Size = new System.Drawing.Size(327, 35); - lblDocName.TabIndex = 2; - lblDocName.Text = @"Introduction"; - lblDocName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - //Help - // - ClientSize = new System.Drawing.Size(542, 323); - Controls.Add(pnlSplitter); - Icon = Resources.Help_Icon; - TabText = @"Help"; - Text = @"Help"; - pnlSplitter.Panel1.ResumeLayout(false); - pnlSplitter.Panel2.ResumeLayout(false); - pnlSplitter.ResumeLayout(false); - ResumeLayout(false); - + this.SuspendLayout(); + // + // HelpWindow + // + this.ClientSize = new System.Drawing.Size(284, 261); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "HelpWindow"; + this.ResumeLayout(false); + } #endregion diff --git a/mRemoteV1/UI/Window/HelpWindow.resx b/mRemoteV1/UI/Window/HelpWindow.resx index 510497c3..ca620d88 100644 --- a/mRemoteV1/UI/Window/HelpWindow.resx +++ b/mRemoteV1/UI/Window/HelpWindow.resx @@ -112,15 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 19, 14 - - + 48 \ No newline at end of file diff --git a/mRemoteV1/UI/Window/PortScanWindow.Designer.cs b/mRemoteV1/UI/Window/PortScanWindow.Designer.cs index 8d460ec4..b691b1f0 100644 --- a/mRemoteV1/UI/Window/PortScanWindow.Designer.cs +++ b/mRemoteV1/UI/Window/PortScanWindow.Designer.cs @@ -84,6 +84,7 @@ namespace mRemoteNG.UI.Window // // ipStart // + this.ipStart.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.ipStart.Location = new System.Drawing.Point(133, 3); this.ipStart.Name = "ipStart"; this.ipStart.Size = new System.Drawing.Size(124, 18); @@ -92,6 +93,7 @@ namespace mRemoteNG.UI.Window // // ipEnd // + this.ipEnd.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.ipEnd.Location = new System.Drawing.Point(133, 27); this.ipEnd.Name = "ipEnd"; this.ipEnd.Size = new System.Drawing.Size(124, 18); @@ -355,7 +357,7 @@ namespace mRemoteNG.UI.Window this.portEnd.Name = "portEnd"; this.portEnd.Size = new System.Drawing.Size(67, 22); this.portEnd.TabIndex = 4; - this.portScanToolTip.SetToolTip(this.portEnd, Language.strPortScanSinglePort); + this.portScanToolTip.SetToolTip(this.portEnd, global::mRemoteNG.Language.strPortScanSinglePort); this.portEnd.Value = new decimal(new int[] { 65535, 0, @@ -375,7 +377,7 @@ namespace mRemoteNG.UI.Window this.portStart.Name = "portStart"; this.portStart.Size = new System.Drawing.Size(67, 22); this.portStart.TabIndex = 3; - this.portScanToolTip.SetToolTip(this.portStart, Language.strPortScanSinglePort); + this.portScanToolTip.SetToolTip(this.portStart, global::mRemoteNG.Language.strPortScanSinglePort); this.portStart.Enter += new System.EventHandler(this.portStart_Enter); // // pnlIp @@ -432,7 +434,7 @@ namespace mRemoteNG.UI.Window this.ngCheckFirstPort.Size = new System.Drawing.Size(72, 17); this.ngCheckFirstPort.TabIndex = 17; this.ngCheckFirstPort.Text = "First Port"; - this.portScanToolTip.SetToolTip(this.ngCheckFirstPort, Language.strPortScanSinglePort); + this.portScanToolTip.SetToolTip(this.ngCheckFirstPort, global::mRemoteNG.Language.strPortScanSinglePort); this.ngCheckFirstPort.UseVisualStyleBackColor = true; this.ngCheckFirstPort.CheckedChanged += new System.EventHandler(this.NgCheckFirstPort_CheckedChanged); // @@ -445,7 +447,7 @@ namespace mRemoteNG.UI.Window this.ngCheckLastPort.Size = new System.Drawing.Size(70, 17); this.ngCheckLastPort.TabIndex = 18; this.ngCheckLastPort.Text = "Last Port"; - this.portScanToolTip.SetToolTip(this.ngCheckLastPort, Language.strPortScanSinglePort); + this.portScanToolTip.SetToolTip(this.ngCheckLastPort, global::mRemoteNG.Language.strPortScanSinglePort); this.ngCheckLastPort.UseVisualStyleBackColor = true; this.ngCheckLastPort.CheckedChanged += new System.EventHandler(this.NgCheckLastPort_CheckedChanged); // diff --git a/mRemoteV1/UI/Window/ScreenshotManagerWindow.cs b/mRemoteV1/UI/Window/ScreenshotManagerWindow.cs index 3293c9b0..eab5589d 100644 --- a/mRemoteV1/UI/Window/ScreenshotManagerWindow.cs +++ b/mRemoteV1/UI/Window/ScreenshotManagerWindow.cs @@ -23,127 +23,128 @@ namespace mRemoteNG.UI.Window internal SaveFileDialog dlgSaveSingleImage; internal FolderBrowserDialog dlgSaveAllImages; - internal FlowLayoutPanel flpScreenshots; - private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender vsToolStripExtender; + private FlowLayoutPanel flpScreenshots; + private VisualStudioToolStripExtender vsToolStripExtender; private readonly ToolStripRenderer _toolStripProfessionalRenderer = new ToolStripProfessionalRenderer(); private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.flpScreenshots = new System.Windows.Forms.FlowLayoutPanel(); - this.msMain = new System.Windows.Forms.MenuStrip(); - this.mMenFile = new System.Windows.Forms.ToolStripMenuItem(); - this.mMenFileSaveAll = new System.Windows.Forms.ToolStripMenuItem(); - this.mMenFileRemoveAll = new System.Windows.Forms.ToolStripMenuItem(); - this.cMenScreenshot = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cMenScreenshotCopy = new System.Windows.Forms.ToolStripMenuItem(); - this.cMenScreenshotSave = new System.Windows.Forms.ToolStripMenuItem(); - this.dlgSaveSingleImage = new System.Windows.Forms.SaveFileDialog(); - this.dlgSaveAllImages = new System.Windows.Forms.FolderBrowserDialog(); - this.msMain.SuspendLayout(); - this.cMenScreenshot.SuspendLayout(); - this.SuspendLayout(); + components = new System.ComponentModel.Container(); + flpScreenshots = new FlowLayoutPanel(); + msMain = new MenuStrip(); + mMenFile = new ToolStripMenuItem(); + mMenFileSaveAll = new ToolStripMenuItem(); + mMenFileRemoveAll = new ToolStripMenuItem(); + cMenScreenshot = new ContextMenuStrip(components); + cMenScreenshotCopy = new ToolStripMenuItem(); + cMenScreenshotSave = new ToolStripMenuItem(); + dlgSaveSingleImage = new SaveFileDialog(); + dlgSaveAllImages = new FolderBrowserDialog(); + msMain.SuspendLayout(); + cMenScreenshot.SuspendLayout(); + SuspendLayout(); // // flpScreenshots // - this.flpScreenshots.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.flpScreenshots.AutoScroll = true; - this.flpScreenshots.Location = new System.Drawing.Point(0, 26); - this.flpScreenshots.Name = "flpScreenshots"; - this.flpScreenshots.Size = new System.Drawing.Size(542, 296); - this.flpScreenshots.TabIndex = 0; + flpScreenshots.Anchor = AnchorStyles.Top | AnchorStyles.Bottom + | AnchorStyles.Left + | AnchorStyles.Right; + flpScreenshots.AutoScroll = true; + flpScreenshots.Location = new Point(0, 26); + flpScreenshots.Name = "flpScreenshots"; + flpScreenshots.Size = new Size(542, 296); + flpScreenshots.TabIndex = 0; // // msMain // - this.msMain.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.msMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.mMenFile}); - this.msMain.Location = new System.Drawing.Point(0, 0); - this.msMain.Name = "msMain"; - this.msMain.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; - this.msMain.Size = new System.Drawing.Size(542, 24); - this.msMain.TabIndex = 1; - this.msMain.Text = "MenuStrip1"; + msMain.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + msMain.Items.AddRange(new ToolStripItem[] { + mMenFile}); + msMain.Location = new Point(0, 0); + msMain.Name = "msMain"; + msMain.RenderMode = ToolStripRenderMode.Professional; + msMain.Size = new Size(542, 24); + msMain.TabIndex = 1; + msMain.Text = "MenuStrip1"; // // mMenFile // - this.mMenFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.mMenFileSaveAll, - this.mMenFileRemoveAll}); - this.mMenFile.Image = global::mRemoteNG.Resources.File; - this.mMenFile.Name = "mMenFile"; - this.mMenFile.Size = new System.Drawing.Size(53, 20); - this.mMenFile.Text = "&File"; - this.mMenFile.DropDownOpening += new System.EventHandler(this.mMenFile_DropDownOpening); + mMenFile.DropDownItems.AddRange(new ToolStripItem[] { + mMenFileSaveAll, + mMenFileRemoveAll}); + mMenFile.Image = Resources.File; + mMenFile.Name = "mMenFile"; + mMenFile.Size = new Size(53, 20); + mMenFile.Text = "&File"; + mMenFile.DropDownOpening += mMenFile_DropDownOpening; // // mMenFileSaveAll // - this.mMenFileSaveAll.Image = global::mRemoteNG.Resources.Screenshot_Save; - this.mMenFileSaveAll.Name = "mMenFileSaveAll"; - this.mMenFileSaveAll.Size = new System.Drawing.Size(130, 22); - this.mMenFileSaveAll.Text = "Save All"; - this.mMenFileSaveAll.Click += new System.EventHandler(this.mMenFileSaveAll_Click); + mMenFileSaveAll.Image = Resources.Screenshot_Save; + mMenFileSaveAll.Name = "mMenFileSaveAll"; + mMenFileSaveAll.Size = new Size(130, 22); + mMenFileSaveAll.Text = "Save All"; + mMenFileSaveAll.Click += mMenFileSaveAll_Click; // // mMenFileRemoveAll // - this.mMenFileRemoveAll.Image = global::mRemoteNG.Resources.Screenshot_Delete; - this.mMenFileRemoveAll.Name = "mMenFileRemoveAll"; - this.mMenFileRemoveAll.Size = new System.Drawing.Size(130, 22); - this.mMenFileRemoveAll.Text = "Remove All"; - this.mMenFileRemoveAll.Click += new System.EventHandler(this.mMenFileRemoveAll_Click); + mMenFileRemoveAll.Image = Resources.Screenshot_Delete; + mMenFileRemoveAll.Name = "mMenFileRemoveAll"; + mMenFileRemoveAll.Size = new Size(130, 22); + mMenFileRemoveAll.Text = "Remove All"; + mMenFileRemoveAll.Click += mMenFileRemoveAll_Click; // // cMenScreenshot // - this.cMenScreenshot.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cMenScreenshotCopy, - this.cMenScreenshotSave}); - this.cMenScreenshot.Name = "cMenScreenshot"; - this.cMenScreenshot.Size = new System.Drawing.Size(103, 48); + cMenScreenshot.Items.AddRange(new ToolStripItem[] { + cMenScreenshotCopy, + cMenScreenshotSave}); + cMenScreenshot.Name = "cMenScreenshot"; + cMenScreenshot.Size = new Size(103, 48); // // cMenScreenshotCopy // - this.cMenScreenshotCopy.Image = global::mRemoteNG.Resources.Screenshot_Copy; - this.cMenScreenshotCopy.Name = "cMenScreenshotCopy"; - this.cMenScreenshotCopy.Size = new System.Drawing.Size(102, 22); - this.cMenScreenshotCopy.Text = "Copy"; - this.cMenScreenshotCopy.Click += new System.EventHandler(this.cMenScreenshotCopy_Click); + cMenScreenshotCopy.Image = Resources.Screenshot_Copy; + cMenScreenshotCopy.Name = "cMenScreenshotCopy"; + cMenScreenshotCopy.Size = new Size(102, 22); + cMenScreenshotCopy.Text = "Copy"; + cMenScreenshotCopy.Click += cMenScreenshotCopy_Click; // // cMenScreenshotSave // - this.cMenScreenshotSave.Image = global::mRemoteNG.Resources.Screenshot_Save; - this.cMenScreenshotSave.Name = "cMenScreenshotSave"; - this.cMenScreenshotSave.Size = new System.Drawing.Size(102, 22); - this.cMenScreenshotSave.Text = "Save"; - this.cMenScreenshotSave.Click += new System.EventHandler(this.cMenScreenshotSave_Click); + cMenScreenshotSave.Image = Resources.Screenshot_Save; + cMenScreenshotSave.Name = "cMenScreenshotSave"; + cMenScreenshotSave.Size = new Size(102, 22); + cMenScreenshotSave.Text = "Save"; + cMenScreenshotSave.Click += cMenScreenshotSave_Click; // // dlgSaveSingleImage // - this.dlgSaveSingleImage.Filter = "Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group Fi" + + dlgSaveSingleImage.Filter = "Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group Fi" + "le (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Ne" + "twork Graphics File (.png)|*.png"; - this.dlgSaveSingleImage.FilterIndex = 4; + dlgSaveSingleImage.FilterIndex = 4; // // ScreenshotManagerWindow // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(542, 323); - this.Controls.Add(this.flpScreenshots); - this.Controls.Add(this.msMain); - this.HideOnClose = true; - this.Icon = global::mRemoteNG.Resources.Screenshot_Icon; - this.MainMenuStrip = this.msMain; - this.Name = "ScreenshotManagerWindow"; - this.TabText = "Screenshots"; - this.Text = "Screenshots"; - this.Load += new System.EventHandler(this.ScreenshotManager_Load); - this.msMain.ResumeLayout(false); - this.msMain.PerformLayout(); - this.cMenScreenshot.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); + AutoScaleDimensions = new SizeF(96F, 96F); + AutoScaleMode = AutoScaleMode.Dpi; + ClientSize = new Size(542, 323); + Controls.Add(flpScreenshots); + Controls.Add(msMain); + Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + HideOnClose = true; + Icon = Resources.Screenshot_Icon; + MainMenuStrip = msMain; + Name = "ScreenshotManagerWindow"; + TabText = "Screenshots"; + Text = "Screenshots"; + Load += ScreenshotManager_Load; + msMain.ResumeLayout(false); + msMain.PerformLayout(); + cMenScreenshot.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -152,19 +153,19 @@ namespace mRemoteNG.UI.Window private void ScreenshotManager_Load(object sender, EventArgs e) { ApplyTheme(); - Themes.ThemeManager.getInstance().ThemeChanged += ApplyTheme; + ThemeManager.getInstance().ThemeChanged += ApplyTheme; ApplyLanguage(); } private new void ApplyTheme() { - if (ThemeManager.getInstance().ThemingActive) + if (!ThemeManager.getInstance().ThemingActive) return; + base.ApplyTheme(); + vsToolStripExtender = new VisualStudioToolStripExtender(components) { - base.ApplyTheme(); - this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components); - vsToolStripExtender.DefaultRenderer = _toolStripProfessionalRenderer; - vsToolStripExtender.SetStyle(cMenScreenshot, ThemeManager.getInstance().ActiveTheme.Version, ThemeManager.getInstance().ActiveTheme.Theme); - } + DefaultRenderer = _toolStripProfessionalRenderer + }; + vsToolStripExtender.SetStyle(cMenScreenshot, ThemeManager.getInstance().ActiveTheme.Version, ThemeManager.getInstance().ActiveTheme.Theme); } private void ApplyLanguage() { diff --git a/mRemoteV1/UI/Window/UltraVNCWindow.cs b/mRemoteV1/UI/Window/UltraVNCWindow.cs index ae8d0b2d..571cdb8f 100644 --- a/mRemoteV1/UI/Window/UltraVNCWindow.cs +++ b/mRemoteV1/UI/Window/UltraVNCWindow.cs @@ -59,6 +59,7 @@ namespace mRemoteNG.UI.Window this.ClientSize = new System.Drawing.Size(446, 362); this.Controls.Add(this.pnlContainer); this.Controls.Add(this.tsMain); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Icon = global::mRemoteNG.Resources.UVNC_SC_Icon; this.Name = "UltraVNCWindow"; this.TabText = "UltraVNC SC"; diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 5c805ab3..fb9669a6 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -987,6 +987,9 @@ ActiveDirectoryImportWindow.cs Designer + + BaseWindow.cs + ComponentsCheckWindow.cs Designer From bacf832158c84e0da84798091f554eee25a065fc Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Thu, 3 Jan 2019 12:08:33 -0500 Subject: [PATCH 20/22] More Segoe UI --- mRemoteV1/Tools/ReconnectGroup.Designer.cs | 200 +++++++++++---------- mRemoteV1/Tools/ReconnectGroup.cs | 26 +-- mRemoteV1/Tools/ReconnectGroup.resx | 8 +- 3 files changed, 112 insertions(+), 122 deletions(-) diff --git a/mRemoteV1/Tools/ReconnectGroup.Designer.cs b/mRemoteV1/Tools/ReconnectGroup.Designer.cs index 6e6e1799..3902cd37 100644 --- a/mRemoteV1/Tools/ReconnectGroup.Designer.cs +++ b/mRemoteV1/Tools/ReconnectGroup.Designer.cs @@ -18,110 +18,111 @@ namespace mRemoteNG.Tools } } - //Required by the Windows Form Designer - private System.ComponentModel.Container components = null; - //NOTE: The following procedure is required by the Windows Form Designer //It can be modified using the Windows Form Designer. //Do not modify it using the code editor. [System.Diagnostics.DebuggerStepThrough()] private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.grpAutomaticReconnect = new System.Windows.Forms.GroupBox(); - this.lblAnimation = new UI.Controls.Base.NGLabel(); - this.btnClose = new UI.Controls.Base.NGButton(); - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - this.lblServerStatus = new UI.Controls.Base.NGLabel(); - this.chkReconnectWhenReady = new UI.Controls.Base.NGCheckBox(); - this.chkReconnectWhenReady.CheckedChanged += new System.EventHandler(this.chkReconnectWhenReady_CheckedChanged); - this.pbServerStatus = new System.Windows.Forms.PictureBox(); - this.tmrAnimation = new System.Windows.Forms.Timer(this.components); - this.tmrAnimation.Tick += new System.EventHandler(this.tmrAnimation_Tick); - this.grpAutomaticReconnect.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize) this.pbServerStatus).BeginInit(); - this.SuspendLayout(); - // - //grpAutomaticReconnect - // - this.grpAutomaticReconnect.BackColor = System.Drawing.Color.White; - this.grpAutomaticReconnect.Controls.Add(this.lblAnimation); - this.grpAutomaticReconnect.Controls.Add(this.btnClose); - this.grpAutomaticReconnect.Controls.Add(this.lblServerStatus); - this.grpAutomaticReconnect.Controls.Add(this.chkReconnectWhenReady); - this.grpAutomaticReconnect.Controls.Add(this.pbServerStatus); - this.grpAutomaticReconnect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.grpAutomaticReconnect.Location = new System.Drawing.Point(3, 0); - this.grpAutomaticReconnect.Name = "grpAutomaticReconnect"; - this.grpAutomaticReconnect.Size = new System.Drawing.Size(171, 98); - this.grpAutomaticReconnect.TabIndex = 8; - this.grpAutomaticReconnect.TabStop = false; - this.grpAutomaticReconnect.Text = Language.strGroupboxAutomaticReconnect; - // - //lblAnimation - // - this.lblAnimation.Location = new System.Drawing.Point(124, 22); - this.lblAnimation.Name = "lblAnimation"; - this.lblAnimation.Size = new System.Drawing.Size(32, 17); - this.lblAnimation.TabIndex = 8; - // - //btnClose - // - this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnClose.Location = new System.Drawing.Point(6, 67); - this.btnClose.Name = "btnClose"; - this.btnClose.Size = new System.Drawing.Size(159, 23); - this.btnClose.TabIndex = 7; - this.btnClose.Text = Language.strButtonClose; - this.btnClose.UseVisualStyleBackColor = true; - // - //lblServerStatus - // - this.lblServerStatus.AutoSize = true; - this.lblServerStatus.Location = new System.Drawing.Point(15, 24); - this.lblServerStatus.Name = "lblServerStatus"; - this.lblServerStatus.Size = new System.Drawing.Size(74, 13); - this.lblServerStatus.TabIndex = 3; - this.lblServerStatus.Text = "Server Status:"; - // - //chkReconnectWhenReady - // - this.chkReconnectWhenReady.AutoSize = true; - this.chkReconnectWhenReady.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.chkReconnectWhenReady.Location = new System.Drawing.Point(18, 44); - this.chkReconnectWhenReady.Name = "chkReconnectWhenReady"; - this.chkReconnectWhenReady.Size = new System.Drawing.Size(129, 17); - this.chkReconnectWhenReady.TabIndex = 6; - this.chkReconnectWhenReady.Text = Language.strCheckboxReconnectWhenReady; - this.chkReconnectWhenReady.UseVisualStyleBackColor = true; - // - //pbServerStatus - // - this.pbServerStatus.Image = Resources.HostStatus_Check; - this.pbServerStatus.Location = new System.Drawing.Point(99, 23); - this.pbServerStatus.Name = "pbServerStatus"; - this.pbServerStatus.Size = new System.Drawing.Size(16, 16); - this.pbServerStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.pbServerStatus.TabIndex = 5; - this.pbServerStatus.TabStop = false; - // - //tmrAnimation - // - this.tmrAnimation.Enabled = true; - this.tmrAnimation.Interval = 200; - // - //ReconnectGroup - // - this.AutoScaleDimensions = new System.Drawing.SizeF((float) (6.0F), (float) (13.0F)); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.grpAutomaticReconnect); - this.Name = "ReconnectGroup"; - this.Size = new System.Drawing.Size(228, 138); - this.grpAutomaticReconnect.ResumeLayout(false); - this.grpAutomaticReconnect.PerformLayout(); - ((System.ComponentModel.ISupportInitialize) this.pbServerStatus).EndInit(); - this.ResumeLayout(false); + this.components = new System.ComponentModel.Container(); + this.grpAutomaticReconnect = new System.Windows.Forms.GroupBox(); + this.lblAnimation = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.btnClose = new mRemoteNG.UI.Controls.Base.NGButton(); + this.lblServerStatus = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.chkReconnectWhenReady = new mRemoteNG.UI.Controls.Base.NGCheckBox(); + this.pbServerStatus = new System.Windows.Forms.PictureBox(); + this.tmrAnimation = new System.Windows.Forms.Timer(this.components); + this.grpAutomaticReconnect.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbServerStatus)).BeginInit(); + this.SuspendLayout(); + // + // grpAutomaticReconnect + // + this.grpAutomaticReconnect.BackColor = System.Drawing.Color.White; + this.grpAutomaticReconnect.Controls.Add(this.lblAnimation); + this.grpAutomaticReconnect.Controls.Add(this.btnClose); + this.grpAutomaticReconnect.Controls.Add(this.lblServerStatus); + this.grpAutomaticReconnect.Controls.Add(this.chkReconnectWhenReady); + this.grpAutomaticReconnect.Controls.Add(this.pbServerStatus); + this.grpAutomaticReconnect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.grpAutomaticReconnect.Location = new System.Drawing.Point(3, 0); + this.grpAutomaticReconnect.Name = "grpAutomaticReconnect"; + this.grpAutomaticReconnect.Size = new System.Drawing.Size(171, 98); + this.grpAutomaticReconnect.TabIndex = 8; + this.grpAutomaticReconnect.TabStop = false; + this.grpAutomaticReconnect.Text = "Automatic Reconnect"; + // + // lblAnimation + // + this.lblAnimation.Location = new System.Drawing.Point(124, 22); + this.lblAnimation.Name = "lblAnimation"; + this.lblAnimation.Size = new System.Drawing.Size(32, 17); + this.lblAnimation.TabIndex = 8; + // + // btnClose + // + this.btnClose._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER; + this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnClose.Location = new System.Drawing.Point(6, 67); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(159, 23); + this.btnClose.TabIndex = 7; + this.btnClose.Text = global::mRemoteNG.Language.strButtonClose; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // lblServerStatus + // + this.lblServerStatus.AutoSize = true; + this.lblServerStatus.Location = new System.Drawing.Point(15, 24); + this.lblServerStatus.Name = "lblServerStatus"; + this.lblServerStatus.Size = new System.Drawing.Size(76, 13); + this.lblServerStatus.TabIndex = 3; + this.lblServerStatus.Text = "Server Status:"; + // + // chkReconnectWhenReady + // + this.chkReconnectWhenReady._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER; + this.chkReconnectWhenReady.AutoSize = true; + this.chkReconnectWhenReady.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.chkReconnectWhenReady.Location = new System.Drawing.Point(18, 44); + this.chkReconnectWhenReady.Name = "chkReconnectWhenReady"; + this.chkReconnectWhenReady.Size = new System.Drawing.Size(140, 17); + this.chkReconnectWhenReady.TabIndex = 6; + this.chkReconnectWhenReady.Text = global::mRemoteNG.Language.strCheckboxReconnectWhenReady; + this.chkReconnectWhenReady.UseVisualStyleBackColor = true; + this.chkReconnectWhenReady.CheckedChanged += new System.EventHandler(this.chkReconnectWhenReady_CheckedChanged); + // + // pbServerStatus + // + this.pbServerStatus.Image = global::mRemoteNG.Resources.HostStatus_Check; + this.pbServerStatus.Location = new System.Drawing.Point(99, 23); + this.pbServerStatus.Name = "pbServerStatus"; + this.pbServerStatus.Size = new System.Drawing.Size(16, 16); + this.pbServerStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pbServerStatus.TabIndex = 5; + this.pbServerStatus.TabStop = false; + // + // tmrAnimation + // + this.tmrAnimation.Enabled = true; + this.tmrAnimation.Interval = 200; + this.tmrAnimation.Tick += new System.EventHandler(this.tmrAnimation_Tick); + // + // ReconnectGroup + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.grpAutomaticReconnect); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "ReconnectGroup"; + this.Size = new System.Drawing.Size(228, 138); + this.grpAutomaticReconnect.ResumeLayout(false); + this.grpAutomaticReconnect.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbServerStatus)).EndInit(); + this.ResumeLayout(false); + } internal System.Windows.Forms.GroupBox grpAutomaticReconnect; internal UI.Controls.Base.NGButton btnClose; @@ -130,5 +131,6 @@ namespace mRemoteNG.Tools internal System.Windows.Forms.PictureBox pbServerStatus; internal System.Windows.Forms.Timer tmrAnimation; internal UI.Controls.Base.NGLabel lblAnimation; - } + private System.ComponentModel.IContainer components; + } } \ No newline at end of file diff --git a/mRemoteV1/Tools/ReconnectGroup.cs b/mRemoteV1/Tools/ReconnectGroup.cs index bfc6510d..d78361e2 100644 --- a/mRemoteV1/Tools/ReconnectGroup.cs +++ b/mRemoteV1/Tools/ReconnectGroup.cs @@ -12,11 +12,8 @@ namespace mRemoteNG.Tools private bool _ServerReady; public bool ServerReady { - get - { - return _ServerReady; - } - set + get => _ServerReady; + set { SetStatusImage(value ? Resources.HostStatus_On : Resources.HostStatus_Off); @@ -46,11 +43,8 @@ namespace mRemoteNG.Tools private bool _ReconnectWhenReady; public bool ReconnectWhenReady { - get - { - return _ReconnectWhenReady; - } - set + get => _ReconnectWhenReady; + set { _ReconnectWhenReady = value; SetCheckbox(value); @@ -76,15 +70,9 @@ namespace mRemoteNG.Tools public event CloseClickedEventHandler CloseClicked { - add - { - CloseClickedEvent = (CloseClickedEventHandler) Delegate.Combine(CloseClickedEvent, value); - } - remove - { - CloseClickedEvent = (CloseClickedEventHandler) Delegate.Remove(CloseClickedEvent, value); - } - } + add => CloseClickedEvent = (CloseClickedEventHandler) Delegate.Combine(CloseClickedEvent, value); + remove => CloseClickedEvent = (CloseClickedEventHandler) Delegate.Remove(CloseClickedEvent, value); + } private void btnClose_Click(object sender, EventArgs e) diff --git a/mRemoteV1/Tools/ReconnectGroup.resx b/mRemoteV1/Tools/ReconnectGroup.resx index 5a7628ea..34ccac31 100644 --- a/mRemoteV1/Tools/ReconnectGroup.resx +++ b/mRemoteV1/Tools/ReconnectGroup.resx @@ -112,15 +112,15 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 18, 18 - + 60 \ No newline at end of file From 6409cb276fe50441557e9fba3c8bf7b513f87489 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Fri, 4 Jan 2019 13:58:17 -0500 Subject: [PATCH 21/22] minor theme related fixes --- mRemoteV1/Themes/ThemeManager.cs | 7 +++- mRemoteV1/UI/Controls/Base/NGCheckBox.cs | 10 ++++- .../Forms/OptionsPages/ThemePage.Designer.cs | 37 ++++++++++--------- mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs | 26 +++++++------ 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/mRemoteV1/Themes/ThemeManager.cs b/mRemoteV1/Themes/ThemeManager.cs index 8b0c3835..0bddccfe 100644 --- a/mRemoteV1/Themes/ThemeManager.cs +++ b/mRemoteV1/Themes/ThemeManager.cs @@ -12,8 +12,8 @@ using WeifenLuo.WinFormsUI.Docking; namespace mRemoteNG.Themes { /// - /// Main class of the theming component. Centralices creation, loading and deletion of themes - /// Implmeented as a singleton + /// Main class of the theming component. Centralizes creation, loading and deletion of themes + /// Implemented as a singleton /// public class ThemeManager { @@ -232,6 +232,9 @@ namespace mRemoteNG.Themes NotifyThemeChanged(this, new PropertyChangedEventArgs("theme")); } } + + public int ThemesCount => themes.Count; + #endregion } } \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/Base/NGCheckBox.cs b/mRemoteV1/UI/Controls/Base/NGCheckBox.cs index 393d15a5..3b1c81de 100644 --- a/mRemoteV1/UI/Controls/Base/NGCheckBox.cs +++ b/mRemoteV1/UI/Controls/Base/NGCheckBox.cs @@ -5,6 +5,12 @@ using System.Windows.Forms; namespace mRemoteNG.UI.Controls.Base { //Extended CheckBox class, the NGCheckBox onPaint completely repaint the control + + // + // If this causes design issues in the future, may want to think about migrating to + // CheckBoxRenderer: + // https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.checkboxrenderer?view=netframework-4.6 + // public class NGCheckBox : CheckBox { private ThemeManager _themeManager; @@ -14,6 +20,7 @@ namespace mRemoteNG.UI.Controls.Base public NGCheckBox() { + InitializeComponent(); ThemeManager.getInstance().ThemeChanged += OnCreateControl; var display = new DisplayProperties(); _checkboxSize = new Size(display.ScaleWidth(11), display.ScaleHeight(11)); @@ -114,7 +121,8 @@ namespace mRemoteNG.UI.Controls.Base if (Checked) { - e.Graphics.DrawString("\u2714", new Font(Font.FontFamily, 7f), new SolidBrush(glyph), -1, 1); + // | \uE001 |  |  | is the tick/check mark and it exists in Segoe UI Symbol at least... + e.Graphics.DrawString("\uE001", new Font("Segoe UI Symbol", 7.75f), new SolidBrush(glyph), -4, 0); } var textRect = new Rectangle(_textXCoord, 0, Width - 16, Height); diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs index 1ffe8c3b..4c969da8 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.Designer.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.btnThemeDelete = new mRemoteNG.UI.Controls.Base.NGButton(); this.btnThemeNew = new mRemoteNG.UI.Controls.Base.NGButton(); this.cboTheme = new mRemoteNG.UI.Controls.Base.NGComboBox(); - this.themeEnableCombo = new mRemoteNG.UI.Controls.Base.NGCheckBox(); + this.themeEnableChk = new mRemoteNG.UI.Controls.Base.NGCheckBox(); this.listPalette = new mRemoteNG.UI.Controls.Base.NGListView(); this.keyCol = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); this.ColorCol = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); @@ -84,18 +84,19 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.cboTheme.TabIndex = 0; this.cboTheme.SelectionChangeCommitted += new System.EventHandler(this.cboTheme_SelectionChangeCommitted); // - // themeEnableCombo + // themeEnableChk // - this.themeEnableCombo._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER; - this.themeEnableCombo.AutoSize = true; - this.themeEnableCombo.Dock = System.Windows.Forms.DockStyle.Fill; - this.themeEnableCombo.Location = new System.Drawing.Point(3, 3); - this.themeEnableCombo.Name = "themeEnableCombo"; - this.themeEnableCombo.Size = new System.Drawing.Size(175, 22); - this.themeEnableCombo.TabIndex = 5; - this.themeEnableCombo.Text = "Enable Themes"; - this.themeEnableCombo.UseVisualStyleBackColor = true; - this.themeEnableCombo.CheckedChanged += new System.EventHandler(this.themeEnableCombo_CheckedChanged); + this.themeEnableChk._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER; + this.themeEnableChk.AutoSize = true; + this.themeEnableChk.Dock = System.Windows.Forms.DockStyle.Fill; + this.themeEnableChk.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.themeEnableChk.Location = new System.Drawing.Point(3, 3); + this.themeEnableChk.Name = "themeEnableChk"; + this.themeEnableChk.Size = new System.Drawing.Size(140, 22); + this.themeEnableChk.TabIndex = 5; + this.themeEnableChk.Text = "Enable Themes"; + this.themeEnableChk.UseVisualStyleBackColor = true; + this.themeEnableChk.CheckedChanged += new System.EventHandler(this.ThemeEnableChkCheckedChanged); // // listPalette // @@ -143,9 +144,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages // this.labelRestart.AutoSize = true; this.labelRestart.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelRestart.Location = new System.Drawing.Point(184, 0); + this.labelRestart.Location = new System.Drawing.Point(149, 0); this.labelRestart.Name = "labelRestart"; - this.labelRestart.Size = new System.Drawing.Size(417, 28); + this.labelRestart.Size = new System.Drawing.Size(452, 28); this.labelRestart.TabIndex = 4; this.labelRestart.Text = "Warning: Restart is required to disable the themes or to completely apply a new o" + "ne"; @@ -171,10 +172,10 @@ namespace mRemoteNG.UI.Forms.OptionsPages // tableLayoutPanel2 // this.tableLayoutPanel2.ColumnCount = 2; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24.33775F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 75.66225F)); this.tableLayoutPanel2.Controls.Add(this.labelRestart, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.themeEnableCombo, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.themeEnableChk, 0, 0); this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 459); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; @@ -220,7 +221,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages internal Controls.Base.NGButton btnThemeDelete; internal Controls.Base.NGButton btnThemeNew; internal Controls.Base.NGComboBox cboTheme; - private Controls.Base.NGCheckBox themeEnableCombo; + private Controls.Base.NGCheckBox themeEnableChk; private Controls.Base.NGListView listPalette; private Controls.Base.NGLabel labelRestart; private BrightIdeasSoftware.OLVColumn keyCol; diff --git a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs index 722ff462..0f584ce2 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/ThemePage.cs @@ -43,7 +43,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages btnThemeDelete.Text = Language.strOptionsThemeButtonDelete; btnThemeNew.Text = Language.strOptionsThemeButtonNew; labelRestart.Text = Language.strOptionsThemeThemeChaangeWarning; - themeEnableCombo.Text = Language.strOptionsThemeEnableTheming; + themeEnableChk.Text = Language.strOptionsThemeEnableTheming; } private new void ApplyTheme() @@ -55,7 +55,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages public override void LoadSettings() { - themeEnableCombo.CheckedChanged -= themeEnableCombo_CheckedChanged; + themeEnableChk.CheckedChanged -= ThemeEnableChkCheckedChanged; base.SaveSettings(); //At first we cannot create or delete themes, depends later on the type of selected theme btnThemeNew.Enabled = false; @@ -72,16 +72,16 @@ namespace mRemoteNG.UI.Forms.OptionsPages //Load theming active property and disable controls if (_themeManager.ThemingActive) { - themeEnableCombo.Checked = true; + themeEnableChk.Checked = true; } else { - themeEnableCombo.Checked = false; + themeEnableChk.Checked = false; cboTheme.Enabled = false; // reset to the default theme when disabling theme support _themeManager.ActiveTheme = _themeManager.DefaultTheme; } - themeEnableCombo.CheckedChanged += themeEnableCombo_CheckedChanged; + themeEnableChk.CheckedChanged += ThemeEnableChkCheckedChanged; } private void ListPalette_FormatCell(object sender, FormatCellEventArgs e) @@ -206,26 +206,28 @@ namespace mRemoteNG.UI.Forms.OptionsPages #endregion - private void themeEnableCombo_CheckedChanged(object sender, EventArgs e) + private void ThemeEnableChkCheckedChanged(object sender, EventArgs e) { - if (themeEnableCombo.Checked) + if (themeEnableChk.Checked) { - _themeManager.ThemingActive = true; - if(_themeManager.ThemingActive) + + if(_themeManager.ThemesCount > 0) { - themeEnableCombo.Checked = true; + _themeManager.ThemingActive = true; cboTheme.Enabled = true; } else { TaskDialog.CTaskDialog.ShowTaskDialogBox(this, Language.strErrors, Language.strOptionsThemeErrorNoThemes, "", "", "", "", "", "", TaskDialog.ETaskDialogButtons.Ok, TaskDialog.ESysIcons.Error, TaskDialog.ESysIcons.Information, 0); - themeEnableCombo.Checked = false; + themeEnableChk.Checked = false; + _themeManager.ThemingActive = false; + cboTheme.Enabled = false; } } else { _themeManager.ThemingActive = false; - themeEnableCombo.Checked = false; + themeEnableChk.Checked = false; cboTheme.Enabled = false; } LoadSettings(); From 31f961147830b7b2c19880be4bebb7ed14877049 Mon Sep 17 00:00:00 2001 From: Sean Kaim Date: Fri, 4 Jan 2019 17:19:39 -0500 Subject: [PATCH 22/22] update external references ADTree from mRemoteNG/ADTree VncSharp from mRemoteNG/VncSharp with upstream changes included --- mRemoteV1/References/ADTree.dll | Bin 29184 -> 23552 bytes mRemoteV1/References/VncSharp.dll | Bin 145408 -> 146944 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mRemoteV1/References/ADTree.dll b/mRemoteV1/References/ADTree.dll index 98e435b33848fa1e0650221cd0e2f74970db40b5..c6551e06e0bcbab8d0835fb4248bdd76730667b2 100644 GIT binary patch delta 12315 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 literal 29184 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

23t0ov@Hhx8WjT5zj( zJ?IHxbD<&Ptq}HNR7iuTJD!L6*xQ31r9VZd;ey?Y$TW(iHDG(%0VdL3Fom9rObbv3 zH6Sy9{udk~=~470(i0^;mA;D{2}4ma_kzP?hNy?=mZ(Ji2#t?AW;{-7z(?ufs1fF) zbS!F@xf`{1A^myOG4pZCjy{I;;OI{z{Rz^WqVKj>qjRh62f#uP)<1siE%Pw92@|}W z&Jz|2X9&xLb;3p=g|Ma)`h^L?Tw$KDP&h+aCM*|j6K)S#9e{~C$s7?j3Qr5El{6sq z3loI7!aQN2aE7o(zw#Zw%vNY9mU*Tw$TG%$2w0(p+Jo zuuQm3SSLIpJS|kQte@aAj?;O<8Nzbmc4okPS~A<(u@ZG)`h~f|LSdP3o3KvU=%zcd zextB1fzt*>hYZ61So}}H{|x+la3N}_V zn+Nc6${6botI)c~T4_~SmDVP!+Iq^`Z5^-F%UEKgN^ic#|D2o|tH9q&!RXV!tCuFK)wh)1GWjFRc2=P(5)b z9)(xh#o*dfXX=g9^FFu=g=~Kg!}7W|%wY400j~C5cV6P)bvV5)buu_U^)B$! zn`VLEr_KYvOW_xdqgO4>@3HHmDYBA&UaGi$~tFLUt0 z+fh|vsjQT9xbqNBpMaXW;WD6y{)+n#;q)n}sXKOR9{MMu2yYdvIcq6L1%8SzMR?X4 z)U*k2@K#tHIST2`_=1F&NP$=$Kx2`v0yVyej0X>5KZl#lATA%%B%}|4nx3cIk$wTx z^e#;S&(l;$J_9v);-Kr2QfQCp^$hCY zM0cwKE2HqOJ*D*$Q0Qzh3s3 zV<+4wt9F*+X43U~)y^*5W^(_y$=sU=|UX&|tpitr+#N5k725Ny)^!7ZnxFn@}`+QPJY6@^&h+W_mld((o)T zF1mm0yprWLA9YY)D|@JzulZvq)!PV}xO{PG(cH8l^B2|FiK>^U{XIpc({D63hZeK6 zreBKsP^+0WVQH$?zFKv3@w}>|nJP^e%&++@Q)PwbvhswY8M6wC=N8RhQYw`v7R|dZ zfBT~1(xT=H6N>IGDqbq0nuI*HM%Vmmh}y1d#tc;}Y>)Q=Tm|_t`K#(jsSavg)yJb$ zg|{^(Jy~E)@n|(DBz%?CGq3*pjw4ogcxL1JfwYRC0Muyk1J6K_19*<@DRR;^- zvvnB1>_i!sg;&Iudm#?%fV76(!OwMsg;njnLuCcLjs^7&UXRxzRCFTnxKFgN{EF&G z!4D%uS*;=M&?FH}ujLr{9a<*}3px=Bw%<@5k7N3k@-iIhN0{R`(5wd~Mh8p#%2jJ_ z&sQGjEAIfgx2oS%73N)K*{Bk+%3C#Ns%qz5)!NNQR4tsU;tZeTt*V@=(p1-)=ccMM zrP8Z%?o`V=+vt?1BUvHJS9T7Y>hXB}TKURh-rX3x>is)aTOzVrA=3!AyMft^x7nICcJ_edTuH$bi@k6(2@4f1& zs>knBqxi>k+`q9{Uoo+$bg{p5PLUs>JF{q!fBtO$;9`izAw8~mSy739_WVVnAm(N+ znLWE`QO}<9=M}MPR;oX}Z>k>}8Mr~2kJrjI*&8yyWd4#x{`{f^rE^%7+Yl2SZm^M& z>W2wff|c~XRp;+hH8nd*RO9l%hRHukdH&2RFJ*kTX~LPG^gZ8WS8{k&%(DxBwbmSe zwxDiB>EDj5se1RP2Zjs_1m1dg$AYNpMdp7`xqscK-2?VTx_gu-@0Gsy?*H%(|HliR zKdo!?R$;@-}|jPm(E?Go$9~* zO;UaN5ZsF;TJ-)+)A$q7MtFHTZ4Sj@;&Vk4Cgx8p|LXWZ=678)vi8+kC*S?)iYe^a zA^oRKT8u%Ow)nmo#dE8MpH-J|_qm}p*LVNE}}fD n)_l`juS3Mutih!xj=Y0?bU%Dt?4#Ri^X8g}zWNKbv6u6I1+UA( delta 53556 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�PfHc^FK`e9Z|?hfH~el>)3VrGHF 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 kYn4j#KRii~!?tO6w$8-ne6}8>*G=$;