Merge branch 'csharp_conv' into MR-818_Create_new_installer

This commit is contained in:
Sparer, David
2016-05-16 08:07:30 -06:00
23 changed files with 2503 additions and 604 deletions

View File

@@ -38,7 +38,7 @@ namespace mRemoteNGTests.UI.Forms
public void ListViewContainsOptionsPages()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items.Count, Is.EqualTo(9));
Assert.That(listViewTester.Items.Count, Is.EqualTo(8));
}
}
}

View File

@@ -12,14 +12,14 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages
public void AdvancedPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[8].Text, Does.Match("Advanced"));
Assert.That(listViewTester.Items[7].Text, Does.Match("Advanced"));
}
[Test]
public void AdvancedIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[8].ImageList, Is.Not.Null);
Assert.That(listViewTester.Items[7].ImageList, Is.Not.Null);
}
[Test]

View File

@@ -1,34 +0,0 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsKeyboardPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void KeyboardPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[7].Text, Does.Match("Keyboard"));
}
[Test]
public void KeyboardIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[7].ImageList, Is.Not.Null);
}
[Test]
public void SelectingKeyboardPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Keyboard");
ButtonTester buttonTester = new ButtonTester("btnResetKeyboardShortcuts", _optionsForm);
Assert.That(buttonTester.Text, Does.Match("Reset"));
}
}
}

View File

@@ -94,7 +94,6 @@
<Compile Include="UI\Forms\OptionsPages\OptionsAdvancedPageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsAppearancePageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsConnectionsPageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsKeyboardPageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsSQLPageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsStartupExitPageTests.cs" />
<Compile Include="UI\Forms\OptionsPages\OptionsTabsPanelPageTests.cs" />

View File

