Merge branch 'develop' into develop

This commit is contained in:
David Sparer
2018-01-02 08:22:00 -06:00
committed by GitHub
18 changed files with 461 additions and 222 deletions

View File

@@ -1,3 +1,15 @@
1.76.0 Alpha 2 (201x-xx-xx):
Features/Enhancements:
----------------------
#838: Added an option to lock toolbars
#829: Add option that fixes connecting to Azure instances with LoadBalanceInfo
Fixes:
------
1.76.0 Alpha 1 (2017-12-08):
Features/Enhancements:

View File

@@ -21,6 +21,7 @@ Bruce (github.com/brucetp)
Camilo Alvarez (github.com/jotatsu)
github.com/DamianBis
github.com/pfjason
github.com/sirLoaf
Past Contributors

View File

@@ -33,6 +33,13 @@ namespace mRemoteNG.Config.Connections
public void Save(ConnectionTreeModel connectionTreeModel)
{
if (SqlUserIsReadOnly())
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Trying to save connection tree but the SQL read only checkbox is checked, aborting!");
return;
}
using (var sqlConnector = DatabaseConnectorFactory.SqlDatabaseConnectorFromSettings())
{
sqlConnector.Connect();
@@ -109,5 +116,11 @@ namespace mRemoteNG.Config.Connections
sqlQuery = new SqlCommand("INSERT INTO tblUpdate (LastUpdate) VALUES(\'" + MiscTools.DBDate(DateTime.Now) + "\')", sqlDatabaseConnector.SqlConnection);
sqlQuery.ExecuteNonQuery();
}
private bool SqlUserIsReadOnly()
{
return mRemoteNG.Settings.Default.SQLReadOnly;
}
}
}

View File

@@ -1,7 +1,8 @@
using System.Data;
using System.Data.SqlClient;
using mRemoteNG.Config.DatabaseConnectors;
using mRemoteNG.Messages;
using mRemoteNG.App;
namespace mRemoteNG.Config.DataProviders
{
@@ -31,6 +32,12 @@ namespace mRemoteNG.Config.DataProviders
public void Save(DataTable dataTable)
{
if (SqlUserIsReadOnly())
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Trying to save connections but the SQL read only checkbox is checked, aborting!");
return;
}
if (!SqlDatabaseConnector.IsConnected)
OpenConnection();
using (var sqlBulkCopy = new SqlBulkCopy(SqlDatabaseConnector.SqlConnection))
@@ -51,5 +58,11 @@ namespace mRemoteNG.Config.DataProviders
{
SqlDatabaseConnector.Disconnect();
}
private bool SqlUserIsReadOnly()
{
return mRemoteNG.Settings.Default.SQLReadOnly;
}
}
}

View File