@@ -6,10 +6,9 @@ using System.Windows.Forms;
using mRemoteNG.Config.Import;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.UI.TaskDialog;
using Microsoft.VisualBasic;
using PSTaskDialog;
namespace mRemoteNG.App
{
@@ -87,11 +86,9 @@ namespace mRemoteNG.App
}
catch (Exception ex)
{
cTaskDialog.ShowTaskDialogBox(Application.ProductName,
Language.strImportFileFailedMainInstruction,
string.Format(Language.strImportFileFailedContent, fileName),
MiscTools.GetExceptionMessageRecursive(ex), "", "", "", "", eTaskDialogButtons.OK,
eSysIcons.Error, eSysIcons.Error);
MessageBox.Show(string.Format(Language.strImportFileFailedContent, fileName), Language.strImportFileFailedMainInstruction,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromFile() failed:1", ex, logOnly: true);
}
}
@@ -107,7 +104,7 @@ namespace mRemoteNG.App
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromFile() failed.", ex, logOnly: true);
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromFile() failed:2", ex, logOnly: true);
}
}
@@ -195,11 +192,11 @@ namespace mRemoteNG.App
}
else
{
cTaskDialog.ShowCommandBox(Application.ProductName, Language.strImportLocationMainInstruction,
CTaskDialog.ShowCommandBox(Application.ProductName, Language.strImportLocationMainInstruction,
Language.strImportLocationContent, "", "", "",
string.Format(Language.strImportLocationCommandButtons, Constants.vbLf, rootTreeNode.Text,
selectedTreeNode.Text), true, eSysIcons.Question, 0);
switch (cTaskDialog.CommandButtonResult)
selectedTreeNode.Text), true, ESysIcons.Question, 0);
switch (CTaskDialog.CommandButtonResult)
{
case 0: // Root
parentTreeNode = rootTreeNode;

View File

@@ -12,7 +12,6 @@ using mRemoteNG.Messages;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.UI.Window;
using PSTaskDialog;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -23,6 +22,7 @@ using System.Windows.Forms;
using System.Xml;
using mRemoteNG.My;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.TaskDialog;
using WeifenLuo.WinFormsUI.Docking;
@@ -628,8 +628,8 @@ namespace mRemoteNG.App
{
MessageCollector.AddExceptionMessage(Language.strLoadFromSqlFailed, ex);
string commandButtons = string.Join("|", new[] {Language.strCommandTryAgain, Language.strCommandOpenConnectionFile, string.Format(Language.strCommandExitProgram, Application.ProductName)});
cTaskDialog.ShowCommandBox(Application.ProductName, Language.strLoadFromSqlFailed, Language.strLoadFromSqlFailedContent, MiscTools.GetExceptionMessageRecursive(ex), "", "", commandButtons, false, eSysIcons.Error, eSysIcons.Error);
switch (cTaskDialog.CommandButtonResult)
CTaskDialog.ShowCommandBox(Application.ProductName, Language.strLoadFromSqlFailed, Language.strLoadFromSqlFailedContent, MiscTools.GetExceptionMessageRecursive(ex), "", "", commandButtons, false, ESysIcons.Error, ESysIcons.Error);
switch (CTaskDialog.CommandButtonResult)
{
case 0:
LoadConnections(withDialog, update);
@@ -653,7 +653,7 @@ namespace mRemoteNG.App
}
MessageCollector.AddExceptionMessage(string.Format(Language.strConnectionsFileCouldNotBeLoaded, connectionsLoader.ConnectionFileName), ex);
if (!(connectionsLoader.ConnectionFileName == GetStartupConnectionFileName()))
if (connectionsLoader.ConnectionFileName != GetStartupConnectionFileName())
{
LoadConnections(withDialog, update);
return ;

View File

@@ -6,7 +6,6 @@ using mRemoteNG.My;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.UI.Window;
using PSTaskDialog;
using System;
using System.ComponentModel;
using System.Diagnostics;
@@ -18,6 +17,7 @@ using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using mRemoteNG.Config.Connections;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.TaskDialog;
namespace mRemoteNG.App
{
@@ -38,7 +38,7 @@ namespace mRemoteNG.App
bool isFipsPolicyEnabled = false;
// Windows XP/Windows Server 2003
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa");
regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa");
if (regKey != null)
{
if ((int)regKey.GetValue("FIPSAlgorithmPolicy") != 0)
@@ -48,7 +48,7 @@ namespace mRemoteNG.App
}
// Windows Vista/Windows Server 2008 and newer
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy");
regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy");
if (regKey != null)
{
if ((int)regKey.GetValue("Enabled") != 0)
@@ -60,12 +60,12 @@ namespace mRemoteNG.App
if (isFipsPolicyEnabled)
{
MessageBox.Show(frmMain.Default, string.Format(Language.strErrorFipsPolicyIncompatible, (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.ProductName), (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
System.Environment.Exit(1);
Environment.Exit(1);
}
}
private static void CheckLenovoAutoScrollUtility()
{
if (!mRemoteNG.Settings.Default.CompatibilityWarnLenovoAutoScrollUtility)
if (!Settings.Default.CompatibilityWarnLenovoAutoScrollUtility)
{
return;
}
@@ -83,10 +83,10 @@ namespace mRemoteNG.App
return;
}
cTaskDialog.MessageBox(System.Windows.Forms.Application.ProductName, Language.strCompatibilityProblemDetected, string.Format(Language.strCompatibilityLenovoAutoScrollUtilityDetected, System.Windows.Forms.Application.ProductName), "", "", Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.OK, eSysIcons.Warning, eSysIcons.Warning);
if (cTaskDialog.VerificationChecked)
CTaskDialog.MessageBox(Application.ProductName, Language.strCompatibilityProblemDetected, string.Format(Language.strCompatibilityLenovoAutoScrollUtilityDetected, Application.ProductName), "", "", Language.strCheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.Ok, ESysIcons.Warning, ESysIcons.Warning);
if (CTaskDialog.VerificationChecked)
{
mRemoteNG.Settings.Default.CompatibilityWarnLenovoAutoScrollUtility = false;
Settings.Default.CompatibilityWarnLenovoAutoScrollUtility = false;
}
}
@@ -152,7 +152,7 @@ namespace mRemoteNG.App
}
public static void LogStartupData()
{
if (mRemoteNG.Settings.Default.WriteLogFile)
if (Settings.Default.WriteLogFile)
{
LogApplicationData();
LogCmdLineArgs();
@@ -224,7 +224,7 @@ namespace mRemoteNG.App
#if !PORTABLE
Runtime.Log.InfoFormat("{0} {1} starting.", System.Windows.Forms.Application.ProductName, System.Windows.Forms.Application.ProductVersion);
#else
Runtime.Log.InfoFormat("{0} {1} {2} starting.", System.Windows.Forms.Application.ProductName, System.Windows.Forms.Application.ProductVersion, Language.strLabelPortableEdition);
Runtime.Log.InfoFormat("{0} {1} {2} starting.", Application.ProductName, Application.ProductVersion, Language.strLabelPortableEdition);
#endif
}
private static void LogCmdLineArgs()
@@ -233,7 +233,7 @@ namespace mRemoteNG.App
}
private static void LogCLRData()
{
Runtime.Log.InfoFormat("Microsoft .NET CLR {0}", System.Environment.Version.ToString());
Runtime.Log.InfoFormat("Microsoft .NET CLR {0}", Environment.Version.ToString());
}
private static void LogCultureData()
{
@@ -243,7 +243,7 @@ namespace mRemoteNG.App
public static void CreateConnectionsProvider()
{
if (mRemoteNG.Settings.Default.UseSQLServer == true)
if (Settings.Default.UseSQLServer == true)
{
SqlConnectionsProvider _sqlConnectionsProvider = new SqlConnectionsProvider();
}
@@ -260,8 +260,8 @@ namespace mRemoteNG.App
return;
}
DateTime nextUpdateCheck = Convert.ToDateTime(mRemoteNG.Settings.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(mRemoteNG.Settings.Default.CheckForUpdatesFrequencyDays))));
if (!mRemoteNG.Settings.Default.UpdatePending && DateTime.UtcNow < nextUpdateCheck)
DateTime nextUpdateCheck = Convert.ToDateTime(Settings.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(Settings.Default.CheckForUpdatesFrequencyDays))));
if (!Settings.Default.UpdatePending && DateTime.UtcNow < nextUpdateCheck)
{
return;
}
@@ -414,46 +414,46 @@ namespace mRemoteNG.App
{
if (File.Exists((new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\" + cmd[ConsParam]))
{
mRemoteNG.Settings.Default.LoadConsFromCustomLocation = true;
mRemoteNG.Settings.Default.CustomConsPath = (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\" + cmd[ConsParam];
Settings.Default.LoadConsFromCustomLocation = true;
Settings.Default.CustomConsPath = (new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase()).Info.DirectoryPath + "\\" + cmd[ConsParam];
return;
}
else if (File.Exists(App.Info.ConnectionsFileInfo.DefaultConnectionsPath + "\\" + cmd[ConsParam]))
else if (File.Exists(Info.ConnectionsFileInfo.DefaultConnectionsPath + "\\" + cmd[ConsParam]))
{
mRemoteNG.Settings.Default.LoadConsFromCustomLocation = true;
mRemoteNG.Settings.Default.CustomConsPath = App.Info.ConnectionsFileInfo.DefaultConnectionsPath + "\\" + cmd[ConsParam];
Settings.Default.LoadConsFromCustomLocation = true;
Settings.Default.CustomConsPath = Info.ConnectionsFileInfo.DefaultConnectionsPath + "\\" + cmd[ConsParam];
return;
}
}
else
{
mRemoteNG.Settings.Default.LoadConsFromCustomLocation = true;
mRemoteNG.Settings.Default.CustomConsPath = cmd[ConsParam];
Settings.Default.LoadConsFromCustomLocation = true;
Settings.Default.CustomConsPath = cmd[ConsParam];
return;
}
}
if (!string.IsNullOrEmpty(ResetPosParam))
{
mRemoteNG.Settings.Default.MainFormKiosk = false;
mRemoteNG.Settings.Default.MainFormLocation = new Point(999, 999);
mRemoteNG.Settings.Default.MainFormSize = new Size(900, 600);
mRemoteNG.Settings.Default.MainFormState = FormWindowState.Normal;
Settings.Default.MainFormKiosk = false;
Settings.Default.MainFormLocation = new Point(999, 999);
Settings.Default.MainFormSize = new Size(900, 600);
Settings.Default.MainFormState = FormWindowState.Normal;
}
if (!string.IsNullOrEmpty(ResetPanelsParam))
{
mRemoteNG.Settings.Default.ResetPanels = true;
Settings.Default.ResetPanels = true;
}
if (!string.IsNullOrEmpty(NoReconnectParam))
{
mRemoteNG.Settings.Default.NoReconnect = true;
Settings.Default.NoReconnect = true;
}
if (!string.IsNullOrEmpty(ResetToolbarsParam))
{
mRemoteNG.Settings.Default.ResetToolbars = true;
Settings.Default.ResetToolbars = true;
}
}
catch (Exception ex)

View File

@@ -4,7 +4,6 @@ using mRemoteNG.Connection.Protocol.ICA;
using mRemoteNG.Connection.Protocol.VNC;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.My;
using PSTaskDialog;
using System;
using System.Data;
using System.Data.SqlClient;
@@ -19,6 +18,7 @@ using mRemoteNG.Connection.Protocol;
using mRemoteNG.Images;
using mRemoteNG.UI.Forms;
using mRemoteNG.Tree.Root;
using mRemoteNG.UI.TaskDialog;
namespace mRemoteNG.Config.Connections
{
@@ -90,8 +90,8 @@ namespace mRemoteNG.Config.Connections
public string ConnectionFileName
{
get { return this._ConnectionFileName; }
set { this._ConnectionFileName = value; }
get { return _ConnectionFileName; }
set { _ConnectionFileName = value; }
}
public TreeNode RootTreeNode {get; set;}
@@ -100,8 +100,8 @@ namespace mRemoteNG.Config.Connections
public ContainerList ContainerList
{
get { return this._ContainerList; }
set { this._ContainerList = value; }
get { return _ContainerList; }
set { _ContainerList = value; }
}
public ConnectionList PreviousConnectionList
@@ -188,19 +188,19 @@ namespace mRemoteNG.Config.Connections
const double maxSupportedSchemaVersion = 2.5;
if (confVersion > maxSupportedSchemaVersion)
{
cTaskDialog.ShowTaskDialogBox(
CTaskDialog.ShowTaskDialogBox(
frmMain.Default,
System.Windows.Forms.Application.ProductName,
Application.ProductName,
"Incompatible database schema",
$"The database schema on the server is not supported. Please upgrade to a newer version of {System.Windows.Forms.Application.ProductName}.",
$"The database schema on the server is not supported. Please upgrade to a newer version of {Application.ProductName}.",
string.Format("Schema Version: {1}{0}Highest Supported Version: {2}", Environment.NewLine, confVersion.ToString(), maxSupportedSchemaVersion.ToString()),
"",
"",
"",
"",
eTaskDialogButtons.OK,
eSysIcons.Error,
eSysIcons.Error
ETaskDialogButtons.Ok,
ESysIcons.Error,
ESysIcons.Error
);
throw (new Exception($"Incompatible database schema (schema version {confVersion})."));
}
@@ -236,7 +236,7 @@ namespace mRemoteNG.Config.Connections
RootTreeNode.Expand();
//expand containers
foreach (ContainerInfo contI in this._ContainerList)
foreach (ContainerInfo contI in _ContainerList)
{
if (contI.IsExpanded == true)
{
@@ -312,7 +312,7 @@ namespace mRemoteNG.Config.Connections
conI.TreeNode = tNode;
//conI.Parent = _previousContainer 'NEW
this.ConnectionList.Add(conI);
ConnectionList.Add(conI);
tNode.Tag = conI;
@@ -322,7 +322,7 @@ namespace mRemoteNG.Config.Connections
if (prevCon != null)
{
foreach (Connection.Protocol.ProtocolBase prot in prevCon.OpenConnections)
foreach (ProtocolBase prot in prevCon.OpenConnections)
{
prot.InterfaceControl.Info = conI;
conI.OpenConnections.Add(prot);
@@ -402,8 +402,8 @@ namespace mRemoteNG.Config.Connections
}
}
this._ContainerList.Add(contI);
this.ConnectionList.Add(conI);
_ContainerList.Add(contI);
ConnectionList.Add(conI);
tNode.Tag = contI;
tNode.ImageIndex = (int)TreeImageType.Container;
@@ -501,7 +501,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Icon = Convert.ToString(sqlRd["Icon"]);
connectionInfo.Panel = Convert.ToString(sqlRd["Panel"]);
if (this.confVersion > 1.5) //1.6
if (confVersion > 1.5) //1.6
{
connectionInfo.ICAEncryption = (ProtocolICA.EncryptionStrength)Tools.MiscTools.StringToEnum(typeof(ProtocolICA.EncryptionStrength), Convert.ToString(sqlRd["ICAEncryptionStrength"]));
connectionInfo.Inheritance.ICAEncryption = Convert.ToBoolean(sqlRd["InheritICAEncryptionStrength"]);
@@ -511,7 +511,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.PostExtApp = Convert.ToBoolean(sqlRd["InheritPostExtApp"]);
}
if (this.confVersion > 1.6) //1.7
if (confVersion > 1.6) //1.7
{
connectionInfo.VNCCompression = (ProtocolVNC.Compression)Tools.MiscTools.StringToEnum(typeof(ProtocolVNC.Compression), Convert.ToString(sqlRd["VNCCompression"]));
connectionInfo.VNCEncoding = (ProtocolVNC.Encoding)Tools.MiscTools.StringToEnum(typeof(ProtocolVNC.Encoding), Convert.ToString(sqlRd["VNCEncoding"]));
@@ -537,13 +537,13 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.VNCViewOnly = Convert.ToBoolean(sqlRd["InheritVNCViewOnly"]);
}
if (this.confVersion > 1.7) //1.8
if (confVersion > 1.7) //1.8
{
connectionInfo.RDPAuthenticationLevel = (ProtocolRDP.AuthenticationLevel)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.AuthenticationLevel), Convert.ToString(sqlRd["RDPAuthenticationLevel"]));
connectionInfo.Inheritance.RDPAuthenticationLevel = Convert.ToBoolean(sqlRd["InheritRDPAuthenticationLevel"]);
}
if (this.confVersion > 1.8) //1.9
if (confVersion > 1.8) //1.9
{
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Tools.MiscTools.StringToEnum(typeof(HTTPBase.RenderingEngine), Convert.ToString(sqlRd["RenderingEngine"]));
connectionInfo.MacAddress = Convert.ToString(sqlRd["MacAddress"]);
@@ -551,19 +551,19 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.MacAddress = Convert.ToBoolean(sqlRd["InheritMacAddress"]);
}
if (this.confVersion > 1.9) //2.0
if (confVersion > 1.9) //2.0
{
connectionInfo.UserField = Convert.ToString(sqlRd["UserField"]);
connectionInfo.Inheritance.UserField = Convert.ToBoolean(sqlRd["InheritUserField"]);
}
if (this.confVersion > 2.0) //2.1
if (confVersion > 2.0) //2.1
{
connectionInfo.ExtApp = Convert.ToString(sqlRd["ExtApp"]);
connectionInfo.Inheritance.ExtApp = Convert.ToBoolean(sqlRd["InheritExtApp"]);
}
if (this.confVersion >= 2.2)
if (confVersion >= 2.2)
{
connectionInfo.RDGatewayUsageMethod = (ProtocolRDP.RDGatewayUsageMethod)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.RDGatewayUsageMethod), Convert.ToString(sqlRd["RDGatewayUsageMethod"]));
connectionInfo.RDGatewayHostname = Convert.ToString(sqlRd["RDGatewayHostname"]);
@@ -578,7 +578,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.RDGatewayDomain = Convert.ToBoolean(sqlRd["InheritRDGatewayDomain"]);
}
if (this.confVersion >= 2.3)
if (confVersion >= 2.3)
{
connectionInfo.EnableFontSmoothing = Convert.ToBoolean(sqlRd["EnableFontSmoothing"]);
connectionInfo.EnableDesktopComposition = Convert.ToBoolean(sqlRd["EnableDesktopComposition"]);
@@ -619,7 +619,7 @@ namespace mRemoteNG.Config.Connections
#region XML
private string DecryptCompleteFile()
{
StreamReader sRd = new StreamReader(this._ConnectionFileName);
StreamReader sRd = new StreamReader(_ConnectionFileName);
string strCons = "";
strCons = sRd.ReadToEnd();
@@ -686,19 +686,19 @@ namespace mRemoteNG.Config.Connections
}
// SECTION 1. Create a DOM Document and load the XML data into it.
this.xDom = new XmlDocument();
xDom = new XmlDocument();
if (cons != "")
{
xDom.LoadXml(cons);
}
else
{
xDom.Load(this._ConnectionFileName);
xDom.Load(_ConnectionFileName);
}
if (xDom.DocumentElement.HasAttribute("ConfVersion"))
{
this.confVersion = Convert.ToDouble(xDom.DocumentElement.Attributes["ConfVersion"].Value.Replace(",", "."), CultureInfo.InvariantCulture);
confVersion = Convert.ToDouble(xDom.DocumentElement.Attributes["ConfVersion"].Value.Replace(",", "."), CultureInfo.InvariantCulture);
}
else
{
@@ -708,19 +708,19 @@ namespace mRemoteNG.Config.Connections
const double maxSupportedConfVersion = 2.5;
if (confVersion > maxSupportedConfVersion)
{
cTaskDialog.ShowTaskDialogBox(
CTaskDialog.ShowTaskDialogBox(
frmMain.Default,
System.Windows.Forms.Application.ProductName,
Application.ProductName,
"Incompatible connection file format",
string.Format("The format of this connection file is not supported. Please upgrade to a newer version of {0}.", System.Windows.Forms.Application.ProductName),
string.Format("The format of this connection file is not supported. Please upgrade to a newer version of {0}.", Application.ProductName),
string.Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", Environment.NewLine, ConnectionFileName, confVersion.ToString(), maxSupportedConfVersion.ToString()),
"",
"",
"",
"",
eTaskDialogButtons.OK,
eSysIcons.Error,
eSysIcons.Error
ETaskDialogButtons.Ok,
ESysIcons.Error,
ESysIcons.Error
);
throw (new Exception(string.Format("Incompatible connection file format (file format version {0}).", confVersion)));
}
@@ -755,7 +755,7 @@ namespace mRemoteNG.Config.Connections
RootTreeNode.Tag = rootInfo;
}
if (this.confVersion > 1.3) //1.4
if (confVersion > 1.3) //1.4
{
if (Security.Crypt.Decrypt(Convert.ToString(xDom.DocumentElement.Attributes["Protected"].Value), pW) != "ThisIsNotProtected")
{
@@ -798,7 +798,7 @@ namespace mRemoteNG.Config.Connections
RootTreeNode.Expand();
//expand containers
foreach (ContainerInfo contI in this._ContainerList)
foreach (ContainerInfo contI in _ContainerList)
{
if (contI.IsExpanded == true)
{
@@ -831,7 +831,7 @@ namespace mRemoteNG.Config.Connections
}
catch (Exception ex)
{
App.Runtime.IsConnectionsFileLoaded = false;
Runtime.IsConnectionsFileLoaded = false;
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strLoadFromXmlFailed + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace, true);
throw;
}
@@ -945,7 +945,7 @@ namespace mRemoteNG.Config.Connections
try
{
XmlNode xmlnode = xxNode;
if (this.confVersion > 0.1) //0.2
if (confVersion > 0.1) //0.2
{
connectionInfo.Name = xmlnode.Attributes["Name"].Value;
connectionInfo.Description = xmlnode.Attributes["Descr"].Value;
@@ -957,7 +957,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.DisplayThemes = bool.Parse(xmlnode.Attributes["DisplayThemes"].Value);
connectionInfo.CacheBitmaps = bool.Parse(xmlnode.Attributes["CacheBitmaps"].Value);
if (this.confVersion < 1.1) //1.0 - 0.1
if (confVersion < 1.1) //1.0 - 0.1
{
if (Convert.ToBoolean(xmlnode.Attributes["Fullscreen"].Value) == true)
{
@@ -970,9 +970,9 @@ namespace mRemoteNG.Config.Connections
}
}
if (this.confVersion > 0.2) //0.3
if (confVersion > 0.2) //0.3
{
if (this.confVersion < 0.7)
if (confVersion < 0.7)
{
if (Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value) == true)
{
@@ -991,9 +991,9 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Protocol = ProtocolType.RDP;
}
if (this.confVersion > 0.3) //0.4
if (confVersion > 0.3) //0.4
{
if (this.confVersion < 0.7)
if (confVersion < 0.7)
{
if (Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value) == true)
connectionInfo.Port = Convert.ToInt32(xmlnode.Attributes["VNCPort"].Value);
@@ -1005,7 +1005,7 @@ namespace mRemoteNG.Config.Connections
}
else
{
if (this.confVersion < 0.7)
if (confVersion < 0.7)
{
if (Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value) == true)
connectionInfo.Port = (int)ProtocolVNC.Defaults.Port;
@@ -1015,7 +1015,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.UseConsoleSession = false;
}
if (this.confVersion > 0.4) //0.5 and 0.6
if (confVersion > 0.4) //0.5 and 0.6
{
connectionInfo.RedirectDiskDrives = bool.Parse(xmlnode.Attributes["RedirectDiskDrives"].Value);
connectionInfo.RedirectPrinters = bool.Parse(xmlnode.Attributes["RedirectPrinters"].Value);
@@ -1030,23 +1030,23 @@ namespace mRemoteNG.Config.Connections
connectionInfo.RedirectSmartCards = false;
}
if (this.confVersion > 0.6) //0.7
if (confVersion > 0.6) //0.7
{
connectionInfo.Protocol = (ProtocolType)Tools.MiscTools.StringToEnum(typeof(ProtocolType), xmlnode.Attributes["Protocol"].Value);
connectionInfo.Port = Convert.ToInt32(xmlnode.Attributes["Port"].Value);
}
if (this.confVersion > 0.9) //1.0
if (confVersion > 0.9) //1.0
{
connectionInfo.RedirectKeys = bool.Parse(xmlnode.Attributes["RedirectKeys"].Value);
}
if (this.confVersion > 1.1) //1.2
if (confVersion > 1.1) //1.2
{
connectionInfo.PuttySession = xmlnode.Attributes["PuttySession"].Value;
}
if (this.confVersion > 1.2) //1.3
if (confVersion > 1.2) //1.3
{
connectionInfo.Colors = (ProtocolRDP.RDPColors)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.RDPColors), xmlnode.Attributes["Colors"].Value);
connectionInfo.Resolution = (ProtocolRDP.RDPResolutions)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.RDPResolutions), Convert.ToString(xmlnode.Attributes["Resolution"].Value));
@@ -1076,7 +1076,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.RedirectSound = (ProtocolRDP.RDPSounds) Convert.ToInt32(xmlnode.Attributes["RedirectSound"].Value);
}
if (this.confVersion > 1.2) //1.3
if (confVersion > 1.2) //1.3
{
connectionInfo.Inheritance = new ConnectionInfoInheritance(connectionInfo);
connectionInfo.Inheritance.CacheBitmaps = bool.Parse(xmlnode.Attributes["InheritCacheBitmaps"].Value);
@@ -1110,12 +1110,12 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Panel = Language.strGeneral;
}
if (this.confVersion > 1.4) //1.5
if (confVersion > 1.4) //1.5
{
connectionInfo.PleaseConnect = bool.Parse(xmlnode.Attributes["Connected"].Value);
}
if (this.confVersion > 1.5) //1.6
if (confVersion > 1.5) //1.6
{
connectionInfo.ICAEncryption = (ProtocolICA.EncryptionStrength)Tools.MiscTools.StringToEnum(typeof(ProtocolICA.EncryptionStrength), xmlnode.Attributes["ICAEncryptionStrength"].Value);
connectionInfo.Inheritance.ICAEncryption = bool.Parse(xmlnode.Attributes["InheritICAEncryptionStrength"].Value);
@@ -1125,7 +1125,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.PostExtApp = bool.Parse(xmlnode.Attributes["InheritPostExtApp"].Value);
}
if (this.confVersion > 1.6) //1.7
if (confVersion > 1.6) //1.7
{
connectionInfo.VNCCompression = (ProtocolVNC.Compression)Tools.MiscTools.StringToEnum(typeof(ProtocolVNC.Compression), xmlnode.Attributes["VNCCompression"].Value);
connectionInfo.VNCEncoding = (ProtocolVNC.Encoding)Tools.MiscTools.StringToEnum(typeof(ProtocolVNC.Encoding), Convert.ToString(xmlnode.Attributes["VNCEncoding"].Value));
@@ -1151,13 +1151,13 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.VNCViewOnly = bool.Parse(xmlnode.Attributes["InheritVNCViewOnly"].Value);
}
if (this.confVersion > 1.7) //1.8
if (confVersion > 1.7) //1.8
{
connectionInfo.RDPAuthenticationLevel = (ProtocolRDP.AuthenticationLevel)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.AuthenticationLevel), xmlnode.Attributes["RDPAuthenticationLevel"].Value);
connectionInfo.Inheritance.RDPAuthenticationLevel = bool.Parse(xmlnode.Attributes["InheritRDPAuthenticationLevel"].Value);
}
if (this.confVersion > 1.8) //1.9
if (confVersion > 1.8) //1.9
{
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Tools.MiscTools.StringToEnum(typeof(HTTPBase.RenderingEngine), xmlnode.Attributes["RenderingEngine"].Value);
connectionInfo.MacAddress = xmlnode.Attributes["MacAddress"].Value;
@@ -1165,19 +1165,19 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.MacAddress = bool.Parse(xmlnode.Attributes["InheritMacAddress"].Value);
}
if (this.confVersion > 1.9) //2.0
if (confVersion > 1.9) //2.0
{
connectionInfo.UserField = xmlnode.Attributes["UserField"].Value;
connectionInfo.Inheritance.UserField = bool.Parse(xmlnode.Attributes["InheritUserField"].Value);
}
if (this.confVersion > 2.0) //2.1
if (confVersion > 2.0) //2.1
{
connectionInfo.ExtApp = xmlnode.Attributes["ExtApp"].Value;
connectionInfo.Inheritance.ExtApp = bool.Parse(xmlnode.Attributes["InheritExtApp"].Value);
}
if (this.confVersion > 2.1) //2.2
if (confVersion > 2.1) //2.2
{
// Get settings
connectionInfo.RDGatewayUsageMethod = (ProtocolRDP.RDGatewayUsageMethod)Tools.MiscTools.StringToEnum(typeof(ProtocolRDP.RDGatewayUsageMethod), Convert.ToString(xmlnode.Attributes["RDGatewayUsageMethod"].Value));
@@ -1196,7 +1196,7 @@ namespace mRemoteNG.Config.Connections
connectionInfo.Inheritance.RDGatewayDomain = bool.Parse(xmlnode.Attributes["InheritRDGatewayDomain"].Value);
}
if (this.confVersion > 2.2) //2.3
if (confVersion > 2.2) //2.3
{
// Get settings
connectionInfo.EnableFontSmoothing = bool.Parse(xmlnode.Attributes["EnableFontSmoothing"].Value);
@@ -1223,7 +1223,7 @@ namespace mRemoteNG.Config.Connections
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, string.Format(Language.strGetConnectionInfoFromXmlFailed, connectionInfo.Name, this.ConnectionFileName, ex.Message), false);
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, string.Format(Language.strGetConnectionInfoFromXmlFailed, connectionInfo.Name, ConnectionFileName, ex.Message), false);
}
return connectionInfo;
}

View File

@@ -1,9 +1,10 @@
using System;
using Microsoft.VisualBasic;
using System.Windows.Forms;
using mRemoteNG.Tools;
using mRemoteNG.App;
using mRemoteNG.My;
using TabPage = Crownwood.Magic.Controls.TabPage;
//using SHDocVw;
namespace mRemoteNG.Connection.Protocol.Http
{
@@ -23,12 +24,12 @@ namespace mRemoteNG.Connection.Protocol.Http
{
if (RenderingEngine == RenderingEngine.Gecko)
{
this.Control = new MiniGeckoBrowser.MiniGeckoBrowser();
(this.Control as MiniGeckoBrowser.MiniGeckoBrowser).XULrunnerPath = Convert.ToString(mRemoteNG.Settings.Default.XULRunnerPath);
Control = new MiniGeckoBrowser.MiniGeckoBrowser();
((MiniGeckoBrowser.MiniGeckoBrowser)Control).XULrunnerPath = Convert.ToString(Settings.Default.XULRunnerPath);
}
else
{
this.Control = new WebBrowser();
Control = new WebBrowser();
}
NewExtended();
@@ -49,32 +50,40 @@ namespace mRemoteNG.Connection.Protocol.Http
try
{
Crownwood.Magic.Controls.TabPage objTabPage = this.InterfaceControl.Parent as Crownwood.Magic.Controls.TabPage;
this.tabTitle = objTabPage.Title;
TabPage objTabPage = InterfaceControl.Parent as TabPage;
if (objTabPage != null) tabTitle = objTabPage.Title;
}
catch (Exception)
{
this.tabTitle = "";
tabTitle = "";
}
try
{
this.wBrowser = this.Control;
wBrowser = Control;
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
MiniGeckoBrowser.MiniGeckoBrowser objMiniGeckoBrowser = wBrowser as MiniGeckoBrowser.MiniGeckoBrowser;
objMiniGeckoBrowser.TitleChanged += geckoBrowser_DocumentTitleChanged;
objMiniGeckoBrowser.LastTabRemoved += wBrowser_LastTabRemoved;
if (objMiniGeckoBrowser != null)
{
objMiniGeckoBrowser.TitleChanged += geckoBrowser_DocumentTitleChanged;
objMiniGeckoBrowser.LastTabRemoved += wBrowser_LastTabRemoved;
}
}
else
{
WebBrowser objWebBrowser = (WebBrowser)wBrowser;
SHDocVw.WebBrowserClass objAxWebBrowser = (SHDocVw.WebBrowserClass)objWebBrowser.ActiveXInstance;
//SHDocVw.WebBrowserClass objAxWebBrowser = (SHDocVw.WebBrowserClass)objWebBrowser.ActiveXInstance;
objWebBrowser.ScrollBarsEnabled = true;
objWebBrowser.Navigated += wBrowser_Navigated;
// http://stackoverflow.com/questions/4655662/how-to-ignore-script-errors-in-webbrowser
objWebBrowser.ScriptErrorsSuppressed = true;
objWebBrowser.Navigated += wBrowser_Navigated;
objWebBrowser.DocumentTitleChanged += wBrowser_DocumentTitleChanged;
objAxWebBrowser.NewWindow3 += wBrowser_NewWindow3;
//objWebBrowser.NewWindow3 += wBrowser_NewWindow3;
//objAxWebBrowser.NewWindow3 += wBrowser_NewWindow3;
}
return true;
@@ -90,15 +99,15 @@ namespace mRemoteNG.Connection.Protocol.Http
{
try
{
string strHost = Convert.ToString(this.InterfaceControl.Info.Hostname);
string strHost = Convert.ToString(InterfaceControl.Info.Hostname);
string strAuth = "";
if (!(((int)Force & (int)ConnectionInfo.Force.NoCredentials) == (int)ConnectionInfo.Force.NoCredentials) && !string.IsNullOrEmpty(InterfaceControl.Info.Username) && !string.IsNullOrEmpty(InterfaceControl.Info.Password))
if (((int)Force & (int)ConnectionInfo.Force.NoCredentials) != (int)ConnectionInfo.Force.NoCredentials && !string.IsNullOrEmpty(InterfaceControl.Info.Username) && !string.IsNullOrEmpty(InterfaceControl.Info.Password))
{
strAuth = "Authorization: Basic " + Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(this.InterfaceControl.Info.Username + ":" + this.InterfaceControl.Info.Password)) + Environment.NewLine;
strAuth = "Authorization: Basic " + Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(InterfaceControl.Info.Username + ":" + InterfaceControl.Info.Password)) + Environment.NewLine;
}
if (this.InterfaceControl.Info.Port != defaultPort)
if (InterfaceControl.Info.Port != defaultPort)
{
if (strHost.EndsWith("/"))
{
@@ -112,11 +121,11 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
((MiniGeckoBrowser.MiniGeckoBrowser)wBrowser).Navigate(strHost + ":" + this.InterfaceControl.Info.Port);
((MiniGeckoBrowser.MiniGeckoBrowser)wBrowser).Navigate(strHost + ":" + InterfaceControl.Info.Port);
}
else
{
((WebBrowser)wBrowser).Navigate(strHost + ":" + this.InterfaceControl.Info.Port);
((WebBrowser)wBrowser).Navigate(strHost + ":" + InterfaceControl.Info.Port);
}
}
else
@@ -128,7 +137,7 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
(wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Navigate(strHost);
((MiniGeckoBrowser.MiniGeckoBrowser)wBrowser).Navigate(strHost);
}
else
{
@@ -151,7 +160,7 @@ namespace mRemoteNG.Connection.Protocol.Http
#endregion
#region Events
private void wBrowser_Navigated(object sender, System.Windows.Forms.WebBrowserNavigatedEventArgs e)
private void wBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
WebBrowser objWebBrowser = wBrowser as WebBrowser;
if (objWebBrowser == null)
@@ -179,44 +188,43 @@ namespace mRemoteNG.Connection.Protocol.Http
private void wBrowser_LastTabRemoved(object sender)
{
this.Close();
Close();
}
private void wBrowser_DocumentTitleChanged(System.Object sender, System.EventArgs e)
private void wBrowser_DocumentTitleChanged(object sender, EventArgs e)
{
try
{
Crownwood.Magic.Controls.TabPage tabP = default(Crownwood.Magic.Controls.TabPage);
tabP = InterfaceControl.Parent as Crownwood.Magic.Controls.TabPage;
if (tabP != null)
var tabP = InterfaceControl.Parent as TabPage;
if (tabP != null)
{
string shortTitle = "";
string shortTitle;
if (this.InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
if ((wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title.Length >= 30)
if (((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Length >= 30)
{
shortTitle = (wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title.Substring(0, 29) + " ...";
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Substring(0, 29) + " ...";
}
else
{
shortTitle = (wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title;
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title;
}
}
else
{
if ((wBrowser as WebBrowser).DocumentTitle.Length >= 30)
if (((WebBrowser) wBrowser).DocumentTitle.Length >= 30)
{
shortTitle = (wBrowser as WebBrowser).DocumentTitle.Substring(0, 29) + " ...";
shortTitle = ((WebBrowser) wBrowser).DocumentTitle.Substring(0, 29) + " ...";
}
else
{
shortTitle = (wBrowser as WebBrowser).DocumentTitle;
shortTitle = ((WebBrowser) wBrowser).DocumentTitle;
}
}
if (!string.IsNullOrEmpty(this.tabTitle))
if (!string.IsNullOrEmpty(tabTitle))
{
tabP.Title = tabTitle + " - " + shortTitle;
}
@@ -233,41 +241,40 @@ namespace mRemoteNG.Connection.Protocol.Http
}
private void geckoBrowser_DocumentTitleChanged(System.Object sender, string e)
private void geckoBrowser_DocumentTitleChanged(object sender, string e)
{
try
{
Crownwood.Magic.Controls.TabPage tabP = default(Crownwood.Magic.Controls.TabPage);
tabP = InterfaceControl.Parent as Crownwood.Magic.Controls.TabPage;
var tabP = InterfaceControl.Parent as TabPage;
if (tabP != null)
{
string shortTitle = "";
string shortTitle;
if (this.InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
if ((wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title.Length >= 30)
if (((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Length >= 30)
{
shortTitle = (wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title.Substring(0, 29) + " ...";
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Substring(0, 29) + " ...";
}
else
{
shortTitle = (wBrowser as MiniGeckoBrowser.MiniGeckoBrowser).Title;
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title;
}
}
else
{
if ((wBrowser as WebBrowser).DocumentTitle.Length >= 30)
if (((WebBrowser) wBrowser).DocumentTitle.Length >= 30)
{
shortTitle = (wBrowser as WebBrowser).DocumentTitle.Substring(0, 29) + " ...";
shortTitle = ((WebBrowser) wBrowser).DocumentTitle.Substring(0, 29) + " ...";
}
else
{
shortTitle = (wBrowser as WebBrowser).DocumentTitle;
shortTitle = ((WebBrowser) wBrowser).DocumentTitle;
}
}
if (!string.IsNullOrEmpty(this.tabTitle))
if (!string.IsNullOrEmpty(tabTitle))
{
tabP.Title = tabTitle + " - " + shortTitle;
}

View File

@@ -1,65 +1,228 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Security.AccessControl;
using Microsoft.Win32;
using mRemoteNG.App;
using mRemoteNG.Messages;
namespace mRemoteNG.Tools
{
public class IeBrowserEmulation
{
private const string BrowserEmulationKey = "Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION";
private static int _previousIeBrowserEmulationValue = 0;
public static void Register()
{
try
{
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
if (registryKey == null)
{
Registry.CurrentUser.CreateSubKey(BrowserEmulationKey);
registryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
if (registryKey == null)
{
return ;
}
}
string exeName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
_previousIeBrowserEmulationValue = Convert.ToInt32(registryKey.GetValue(exeName, 0));
registryKey.SetValue(exeName, 11000, RegistryValueKind.DWord);
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage(message: "IeBrowserEmulation.Register() failed.", ex: ex, logOnly: true);
}
}
public static void Unregister()
{
#if PORTABLE
try
{
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
if (registryKey == null)
{
return ;
}
string exeName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
if (_previousIeBrowserEmulationValue == 0)
{
registryKey.DeleteValue(exeName);
}
else
{
registryKey.SetValue(exeName, _previousIeBrowserEmulationValue, RegistryValueKind.DWord);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage(message: "IeBrowserEmulation.Unregister() failed.", ex: ex, logOnly: true);
}
#endif
}
}
}
public class IeBrowserEmulation
{
// found this here:
// http://www.neowin.net/forum/topic/1077469-vbnet-webbrowser-control-does-not-load-javascript/#comment-596755046
private static void SetBrowserFeatureControlKey(string feature, string appName, uint value)
{
if (Environment.Is64BitOperatingSystem)
{
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(string.Concat("Software\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree))
{
key?.SetValue(appName, value, RegistryValueKind.DWord);
}
}
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(string.Concat("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree))
{
key?.SetValue(appName, value, RegistryValueKind.DWord);
}
}
private static void DeleteBrowserFeatureControlKey(string feature, string appName)
{
if (Environment.Is64BitOperatingSystem)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(string.Concat("Software\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree))
{
key?.DeleteValue(appName);
}
}
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(string.Concat("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree))
{
key?.DeleteValue(appName);
}
}
private static void SetBrowserFeatureControl()
{
// http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx
// FeatureControl settings are per-process
var fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
// make the control is not running inside Visual Studio Designer
if (string.Compare(fileName, "devenv.exe", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(fileName, "XDesProc.exe", StringComparison.OrdinalIgnoreCase) == 0)
{
return;
}
SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode());
// Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName, 1);
SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS", fileName, 0);
SetBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName, 1);
}
private static void DeleteBrowserFeatureControl()
{
// http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx
// FeatureControl settings are per-process
var fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
// make the control is not running inside Visual Studio Designer
if (string.Compare(fileName, "devenv.exe", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(fileName, "XDesProc.exe", StringComparison.OrdinalIgnoreCase) == 0)
{
return;
}
DeleteBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName);
// Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
DeleteBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName);
DeleteBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName);
DeleteBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName);
DeleteBrowserFeatureControlKey("FEATURE_DOMSTORAGE", fileName);
DeleteBrowserFeatureControlKey("FEATURE_GPU_RENDERING", fileName);
DeleteBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI", fileName);
DeleteBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName);
DeleteBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName);
DeleteBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName);
DeleteBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName);
DeleteBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName);
DeleteBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName);
DeleteBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName);
DeleteBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName);
DeleteBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName);
DeleteBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName);
DeleteBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName);
DeleteBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName);
DeleteBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName);
DeleteBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName);
DeleteBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName);
DeleteBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS", fileName);
DeleteBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName);
}
private static uint GetBrowserEmulationMode()
{
// https://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx
var browserVersion = 9;
// default to IE9.
using (RegistryKey ieKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.QueryValues))
{
if (ieKey != null)
{
var version = ieKey.GetValue("svcVersion");
if (null == version)
{
version = ieKey.GetValue("Version");
if (version == null)
{
throw new ApplicationException("Microsoft Internet Explorer is required!");
}
}
int.TryParse(version.ToString().Split('.')[0], out browserVersion);
}
}
uint mode;
switch (browserVersion)
{
// https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer
// IE 7 & 8 are basically not supported any more...
#if OLD_BROWSERS
// Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
case 7:
mode = 7000;
break;
// Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
case 8:
mode = 8000;
break;
#endif
// Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
case 9:
mode = 9000;
break;
// Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
case 10:
mode = 10000;
break;
// IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
case 11:
mode = 11000;
break;
default:
// use IE9 mode by default
mode = 9000;
break;
}
return mode;
}
public static void Register()
{
try
{
SetBrowserFeatureControl();
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("IeBrowserEmulation.Register() failed.", ex, MessageClass.ErrorMsg, true);
}
}
public static void Unregister()
{
#if PORTABLE
try
{
DeleteBrowserFeatureControl();
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("IeBrowserEmulation.Unregister() failed.", ex, MessageClass.ErrorMsg, true);
}
#endif
}
private IeBrowserEmulation()
{
}
}
}

View File

@@ -1,12 +1,11 @@
using System;
using System.IO;
using System.Windows.Forms;
using mRemoteNG.App;
using mRemoteNG.App.Info;
using mRemoteNG.Config.Putty;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.My;
using mRemoteNG.Tools;
using PSTaskDialog;
namespace mRemoteNG.UI.Forms.OptionsPages
{
@@ -48,51 +47,51 @@ namespace mRemoteNG.UI.Forms.OptionsPages
{
base.SaveSettings();
chkWriteLogFile.Checked = mRemoteNG.Settings.Default.WriteLogFile;
chkWriteLogFile.Checked = Settings.Default.WriteLogFile;
chkEncryptCompleteFile.Checked = mRemoteNG.Settings.Default.EncryptCompleteConnectionsFile;
chkAutomaticallyGetSessionInfo.Checked = mRemoteNG.Settings.Default.AutomaticallyGetSessionInfo;
chkAutomaticReconnect.Checked = mRemoteNG.Settings.Default.ReconnectOnDisconnect;
numPuttyWaitTime.Value = mRemoteNG.Settings.Default.MaxPuttyWaitTime;
chkEncryptCompleteFile.Checked = Settings.Default.EncryptCompleteConnectionsFile;
chkAutomaticallyGetSessionInfo.Checked = Settings.Default.AutomaticallyGetSessionInfo;
chkAutomaticReconnect.Checked = Settings.Default.ReconnectOnDisconnect;
numPuttyWaitTime.Value = Settings.Default.MaxPuttyWaitTime;
chkUseCustomPuttyPath.Checked = mRemoteNG.Settings.Default.UseCustomPuttyPath;
txtCustomPuttyPath.Text = mRemoteNG.Settings.Default.CustomPuttyPath;
chkUseCustomPuttyPath.Checked = Settings.Default.UseCustomPuttyPath;
txtCustomPuttyPath.Text = Settings.Default.CustomPuttyPath;
SetPuttyLaunchButtonEnabled();
numUVNCSCPort.Value = mRemoteNG.Settings.Default.UVNCSCPort;
numUVNCSCPort.Value = Settings.Default.UVNCSCPort;
txtXULrunnerPath.Text = mRemoteNG.Settings.Default.XULRunnerPath;
txtXULrunnerPath.Text = Settings.Default.XULRunnerPath;
}
public override void SaveSettings()
{
mRemoteNG.Settings.Default.WriteLogFile = chkWriteLogFile.Checked;
mRemoteNG.Settings.Default.EncryptCompleteConnectionsFile = chkEncryptCompleteFile.Checked;
mRemoteNG.Settings.Default.AutomaticallyGetSessionInfo = chkAutomaticallyGetSessionInfo.Checked;
mRemoteNG.Settings.Default.ReconnectOnDisconnect = chkAutomaticReconnect.Checked;
Settings.Default.WriteLogFile = chkWriteLogFile.Checked;
Settings.Default.EncryptCompleteConnectionsFile = chkEncryptCompleteFile.Checked;
Settings.Default.AutomaticallyGetSessionInfo = chkAutomaticallyGetSessionInfo.Checked;
Settings.Default.ReconnectOnDisconnect = chkAutomaticReconnect.Checked;
var puttyPathChanged = false;
if (mRemoteNG.Settings.Default.CustomPuttyPath != txtCustomPuttyPath.Text)
if (Settings.Default.CustomPuttyPath != txtCustomPuttyPath.Text)
{
puttyPathChanged = true;
mRemoteNG.Settings.Default.CustomPuttyPath = txtCustomPuttyPath.Text;
Settings.Default.CustomPuttyPath = txtCustomPuttyPath.Text;
}
if (mRemoteNG.Settings.Default.UseCustomPuttyPath != chkUseCustomPuttyPath.Checked)
if (Settings.Default.UseCustomPuttyPath != chkUseCustomPuttyPath.Checked)
{
puttyPathChanged = true;
mRemoteNG.Settings.Default.UseCustomPuttyPath = chkUseCustomPuttyPath.Checked;
Settings.Default.UseCustomPuttyPath = chkUseCustomPuttyPath.Checked;
}
if (puttyPathChanged)
{
PuttyBase.PuttyPath = mRemoteNG.Settings.Default.UseCustomPuttyPath ? mRemoteNG.Settings.Default.CustomPuttyPath : GeneralAppInfo.PuttyPath;
PuttyBase.PuttyPath = Settings.Default.UseCustomPuttyPath ? Settings.Default.CustomPuttyPath : GeneralAppInfo.PuttyPath;
Sessions.AddSessionsToTree();
}
mRemoteNG.Settings.Default.MaxPuttyWaitTime = (int) numPuttyWaitTime.Value;
mRemoteNG.Settings.Default.UVNCSCPort = (int) numUVNCSCPort.Value;
mRemoteNG.Settings.Default.XULRunnerPath = txtXULrunnerPath.Text;
Settings.Default.MaxPuttyWaitTime = (int) numPuttyWaitTime.Value;
Settings.Default.UVNCSCPort = (int) numUVNCSCPort.Value;
Settings.Default.XULRunnerPath = txtXULrunnerPath.Text;
mRemoteNG.Settings.Default.Save();
Settings.Default.Save();
}
#endregion
@@ -135,8 +134,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
try
{
var puttyProcess = new PuttyProcessController();
var fileName = "";
fileName = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath;
var fileName = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath;
puttyProcess.Start(fileName);
puttyProcess.SetControlText("Button", "&Cancel", "&Close");
puttyProcess.SetControlVisible("Button", "&Open", false);
@@ -144,8 +142,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages
}
catch (Exception ex)
{
cTaskDialog.MessageBox(Convert.ToString(Application.ProductName), Language.strErrorCouldNotLaunchPutty,
"", ex.Message, "", "", eTaskDialogButtons.OK, eSysIcons.Error, eSysIcons.Error);
MessageBox.Show(Language.strErrorCouldNotLaunchPutty, Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
Runtime.MessageCollector.AddExceptionMessage(Language.strErrorCouldNotLaunchPutty, ex, logOnly: true);
}
}
@@ -165,8 +164,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
private void SetPuttyLaunchButtonEnabled()
{
var puttyPath = "";
puttyPath = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath;
var puttyPath = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath;
var exists = false;
try

View File

@@ -7,8 +7,8 @@ using mRemoteNG.App.Update;
using mRemoteNG.My;
using mRemoteNG.Security;
using mRemoteNG.Tools;
using mRemoteNG.UI.TaskDialog;
using mRemoteNG.UI.Window;
using PSTaskDialog;
namespace mRemoteNG.UI.Forms.OptionsPages
{
@@ -246,13 +246,13 @@ namespace mRemoteNG.UI.Forms.OptionsPages
throw e.Error;
}
cTaskDialog.ShowCommandBox(this, Convert.ToString(Application.ProductName),
CTaskDialog.ShowCommandBox(this, Convert.ToString(Application.ProductName),
Language.strProxyTestSucceeded, "", Language.strButtonOK, false);
}
catch (Exception ex)
{
cTaskDialog.ShowCommandBox(this, Convert.ToString(Application.ProductName), Language.strProxyTestFailed,
MiscTools.GetExceptionMessageRecursive(ex), "", "", "", Language.strButtonOK, false, eSysIcons.Error,
CTaskDialog.ShowCommandBox(this, Convert.ToString(Application.ProductName), Language.strProxyTestFailed,
MiscTools.GetExceptionMessageRecursive(ex), "", "", "", Language.strButtonOK, false, ESysIcons.Error,
0);
}
}

View File

@@ -15,8 +15,8 @@ using mRemoteNG.Messages;
using mRemoteNG.Themes;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.UI.TaskDialog;
using mRemoteNG.UI.Window;
using PSTaskDialog;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNG.UI.Forms
@@ -300,13 +300,12 @@ namespace mRemoteNG.UI.Forms
private static void ApplyMenuColors(ToolStripItemCollection itemCollection)
{
var menuItem = default(ToolStripMenuItem);
foreach (ToolStripItem item in itemCollection)
foreach (ToolStripItem item in itemCollection)
{
item.BackColor = ThemeManager.ActiveTheme.MenuBackgroundColor;
item.ForeColor = ThemeManager.ActiveTheme.MenuTextColor;
menuItem = item as ToolStripMenuItem;
var menuItem = item as ToolStripMenuItem;
if (menuItem != null)
{
ApplyMenuColors(menuItem.DropDownItems);
@@ -365,8 +364,8 @@ namespace mRemoteNG.UI.Forms
if (openConnections > 0 && (Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.All | (Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Multiple & openConnections > 1) || Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Exit))
{
var result = cTaskDialog.MessageBox(this, Application.ProductName, Language.strConfirmExitMainInstruction, "", "", "", Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, eSysIcons.Question);
if (cTaskDialog.VerificationChecked)
var result = CTaskDialog.MessageBox(this, Application.ProductName, Language.strConfirmExitMainInstruction, "", "", "", Language.strCheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.YesNo, ESysIcons.Question, ESysIcons.Question);
if (CTaskDialog.VerificationChecked)
{
Settings.Default.ConfirmCloseConnection--;
}

View File

@@ -0,0 +1,249 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
namespace mRemoteNG.UI.TaskDialog
{
public partial class CommandButton : Button
{
//--------------------------------------------------------------------------------
#region PRIVATE MEMBERS
//--------------------------------------------------------------------------------
Image imgArrow1 = null;
Image imgArrow2 = null;
const int LEFT_MARGIN = 10;
const int TOP_MARGIN = 10;
const int ARROW_WIDTH = 19;
enum eButtonState { Normal, MouseOver, Down }
eButtonState m_State = eButtonState.Normal;
#endregion
//--------------------------------------------------------------------------------
#region PUBLIC PROPERTIES
//--------------------------------------------------------------------------------
// Override this to make sure the control is invalidated (repainted) when 'Text' is changed
public override string Text
{
get { return base.Text; }
set
{
base.Text = value;
if (m_autoHeight)
this.Height = GetBestHeight();
this.Invalidate();
}
}
// SmallFont is the font used for secondary lines
Font m_smallFont;
public Font SmallFont { get { return m_smallFont; } set { m_smallFont = value; } }
// AutoHeight determines whether the button automatically resizes itself to fit the Text
bool m_autoHeight = true;
[Browsable(true)]
[Category("Behavior")]
[DefaultValue(true)]
public bool AutoHeight { get { return m_autoHeight; } set { m_autoHeight = value; if (m_autoHeight) this.Invalidate(); } }
#endregion
//--------------------------------------------------------------------------------
#region CONSTRUCTOR
//--------------------------------------------------------------------------------
public CommandButton()
{
InitializeComponent();
base.Font = new Font("Arial", 11.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
m_smallFont = new Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
}
#endregion
//--------------------------------------------------------------------------------
#region PUBLIC ROUTINES
//--------------------------------------------------------------------------------
public int GetBestHeight()
{
return (TOP_MARGIN * 2) + (int)GetSmallTextSizeF().Height + (int)GetLargeTextSizeF().Height;
}
#endregion
//--------------------------------------------------------------------------------
#region PRIVATE ROUTINES
//--------------------------------------------------------------------------------
string GetLargeText()
{
string[] lines = this.Text.Split(new char[] { '\n' });
return lines[0];
}
string GetSmallText()
{
if (this.Text.IndexOf('\n') < 0)
return "";
string s = this.Text;
string[] lines = s.Split(new char[] { '\n' });
s = "";
for (int i = 1; i < lines.Length; i++)
s += lines[i] + "\n";
return s.Trim(new char[] { '\n' });
}
SizeF GetLargeTextSizeF()
{
int x = LEFT_MARGIN + ARROW_WIDTH + 5;
SizeF mzSize = new SizeF(this.Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN
Graphics g = Graphics.FromHwnd(this.Handle);
SizeF textSize = g.MeasureString(GetLargeText(), base.Font, mzSize);
return textSize;
}
SizeF GetSmallTextSizeF()
{
string s = GetSmallText();
if (s == "") return new SizeF(0, 0);
int x = LEFT_MARGIN + ARROW_WIDTH + 8; // <- indent small text slightly more
SizeF mzSize = new SizeF(this.Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN
Graphics g = Graphics.FromHwnd(this.Handle);
SizeF textSize = g.MeasureString(s, m_smallFont, mzSize);
return textSize;
}
#endregion
//--------------------------------------------------------------------------------
#region OVERRIDEs
//--------------------------------------------------------------------------------
protected override void OnCreateControl()
{
base.OnCreateControl();
imgArrow1 = new Bitmap(this.GetType(), "green_arrow1.png");
imgArrow2 = new Bitmap(this.GetType(), "green_arrow2.png");
}
//--------------------------------------------------------------------------------
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
LinearGradientBrush brush;
LinearGradientMode mode = LinearGradientMode.Vertical;
Rectangle newRect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1);
Color text_color = SystemColors.WindowText;
Image img = imgArrow1;
if (Enabled)
{
switch (m_State)
{
case eButtonState.Normal:
e.Graphics.FillRectangle(Brushes.White, newRect);
if (base.Focused)
e.Graphics.DrawRectangle(new Pen(Color.SkyBlue, 1), newRect);
else
e.Graphics.DrawRectangle(new Pen(Color.White, 1), newRect);
text_color = Color.DarkBlue;
break;
case eButtonState.MouseOver:
brush = new LinearGradientBrush(newRect, Color.White, Color.WhiteSmoke, mode);
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new Pen(Color.Silver, 1), newRect);
img = imgArrow2;
text_color = Color.Blue;
break;
case eButtonState.Down:
brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.White, mode);
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect);
text_color = Color.DarkBlue;
break;
}
}
else
{
brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.Gainsboro, mode);
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect);
text_color = Color.DarkBlue;
}
string largetext = this.GetLargeText();
string smalltext = this.GetSmallText();
SizeF szL = GetLargeTextSizeF();
//e.Graphics.DrawString(largetext, base.Font, new SolidBrush(text_color), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN), szL));
TextRenderer.DrawText(e.Graphics, largetext, base.Font, new Rectangle(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN, (int)szL.Width, (int)szL.Height), text_color, TextFormatFlags.Default);
if (smalltext != "")
{
SizeF szS = GetSmallTextSizeF();
e.Graphics.DrawString(smalltext, m_smallFont, new SolidBrush(text_color), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 8, TOP_MARGIN + (int)szL.Height), szS));
}
e.Graphics.DrawImage(img, new Point(LEFT_MARGIN, TOP_MARGIN + (int)(szL.Height / 2) - (int)(img.Height / 2)));
}
//--------------------------------------------------------------------------------
protected override void OnMouseLeave(System.EventArgs e)
{
m_State = eButtonState.Normal;
this.Invalidate();
base.OnMouseLeave(e);
}
//--------------------------------------------------------------------------------
protected override void OnMouseEnter(System.EventArgs e)
{
m_State = eButtonState.MouseOver;
this.Invalidate();
base.OnMouseEnter(e);
}
//--------------------------------------------------------------------------------
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
m_State = eButtonState.MouseOver;
this.Invalidate();
base.OnMouseUp(e);
}
//--------------------------------------------------------------------------------
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
m_State = eButtonState.Down;
this.Invalidate();
base.OnMouseDown(e);
}
//--------------------------------------------------------------------------------
protected override void OnSizeChanged(EventArgs e)
{
if (m_autoHeight)
{
int h = GetBestHeight();
if (this.Height != h)
{
this.Height = h;
return;
}
}
base.OnSizeChanged(e);
}
#endregion
//--------------------------------------------------------------------------------
}
}

View File

@@ -0,0 +1,36 @@
namespace mRemoteNG.UI.TaskDialog
{
partial class CommandButton
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,353 @@
using System;
using System.Windows.Forms;
namespace mRemoteNG.UI.TaskDialog
{
//--------------------------------------------------------------------------------
#region PUBLIC enums
//--------------------------------------------------------------------------------
public enum ESysIcons
{
Information,
Question,
Warning,
Error
}
public enum ETaskDialogButtons
{
YesNo,
YesNoCancel,
OkCancel,
Ok,
Close,
Cancel,
None
}
#endregion
//--------------------------------------------------------------------------------
public static class CTaskDialog
{
// PUBLIC static values...
public static bool VerificationChecked;
public static int RadioButtonResult = -1;
public static int CommandButtonResult = -1;
public static int EmulatedFormWidth = 450;
public static bool ForceEmulationMode = false;
public static bool UseToolWindowOnXp = true;
public static bool PlaySystemSounds = true;
public static EventHandler OnTaskDialogShown = null;
public static EventHandler OnTaskDialogClosed = null;
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
#region ShowTaskDialogBox
//--------------------------------------------------------------------------------
public static DialogResult ShowTaskDialogBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
string commandButtons,
ETaskDialogButtons buttons,
ESysIcons mainIcon,
ESysIcons footerIcon,
int defaultIndex)
{
DialogResult result;
OnTaskDialogShown?.Invoke(null, EventArgs.Empty);
using (var td = new frmTaskDialog())
{
td.Title = title;
td.MainInstruction = mainInstruction;
td.Content = content;
td.ExpandedInfo = expandedInfo;
td.Footer = footer;
td.RadioButtons = radioButtons;
td.CommandButtons = commandButtons;
td.Buttons = buttons;
td.MainIcon = mainIcon;
td.FooterIcon = footerIcon;
td.VerificationText = verificationText;
td.Width = EmulatedFormWidth;
td.DefaultButtonIndex = defaultIndex;
td.BuildForm();
result = td.ShowDialog(owner);
RadioButtonResult = td.RadioButtonIndex;
CommandButtonResult = td.CommandButtonClickedIndex;
VerificationChecked = td.VerificationCheckBoxChecked;
}
OnTaskDialogClosed?.Invoke(null, EventArgs.Empty);
return result;
}
//--------------------------------------------------------------------------------
// Overloaded versions...
//--------------------------------------------------------------------------------
public static DialogResult ShowTaskDialogBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
string commandButtons,
ETaskDialogButtons buttons,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText,
radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0);
}
public static DialogResult ShowTaskDialogBox(string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
string commandButtons,
ETaskDialogButtons buttons,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText,
radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0);
}
#endregion
//--------------------------------------------------------------------------------
#region MessageBox
//--------------------------------------------------------------------------------
public static DialogResult MessageBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
ETaskDialogButtons buttons,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, "",
"", buttons, mainIcon, footerIcon);
}
//--------------------------------------------------------------------------------
// Overloaded versions...
//--------------------------------------------------------------------------------
public static DialogResult MessageBox(string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
ETaskDialogButtons buttons,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, "",
"", buttons, mainIcon, footerIcon);
}
public static DialogResult MessageBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
ETaskDialogButtons buttons,
ESysIcons mainIcon)
{
return MessageBox(owner, title, mainInstruction, content, "", "", "", buttons, mainIcon,
ESysIcons.Information);
}
public static DialogResult MessageBox(string title,
string mainInstruction,
string content,
ETaskDialogButtons buttons,
ESysIcons mainIcon)
{
return MessageBox(null, title, mainInstruction, content, "", "", "", buttons, mainIcon,
ESysIcons.Information);
}
//--------------------------------------------------------------------------------
#endregion
//--------------------------------------------------------------------------------
#region ShowRadioBox
//--------------------------------------------------------------------------------
public static int ShowRadioBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
ESysIcons mainIcon,
ESysIcons footerIcon,
int defaultIndex)
{
var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText,
radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex);
if (res == DialogResult.OK)
return RadioButtonResult;
return -1;
}
//--------------------------------------------------------------------------------
// Overloaded versions...
//--------------------------------------------------------------------------------
public static int ShowRadioBox(string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
ESysIcons mainIcon,
ESysIcons footerIcon,
int defaultIndex)
{
var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText,
radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex);
if (res == DialogResult.OK)
return RadioButtonResult;
return -1;
}
public static int ShowRadioBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string radioButtons,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
return ShowRadioBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText,
radioButtons, ESysIcons.Question, ESysIcons.Information, 0);
}
public static int ShowRadioBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string radioButtons,
int defaultIndex)
{
return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question,
ESysIcons.Information, defaultIndex);
}
public static int ShowRadioBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string radioButtons)
{
return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question,
ESysIcons.Information, 0);
}
public static int ShowRadioBox(string title,
string mainInstruction,
string content,
string radioButtons)
{
return ShowRadioBox(null, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question,
ESysIcons.Information, 0);
}
#endregion
//--------------------------------------------------------------------------------
#region ShowCommandBox
//--------------------------------------------------------------------------------
public static int ShowCommandBox(IWin32Window owner,
string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string commandButtons,
bool showCancelButton,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText,
"", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None,
mainIcon, footerIcon);
if (res == DialogResult.OK)
return CommandButtonResult;
return -1;
}
//--------------------------------------------------------------------------------
// Overloaded versions...
//--------------------------------------------------------------------------------
public static int ShowCommandBox(string title,
string mainInstruction,
string content,
string expandedInfo,
string footer,
string verificationText,
string commandButtons,
bool showCancelButton,
ESysIcons mainIcon,
ESysIcons footerIcon)
{
var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText,
"", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None,
mainIcon, footerIcon);
if (res == DialogResult.OK)
return CommandButtonResult;
return -1;
}
public static int ShowCommandBox(IWin32Window owner, string title, string mainInstruction, string content,
string commandButtons, bool showCancelButton)
{
return ShowCommandBox(owner, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton,
ESysIcons.Question, ESysIcons.Information);
}
public static int ShowCommandBox(string title, string mainInstruction, string content, string commandButtons,
bool showCancelButton)
{
return ShowCommandBox(null, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton,
ESysIcons.Question, ESysIcons.Information);
}
#endregion
}
}

View File

@@ -0,0 +1,440 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace mRemoteNG.UI.TaskDialog
{
public partial class frmTaskDialog : Form
{
//--------------------------------------------------------------------------------
#region PRIVATE members
//--------------------------------------------------------------------------------
ESysIcons _mainIcon = ESysIcons.Question;
ESysIcons _footerIcon = ESysIcons.Warning;
string _mainInstruction = "Main Instruction Text";
int _mainInstructionHeight = 0;
Font _mainInstructionFont = new Font("Arial", 11.75F, FontStyle.Regular, GraphicsUnit.Point, (byte)0);
List<RadioButton> _radioButtonCtrls = new List<RadioButton>();
string _radioButtons = "";
int _initialRadioButtonIndex = 0;
List<Button> _cmdButtons = new List<Button>();
string _commandButtons = "";
int _commandButtonClicked = -1;
int _defaultButtonIndex = 0;
Control _focusControl = null;
ETaskDialogButtons _buttons = ETaskDialogButtons.YesNoCancel;
bool _expanded = false;
bool _isVista = false;
#endregion
//--------------------------------------------------------------------------------
#region PROPERTIES
//--------------------------------------------------------------------------------
public ESysIcons MainIcon { get { return _mainIcon; } set { _mainIcon = value; } }
public ESysIcons FooterIcon { get { return _footerIcon; } set { _footerIcon = value; } }
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 int DefaultButtonIndex { get { return _defaultButtonIndex; } set { _defaultButtonIndex = value; } }
public string RadioButtons { get { return _radioButtons; } set { _radioButtons = value; } }
public int InitialRadioButtonIndex { get { return _initialRadioButtonIndex; } set { _initialRadioButtonIndex = value; } }
public int RadioButtonIndex
{
get
{
foreach (RadioButton rb in _radioButtonCtrls)
if (rb.Checked)
return (int)rb.Tag;
return -1;
}
}
public string CommandButtons { get { return _commandButtons; } set { _commandButtons = value; } }
public int CommandButtonClickedIndex => _commandButtonClicked;
public ETaskDialogButtons Buttons { get { return _buttons; } set { _buttons = value; } }
public string VerificationText { get { return cbVerify.Text; } set { cbVerify.Text = value; } }
public bool VerificationCheckBoxChecked { get { return cbVerify.Checked; } set { cbVerify.Checked = value; } }
public bool Expanded { get { return _expanded; } set { _expanded = value; } }
#endregion
//--------------------------------------------------------------------------------
#region CONSTRUCTOR
//--------------------------------------------------------------------------------
public frmTaskDialog()
{
InitializeComponent();
// _isVista = VistaTaskDialog.IsAvailableOnThisOS;
if (!_isVista && CTaskDialog.UseToolWindowOnXp) // <- shall we use the smaller toolbar?
FormBorderStyle = FormBorderStyle.FixedToolWindow;
MainInstruction = "Main Instruction";
Content = "";
ExpandedInfo = "";
Footer = "";
VerificationText = "";
}
#endregion
//--------------------------------------------------------------------------------
#region BuildForm
// This is the main routine that should be called before .ShowDialog()
//--------------------------------------------------------------------------------
bool _formBuilt = false;
public void BuildForm()
{
int form_height = 0;
// Setup Main Instruction
switch (_mainIcon)
{
case ESysIcons.Information: imgMain.Image = SystemIcons.Information.ToBitmap(); break;
case ESysIcons.Question: imgMain.Image = SystemIcons.Question.ToBitmap(); break;
case ESysIcons.Warning: imgMain.Image = SystemIcons.Warning.ToBitmap(); break;
case ESysIcons.Error: imgMain.Image = SystemIcons.Error.ToBitmap(); break;
}
//AdjustLabelHeight(lbMainInstruction);
//pnlMainInstruction.Height = Math.Max(41, lbMainInstruction.Height + 16);
if (_mainInstructionHeight == 0)
GetMainInstructionTextSizeF();
pnlMainInstruction.Height = Math.Max(41, _mainInstructionHeight + 16);
form_height += pnlMainInstruction.Height;
// Setup Content
pnlContent.Visible = (Content != "");
if (Content != "")
{
AdjustLabelHeight(lbContent);
pnlContent.Height = lbContent.Height + 4;
form_height += pnlContent.Height;
}
bool show_verify_checkbox = (cbVerify.Text != "");
cbVerify.Visible = show_verify_checkbox;
// Setup Expanded Info and Buttons panels
if (ExpandedInfo == "")
{
pnlExpandedInfo.Visible = false;
lbShowHideDetails.Visible = false;
cbVerify.Top = 12;
pnlButtons.Height = 40;
}
else
{
AdjustLabelHeight(lbExpandedInfo);
pnlExpandedInfo.Height = lbExpandedInfo.Height + 4;
pnlExpandedInfo.Visible = _expanded;
lbShowHideDetails.Text = (_expanded ? " Hide details" : " Show details");
lbShowHideDetails.ImageIndex = (_expanded ? 0 : 3);
if (!show_verify_checkbox)
pnlButtons.Height = 40;
if (_expanded)
form_height += pnlExpandedInfo.Height;
}
// Setup RadioButtons
pnlRadioButtons.Visible = (_radioButtons != "");
if (_radioButtons != "")
{
string[] arr = _radioButtons.Split(new char[] { '|' });
int pnl_height = 12;
for (int i = 0; i < arr.Length; i++)
{
RadioButton rb = new RadioButton();
rb.Parent = pnlRadioButtons;
rb.Location = new Point(60, 4 + (i * rb.Height));
rb.Text = arr[i];
rb.Tag = i;
rb.Checked = (_defaultButtonIndex == i);
rb.Width = Width - rb.Left - 15;
pnl_height += rb.Height;
_radioButtonCtrls.Add(rb);
}
pnlRadioButtons.Height = pnl_height;
form_height += pnlRadioButtons.Height;
}
// Setup CommandButtons
pnlCommandButtons.Visible = (_commandButtons != "");
if (_commandButtons != "")
{
string[] arr = _commandButtons.Split(new char[] { '|' });
int t = 8;
int pnl_height = 16;
for (int i = 0; i < arr.Length; i++)
{
CommandButton btn = new CommandButton();
btn.Parent = pnlCommandButtons;
btn.Location = new Point(50, t);
if (_isVista) // <- tweak font if vista
btn.Font = new Font(btn.Font, FontStyle.Regular);
btn.Text = arr[i];
btn.Size = new Size(Width - btn.Left - 15, btn.GetBestHeight());
t += btn.Height;
pnl_height += btn.Height;
btn.Tag = i;
btn.Click += new EventHandler(CommandButton_Click);
if (i == _defaultButtonIndex)
_focusControl = btn;
}
pnlCommandButtons.Height = pnl_height;
form_height += pnlCommandButtons.Height;
}
// Setup Buttons
switch (_buttons)
{
case ETaskDialogButtons.YesNo:
bt1.Visible = false;
bt2.Text = "&Yes";
bt2.DialogResult = DialogResult.Yes;
bt3.Text = "&No";
bt3.DialogResult = DialogResult.No;
AcceptButton = bt2;
CancelButton = bt3;
break;
case ETaskDialogButtons.YesNoCancel:
bt1.Text = "&Yes";
bt1.DialogResult = DialogResult.Yes;
bt2.Text = "&No";
bt2.DialogResult = DialogResult.No;
bt3.Text = "&Cancel";
bt3.DialogResult = DialogResult.Cancel;
AcceptButton = bt1;
CancelButton = bt3;
break;
case ETaskDialogButtons.OkCancel:
bt1.Visible = false;
bt2.Text = "&OK";
bt2.DialogResult = DialogResult.OK;
bt3.Text = "&Cancel";
bt3.DialogResult = DialogResult.Cancel;
AcceptButton = bt2;
CancelButton = bt3;
break;
case ETaskDialogButtons.Ok:
bt1.Visible = false;
bt2.Visible = false;
bt3.Text = "&OK";
bt3.DialogResult = DialogResult.OK;
AcceptButton = bt3;
CancelButton = bt3;
break;
case ETaskDialogButtons.Close:
bt1.Visible = false;
bt2.Visible = false;
bt3.Text = "&Close";
bt3.DialogResult = DialogResult.Cancel;
CancelButton = bt3;
break;
case ETaskDialogButtons.Cancel:
bt1.Visible = false;
bt2.Visible = false;
bt3.Text = "&Cancel";
bt3.DialogResult = DialogResult.Cancel;
CancelButton = bt3;
break;
case ETaskDialogButtons.None:
bt1.Visible = false;
bt2.Visible = false;
bt3.Visible = false;
break;
}
ControlBox = (Buttons == ETaskDialogButtons.Cancel ||
Buttons == ETaskDialogButtons.Close ||
Buttons == ETaskDialogButtons.OkCancel ||
Buttons == ETaskDialogButtons.YesNoCancel);
if (!show_verify_checkbox && ExpandedInfo == "" && _buttons == ETaskDialogButtons.None)
pnlButtons.Visible = false;
else
form_height += pnlButtons.Height;
pnlFooter.Visible = (Footer != "");
if (Footer != "")
{
AdjustLabelHeight(lbFooter);
pnlFooter.Height = Math.Max(28, lbFooter.Height + 16);
switch (_footerIcon)
{
case ESysIcons.Information:
// SystemIcons.Information.ToBitmap().GetThumbnailImage(16, 16, null, IntPtr.Zero);
imgFooter.Image = ResizeBitmap(SystemIcons.Information.ToBitmap(), 16, 16);
break;
case ESysIcons.Question:
// SystemIcons.Question.ToBitmap().GetThumbnailImage(16, 16, null, IntPtr.Zero);
imgFooter.Image = ResizeBitmap(SystemIcons.Question.ToBitmap(), 16, 16);
break;
case ESysIcons.Warning:
// SystemIcons.Warning.ToBitmap().GetThumbnailImage(16, 16, null, IntPtr.Zero);
imgFooter.Image = ResizeBitmap(SystemIcons.Warning.ToBitmap(), 16, 16);
break;
case ESysIcons.Error:
// SystemIcons.Error.ToBitmap().GetThumbnailImage(16, 16, null, IntPtr.Zero);
imgFooter.Image = ResizeBitmap(SystemIcons.Error.ToBitmap(), 16, 16);
break;
}
form_height += pnlFooter.Height;
}
ClientSize = new Size(ClientSize.Width, form_height);
_formBuilt = true;
}
//--------------------------------------------------------------------------------
Image ResizeBitmap(Image SrcImg, int NewWidth, int NewHeight)
{
float percent_width = (NewWidth / (float)SrcImg.Width);
float percent_height = (NewHeight / (float)SrcImg.Height);
float resize_percent = (percent_height < percent_width ? percent_height : percent_width);
int w = (int)(SrcImg.Width * resize_percent);
int h = (int)(SrcImg.Height * resize_percent);
Bitmap b = new Bitmap(w, h);
using (Graphics g = Graphics.FromImage(b))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(SrcImg, 0, 0, w, h);
}
return b;
}
//--------------------------------------------------------------------------------
// utility function for setting a Label's height
void AdjustLabelHeight(Label lb)
{
string text = lb.Text;
Font textFont = lb.Font;
SizeF layoutSize = new SizeF(lb.ClientSize.Width, 5000.0F);
Graphics g = Graphics.FromHwnd(lb.Handle);
SizeF stringSize = g.MeasureString(text, textFont, layoutSize);
lb.Height = (int)stringSize.Height + 4;
g.Dispose();
}
#endregion
//--------------------------------------------------------------------------------
#region EVENTS
//--------------------------------------------------------------------------------
void CommandButton_Click(object sender, EventArgs e)
{
_commandButtonClicked = (int)((CommandButton)sender).Tag;
DialogResult = DialogResult.OK;
}
//--------------------------------------------------------------------------------
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
//--------------------------------------------------------------------------------
protected override void OnShown(EventArgs e)
{
if (!_formBuilt)
throw new Exception("frmTaskDialog : Please call .BuildForm() before showing the TaskDialog");
base.OnShown(e);
}
//--------------------------------------------------------------------------------
private void lbDetails_MouseEnter(object sender, EventArgs e)
{
lbShowHideDetails.ImageIndex = (_expanded ? 1 : 4);
}
//--------------------------------------------------------------------------------
private void lbDetails_MouseLeave(object sender, EventArgs e)
{
lbShowHideDetails.ImageIndex = (_expanded ? 0 : 3);
}
//--------------------------------------------------------------------------------
private void lbDetails_MouseUp(object sender, MouseEventArgs e)
{
lbShowHideDetails.ImageIndex = (_expanded ? 1 : 4);
}
//--------------------------------------------------------------------------------
private void lbDetails_MouseDown(object sender, MouseEventArgs e)
{
lbShowHideDetails.ImageIndex =(_expanded ? 2 : 5);
}
//--------------------------------------------------------------------------------
private void lbDetails_Click(object sender, EventArgs e)
{
_expanded = !_expanded;
pnlExpandedInfo.Visible = _expanded;
lbShowHideDetails.Text = (_expanded ? " Hide details" : " Show details");
if (_expanded)
Height += pnlExpandedInfo.Height;
else
Height -= pnlExpandedInfo.Height;
}
//--------------------------------------------------------------------------------
const int MAIN_INSTRUCTION_LEFT_MARGIN = 46;
const int MAIN_INSTRUCTION_RIGHT_MARGIN = 8;
SizeF GetMainInstructionTextSizeF()
{
SizeF mzSize = new SizeF(pnlMainInstruction.Width - MAIN_INSTRUCTION_LEFT_MARGIN - MAIN_INSTRUCTION_RIGHT_MARGIN, 5000.0F);
Graphics g = Graphics.FromHwnd(Handle);
SizeF textSize = g.MeasureString(_mainInstruction, _mainInstructionFont, mzSize);
_mainInstructionHeight = (int)textSize.Height;
return textSize;
}
private void pnlMainInstruction_Paint(object sender, PaintEventArgs e)
{
SizeF szL = GetMainInstructionTextSizeF();
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
e.Graphics.DrawString(_mainInstruction, _mainInstructionFont, new SolidBrush(Color.DarkBlue), new RectangleF(new PointF(MAIN_INSTRUCTION_LEFT_MARGIN, 10), szL));
}
//--------------------------------------------------------------------------------
private void frmTaskDialog_Shown(object sender, EventArgs e)
{
if (CTaskDialog.PlaySystemSounds)
{
switch (_mainIcon)
{
case ESysIcons.Error: System.Media.SystemSounds.Hand.Play(); break;
case ESysIcons.Information: System.Media.SystemSounds.Asterisk.Play(); break;
case ESysIcons.Question: System.Media.SystemSounds.Asterisk.Play(); break;
case ESysIcons.Warning: System.Media.SystemSounds.Exclamation.Play(); break;
}
}
if (_focusControl != null)
_focusControl.Focus();
}
#endregion
//--------------------------------------------------------------------------------
}
}