@@ -19,7 +19,10 @@ namespace mRemoteNG.Connection.Protocol
switch (connectionInfo.Protocol)
{
case ProtocolType.RDP:
newProtocol = new RdpProtocol();
newProtocol = new RdpProtocol
{
LoadBalanceInfoUseUtf8 = Settings.Default.RdpLoadBalanceInfoUseUtf8
};
((RdpProtocol) newProtocol).tmrReconnect.Elapsed += ((RdpProtocol) newProtocol).tmrReconnect_Elapsed;
break;
case ProtocolType.VNC:

View File

@@ -0,0 +1,40 @@
using System.Text;
namespace mRemoteNG.Connection.Protocol.RDP
{
public class AzureLoadBalanceInfoEncoder
{
public string Encode(string loadBalanceInfo)
{
// The ActiveX component requires a UTF-8 encoded string, but .NET uses
// UTF-16 encoded strings by default. The following code converts
// the UTF-16 encoded string so that the byte-representation of the
// LoadBalanceInfo string object will "appear" as UTF-8 to the Active component.
// Furthermore, since the final string still has to be shoehorned into
// a UTF-16 encoded string, I pad an extra space in case the number of
// bytes would be odd, in order to prevent the byte conversion from
// mangling the string at the end. The space is ignored by the RDP
// protocol as long as it is inserted at the end.
// Finally, it is required that the LoadBalanceInfo setting is postfixed
// with \r\n in order to work properly. Note also that \r\n MUST be
// the last two characters, so the space padding has to be inserted first.
// The following code has been tested with Windows Azure connections
// only - I am aware there are other types of RDP connections that
// require the LoadBalanceInfo parameter which I have not tested
// (e.g., Multi-Server Terminal Services Gateway), that may or may not
// work properly.
//
// Sources:
// 1. http://stackoverflow.com/questions/13536267/how-to-connect-to-azure-vm-with-remote-desktop-activex
// 2. http://social.technet.microsoft.com/Forums/windowsserver/en-US/e68d4e9a-1c8a-4e55-83b3-e3b726ff5346/issue-with-using-advancedsettings2loadbalanceinfo
// 3. Manual comparison of raw packets between Windows RDP client and Terminals using WireShark.
// Copied from https://github.com/OliverKohlDSc/Terminals/blob/master/Terminals/Connections/RDPConnection.cs
if (loadBalanceInfo.Length % 2 == 1)
loadBalanceInfo += " ";
loadBalanceInfo += "\r\n";
var bytes = Encoding.UTF8.GetBytes(loadBalanceInfo);
return Encoding.Unicode.GetString(bytes);
}
}
}

View File

@@ -87,6 +87,8 @@ namespace mRemoteNG.Connection.Protocol.RDP
}
}
}
public bool LoadBalanceInfoUseUtf8 { get; set; }
#endregion
#region Constructors
@@ -601,7 +603,9 @@ namespace mRemoteNG.Connection.Protocol.RDP
}
try
{
_rdpClient.AdvancedSettings2.LoadBalanceInfo = _connectionInfo.LoadBalanceInfo;
_rdpClient.AdvancedSettings2.LoadBalanceInfo = LoadBalanceInfoUseUtf8
? new AzureLoadBalanceInfoEncoder().Encode(_connectionInfo.LoadBalanceInfo)
: _connectionInfo.LoadBalanceInfo;
}
catch (Exception ex)
{

View File

@@ -2626,5 +2626,41 @@ namespace mRemoteNG {
this["UseFilterSearch"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool SQLReadOnly {
get {
return ((bool)(this["SQLReadOnly"]));
}
set {
this["SQLReadOnly"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool LockToolbars {
get {
return ((bool)(this["LockToolbars"]));
}
set {
this["LockToolbars"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool RdpLoadBalanceInfoUseUtf8 {
get {
return ((bool)(this["RdpLoadBalanceInfoUseUtf8"]));
}
set {
this["RdpLoadBalanceInfoUseUtf8"] = value;
}
}
}
}

View File

@@ -653,5 +653,14 @@
<Setting Name="UseFilterSearch" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="SQLReadOnly" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="LockToolbars" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="RdpLoadBalanceInfoUseUtf8" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -159,6 +159,15 @@ namespace mRemoteNG {
}
}
/// <summary>
/// Looks up a localized string similar to Use UTF8 encoding for RDP &quot;Load Balance Info&quot; property.
/// </summary>
internal static string LoadBalanceInfoUseUtf8 {
get {
return ResourceManager.GetString("LoadBalanceInfoUseUtf8", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Login failed for user &apos;{0}&apos;..
/// </summary>
@@ -2894,6 +2903,15 @@ namespace mRemoteNG {
}
}
/// <summary>
/// Looks up a localized string similar to Read Only:.
/// </summary>
internal static string strLabelReadOnly {
get {
return ResourceManager.GetString("strLabelReadOnly", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Released under the GNU General Public License (GPL).
/// </summary>

View File

@@ -2625,4 +2625,10 @@ This page will walk you through the process of upgrading your connections file o
<data name="TestConnection" xml:space="preserve">
<value>Test Connection</value>
</data>
<data name="strLabelReadOnly" xml:space="preserve">
<value>Read Only:</value>
</data>
<data name="LoadBalanceInfoUseUtf8" xml:space="preserve">
<value>Use UTF8 encoding for RDP "Load Balance Info" property</value>
</data>
</root>

View File

@@ -43,6 +43,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.lblUVNCSCPort = new mRemoteNG.UI.Controls.Base.NGLabel();
this.lblSeconds = new mRemoteNG.UI.Controls.Base.NGLabel();
this.btnBrowseCustomPuttyPath = new mRemoteNG.UI.Controls.Base.NGButton();
this.chkLoadBalanceInfoUseUtf8 = new mRemoteNG.UI.Controls.Base.NGCheckBox();
((System.ComponentModel.ISupportInitialize)(this.numPuttyWaitTime)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numUVNCSCPort)).BeginInit();
this.SuspendLayout();
@@ -60,7 +61,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
// lblMaximumPuttyWaitTime
//
this.lblMaximumPuttyWaitTime.Location = new System.Drawing.Point(3, 152);
this.lblMaximumPuttyWaitTime.Location = new System.Drawing.Point(3, 175);
this.lblMaximumPuttyWaitTime.Name = "lblMaximumPuttyWaitTime";
this.lblMaximumPuttyWaitTime.Size = new System.Drawing.Size(364, 13);
this.lblMaximumPuttyWaitTime.TabIndex = 7;
@@ -81,7 +82,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
// numPuttyWaitTime
//
this.numPuttyWaitTime.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numPuttyWaitTime.Location = new System.Drawing.Point(373, 150);
this.numPuttyWaitTime.Location = new System.Drawing.Point(373, 173);
this.numPuttyWaitTime.Maximum = new decimal(new int[] {
999,
0,
@@ -89,7 +90,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
0});
this.numPuttyWaitTime.Name = "numPuttyWaitTime";
this.numPuttyWaitTime.Size = new System.Drawing.Size(49, 20);
this.numPuttyWaitTime.TabIndex = 8;
this.numPuttyWaitTime.TabIndex = 7;
this.numPuttyWaitTime.Value = new decimal(new int[] {
5,
0,
@@ -100,17 +101,17 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
this.chkUseCustomPuttyPath._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
this.chkUseCustomPuttyPath.AutoSize = true;
this.chkUseCustomPuttyPath.Location = new System.Drawing.Point(3, 49);
this.chkUseCustomPuttyPath.Location = new System.Drawing.Point(3, 72);
this.chkUseCustomPuttyPath.Name = "chkUseCustomPuttyPath";
this.chkUseCustomPuttyPath.Size = new System.Drawing.Size(146, 17);
this.chkUseCustomPuttyPath.TabIndex = 2;
this.chkUseCustomPuttyPath.TabIndex = 3;
this.chkUseCustomPuttyPath.Text = "Use custom PuTTY path:";
this.chkUseCustomPuttyPath.UseVisualStyleBackColor = true;
this.chkUseCustomPuttyPath.CheckedChanged += new System.EventHandler(this.chkUseCustomPuttyPath_CheckedChanged);
//
// lblConfigurePuttySessions
//
this.lblConfigurePuttySessions.Location = new System.Drawing.Point(3, 121);
this.lblConfigurePuttySessions.Location = new System.Drawing.Point(3, 144);
this.lblConfigurePuttySessions.Name = "lblConfigurePuttySessions";
this.lblConfigurePuttySessions.Size = new System.Drawing.Size(364, 13);
this.lblConfigurePuttySessions.TabIndex = 5;
@@ -120,7 +121,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
// numUVNCSCPort
//
this.numUVNCSCPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.numUVNCSCPort.Location = new System.Drawing.Point(373, 193);
this.numUVNCSCPort.Location = new System.Drawing.Point(373, 218);
this.numUVNCSCPort.Maximum = new decimal(new int[] {
65535,
0,
@@ -128,7 +129,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
0});
this.numUVNCSCPort.Name = "numUVNCSCPort";
this.numUVNCSCPort.Size = new System.Drawing.Size(72, 20);
this.numUVNCSCPort.TabIndex = 11;
this.numUVNCSCPort.TabIndex = 8;
this.numUVNCSCPort.Value = new decimal(new int[] {
5500,
0,
@@ -140,10 +141,10 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
this.txtCustomPuttyPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtCustomPuttyPath.Enabled = false;
this.txtCustomPuttyPath.Location = new System.Drawing.Point(21, 72);
this.txtCustomPuttyPath.Location = new System.Drawing.Point(21, 95);
this.txtCustomPuttyPath.Name = "txtCustomPuttyPath";
this.txtCustomPuttyPath.Size = new System.Drawing.Size(346, 20);
this.txtCustomPuttyPath.TabIndex = 3;
this.txtCustomPuttyPath.TabIndex = 4;
this.txtCustomPuttyPath.TextChanged += new System.EventHandler(this.txtCustomPuttyPath_TextChanged);
//
// btnLaunchPutty
@@ -151,7 +152,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.btnLaunchPutty._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
this.btnLaunchPutty.Image = global::mRemoteNG.Resources.PuttyConfig;
this.btnLaunchPutty.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnLaunchPutty.Location = new System.Drawing.Point(373, 115);
this.btnLaunchPutty.Location = new System.Drawing.Point(373, 138);
this.btnLaunchPutty.Name = "btnLaunchPutty";
this.btnLaunchPutty.Size = new System.Drawing.Size(110, 25);
this.btnLaunchPutty.TabIndex = 6;
@@ -162,7 +163,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
// lblUVNCSCPort
//
this.lblUVNCSCPort.Location = new System.Drawing.Point(3, 195);
this.lblUVNCSCPort.Location = new System.Drawing.Point(3, 220);
this.lblUVNCSCPort.Name = "lblUVNCSCPort";
this.lblUVNCSCPort.Size = new System.Drawing.Size(364, 13);
this.lblUVNCSCPort.TabIndex = 10;
@@ -173,7 +174,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
// lblSeconds
//
this.lblSeconds.AutoSize = true;
this.lblSeconds.Location = new System.Drawing.Point(428, 152);
this.lblSeconds.Location = new System.Drawing.Point(428, 175);
this.lblSeconds.Name = "lblSeconds";
this.lblSeconds.Size = new System.Drawing.Size(47, 13);
this.lblSeconds.TabIndex = 9;
@@ -183,18 +184,30 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
this.btnBrowseCustomPuttyPath._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
this.btnBrowseCustomPuttyPath.Enabled = false;
this.btnBrowseCustomPuttyPath.Location = new System.Drawing.Point(373, 70);
this.btnBrowseCustomPuttyPath.Location = new System.Drawing.Point(373, 93);
this.btnBrowseCustomPuttyPath.Name = "btnBrowseCustomPuttyPath";
this.btnBrowseCustomPuttyPath.Size = new System.Drawing.Size(75, 23);
this.btnBrowseCustomPuttyPath.TabIndex = 4;
this.btnBrowseCustomPuttyPath.TabIndex = 5;
this.btnBrowseCustomPuttyPath.Text = "Browse...";
this.btnBrowseCustomPuttyPath.UseVisualStyleBackColor = true;
this.btnBrowseCustomPuttyPath.Click += new System.EventHandler(this.btnBrowseCustomPuttyPath_Click);
//
// chkLoadBalanceInfoUseUtf8
//
this.chkLoadBalanceInfoUseUtf8._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
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.TabIndex = 2;
this.chkLoadBalanceInfoUseUtf8.Text = "Use UTF8 encoding for RDP \"Load Balance Info\" property";
this.chkLoadBalanceInfoUseUtf8.UseVisualStyleBackColor = true;
//
// AdvancedPage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.chkLoadBalanceInfoUseUtf8);
this.Controls.Add(this.chkAutomaticallyGetSessionInfo);
this.Controls.Add(this.lblMaximumPuttyWaitTime);
this.Controls.Add(this.chkAutomaticReconnect);
@@ -228,6 +241,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
internal Controls.Base.NGLabel lblUVNCSCPort;
internal Controls.Base.NGLabel lblSeconds;
internal Controls.Base.NGButton btnBrowseCustomPuttyPath;
}
private Controls.Base.NGCheckBox chkLoadBalanceInfoUseUtf8;
}
}

View File

@@ -32,6 +32,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
lblSeconds.Text = Language.strLabelSeconds;
lblMaximumPuttyWaitTime.Text = Language.strLabelPuttyTimeout;
chkAutomaticReconnect.Text = Language.strCheckboxAutomaticReconnect;
chkLoadBalanceInfoUseUtf8.Text = Language.LoadBalanceInfoUseUtf8;
lblConfigurePuttySessions.Text = Language.strLabelPuttySessionsConfig;
btnLaunchPutty.Text = Language.strButtonLaunchPutty;
btnBrowseCustomPuttyPath.Text = Language.strButtonBrowse;
@@ -46,6 +47,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
chkAutomaticallyGetSessionInfo.Checked = Settings.Default.AutomaticallyGetSessionInfo;
chkAutomaticReconnect.Checked = Settings.Default.ReconnectOnDisconnect;
chkLoadBalanceInfoUseUtf8.Checked = Settings.Default.RdpLoadBalanceInfoUseUtf8;
numPuttyWaitTime.Value = Settings.Default.MaxPuttyWaitTime;
chkUseCustomPuttyPath.Checked = Settings.Default.UseCustomPuttyPath;
@@ -59,6 +61,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
{
Settings.Default.AutomaticallyGetSessionInfo = chkAutomaticallyGetSessionInfo.Checked;
Settings.Default.ReconnectOnDisconnect = chkAutomaticReconnect.Checked;
Settings.Default.RdpLoadBalanceInfoUseUtf8 = chkLoadBalanceInfoUseUtf8.Checked;
var puttyPathChanged = false;
if (Settings.Default.CustomPuttyPath != txtCustomPuttyPath.Text)

View File

@@ -27,195 +27,220 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//Do not modify it using the code editor.
[System.Diagnostics.DebuggerStepThrough()]private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SqlServerPage));
this.lblSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblExperimental = new mRemoteNG.UI.Controls.Base.NGLabel();
this.chkUseSQLServer = new mRemoteNG.UI.Controls.Base.NGCheckBox();
this.lblSQLUsername = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLPassword = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblSQLInfo = new mRemoteNG.UI.Controls.Base.NGLabel();
this.lblSQLServer = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLUsername = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.txtSQLServer = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblSQLPassword = new mRemoteNG.UI.Controls.Base.NGLabel();
this.btnTestConnection = new mRemoteNG.UI.Controls.Base.NGButton();
this.imgConnectionStatus = new System.Windows.Forms.PictureBox();
this.lblTestConnectionResults = new mRemoteNG.UI.Controls.Base.NGLabel();
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).BeginInit();
this.SuspendLayout();
//
// lblSQLDatabaseName
//
this.lblSQLDatabaseName.Enabled = false;
this.lblSQLDatabaseName.Location = new System.Drawing.Point(23, 132);
this.lblSQLDatabaseName.Name = "lblSQLDatabaseName";
this.lblSQLDatabaseName.Size = new System.Drawing.Size(111, 13);
this.lblSQLDatabaseName.TabIndex = 5;
this.lblSQLDatabaseName.Text = "Database:";
this.lblSQLDatabaseName.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLDatabaseName
//
this.txtSQLDatabaseName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 6;
//
// lblExperimental
//
this.lblExperimental.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SqlServerPage));
this.lblSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLDatabaseName = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblExperimental = new mRemoteNG.UI.Controls.Base.NGLabel();
this.chkUseSQLServer = new mRemoteNG.UI.Controls.Base.NGCheckBox();
this.lblSQLUsername = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLPassword = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblSQLInfo = new mRemoteNG.UI.Controls.Base.NGLabel();
this.lblSQLServer = new mRemoteNG.UI.Controls.Base.NGLabel();
this.txtSQLUsername = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.txtSQLServer = new mRemoteNG.UI.Controls.Base.NGTextBox();
this.lblSQLPassword = new mRemoteNG.UI.Controls.Base.NGLabel();
this.btnTestConnection = new mRemoteNG.UI.Controls.Base.NGButton();
this.imgConnectionStatus = new System.Windows.Forms.PictureBox();
this.lblTestConnectionResults = new mRemoteNG.UI.Controls.Base.NGLabel();
this.chkSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGCheckBox();
this.lblSQLReadOnly = new mRemoteNG.UI.Controls.Base.NGLabel();
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).BeginInit();
this.SuspendLayout();
//
// lblSQLDatabaseName
//
this.lblSQLDatabaseName.Enabled = false;
this.lblSQLDatabaseName.Location = new System.Drawing.Point(23, 132);
this.lblSQLDatabaseName.Name = "lblSQLDatabaseName";
this.lblSQLDatabaseName.Size = new System.Drawing.Size(111, 13);
this.lblSQLDatabaseName.TabIndex = 5;
this.lblSQLDatabaseName.Text = "Database:";
this.lblSQLDatabaseName.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLDatabaseName
//
this.txtSQLDatabaseName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 6;
//
// lblExperimental
//
this.lblExperimental.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.lblExperimental.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World);
this.lblExperimental.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.lblExperimental.Location = new System.Drawing.Point(3, 0);
this.lblExperimental.Name = "lblExperimental";
this.lblExperimental.Size = new System.Drawing.Size(596, 25);
this.lblExperimental.TabIndex = 0;
this.lblExperimental.Text = "EXPERIMENTAL";
this.lblExperimental.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// chkUseSQLServer
//
this.chkUseSQLServer._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
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.TabIndex = 2;
this.chkUseSQLServer.Text = "Use SQL Server to load && save connections";
this.chkUseSQLServer.UseVisualStyleBackColor = true;
this.chkUseSQLServer.CheckedChanged += new System.EventHandler(this.chkUseSQLServer_CheckedChanged);
//
// lblSQLUsername
//
this.lblSQLUsername.Enabled = false;
this.lblSQLUsername.Location = new System.Drawing.Point(23, 158);
this.lblSQLUsername.Name = "lblSQLUsername";
this.lblSQLUsername.Size = new System.Drawing.Size(111, 13);
this.lblSQLUsername.TabIndex = 7;
this.lblSQLUsername.Text = "Username:";
this.lblSQLUsername.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLPassword
//
this.txtSQLPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 10;
this.txtSQLPassword.UseSystemPasswordChar = true;
//
// lblSQLInfo
//
this.lblSQLInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.lblExperimental.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World);
this.lblExperimental.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.lblExperimental.Location = new System.Drawing.Point(3, 0);
this.lblExperimental.Name = "lblExperimental";
this.lblExperimental.Size = new System.Drawing.Size(596, 25);
this.lblExperimental.TabIndex = 0;
this.lblExperimental.Text = "EXPERIMENTAL";
this.lblExperimental.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// chkUseSQLServer
//
this.chkUseSQLServer._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
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.TabIndex = 2;
this.chkUseSQLServer.Text = "Use SQL Server to load && save connections";
this.chkUseSQLServer.UseVisualStyleBackColor = true;
this.chkUseSQLServer.CheckedChanged += new System.EventHandler(this.chkUseSQLServer_CheckedChanged);
//
// lblSQLUsername
//
this.lblSQLUsername.Enabled = false;
this.lblSQLUsername.Location = new System.Drawing.Point(23, 158);
this.lblSQLUsername.Name = "lblSQLUsername";
this.lblSQLUsername.Size = new System.Drawing.Size(111, 13);
this.lblSQLUsername.TabIndex = 7;
this.lblSQLUsername.Text = "Username:";
this.lblSQLUsername.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLPassword
//
this.txtSQLPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 10;
this.txtSQLPassword.UseSystemPasswordChar = true;
//
// lblSQLInfo
//
this.lblSQLInfo.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.lblSQLInfo.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World);
this.lblSQLInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.lblSQLInfo.Location = new System.Drawing.Point(3, 25);
this.lblSQLInfo.Name = "lblSQLInfo";
this.lblSQLInfo.Size = new System.Drawing.Size(596, 25);
this.lblSQLInfo.TabIndex = 1;
this.lblSQLInfo.Text = "Please see Help - Getting started - SQL Configuration for more Info!";
this.lblSQLInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblSQLServer
//
this.lblSQLServer.Enabled = false;
this.lblSQLServer.Location = new System.Drawing.Point(23, 106);
this.lblSQLServer.Name = "lblSQLServer";
this.lblSQLServer.Size = new System.Drawing.Size(111, 13);
this.lblSQLServer.TabIndex = 3;
this.lblSQLServer.Text = "SQL Server:";
this.lblSQLServer.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLUsername
//
this.txtSQLUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 8;
//
// txtSQLServer
//
this.txtSQLServer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 4;
//
// lblSQLPassword
//
this.lblSQLPassword.Enabled = false;
this.lblSQLPassword.Location = new System.Drawing.Point(23, 184);
this.lblSQLPassword.Name = "lblSQLPassword";
this.lblSQLPassword.Size = new System.Drawing.Size(111, 13);
this.lblSQLPassword.TabIndex = 9;
this.lblSQLPassword.Text = "Password:";
this.lblSQLPassword.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// btnTestConnection
//
this.btnTestConnection._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
this.btnTestConnection.Enabled = false;
this.btnTestConnection.Location = new System.Drawing.Point(140, 208);
this.btnTestConnection.Name = "btnTestConnection";
this.btnTestConnection.Size = new System.Drawing.Size(153, 23);
this.btnTestConnection.TabIndex = 11;
this.btnTestConnection.Text = "Test Connection";
this.btnTestConnection.UseVisualStyleBackColor = true;
this.btnTestConnection.Click += new System.EventHandler(this.btnTestConnection_Click);
//
// imgConnectionStatus
//
this.imgConnectionStatus.Image = global::mRemoteNG.Resources.Help;
this.imgConnectionStatus.Location = new System.Drawing.Point(299, 212);
this.imgConnectionStatus.Name = "imgConnectionStatus";
this.imgConnectionStatus.Size = new System.Drawing.Size(16, 16);
this.imgConnectionStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.imgConnectionStatus.TabIndex = 12;
this.imgConnectionStatus.TabStop = false;
//
// lblTestConnectionResults
//
this.lblTestConnectionResults.AutoSize = true;
this.lblTestConnectionResults.Location = new System.Drawing.Point(140, 238);
this.lblTestConnectionResults.Name = "lblTestConnectionResults";
this.lblTestConnectionResults.Size = new System.Drawing.Size(0, 13);
this.lblTestConnectionResults.TabIndex = 13;
//
// SqlServerPage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lblTestConnectionResults);
this.Controls.Add(this.imgConnectionStatus);
this.Controls.Add(this.btnTestConnection);
this.Controls.Add(this.lblSQLDatabaseName);
this.Controls.Add(this.txtSQLDatabaseName);
this.Controls.Add(this.lblExperimental);
this.Controls.Add(this.chkUseSQLServer);
this.Controls.Add(this.lblSQLUsername);
this.Controls.Add(this.txtSQLPassword);
this.Controls.Add(this.lblSQLInfo);
this.Controls.Add(this.lblSQLServer);
this.Controls.Add(this.txtSQLUsername);
this.Controls.Add(this.txtSQLServer);
this.Controls.Add(this.lblSQLPassword);
this.Name = "SqlServerPage";
this.PageIcon = ((System.Drawing.Icon)(resources.GetObject("$this.PageIcon")));
this.Size = new System.Drawing.Size(610, 489);
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
this.lblSQLInfo.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World);
this.lblSQLInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.lblSQLInfo.Location = new System.Drawing.Point(3, 25);
this.lblSQLInfo.Name = "lblSQLInfo";
this.lblSQLInfo.Size = new System.Drawing.Size(596, 25);
this.lblSQLInfo.TabIndex = 1;
this.lblSQLInfo.Text = "Please see Help - Getting started - SQL Configuration for more Info!";
this.lblSQLInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblSQLServer
//
this.lblSQLServer.Enabled = false;
this.lblSQLServer.Location = new System.Drawing.Point(23, 106);
this.lblSQLServer.Name = "lblSQLServer";
this.lblSQLServer.Size = new System.Drawing.Size(111, 13);
this.lblSQLServer.TabIndex = 3;
this.lblSQLServer.Text = "SQL Server:";
this.lblSQLServer.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtSQLUsername
//
this.txtSQLUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 8;
//
// txtSQLServer
//
this.txtSQLServer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
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.TabIndex = 4;
//
// lblSQLPassword
//
this.lblSQLPassword.Enabled = false;
this.lblSQLPassword.Location = new System.Drawing.Point(23, 184);
this.lblSQLPassword.Name = "lblSQLPassword";
this.lblSQLPassword.Size = new System.Drawing.Size(111, 13);
this.lblSQLPassword.TabIndex = 9;
this.lblSQLPassword.Text = "Password:";
this.lblSQLPassword.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// btnTestConnection
//
this.btnTestConnection._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
this.btnTestConnection.Enabled = false;
this.btnTestConnection.Location = new System.Drawing.Point(140, 228);
this.btnTestConnection.Name = "btnTestConnection";
this.btnTestConnection.Size = new System.Drawing.Size(153, 23);
this.btnTestConnection.TabIndex = 11;
this.btnTestConnection.Text = "Test Connection";
this.btnTestConnection.UseVisualStyleBackColor = true;
this.btnTestConnection.Click += new System.EventHandler(this.btnTestConnection_Click);
//
// imgConnectionStatus
//
this.imgConnectionStatus.Image = global::mRemoteNG.Resources.Help;
this.imgConnectionStatus.Location = new System.Drawing.Point(297, 231);
this.imgConnectionStatus.Name = "imgConnectionStatus";
this.imgConnectionStatus.Size = new System.Drawing.Size(16, 16);
this.imgConnectionStatus.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.imgConnectionStatus.TabIndex = 12;
this.imgConnectionStatus.TabStop = false;
//
// lblTestConnectionResults
//
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.TabIndex = 13;
this.lblTestConnectionResults.Text = "Test connection details";
//
// chkSQLReadOnly
//
this.chkSQLReadOnly._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
this.chkSQLReadOnly.AutoSize = true;
this.chkSQLReadOnly.Location = new System.Drawing.Point(140, 208);
this.chkSQLReadOnly.Name = "chkSQLReadOnly";
this.chkSQLReadOnly.Size = new System.Drawing.Size(15, 14);
this.chkSQLReadOnly.TabIndex = 14;
this.chkSQLReadOnly.UseVisualStyleBackColor = true;
//
// lblSQLReadOnly
//
this.lblSQLReadOnly.Enabled = false;
this.lblSQLReadOnly.Location = new System.Drawing.Point(23, 208);
this.lblSQLReadOnly.Name = "lblSQLReadOnly";
this.lblSQLReadOnly.Size = new System.Drawing.Size(111, 13);
this.lblSQLReadOnly.TabIndex = 15;
this.lblSQLReadOnly.Text = "Read Only:";
this.lblSQLReadOnly.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// SqlServerPage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lblSQLReadOnly);
this.Controls.Add(this.chkSQLReadOnly);
this.Controls.Add(this.lblTestConnectionResults);
this.Controls.Add(this.imgConnectionStatus);
this.Controls.Add(this.btnTestConnection);
this.Controls.Add(this.lblSQLDatabaseName);
this.Controls.Add(this.txtSQLDatabaseName);
this.Controls.Add(this.lblExperimental);
this.Controls.Add(this.chkUseSQLServer);
this.Controls.Add(this.lblSQLUsername);
this.Controls.Add(this.txtSQLPassword);
this.Controls.Add(this.lblSQLInfo);
this.Controls.Add(this.lblSQLServer);
this.Controls.Add(this.txtSQLUsername);
this.Controls.Add(this.txtSQLServer);
this.Controls.Add(this.lblSQLPassword);
this.Name = "SqlServerPage";
this.PageIcon = ((System.Drawing.Icon)(resources.GetObject("$this.PageIcon")));
this.Size = new System.Drawing.Size(610, 489);
((System.ComponentModel.ISupportInitialize)(this.imgConnectionStatus)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
internal Controls.Base.NGLabel lblSQLDatabaseName;
@@ -233,5 +258,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
private System.Windows.Forms.PictureBox imgConnectionStatus;
private System.ComponentModel.IContainer components;
private Controls.Base.NGLabel lblTestConnectionResults;
private Controls.Base.NGCheckBox chkSQLReadOnly;
internal Controls.Base.NGLabel lblSQLReadOnly;
}
}

View File

@@ -7,9 +7,9 @@ using mRemoteNG.Security.SymmetricEncryption;
namespace mRemoteNG.UI.Forms.OptionsPages
{
public partial class SqlServerPage
public partial class SqlServerPage
{
private SqlDatabaseConnectionTester _databaseConnectionTester;
private readonly SqlDatabaseConnectionTester _databaseConnectionTester;
public SqlServerPage()
{
@@ -36,6 +36,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
lblSQLDatabaseName.Text = Language.strLabelSQLServerDatabaseName;
lblSQLUsername.Text = Language.strLabelUsername;
lblSQLPassword.Text = Language.strLabelPassword;
lblSQLReadOnly.Text = Language.strLabelReadOnly;
btnTestConnection.Text = Language.TestConnection;
}
@@ -49,6 +50,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages
txtSQLUsername.Text = Settings.Default.SQLUser;
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
txtSQLPassword.Text = cryptographyProvider.Decrypt(Settings.Default.SQLPass, Runtime.EncryptionKey);
chkSQLReadOnly.Checked = Settings.Default.SQLReadOnly;
lblTestConnectionResults.Text = "";
}
public override void SaveSettings()
@@ -62,6 +65,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
Settings.Default.SQLUser = txtSQLUsername.Text;
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
Settings.Default.SQLPass = cryptographyProvider.Encrypt(txtSQLPassword.Text, Runtime.EncryptionKey);
Settings.Default.SQLReadOnly = chkSQLReadOnly.Checked;
if (Settings.Default.UseSQLServer)
ReinitializeSqlUpdater();
@@ -87,15 +91,22 @@ namespace mRemoteNG.UI.Forms.OptionsPages
private void chkUseSQLServer_CheckedChanged(object sender, EventArgs e)
{
lblSQLServer.Enabled = chkUseSQLServer.Checked;
lblSQLDatabaseName.Enabled = chkUseSQLServer.Checked;
lblSQLUsername.Enabled = chkUseSQLServer.Checked;
lblSQLPassword.Enabled = chkUseSQLServer.Checked;
txtSQLServer.Enabled = chkUseSQLServer.Checked;
txtSQLDatabaseName.Enabled = chkUseSQLServer.Checked;
txtSQLUsername.Enabled = chkUseSQLServer.Checked;
txtSQLPassword.Enabled = chkUseSQLServer.Checked;
btnTestConnection.Enabled = chkUseSQLServer.Checked;
toggleSQLPageControls(chkUseSQLServer.Checked);
}
private void toggleSQLPageControls(bool useSQLServer)
{
lblSQLServer.Enabled = useSQLServer;
lblSQLDatabaseName.Enabled = useSQLServer;
lblSQLUsername.Enabled = useSQLServer;
lblSQLPassword.Enabled = useSQLServer;
lblSQLReadOnly.Enabled = useSQLServer;
txtSQLServer.Enabled = useSQLServer;
txtSQLDatabaseName.Enabled = useSQLServer;
txtSQLUsername.Enabled = useSQLServer;
txtSQLPassword.Enabled = useSQLServer;
chkSQLReadOnly.Enabled = useSQLServer;
btnTestConnection.Enabled = useSQLServer;
}
private async void btnTestConnection_Click(object sender, EventArgs e)

View File

@@ -151,6 +151,7 @@ namespace mRemoteNG.UI.Forms
LockToolbarPositions(Settings.Default.LockToolbars);
Settings.Default.PropertyChanged += OnApplicationSettingChanged;
_themeManager.ThemeChanged += ApplyTheme;
_fpChainedWindowHandle = NativeMethods.SetClipboardViewer(Handle);

View File

@@ -26,6 +26,7 @@ namespace mRemoteNG.UI.Menu
private ToolStripMenuItem _mMenViewJumpToConnectionsConfig;
private ToolStripMenuItem _mMenViewJumpToErrorsInfos;
private ToolStripMenuItem _mMenViewResetLayout;
private ToolStripMenuItem _mMenViewLockToolbars;
private ToolStripSeparator _toolStripSeparator1;
private readonly PanelAdder _panelAdder;
@@ -57,6 +58,7 @@ namespace mRemoteNG.UI.Menu
_mMenViewJumpToConnectionsConfig = new ToolStripMenuItem();
_mMenViewJumpToErrorsInfos = new ToolStripMenuItem();
_mMenViewResetLayout = new ToolStripMenuItem();
_mMenViewLockToolbars = new ToolStripMenuItem();
_mMenViewSep2 = new ToolStripSeparator();
_mMenViewQuickConnectToolbar = new ToolStripMenuItem();
_mMenViewExtAppsToolbar = new ToolStripMenuItem();
@@ -79,6 +81,7 @@ namespace mRemoteNG.UI.Menu
_toolStripSeparator1,
_mMenViewJumpTo,
_mMenViewResetLayout,
_mMenViewLockToolbars,
_mMenViewSep2,
_mMenViewQuickConnectToolbar,
_mMenViewExtAppsToolbar,
@@ -190,10 +193,18 @@ namespace mRemoteNG.UI.Menu
_mMenViewResetLayout.Size = new System.Drawing.Size(228, 22);
_mMenViewResetLayout.Text = "Reset Layout";
_mMenViewResetLayout.Click += mMenViewResetLayout_Click;
//
// mMenViewSep2
//
_mMenViewSep2.Name = "mMenViewSep2";
//
// mMenViewLockToolbars
//
_mMenViewLockToolbars.Image = Resources.application_side_tree;
_mMenViewLockToolbars.Name = "mMenViewLockToolbars";
_mMenViewLockToolbars.Size = new System.Drawing.Size(228, 22);
_mMenViewLockToolbars.Text = "Lock Toolbar Positions";
_mMenViewLockToolbars.Click += mMenViewLockToolbars_Click;
//
// mMenViewSep2
//
_mMenViewSep2.Name = "mMenViewSep2";
_mMenViewSep2.Size = new System.Drawing.Size(225, 6);
//
// mMenViewQuickConnectToolbar
@@ -236,7 +247,9 @@ namespace mRemoteNG.UI.Menu
_mMenViewFullscreen.Click += mMenViewFullscreen_Click;
}
private void ApplyLanguage()
private void ApplyLanguage()
{
_mMenViewAddConnectionPanel.Text = Language.strMenuAddConnectionPanel;
_mMenViewConnectionPanels.Text = Language.strMenuConnectionPanels;
@@ -260,6 +273,7 @@ namespace mRemoteNG.UI.Menu
_mMenViewConfig.Checked = !Windows.ConfigForm.IsHidden;
_mMenViewErrorsAndInfos.Checked = !Windows.ErrorsForm.IsHidden;
_mMenViewScreenshotManager.Checked = !Windows.ScreenshotForm.IsHidden;
_mMenViewLockToolbars.Checked = Settings.Default.LockToolbars;
_mMenViewExtAppsToolbar.Checked = TsExternalTools.Visible;
_mMenViewQuickConnectToolbar.Checked = TsQuickConnect.Visible;
@@ -367,7 +381,21 @@ namespace mRemoteNG.UI.Menu
}
}
private void mMenViewAddConnectionPanel_Click(object sender, EventArgs e)
private void mMenViewLockToolbars_Click(object sender, EventArgs eventArgs)
{
if (Settings.Default.LockToolbars)
{
Settings.Default.LockToolbars = false;
_mMenViewLockToolbars.Checked = false;
}
else
{
Settings.Default.LockToolbars = true;
_mMenViewLockToolbars.Checked = true;
}
}
private void mMenViewAddConnectionPanel_Click(object sender, EventArgs e)
{
_panelAdder.AddPanel();
}

View File

@@ -234,6 +234,7 @@
<Compile Include="Connection\IHasParent.cs" />
<Compile Include="Connection\Protocol\Http\Connection.Protocol.HTTPS.CertEvent.cs" />
<Compile Include="Connection\Protocol\ProtocolFactory.cs" />
<Compile Include="Connection\Protocol\RDP\AzureLoadBalanceInfoEncoder.cs" />
<Compile Include="Connection\Protocol\VNC\VNCEnum.cs" />
<Compile Include="Connection\WebHelper.cs" />
<Compile Include="Credential\PlaceholderCredentialRecord.cs" />