View File

@@ -0,0 +1,334 @@
namespace mRemoteNG.UI.TaskDialog
{
partial class frmTaskDialog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmTaskDialog));
this.imgMain = new System.Windows.Forms.PictureBox();
this.lbContent = new System.Windows.Forms.Label();
this.pnlButtons = new System.Windows.Forms.Panel();
this.bt1 = new System.Windows.Forms.Button();
this.bt2 = new System.Windows.Forms.Button();
this.bt3 = new System.Windows.Forms.Button();
this.cbVerify = new System.Windows.Forms.CheckBox();
this.lbShowHideDetails = new System.Windows.Forms.Label();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.panel2 = new System.Windows.Forms.Panel();
this.pnlFooter = new System.Windows.Forms.Panel();
this.lbFooter = new System.Windows.Forms.Label();
this.imgFooter = new System.Windows.Forms.PictureBox();
this.panel5 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.pnlCommandButtons = new System.Windows.Forms.Panel();
this.pnlMainInstruction = new System.Windows.Forms.Panel();
this.pnlContent = new System.Windows.Forms.Panel();
this.pnlExpandedInfo = new System.Windows.Forms.Panel();
this.lbExpandedInfo = new System.Windows.Forms.Label();
this.pnlRadioButtons = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)(this.imgMain)).BeginInit();
this.pnlButtons.SuspendLayout();
this.pnlFooter.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.imgFooter)).BeginInit();
this.pnlMainInstruction.SuspendLayout();
this.pnlContent.SuspendLayout();
this.pnlExpandedInfo.SuspendLayout();
this.SuspendLayout();
//
// imgMain
//
this.imgMain.Location = new System.Drawing.Point(8, 8);
this.imgMain.Name = "imgMain";
this.imgMain.Size = new System.Drawing.Size(32, 32);
this.imgMain.TabIndex = 0;
this.imgMain.TabStop = false;
//
// lbContent
//
this.lbContent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lbContent.Location = new System.Drawing.Point(50, 0);
this.lbContent.Name = "lbContent";
this.lbContent.Size = new System.Drawing.Size(389, 19);
this.lbContent.TabIndex = 0;
this.lbContent.Text = "lbContent";
//
// pnlButtons
//
this.pnlButtons.BackColor = System.Drawing.Color.WhiteSmoke;
this.pnlButtons.Controls.Add(this.bt1);
this.pnlButtons.Controls.Add(this.bt2);
this.pnlButtons.Controls.Add(this.bt3);
this.pnlButtons.Controls.Add(this.cbVerify);
this.pnlButtons.Controls.Add(this.lbShowHideDetails);
this.pnlButtons.Controls.Add(this.panel2);
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlButtons.Location = new System.Drawing.Point(0, 301);
this.pnlButtons.Name = "pnlButtons";
this.pnlButtons.Size = new System.Drawing.Size(444, 58);
this.pnlButtons.TabIndex = 0;
//
// bt1
//
this.bt1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bt1.Location = new System.Drawing.Point(198, 8);
this.bt1.Name = "bt1";
this.bt1.Size = new System.Drawing.Size(75, 23);
this.bt1.TabIndex = 0;
this.bt1.Text = "bt1";
this.bt1.UseVisualStyleBackColor = true;
//
// bt2
//
this.bt2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bt2.Location = new System.Drawing.Point(279, 8);
this.bt2.Name = "bt2";
this.bt2.Size = new System.Drawing.Size(75, 23);
this.bt2.TabIndex = 1;
this.bt2.Text = "bt2";
this.bt2.UseVisualStyleBackColor = true;
//
// bt3
//
this.bt3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bt3.Location = new System.Drawing.Point(360, 8);
this.bt3.Name = "bt3";
this.bt3.Size = new System.Drawing.Size(75, 23);
this.bt3.TabIndex = 2;
this.bt3.Text = "bt3";
this.bt3.UseVisualStyleBackColor = true;
//
// cbVerify
//
this.cbVerify.AutoSize = true;
this.cbVerify.Location = new System.Drawing.Point(13, 34);
this.cbVerify.Name = "cbVerify";
this.cbVerify.Size = new System.Drawing.Size(136, 17);
this.cbVerify.TabIndex = 4;
this.cbVerify.Text = "Don\'t ask me this again";
this.cbVerify.UseVisualStyleBackColor = true;
this.cbVerify.Visible = false;
//
// lbShowHideDetails
//
this.lbShowHideDetails.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lbShowHideDetails.ImageIndex = 3;
this.lbShowHideDetails.ImageList = this.imageList1;
this.lbShowHideDetails.Location = new System.Drawing.Point(8, 6);
this.lbShowHideDetails.Name = "lbShowHideDetails";
this.lbShowHideDetails.Size = new System.Drawing.Size(94, 23);
this.lbShowHideDetails.TabIndex = 3;
this.lbShowHideDetails.Text = " Show details";
this.lbShowHideDetails.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lbShowHideDetails.MouseLeave += new System.EventHandler(this.lbDetails_MouseLeave);
this.lbShowHideDetails.Click += new System.EventHandler(this.lbDetails_Click);
this.lbShowHideDetails.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbDetails_MouseDown);
this.lbShowHideDetails.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lbDetails_MouseUp);
this.lbShowHideDetails.MouseEnter += new System.EventHandler(this.lbDetails_MouseEnter);
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Fuchsia;
this.imageList1.Images.SetKeyName(0, "arrow_up_bw.bmp");
this.imageList1.Images.SetKeyName(1, "arrow_up_color.bmp");
this.imageList1.Images.SetKeyName(2, "arrow_up_color_pressed.bmp");
this.imageList1.Images.SetKeyName(3, "arrow_down_bw.bmp");
this.imageList1.Images.SetKeyName(4, "arrow_down_color.bmp");
this.imageList1.Images.SetKeyName(5, "arrow_down_color_pressed.bmp");
this.imageList1.Images.SetKeyName(6, "green_arrow.bmp");
//
// panel2
//
this.panel2.BackColor = System.Drawing.Color.Gainsboro;
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(444, 1);
this.panel2.TabIndex = 0;
//
// pnlFooter
//
this.pnlFooter.BackColor = System.Drawing.Color.WhiteSmoke;
this.pnlFooter.Controls.Add(this.lbFooter);
this.pnlFooter.Controls.Add(this.imgFooter);
this.pnlFooter.Controls.Add(this.panel5);
this.pnlFooter.Controls.Add(this.panel3);
this.pnlFooter.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlFooter.Location = new System.Drawing.Point(0, 359);
this.pnlFooter.Name = "pnlFooter";
this.pnlFooter.Size = new System.Drawing.Size(444, 36);
this.pnlFooter.TabIndex = 2;
//
// lbFooter
//
this.lbFooter.Location = new System.Drawing.Point(30, 11);
this.lbFooter.Name = "lbFooter";
this.lbFooter.Size = new System.Drawing.Size(409, 15);
this.lbFooter.TabIndex = 4;
this.lbFooter.Text = "lbFooter";
//
// imgFooter
//
this.imgFooter.Location = new System.Drawing.Point(8, 10);
this.imgFooter.Name = "imgFooter";
this.imgFooter.Size = new System.Drawing.Size(16, 16);
this.imgFooter.TabIndex = 4;
this.imgFooter.TabStop = false;
//
// panel5
//
this.panel5.BackColor = System.Drawing.Color.White;
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
this.panel5.Location = new System.Drawing.Point(0, 1);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(444, 1);
this.panel5.TabIndex = 2;
//
// panel3
//
this.panel3.BackColor = System.Drawing.Color.Gainsboro;
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(444, 1);
this.panel3.TabIndex = 1;
//
// pnlCommandButtons
//
this.pnlCommandButtons.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlCommandButtons.Location = new System.Drawing.Point(0, 202);
this.pnlCommandButtons.Name = "pnlCommandButtons";
this.pnlCommandButtons.Size = new System.Drawing.Size(444, 99);
this.pnlCommandButtons.TabIndex = 4;
//
// pnlMainInstruction
//
this.pnlMainInstruction.Controls.Add(this.imgMain);
this.pnlMainInstruction.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlMainInstruction.Location = new System.Drawing.Point(0, 0);
this.pnlMainInstruction.Name = "pnlMainInstruction";
this.pnlMainInstruction.Size = new System.Drawing.Size(444, 41);
this.pnlMainInstruction.TabIndex = 1;
this.pnlMainInstruction.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlMainInstruction_Paint);
//
// pnlContent
//
this.pnlContent.Controls.Add(this.lbContent);
this.pnlContent.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlContent.Location = new System.Drawing.Point(0, 41);
this.pnlContent.Name = "pnlContent";
this.pnlContent.Size = new System.Drawing.Size(444, 30);
this.pnlContent.TabIndex = 2;
//
// pnlExpandedInfo
//
this.pnlExpandedInfo.Controls.Add(this.lbExpandedInfo);
this.pnlExpandedInfo.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlExpandedInfo.Location = new System.Drawing.Point(0, 71);
this.pnlExpandedInfo.Name = "pnlExpandedInfo";
this.pnlExpandedInfo.Size = new System.Drawing.Size(444, 30);
this.pnlExpandedInfo.TabIndex = 10;
//
// lbExpandedInfo
//
this.lbExpandedInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lbExpandedInfo.Location = new System.Drawing.Point(50, 0);
this.lbExpandedInfo.Name = "lbExpandedInfo";
this.lbExpandedInfo.Size = new System.Drawing.Size(389, 19);
this.lbExpandedInfo.TabIndex = 0;
this.lbExpandedInfo.Text = "lbExpandedInfo";
//
// pnlRadioButtons
//
this.pnlRadioButtons.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlRadioButtons.Location = new System.Drawing.Point(0, 101);
this.pnlRadioButtons.Name = "pnlRadioButtons";
this.pnlRadioButtons.Size = new System.Drawing.Size(444, 101);
this.pnlRadioButtons.TabIndex = 3;
//
// frmTaskDialog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(444, 459);
this.Controls.Add(this.pnlFooter);
this.Controls.Add(this.pnlButtons);
this.Controls.Add(this.pnlCommandButtons);
this.Controls.Add(this.pnlRadioButtons);
this.Controls.Add(this.pnlExpandedInfo);
this.Controls.Add(this.pnlContent);
this.Controls.Add(this.pnlMainInstruction);
this.Font = new System.Drawing.Font("Tahoma", 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;
this.Name = "frmTaskDialog";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "frmTaskDialog";
this.Shown += new System.EventHandler(this.frmTaskDialog_Shown);
((System.ComponentModel.ISupportInitialize)(this.imgMain)).EndInit();
this.pnlButtons.ResumeLayout(false);
this.pnlButtons.PerformLayout();
this.pnlFooter.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.imgFooter)).EndInit();
this.pnlMainInstruction.ResumeLayout(false);
this.pnlContent.ResumeLayout(false);
this.pnlExpandedInfo.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox imgMain;
private System.Windows.Forms.Label lbContent;
private System.Windows.Forms.Panel pnlButtons;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Panel pnlFooter;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Panel panel5;
private System.Windows.Forms.PictureBox imgFooter;
private System.Windows.Forms.Label lbFooter;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.Label lbShowHideDetails;
private System.Windows.Forms.Panel pnlCommandButtons;
private System.Windows.Forms.CheckBox cbVerify;
private System.Windows.Forms.Panel pnlMainInstruction;
private System.Windows.Forms.Panel pnlContent;
private System.Windows.Forms.Panel pnlExpandedInfo;
private System.Windows.Forms.Label lbExpandedInfo;
private System.Windows.Forms.Panel pnlRadioButtons;
private System.Windows.Forms.Button bt1;
private System.Windows.Forms.Button bt2;
private System.Windows.Forms.Button bt3;
}
}

View File

@@ -0,0 +1,344 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC
MgAAAk1TRnQBSQFMAgEBBwEAAQkBAAEEAQABEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM
AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigFpAf8BsQGBAVgB/wG3AYoBaQH/
AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAX0B/wGVAYEBWwH/AYsBfgFIAf8BlQGBAVsB/wGm
AYgBfQH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAFgAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp
AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBYAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBfwFJ
Af8BnAGBAVkB/wGzAY4BagH/AcQBngF2Af8BzQGoAX0B/wHJAaIBeQH/AbsBlQFvAf8BpgGBAV4B/wGO
AYEBSgH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV
Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/
GAABtQGdAYEB/wGTAYEBUgH/Ab0BmQF1Af8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS
Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBfwH/AaEBgQFbAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3
AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/
AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW
AYEBVwH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB
Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBZwH/AbUBnQGBAf+kAAHQAbgBlwH/
AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY
AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/
AdABuAGXAf8IAAG+AakBjwH/AY4BgQFRAf8BvwGeAX8B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg
AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB
Af8B2AG1AYEB/wGkAYEBYAH/Ab4BqQGPAf8kAAGBAeMBWAH/AYEB5AFaAf8B8AH8AewB/3AAAbUBhQFg
Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8
AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ
Af8BtAGEAWAB/wgAAYsBfwFJAf8BqgGMAXQB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/
AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6
AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAUsB/yAAAbIB8QGcAf8BVQHbARwB/wFVAdsBHAH/AXIB4AFB
Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/
AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/A08B/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/
Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQFcAf8BxAGo
AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wNPAf8B+AHu
AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBaQH/
AcYBtQGfAf8gAAFnAd4BMwH/AVUB2wEcAf8BVQHbARwB/wF2AeEBRgH/Ae8B/AHrAf9kAAHCAZ4BgQH/
AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/AfsB5gHAAf8B+wHlAbwB/wH9Ae4B1QH/Af4B9gHpAf8DTwH/
A08B/wNPAf8B/QH2AekB/wH7Ae0B1AH/AfYB3wG0Af8B8gHbAbIB/wHuAdcBrwH/AfAB4wHMAf8B4AHP
AbYB/wHBAZwBgQH/AaYBiAF9Af8BoQGGAXkB/wHTAboBjQH/AewB0QGeAf8B7wHSAZ4B/wHuAdABmAH/
AfQB4gG/Af8B+QHwAd0B/wNPAf8DTwH/A08B/wH5Ae8B3QH/AfMB4AG+Af8B6AHJAY8B/wHlAcYBjQH/
AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwF7Af8kAAFhAdcBMwH/AU8B0wEcAf8BTwHTARwB/wFx
AdoBRgH/AfMB/AHwAf9gAAG3AYoBaQH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/AfwB6QHFAf8B/QHx
AdkB/wH+AfcB6gH/A08B/wNPAf8DTwH/A08B/wNPAf8B/gH3AeoB/wH7Ae0B1QH/AfUB3wG2Af8B8QHb
AbMB/wHvAd0BvAH/AesB4QHSAf8BtwGKAWkB/wGVAYEBWwH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/
AfEB2AGnAf8B9gHmAccB/wH6AfEB4AH/A08B/wNPAf8DTwH/A08B/wNPAf8B+gHwAd8B/wHzAeIBwAH/
AegBywGUAf8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBAVsB/xAAAYEB2QFsAf8BgQHdAX0B/wGB
Ad4BgQH/AYwB4QGBAf8BmAHkAYMB/wFlAdABQQH/AUcByAEdAf8BRwHIAR0B/wFHAcgBHQH/AWwB0gFK
Af8B7gH7AesB/1wAAbMBggFdAf8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/
A08B/wNPAf8DTwH/Af4B9wHrAf8DTwH/A08B/wNPAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHc
AbgB/wHvAekB3wH/AbMBggFdAf8BjgGBAU0B/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/
Af0B+AHvAf8DTwH/A08B/wNPAf8B/AH3Ae0B/wNPAf8DTwH/A08B/wH7AfYB7AH/AfYB7AHZAf8B7QHd
Ab0B/wHqAdoBuwH/AeQB0wGzAf8BjgGBAU0B/wwAAT4BuwEdAf8BPgG7AR0B/wE+AbsBHQH/AT4BuwEd
Af8BPgG7AR0B/wE+AbsBHQH/AT4BuwEdAf8BPgG7AR0B/wE+AbsBHQH/AT4BuwEdAf8BPgG7AR0B/wFT
AcEBNQH/A/sB/1gAAbcBigFpAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wNPAf8DTwH/
A08B/wH+AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wNPAf8DTwH/A08B/wH9AfkB8gH/AfQB6AHSAf8B8QHo
AdUB/wHsAeQB2QH/AbcBigFpAf8BlQGBAVsB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/
A08B/wNPAf8DTwH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/A08B/wNPAf8DTwH/AfsB9gHtAf8B7wHh
AcQB/wHsAd4BwQH/AdsBygGrAf8BlQGBAVsB/wwAATIBqwEeAf8BMgGrAR4B/wEyAasBHgH/ATIBqwEe
Af8BMgGrAR4B/wEyAasBHgH/ATIBqwEeAf8BMgGrAR4B/wEyAasBHgH/ATIBqwEeAf8BMgGrAR4B/wFH
AbMBNQH/A/sB/1gAAcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/Af0B9gHoAf8B/gH8AfcB/wNPAf8DTwH/
Af4B+wH0Af8B/QH3AeoB/wH8AfEB3AH/Af0B9wHqAf8B/gH7AfQB/wNPAf8DTwH/Af0B+QHzAf8B9QHq
AdYB/wHzAe0B4wH/AeEB0QG8Af8BwgGeAYEB/wGmAYgBfQH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/
Af0B+gH0Af8DTwH/A08B/wH9AfkB8AH/AfsB8gHiAf8B+AHqAc8B/wH7AfIB4gH/Af0B+AHwAf8DTwH/
A08B/wH7AfcB7wH/AfEB5AHJAf8B7QHgAcYB/wHFAbEBjwH/AaYBiAF9Af8QAAFuAbcBagH/AXwBvQF4
Af8BgQG/AX0B/wGBAcYBgQH/AYUBzQGCAf8BSQGoAUQB/wElAZkBHwH/ASUBmQEfAf8BJQGZAR8B/wFN
AakBSAH/AeQB9AHjAf9cAAHWAcEBpgH/AdEBswGKAf8B/gH9AfoB/wH9AfcB6wH/Af4B+gHyAf8B/gH8
AfgB/wH+AfwB9wH/Af0B+AHuAf8B/AHzAeAB/wH8AfIB4AH/AfwB8gHgAf8B/QH3AewB/wH+AfsB9QH/
Af0B+gH0Af8B+wH1AeoB/wH1AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGB
AXcB/wHIAb8BsAH/AeQB3AHNAf8B+wH1AewB/wH+AfsB9QH/Af0B+gH0Af8B+wH1AegB/wH5Ae4B1wH/
AfkB7QHWAf8B+QHtAdYB/wH7AfQB5gH/Af0B+QHyAf8B/QH5AfEB/wH5AfIB5AH/AfIB5gHPAf8B6wHg
AckB/wGmAYgBewH/AcYBtQGfAf8kAAEyAZcBNQH/ARwBjQEfAf8BHAGNAR8B/wFFAZ8BSAH/AewB9wHs
Af9kAAG1AYUBYQH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/
AfwB9QHmAf8B/AH0AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHy
AekB/wHwAekB3gH/AbQBhQFgAf8IAAGNAYEBTQH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHk
Af8B+wHzAeMB/wH7AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5
Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQFNAf8kAAEnAZIBKgH/ARwBjQEfAf8BHAGN
AR8B/wFAAZ0BQwH/AeoB9gHqAf9oAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv
Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8
AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFyAf8BxgG/
AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/
AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBbAH/Ab8BqwGRAf8gAAGd
AdMBngH/ARwBjQEfAf8BHAGNAR8B/wE9AZwBQAH/AfEB+QHxAf9wAAHLAa4BhgH/AdUBugGWAf8B/gH9
AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/
Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGWAf8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHG
AcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHk
Af8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGEAXsB/wG1AZ0BgQH/KAABVAGmAVYB/wFXAacBWQH/
AfQB+gH0Af94AAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4
AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB
Af8BmwGBAXAB/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd
AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBZAH/AbUBnQGBAf+0AAHQAbgBlwH/AbUBhQFhAf8B0gG1
AY0B/wHoAdoBxgH/AfUB7wHlAf8C/gH7Af8B9QHuAeUB/wHoAdkBxQH/AdIBtAGNAf8BtQGFAWEB/wHQ
AbgBlwH/IAABvgGpAY8B/wGNAYEBTgH/AZ4BgwF7Af8BrQGcAYQB/wG2AaoBmAH/AbsBswGlAf8BswGm
AZIB/wGmAZQBgQH/AZYBgQFwAf8BjAGAAUwB/wG+AakBjwH/wAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAFt
Af8BsQGBAVgB/wG4AYwBbQH/AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBXwH/
AYsBfgFIAf8BlwGBAV8B/wGoAYoBgAH/AcUBtAGdAf/IAAPFAf8DpwH/A5YB/wOMAf8DlgH/A6cB/wPF
Af8wAAHVAb8BogH/AcIBngGBAf8BtwGKAWkB/wGxAYEBWAH/AbcBigFpAf8BwgGeAYEB/wHVAb8BogH/
MAABxQGzAZsB/wGmAYgBfQH/AZUBgQFbAf8BiwF+AUgB/wGVAYEBWwH/AaYBiAF9Af8BxQGzAZsB/zAA
A8UB/wOnAf8DlgH/A4wB/wOWAf8DpwH/A8UB/ygAA74B/wOQAf8DtQH/A9AB/wPfAf8D5wH/A94B/wPO
Af8DtAH/A5AB/wO+Af8gAAHRAbcBlQH/AbQBhAFgAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp
AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBYAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBfwFJ
Af8BnAGBAVkB/wGzAY4BagH/AcQBngF2Af8BzQGoAX0B/wHJAaIBeQH/AbsBlQFvAf8BpgGBAV4B/wGO
AYEBSgH/Ab0BqQGNAf8gAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/A7QB/wOQAf8DvgH/
HAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPaAf8D5wH/A+AB/wOqAf8DtQH/GAABywGu
AYYB/wHIAaQBgQH/Ae8B5QHVAf8B9AHtAeIB/wHwAeIByAH/AewB1QGtAf8B6QHPAZ8B/wHqAdQBrAH/
Ae0B3wHFAf8B7wHpAd0B/wHqAeAB0AH/AcUBogGBAf8BywGuAYYB/xgAAbUBnQGBAf8BkwGBAVIB/wG9
AZkBdQH/AdEBqwGBAf8B0wGuAYEB/wHTAa4BgQH/AdMBrQGBAf8B0gGtAYEB/wHSAa0BgQH/AdIBrQGB
Af8BywGmAX8B/wGhAYEBWwH/AbUBnQGBAf8YAAO1Af8DrAH/A+QB/wPrAf8D3QH/A88B/wPGAf8DzQH/
A9oB/wPnAf8D4AH/A6oB/wO1Af8UAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/A8gB/wPG
Af8DxgH/A9kB/wPnAf8DuAH/A7UB/xAAAcsBrgGGAf8B1AG3AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHV
AaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/
AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGWAYEBVwH/AcYBpAGAAf8B2AG0AYEB/wHa
AbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGBAf8B1QGxAYEB/wHVAbEBgQH/AdUBsQGB
Af8B1QGxAYEB/wGtAYcBZwH/AbUBnQGBAf8QAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/
A8gB/wPGAf8DxgH/A9kB/wPnAf8DuAH/A7UB/wwAA74B/wOvAf8D8gH/A9gB/wPQAf8D0AH/A88B/wPP
Af8DzgH/A80B/wPMAf8DyQH/A8gB/wPQAf8D6AH/A6sB/wO+Af8IAAHQAbgBlwH/AcsBpwGBAf8B+wH0
AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHYAakB/wHwAdcBqAH/
Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/AdABuAGXAf8IAAG+
AakBjwH/AY4BgQFRAf8BvwGeAX8B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHgAbsBgQH/AeABuwGB
Af8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGBAf8B2AG1AYEB/wGk
AYEBYAH/Ab4BqQGPAf8IAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/A84B/wPNAf8DzAH/
A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAADkQH/A+oB/wPmAf8D1AH/A9QB/wPTAf8D0wH/A9MB/wPS
Af8D0gH/A9EB/wPOAf8DywH/A8oB/wPaAf8D3wH/A5AB/wgAAbUBhQFgAf8B9gHsAdsB/wH7AewB0QH/
AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9wHdAbAB/wH2AdwBrwH/AfUB3AGuAf8B9AHb
Aa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQAf8BtAGEAWAB/wgAAYsBfwFJ
Af8BqgGMAXQB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/AeUBwgGCAf8B5QHCAYIB/wHk
AcIBgQH/AeMBwQGBAf8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6AYEB/wHbAboBgQH/AdMBsQGB
Af8BjgGBAUsB/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPlAf8D8QH/A+QB/wPRAf8DzgH/
A8sB/wPKAf8D2gH/A98B/wOQAf8EAAPHAf8DuAH/A/YB/wPaAf8D6AH/A/MB/wPzAf8D5wH/A9cB/wPW
Af8D1gH/A+YB/wPyAf8D8AH/A+IB/wPMAf8D6QH/A7IB/wPHAf8B1gHBAaYB/wHRAbEBhQH/Af4B+AHu
Af8B+gHjAbkB/wH8Ae4B1QH/Af0B9gHoAf8B/QH2AegB/wH8Ae0B0wH/AfoB4QG0Af8B+QHgAbMB/wH5
AeABswH/AfsB7AHSAf8B/AH0AecB/wH7AfQB5gH/AfUB5gHOAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGB
Af8B1gHBAaYB/wHGAbUBnwH/AZIBgQFcAf8BxAGoAYEB/wHjAcUBjAH/AfMB4QG9Af8B+AHvAdsB/wH4
Ae4B2wH/AfIB3wG6Af8B6gHJAYoB/wHpAcgBiQH/AekByAGJAf8B8QHeAbkB/wH3Ae0B2gH/AfYB7AHa
Af8B7AHZAbYB/wHeAb8BgwH/Ad4BvwGDAf8BqgGFAWkB/wHGAbUBnwH/A8cB/wO4Af8D9gH/A9oB/wPZ
Af8D2AH/A9cB/wPnAf8D8wH/A08B/wPyAf8D5gH/A9QB/wPQAf8DzQH/A8wB/wPpAf8DsgH/A8cB/wOn
Af8D2gH/A+4B/wPeAf8D9AH/A08B/wNPAf8D8wH/A+gB/wPZAf8D6AH/A/MB/wNPAf8DTwH/A/EB/wPO
Af8D3gH/A9EB/wOmAf8BwgGeAYEB/wHpAdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH+AfcB6wH/A08B/wNP
Af8B/gH2AekB/wH9Ae4B1QH/AfsB4wG4Af8B/QHuAdUB/wH9AfYB6QH/A08B/wNPAf8B+wH0AecB/wHu
AdcBrwH/AfAB4wHMAf8B4AHPAbYB/wHBAZwBgQH/AaYBiAF9Af8BoQGGAXkB/wHTAboBjQH/AewB0QGe
Af8B+gHxAeEB/wNPAf8DTwH/AfkB8AHdAf8B9AHiAb4B/wHtAc0BkgH/AfQB4gG+Af8B+QHvAd0B/wNP
Af8DTwH/AfcB7QHcAf8B4QHDAYsB/wHhAcMBiwH/AcgBqAGBAf8BpQGHAXsB/wOnAf8D2gH/A+4B/wPe
Af8D3QH/A9sB/wPoAf8D8wH/A08B/wNPAf8DTwH/A/MB/wPnAf8D1QH/A9EB/wPOAf8D3gH/A9EB/wOm
Af8DlgH/A+4B/wPnAf8D4gH/A/UB/wNPAf8DTwH/A08B/wP0Af8D6gH/A/QB/wNPAf8DTwH/A08B/wPy
Af8D0gH/A9YB/wPgAf8DlgH/AbcBigFpAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/gH4Ae0B/wNP
Af8DTwH/A08B/wH+AfcB6gH/Af0B8AHXAf8B/gH3AeoB/wNPAf8DTwH/A08B/wH8AfUB6AH/AfEB2wGz
Af8B7wHdAbwB/wHrAeEB0gH/AbcBigFpAf8BlQGBAVsB/wGtAZcBgQH/AdkBwwGbAf8B8QHZAasB/wH7
AfMB5AH/A08B/wNPAf8DTwH/AfoB8QHfAf8B9QHkAcIB/wH6AfEB3wH/A08B/wNPAf8DTwH/AfgB7wHe
Af8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBAVsB/wOWAf8D7gH/A+cB/wPiAf8D4AH/A+wB/wP0
Af8DTwH/A08B/wNPAf8DTwH/A08B/wP0Af8D6AH/A9UB/wPSAf8D1gH/A+AB/wOWAf8DjwH/A/YB/wPn
Af8D5QH/A+4B/wP1Af8DTwH/A08B/wNPAf8D9AH/A08B/wNPAf8DTwH/A/QB/wPoAf8D1QH/A9QB/wPn
Af8DjwH/AbMBggFdAf8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/A08B/wNP
Af8DTwH/Af4B9wHrAf8DTwH/A08B/wNPAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHcAbgB/wHv
AekB3wH/AbMBggFdAf8BjgGBAU0B/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/Af0B+AHv
Af8DTwH/A08B/wNPAf8B/AH3Ae0B/wNPAf8DTwH/A08B/wH7AfYB7AH/AfYB7AHZAf8B7QHdAb0B/wHq
AdoBuwH/AeQB0wGzAf8BjgGBAU0B/wOPAf8D9gH/A+cB/wPlAf8D7gH/A/UB/wNPAf8DTwH/A08B/wP0
Af8DTwH/A08B/wNPAf8D9AH/A+gB/wPVAf8D1AH/A+cB/wOPAf8DlgH/A/EB/wPzAf8D8QH/A+8B/wP1
Af8D+QH/A08B/wNPAf8DTwH/A08B/wNPAf8D+QH/A/IB/wPmAf8D5AH/A+QB/wPlAf8DlgH/AbcBigFp
Af8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/QHzAeEB/wH9AfcB7AH/Af4B+wH0Af8DTwH/A08B/wNP
Af8DTwH/A08B/wH+AfoB8wH/AfwB9QHnAf8B9wHrAdUB/wH0AegB0gH/AfEB6AHVAf8B7AHkAdkB/wG3
AYoBaQH/AZUBgQFbAf8BtQGnAZEB/wHaAc8BuwH/AfMB6AHTAf8B+QHtAdYB/wH7AfMB5AH/Af0B+AHv
Af8DTwH/A08B/wNPAf8DTwH/A08B/wH9AfgB7wH/AfkB8AHeAf8B8gHjAcYB/wHvAeEBxAH/AewB3gHB
Af8B2wHKAasB/wGVAYEBWwH/A5YB/wPxAf8D8wH/A/EB/wP6Af8DTwH/A08B/wNPAf8D+QH/A/MB/wP5
Af8DTwH/A08B/wNPAf8D9wH/A+QB/wPkAf8D5QH/A5YB/wOnAf8D3gH/A/kB/wPzAf8D8gH/A/AB/wP1
Af8D+QH/A08B/wNPAf8DTwH/A/kB/wP0Af8D6wH/A+gB/wPmAf8D6wH/A9QB/wOnAf8BwgGeAYEB/wHp
AdoBxgH/Af4B+gHzAf8B/QH2AegB/wH9AfUB5gH/Af0B8wHiAf8B/QH3AewB/wH+AfsB9AH/A08B/wNP
Af8DTwH/Af4B+wH0Af8B/QH3AeoB/wH6Ae8B2gH/AfcB7AHYAf8B9QHqAdYB/wHzAe0B4wH/AeEB0QG8
Af8BwgGeAYEB/wGmAYgBfQH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/AfkB7wHcAf8B+QHuAdcB/wH7
AfQB5QH/Af0B+QHwAf8DTwH/A08B/wNPAf8B/QH4AfAB/wH7AfIB4gH/AfYB6AHNAf8B8wHlAcsB/wHx
AeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBfQH/A6cB/wPeAf8D+QH/A/MB/wP7Af8DTwH/A08B/wP5
Af8D9AH/A+0B/wP0Af8D+QH/A08B/wNPAf8D+AH/A+YB/wPrAf8D1AH/A6cB/wPHAf8DuwH/A/0B/wP1
Af8D9AH/A/IB/wPxAf8D9QH/A/oB/wNPAf8D+gH/A/UB/wPuAf8D7AH/A+oB/wPnAf8D8wH/A7YB/wPH
Af8B1gHBAaYB/wHRAbMBigH/Af4B/QH6Af8B/QH3AesB/wH9AfYB6gH/Af0B9QHnAf8B/AH0AeQB/wH9
AfgB7gH/Af4B+wH1Af8DTwH/Af4B+wH1Af8B/QH3AewB/wH8AfIB3wH/AfoB8AHdAf8B+AHuAdwB/wH1
AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGBAXcB/wHIAb8BsAH/AeQB3AHN
Af8B9wHvAd8B/wH7AfIB4AH/AfoB8AHbAf8B+wH1AegB/wH9AfoB8wH/A08B/wH9AfkB8gH/AfsB9AHm
Af8B+QHtAdUB/wH3AesB0wH/AfUB6QHSAf8B8gHmAc8B/wHrAeAByQH/AaYBiAF7Af8BxgG1AZ8B/wPH
Af8DuwH/A/0B/wP1Af8D+QH/A/sB/wP7Af8D9QH/A+8B/wPuAf8D7gH/A/UB/wP6Af8D+QH/A/IB/wPn
Af8D8wH/A7YB/wPHAf8EAAORAf8D8QH/A/oB/wP1Af8D9AH/A/MB/wPyAf8D9wH/A/sB/wP2Af8D8AH/
A+8B/wPuAf8D6wH/A/AB/wPpAf8DkQH/CAABtQGFAWEB/wH2AfAB5wH/Af4B+wH1Af8B/QH4Ae0B/wH9
AfcB7AH/Af0B9gHpAf8B/QH1AecB/wH9AfkB8AH/Af4B/AH3Af8B/QH5Ae8B/wH8AfQB5AH/AfwB8wHj
Af8B+wHyAeEB/wH4Ae8B3gH/AfcB8gHpAf8B8AHpAd4B/wG0AYUBYAH/CAABjQGBAU0B/wG6Aa4BnQH/
AdUBzQHAAf8B7AHlAdgB/wH5AfIB5AH/AfsB8wHjAf8B+wHyAeEB/wH9AfcB7AH/Af0B+wH0Af8B/AH2
AesB/wH6AfAB3AH/AfoB7wHbAf8B+QHuAdkB/wH2AesB1wH/AfAB5QHRAf8B0gHDAaoB/wGNAYEBTQH/
CAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/EB/wPxAf8D8AH/A/AB/wPvAf8D7gH/A+sB/wPw
Af8D6QH/A5EB/wgAA8AB/wOzAf8D/QH/A/gB/wP2Af8D9QH/A/QB/wPzAf8D8wH/A/IB/wPyAf8D8QH/
A+8B/wPwAf8D9wH/A68B/wPAAf8IAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv
Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8
AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFyAf8BxgG/
AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/
AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBbAH/Ab8BqwGRAf8IAAPA
Af8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPvAf8D8AH/A/cB/wOv
Af8DwAH/DAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3Af8D+QH/
A8AB/wO1Af8QAAHLAa4BhgH/AdUBugGWAf8B/gH9AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+
AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGW
Af8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHGAcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/
AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHkAf8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGE
AXsB/wG1AZ0BgQH/EAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3
Af8D+QH/A8AB/wO1Af8UAAO1Af8DsAH/A/IB/wP9Af8D+wH/A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/
A68B/wO1Af8YAAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4
AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB
Af8BmwGBAXAB/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd
AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBZAH/AbUBnQGBAf8YAAO1Af8DsAH/A/IB/wP9Af8D+wH/
A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/A68B/wO1Af8cAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPw
Af8D3QH/A7sB/wORAf8DvgH/IAAB0AG4AZcB/wG1AYUBYQH/AdIBtQGNAf8B6AHaAcYB/wH1Ae8B5QH/
Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQFhAf8B0AG4AZcB/yAAAb4BqQGPAf8BjQGB
AU4B/wGeAYMBewH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGSAf8BpgGUAYEB/wGWAYEBcAH/
AYwBgAFMAf8BvgGpAY8B/yAAA74B/wORAf8DvAH/A90B/wPwAf8D/QH/A/AB/wPdAf8DuwH/A5EB/wO+
Af8oAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8wAAHVAcABowH/AcMBnwGBAf8BuAGMAW0B/wGx
AYEBWAH/AbgBjAFtAf8BwwGfAYEB/wHVAcABowH/MAABxQG0AZ0B/wGoAYoBgAH/AZcBgQFfAf8BiwF+
AUgB/wGXAYEBXwH/AagBigGAAf8BxQG0AZ0B/zAAA8UB/wOoAf8DmAH/A4wB/wOYAf8DqAH/A8UB/xgA
AUIBTQE+BwABPgMAASgDAAFMAwABJgMAAQEBAAEBBQAByAEBFgAD/wEAAfwBBwH/AYAD/wGABAAB8AEB
Af4BAAE/Av8BgAQAAeABAAH8AQABHwL/AYAEAAHAAQABeAEAAQ8C/wGABAABgAEAATABAAEHAfwBfwGA
BAABgAEAATABAAEHAfgBPwGACAABAwH8AR8BgAgAAQMB/gEPAYAIAAEDAcABBwGACAABAwGAAQMBgAgA
AQMBgAEDAYAIAAEDAcABBwGACAABAwH+AQ8BgAQAAYABAAEwAQABBwH8AR8BgAQAAYABAAEwAQABBwH4
AT8BgAQAAcABAAF4AQABDwH8AX8BgAQAAeABAAH8AQABHwL/AYAEAAHwAQEB/gEAAT8C/wGABAAB/AEH
Af8BgAP/AYAEAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAB8AEBAf4BAAE/AcABBwH4AQAB8AIAAeABAAH8
AQABHwGAAQMB8AEAAXACAAHAAQABeAEAAQ8BAAEBAeABAAEwAgABgAEAATABAAEGAgABwAEAARACAAGA
AQABMAEAAQYCAAHAAQABEFYAAYABAAEwAQABBgIAAcABAAEQAgABgAEAATABAAEGAgABwAEAARACAAHA
AQABeAEAAQ8BAAEBAeABAAEwAgAB4AEAAfwBAAEfAYABAwHwAQABcAIAAfABAQH+AQABPwHAAQcB+AEA
AfACAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAL
</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

File diff suppressed because it is too large Load Diff

View File

@@ -89,6 +89,7 @@
<PlatformTarget>x86</PlatformTarget>
<DefineConstants>DEBUG;PORTABLE</DefineConstants>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
@@ -125,10 +126,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>References\Org.Mentalis.Security.dll</HintPath>
</Reference>
<Reference Include="PSTaskDialog, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>References\PSTaskDialog.dll</HintPath>
</Reference>
<Reference Include="Skybound.Gecko, Version=1.8.1.4, Culture=neutral, PublicKeyToken=3209ac31600d1857, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>References\Skybound.Gecko.dll</HintPath>
@@ -413,6 +410,19 @@
<Compile Include="UI\Forms\SplashPage.Designer.cs">
<DependentUpon>SplashPage.cs</DependentUpon>
</Compile>
<Compile Include="UI\TaskDialog\CommandButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UI\TaskDialog\CommandButton.designer.cs">
<DependentUpon>CommandButton.cs</DependentUpon>
</Compile>
<Compile Include="UI\TaskDialog\cTaskDialog.cs" />
<Compile Include="UI\TaskDialog\frmTaskDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UI\TaskDialog\frmTaskDialog.designer.cs">
<DependentUpon>frmTaskDialog.cs</DependentUpon>
</Compile>
<Compile Include="UI\Window\AboutWindow.cs">
<SubType>Form</SubType>
</Compile>
@@ -594,6 +604,9 @@
<EmbeddedResource Include="UI\Forms\SplashPage.resx">
<DependentUpon>SplashPage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\TaskDialog\frmTaskDialog.resx">
<DependentUpon>frmTaskDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\Window\AboutWindow.resx">
<DependentUpon>AboutWindow.cs</DependentUpon>
<SubType>Designer</SubType>
@@ -837,6 +850,8 @@
<Content Include="Resources\Images_FamFamFam\database.png" />
<Content Include="Resources\Images_FamFamFam\Link.png" />
<Content Include="Resources\Images_FamFamFam\page_copy.png" />
<Content Include="UI\TaskDialog\green_arrow1.png" />
<Content Include="UI\TaskDialog\green_arrow2.png" />
<None Include="Resources\Images\puttycm.png" />
<None Include="Resources\Images_FamFamFam\monitor_go.png" />
<None Include="Resources\Images_FamFamFam\monitor_delete.png" />