Removed all informs code (no more 1.3.x UI)

This commit is contained in:
Kenneth Skovhede
2013-05-05 17:07:24 +02:00
parent 9d09cb473d
commit 62c75d9af9
392 changed files with 68 additions and 68824 deletions
-18
View File
@@ -1,8 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati", "Duplicati\GUI\Duplicati.csproj", "{1470F75F-D364-4010-91D0-FD4DDA1C5159}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Utility", "Duplicati\Library\Utility\Duplicati.Library.Utility.csproj", "{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Main", "Duplicati\Library\Main\Duplicati.Library.Main.csproj", "{10D2D1B7-C664-41D8-9B3A-00040C3D421B}"
@@ -31,8 +29,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Backend.C
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Datamodel", "Duplicati\GUI\Datamodel\Datamodel.csproj", "{B60D0993-B0C5-457A-90D9-DB6EEB33CE47}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WizardForm", "WizardForm\WizardForm.csproj", "{F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.CommandLine.BackendTester", "Duplicati\CommandLine\BackendTester\Duplicati.CommandLine.BackendTester.csproj", "{E7280DCA-7776-4A73-B9B5-41FD77FC8799}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Interface", "Duplicati\Library\Interface\Duplicati.Library.Interface.csproj", "{C5899F45-B0FF-483C-9D38-24A9FCAAB237}"
@@ -43,8 +39,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Snapshots
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.License", "Duplicati\License\Duplicati.License.csproj", "{4D012CB1-4B92-47F4-89B7-BF80A73A2E99}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Winforms.Controls", "Duplicati\Winforms\Controls\Duplicati.Winforms.Controls.csproj", "{7886BA79-A38A-4288-8B8A-9F29D0E15AC0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Modules.Builtin", "Duplicati\Library\Modules\Builtin\Duplicati.Library.Modules.Builtin.csproj", "{52826615-7964-47FE-B4B3-1B2DBDF605B9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Backend.TahoeLAFS", "Duplicati\Library\Backend\TahoeLAFS\Duplicati.Library.Backend.TahoeLAFS.csproj", "{C0270709-2A40-43B5-8CF1-69581B9FA2A1}"
@@ -79,10 +73,6 @@ Global
{10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10D2D1B7-C664-41D8-9B3A-00040C3D421B}.Release|Any CPU.Build.0 = Release|Any CPU
{1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|Any CPU.Build.0 = Release|Any CPU
{17566860-3D98-4604-AA5B-47661F75609F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{17566860-3D98-4604-AA5B-47661F75609F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17566860-3D98-4604-AA5B-47661F75609F}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -123,10 +113,6 @@ Global
{52826615-7964-47FE-B4B3-1B2DBDF605B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52826615-7964-47FE-B4B3-1B2DBDF605B9}.Release|Any CPU.Build.0 = Release|Any CPU
{7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7886BA79-A38A-4288-8B8A-9F29D0E15AC0}.Release|Any CPU.Build.0 = Release|Any CPU
{81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81765A64-3661-4E3E-B850-2F6F87A51F74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81765A64-3661-4E3E-B850-2F6F87A51F74}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -183,10 +169,6 @@ Global
{E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7280DCA-7776-4A73-B9B5-41FD77FC8799}.Release|Any CPU.Build.0 = Release|Any CPU
{F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2854848-BF78-4A6D-9A2A-2AE2AFB70DF1}.Release|Any CPU.Build.0 = Release|Any CPU
{F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F61679A9-E5DE-468A-B5A4-05F92D0143D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -146,9 +146,7 @@ namespace Duplicati.CommandLine.BackendTester
{
try
{
if (backend is IBackend_v2)
((IBackend_v2)backend).CreateFolder();
backend.CreateFolder();
curlist = backend.List();
}
catch (Exception ex)
+1 -3
View File
@@ -97,9 +97,7 @@ namespace Duplicati.CommandLine.BackendTool
if (args.Count != 2)
throw new Exception(string.Format("too many arguments: {0}", string.Join(",", args)));
if (!(backend is IBackend_v2))
throw new Exception(string.Format("{0} backend does not support creating folders", backend.ProtocolKey));
((IBackend_v2)backend).CreateFolder();
backend.CreateFolder();
return 0;
}
-503
View File
@@ -1,503 +0,0 @@
namespace Duplicati.GUI
{
partial class ApplicationSetup
{
/// <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(ApplicationSetup));
this.label1 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.BalloonNotificationLevel = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
this.HideDonateButton = new System.Windows.Forms.CheckBox();
this.StartupDelayDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.label7 = new System.Windows.Forms.Label();
this.LanguageSelection = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.RecentDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.CacheSizeLabel = new System.Windows.Forms.Label();
this.ClearCacheButton = new System.Windows.Forms.Button();
this.SignatureCacheEnabled = new System.Windows.Forms.CheckBox();
this.SignatureCachePathBrowse = new System.Windows.Forms.Button();
this.SignatureCachePath = new System.Windows.Forms.TextBox();
this.TempPathBrowse = new System.Windows.Forms.Button();
this.TempPath = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.OKBtn = new System.Windows.Forms.Button();
this.CancelBtn = new System.Windows.Forms.Button();
this.BrowseTempPath = new System.Windows.Forms.FolderBrowserDialog();
this.PasswordDefaultsGroup = new System.Windows.Forms.GroupBox();
this.PasswordPanel = new System.Windows.Forms.Panel();
this.EncryptionModule = new System.Windows.Forms.ComboBox();
this.EncryptionMethod = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.CommonPassword = new Duplicati.Winforms.Controls.PasswordControl();
this.UseCommonPassword = new System.Windows.Forms.CheckBox();
this.BrowseSignatureCachePath = new System.Windows.Forms.FolderBrowserDialog();
this.CacheSizeCalculator = new System.ComponentModel.BackgroundWorker();
this.TabContainer = new System.Windows.Forms.TabControl();
this.BasicTab = new System.Windows.Forms.TabPage();
this.AdvancedTab = new System.Windows.Forms.TabPage();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.Bandwidth = new Duplicati.GUI.HelperControls.BandwidthLimit();
this.ThreadPriorityPicker = new Duplicati.GUI.HelperControls.ThreadPriorityPicker();
this.LicenseTab = new System.Windows.Forms.TabPage();
this.LicenseLink = new System.Windows.Forms.LinkLabel();
this.label6 = new System.Windows.Forms.Label();
this.LicenseText = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.LicenseSections = new System.Windows.Forms.ListBox();
this.panel1 = new System.Windows.Forms.Panel();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.PasswordDefaultsGroup.SuspendLayout();
this.PasswordPanel.SuspendLayout();
this.TabContainer.SuspendLayout();
this.BasicTab.SuspendLayout();
this.AdvancedTab.SuspendLayout();
this.groupBox4.SuspendLayout();
this.LicenseTab.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
this.toolTip.SetToolTip(this.label1, resources.GetString("label1.ToolTip"));
//
// groupBox1
//
this.groupBox1.Controls.Add(this.BalloonNotificationLevel);
this.groupBox1.Controls.Add(this.label8);
this.groupBox1.Controls.Add(this.HideDonateButton);
this.groupBox1.Controls.Add(this.StartupDelayDuration);
this.groupBox1.Controls.Add(this.label7);
this.groupBox1.Controls.Add(this.LanguageSelection);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.RecentDuration);
this.groupBox1.Controls.Add(this.label1);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// BalloonNotificationLevel
//
resources.ApplyResources(this.BalloonNotificationLevel, "BalloonNotificationLevel");
this.BalloonNotificationLevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.BalloonNotificationLevel.FormattingEnabled = true;
this.BalloonNotificationLevel.Name = "BalloonNotificationLevel";
this.toolTip.SetToolTip(this.BalloonNotificationLevel, resources.GetString("BalloonNotificationLevel.ToolTip"));
this.BalloonNotificationLevel.SelectedIndexChanged += new System.EventHandler(this.BalloonNotificationLevel_SelectedIndexChanged);
//
// label8
//
resources.ApplyResources(this.label8, "label8");
this.label8.Name = "label8";
this.toolTip.SetToolTip(this.label8, resources.GetString("label8.ToolTip"));
//
// HideDonateButton
//
resources.ApplyResources(this.HideDonateButton, "HideDonateButton");
this.HideDonateButton.Name = "HideDonateButton";
this.toolTip.SetToolTip(this.HideDonateButton, resources.GetString("HideDonateButton.ToolTip"));
this.HideDonateButton.UseVisualStyleBackColor = true;
this.HideDonateButton.CheckedChanged += new System.EventHandler(this.HideDonateButton_CheckedChanged);
//
// StartupDelayDuration
//
resources.ApplyResources(this.StartupDelayDuration, "StartupDelayDuration");
this.StartupDelayDuration.Name = "StartupDelayDuration";
this.toolTip.SetToolTip(this.StartupDelayDuration, resources.GetString("StartupDelayDuration.ToolTip"));
this.StartupDelayDuration.Value = "";
this.StartupDelayDuration.ValueChanged += new System.EventHandler(this.StartupDelayDuration_ValueChanged);
//
// label7
//
resources.ApplyResources(this.label7, "label7");
this.label7.Name = "label7";
this.toolTip.SetToolTip(this.label7, resources.GetString("label7.ToolTip"));
//
// LanguageSelection
//
resources.ApplyResources(this.LanguageSelection, "LanguageSelection");
this.LanguageSelection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.LanguageSelection.FormattingEnabled = true;
this.LanguageSelection.Name = "LanguageSelection";
this.toolTip.SetToolTip(this.LanguageSelection, resources.GetString("LanguageSelection.ToolTip"));
this.LanguageSelection.SelectedIndexChanged += new System.EventHandler(this.LanguageSelection_SelectedIndexChanged);
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
this.toolTip.SetToolTip(this.label3, resources.GetString("label3.ToolTip"));
//
// RecentDuration
//
resources.ApplyResources(this.RecentDuration, "RecentDuration");
this.RecentDuration.Name = "RecentDuration";
this.toolTip.SetToolTip(this.RecentDuration, resources.GetString("RecentDuration.ToolTip"));
this.RecentDuration.Value = "";
this.RecentDuration.ValueChanged += new System.EventHandler(this.RecentDuration_ValueChanged);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.CacheSizeLabel);
this.groupBox2.Controls.Add(this.ClearCacheButton);
this.groupBox2.Controls.Add(this.SignatureCacheEnabled);
this.groupBox2.Controls.Add(this.SignatureCachePathBrowse);
this.groupBox2.Controls.Add(this.SignatureCachePath);
this.groupBox2.Controls.Add(this.TempPathBrowse);
this.groupBox2.Controls.Add(this.TempPath);
this.groupBox2.Controls.Add(this.label4);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// CacheSizeLabel
//
resources.ApplyResources(this.CacheSizeLabel, "CacheSizeLabel");
this.CacheSizeLabel.Name = "CacheSizeLabel";
this.toolTip.SetToolTip(this.CacheSizeLabel, resources.GetString("CacheSizeLabel.ToolTip"));
//
// ClearCacheButton
//
resources.ApplyResources(this.ClearCacheButton, "ClearCacheButton");
this.ClearCacheButton.Name = "ClearCacheButton";
this.toolTip.SetToolTip(this.ClearCacheButton, resources.GetString("ClearCacheButton.ToolTip"));
this.ClearCacheButton.UseVisualStyleBackColor = true;
this.ClearCacheButton.Click += new System.EventHandler(this.ClearCacheButton_Click);
//
// SignatureCacheEnabled
//
resources.ApplyResources(this.SignatureCacheEnabled, "SignatureCacheEnabled");
this.SignatureCacheEnabled.Name = "SignatureCacheEnabled";
this.toolTip.SetToolTip(this.SignatureCacheEnabled, resources.GetString("SignatureCacheEnabled.ToolTip"));
this.SignatureCacheEnabled.UseVisualStyleBackColor = true;
this.SignatureCacheEnabled.CheckedChanged += new System.EventHandler(this.SignatureCacheEnabled_CheckedChanged);
//
// SignatureCachePathBrowse
//
resources.ApplyResources(this.SignatureCachePathBrowse, "SignatureCachePathBrowse");
this.SignatureCachePathBrowse.Name = "SignatureCachePathBrowse";
this.toolTip.SetToolTip(this.SignatureCachePathBrowse, resources.GetString("SignatureCachePathBrowse.ToolTip"));
this.SignatureCachePathBrowse.UseVisualStyleBackColor = true;
this.SignatureCachePathBrowse.Click += new System.EventHandler(this.SignatureCachePathBrowse_Click);
//
// SignatureCachePath
//
resources.ApplyResources(this.SignatureCachePath, "SignatureCachePath");
this.SignatureCachePath.Name = "SignatureCachePath";
this.SignatureCachePath.TextChanged += new System.EventHandler(this.SignatureCachePath_TextChanged);
//
// TempPathBrowse
//
resources.ApplyResources(this.TempPathBrowse, "TempPathBrowse");
this.TempPathBrowse.Name = "TempPathBrowse";
this.toolTip.SetToolTip(this.TempPathBrowse, resources.GetString("TempPathBrowse.ToolTip"));
this.TempPathBrowse.UseVisualStyleBackColor = true;
this.TempPathBrowse.Click += new System.EventHandler(this.TempPathBrowse_Click);
//
// TempPath
//
resources.ApplyResources(this.TempPath, "TempPath");
this.TempPath.Name = "TempPath";
this.toolTip.SetToolTip(this.TempPath, resources.GetString("TempPath.ToolTip"));
this.TempPath.TextChanged += new System.EventHandler(this.TempPath_TextChanged);
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
this.toolTip.SetToolTip(this.label4, resources.GetString("label4.ToolTip"));
//
// OKBtn
//
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// CancelBtn
//
resources.ApplyResources(this.CancelBtn, "CancelBtn");
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// PasswordDefaultsGroup
//
this.PasswordDefaultsGroup.Controls.Add(this.PasswordPanel);
this.PasswordDefaultsGroup.Controls.Add(this.UseCommonPassword);
resources.ApplyResources(this.PasswordDefaultsGroup, "PasswordDefaultsGroup");
this.PasswordDefaultsGroup.Name = "PasswordDefaultsGroup";
this.PasswordDefaultsGroup.TabStop = false;
//
// PasswordPanel
//
this.PasswordPanel.Controls.Add(this.EncryptionModule);
this.PasswordPanel.Controls.Add(this.EncryptionMethod);
this.PasswordPanel.Controls.Add(this.label5);
this.PasswordPanel.Controls.Add(this.CommonPassword);
resources.ApplyResources(this.PasswordPanel, "PasswordPanel");
this.PasswordPanel.Name = "PasswordPanel";
//
// EncryptionModule
//
this.EncryptionModule.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.EncryptionModule.FormattingEnabled = true;
resources.ApplyResources(this.EncryptionModule, "EncryptionModule");
this.EncryptionModule.Name = "EncryptionModule";
this.toolTip.SetToolTip(this.EncryptionModule, resources.GetString("EncryptionModule.ToolTip"));
this.EncryptionModule.SelectedIndexChanged += new System.EventHandler(this.EncryptionModule_SelectedIndexChanged);
this.EncryptionModule.TextChanged += new System.EventHandler(this.EncryptionModule_SelectedIndexChanged);
//
// EncryptionMethod
//
resources.ApplyResources(this.EncryptionMethod, "EncryptionMethod");
this.EncryptionMethod.Name = "EncryptionMethod";
this.toolTip.SetToolTip(this.EncryptionMethod, resources.GetString("EncryptionMethod.ToolTip"));
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
this.toolTip.SetToolTip(this.label5, resources.GetString("label5.ToolTip"));
//
// CommonPassword
//
this.CommonPassword.AskToEnterNewPassword = false;
this.CommonPassword.InitialPassword = null;
this.CommonPassword.IsPasswordVisible = false;
resources.ApplyResources(this.CommonPassword, "CommonPassword");
this.CommonPassword.MaximumSize = new System.Drawing.Size(5000, 20);
this.CommonPassword.MinimumSize = new System.Drawing.Size(150, 20);
this.CommonPassword.Name = "CommonPassword";
this.toolTip.SetToolTip(this.CommonPassword, resources.GetString("CommonPassword.ToolTip"));
this.CommonPassword.TextChanged += new System.EventHandler(this.CommonPassword_TextChanged);
//
// UseCommonPassword
//
resources.ApplyResources(this.UseCommonPassword, "UseCommonPassword");
this.UseCommonPassword.Name = "UseCommonPassword";
this.toolTip.SetToolTip(this.UseCommonPassword, resources.GetString("UseCommonPassword.ToolTip"));
this.UseCommonPassword.UseVisualStyleBackColor = true;
this.UseCommonPassword.CheckedChanged += new System.EventHandler(this.UseCommonPassword_CheckedChanged);
//
// CacheSizeCalculator
//
this.CacheSizeCalculator.WorkerSupportsCancellation = true;
this.CacheSizeCalculator.DoWork += new System.ComponentModel.DoWorkEventHandler(this.CacheSizeCalculator_DoWork);
this.CacheSizeCalculator.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.CacheSizeCalculator_RunWorkerCompleted);
//
// TabContainer
//
this.TabContainer.Controls.Add(this.BasicTab);
this.TabContainer.Controls.Add(this.AdvancedTab);
this.TabContainer.Controls.Add(this.LicenseTab);
resources.ApplyResources(this.TabContainer, "TabContainer");
this.TabContainer.Name = "TabContainer";
this.TabContainer.SelectedIndex = 0;
//
// BasicTab
//
this.BasicTab.Controls.Add(this.PasswordDefaultsGroup);
this.BasicTab.Controls.Add(this.groupBox1);
resources.ApplyResources(this.BasicTab, "BasicTab");
this.BasicTab.Name = "BasicTab";
this.BasicTab.UseVisualStyleBackColor = true;
//
// AdvancedTab
//
this.AdvancedTab.Controls.Add(this.groupBox2);
this.AdvancedTab.Controls.Add(this.groupBox4);
resources.ApplyResources(this.AdvancedTab, "AdvancedTab");
this.AdvancedTab.Name = "AdvancedTab";
this.AdvancedTab.UseVisualStyleBackColor = true;
//
// groupBox4
//
this.groupBox4.Controls.Add(this.Bandwidth);
this.groupBox4.Controls.Add(this.ThreadPriorityPicker);
resources.ApplyResources(this.groupBox4, "groupBox4");
this.groupBox4.Name = "groupBox4";
this.groupBox4.TabStop = false;
//
// Bandwidth
//
this.Bandwidth.DownloadLimit = null;
this.Bandwidth.DownloadLimitInBytes = ((long)(0));
resources.ApplyResources(this.Bandwidth, "Bandwidth");
this.Bandwidth.Name = "Bandwidth";
this.toolTip.SetToolTip(this.Bandwidth, resources.GetString("Bandwidth.ToolTip"));
this.Bandwidth.UploadLimit = null;
this.Bandwidth.UploadLimitInBytes = ((long)(0));
this.Bandwidth.DownloadLimitChanged += new System.EventHandler(this.Bandwidth_DownloadLimitChanged);
this.Bandwidth.UploadLimitChanged += new System.EventHandler(this.Bandwidth_UploadLimitChanged);
//
// ThreadPriorityPicker
//
resources.ApplyResources(this.ThreadPriorityPicker, "ThreadPriorityPicker");
this.ThreadPriorityPicker.Name = "ThreadPriorityPicker";
this.toolTip.SetToolTip(this.ThreadPriorityPicker, resources.GetString("ThreadPriorityPicker.ToolTip"));
this.ThreadPriorityPicker.SelectedPriorityChanged += new System.EventHandler(this.ThreadPriorityPicker_SelectedPriorityChanged);
//
// LicenseTab
//
this.LicenseTab.Controls.Add(this.LicenseLink);
this.LicenseTab.Controls.Add(this.label6);
this.LicenseTab.Controls.Add(this.LicenseText);
this.LicenseTab.Controls.Add(this.label2);
this.LicenseTab.Controls.Add(this.LicenseSections);
resources.ApplyResources(this.LicenseTab, "LicenseTab");
this.LicenseTab.Name = "LicenseTab";
this.LicenseTab.UseVisualStyleBackColor = true;
//
// LicenseLink
//
resources.ApplyResources(this.LicenseLink, "LicenseLink");
this.LicenseLink.Name = "LicenseLink";
this.LicenseLink.TabStop = true;
this.toolTip.SetToolTip(this.LicenseLink, resources.GetString("LicenseLink.ToolTip"));
this.LicenseLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LicenseLink_LinkClicked);
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.Name = "label6";
//
// LicenseText
//
resources.ApplyResources(this.LicenseText, "LicenseText");
this.LicenseText.Name = "LicenseText";
this.LicenseText.ReadOnly = true;
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// LicenseSections
//
this.LicenseSections.FormattingEnabled = true;
resources.ApplyResources(this.LicenseSections, "LicenseSections");
this.LicenseSections.Name = "LicenseSections";
this.toolTip.SetToolTip(this.LicenseSections, resources.GetString("LicenseSections.ToolTip"));
this.LicenseSections.SelectedIndexChanged += new System.EventHandler(this.LicenseSections_SelectedIndexChanged);
//
// panel1
//
this.panel1.Controls.Add(this.OKBtn);
this.panel1.Controls.Add(this.CancelBtn);
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// ApplicationSetup
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.Controls.Add(this.TabContainer);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ApplicationSetup";
this.Load += new System.EventHandler(this.ApplicationSetup_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ApplicationSetup_FormClosing);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.PasswordDefaultsGroup.ResumeLayout(false);
this.PasswordDefaultsGroup.PerformLayout();
this.PasswordPanel.ResumeLayout(false);
this.PasswordPanel.PerformLayout();
this.TabContainer.ResumeLayout(false);
this.BasicTab.ResumeLayout(false);
this.AdvancedTab.ResumeLayout(false);
this.groupBox4.ResumeLayout(false);
this.LicenseTab.ResumeLayout(false);
this.LicenseTab.PerformLayout();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button OKBtn;
private System.Windows.Forms.Button CancelBtn;
private Duplicati.GUI.HelperControls.DurationEditor RecentDuration;
private System.Windows.Forms.Button TempPathBrowse;
private System.Windows.Forms.TextBox TempPath;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.FolderBrowserDialog BrowseTempPath;
private System.Windows.Forms.GroupBox PasswordDefaultsGroup;
private Duplicati.Winforms.Controls.PasswordControl CommonPassword;
private System.Windows.Forms.CheckBox UseCommonPassword;
private System.Windows.Forms.Panel PasswordPanel;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckBox SignatureCacheEnabled;
private System.Windows.Forms.Button SignatureCachePathBrowse;
private System.Windows.Forms.TextBox SignatureCachePath;
private System.Windows.Forms.FolderBrowserDialog BrowseSignatureCachePath;
private System.Windows.Forms.Label CacheSizeLabel;
private System.Windows.Forms.Button ClearCacheButton;
private System.ComponentModel.BackgroundWorker CacheSizeCalculator;
private System.Windows.Forms.ComboBox LanguageSelection;
private System.Windows.Forms.Label label3;
private Duplicati.GUI.HelperControls.DurationEditor StartupDelayDuration;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TabControl TabContainer;
private System.Windows.Forms.TabPage BasicTab;
private System.Windows.Forms.TabPage AdvancedTab;
private System.Windows.Forms.GroupBox groupBox4;
private Duplicati.GUI.HelperControls.BandwidthLimit Bandwidth;
private Duplicati.GUI.HelperControls.ThreadPriorityPicker ThreadPriorityPicker;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label EncryptionMethod;
private System.Windows.Forms.ComboBox EncryptionModule;
private System.Windows.Forms.CheckBox HideDonateButton;
private System.Windows.Forms.TabPage LicenseTab;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ListBox LicenseSections;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.LinkLabel LicenseLink;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox LicenseText;
private System.Windows.Forms.ComboBox BalloonNotificationLevel;
private System.Windows.Forms.Label label8;
}
}
-572
View File
@@ -1,572 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.LightDatamodel;
using Duplicati.Datamodel;
using System.Globalization;
using Duplicati.Library.Utility;
namespace Duplicati.GUI
{
public partial class ApplicationSetup : Form
{
private IDataFetcherWithRelations m_connection;
private ApplicationSettings m_settings;
private bool m_isUpdating = false;
//These variables handle the worker thread size calculation
private object m_lock = new object();
private System.Threading.Thread m_thread = null;
private bool m_restartCalculator = false;
public ApplicationSetup()
{
InitializeComponent();
RecentDuration.SetIntervals(new List<KeyValuePair<string, string>>(
new KeyValuePair<string, string>[]
{
new KeyValuePair<string, string>(Strings.Common.OneWeek, "1W"),
new KeyValuePair<string, string>(Strings.Common.TwoWeeks, "2W"),
new KeyValuePair<string, string>(Strings.Common.OneMonth, "1M"),
new KeyValuePair<string, string>(Strings.Common.ThreeMonths, "3M"),
}));
StartupDelayDuration.SetIntervals(new List<KeyValuePair<string, string>>(
new KeyValuePair<string, string>[]
{
new KeyValuePair<string, string>(Strings.Common.NoMinutes, "0"),
new KeyValuePair<string, string>(Strings.Common.OneMinute, "1m"),
new KeyValuePair<string, string>(Strings.Common.FiveMinutes, "5m"),
new KeyValuePair<string, string>(Strings.Common.FifteenMinutes, "15m"),
new KeyValuePair<string, string>(Strings.Common.ThirtyMinutes, "30m"),
}));
BalloonNotificationLevel.Items.AddRange(new object[] {
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_Off, ApplicationSettings.NotificationLevel.Off),
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_Errors, ApplicationSettings.NotificationLevel.Errors),
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_Warnings, ApplicationSettings.NotificationLevel.Warnings),
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_Start, ApplicationSettings.NotificationLevel.Start),
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_StartAndStop, ApplicationSettings.NotificationLevel.StartAndStop),
new ComboBoxItemPair<ApplicationSettings.NotificationLevel>(Strings.ApplicationSetup.BalloonNotification_Continous, ApplicationSettings.NotificationLevel.Continous),
});
if (Program.TraylessMode)
BalloonNotificationLevel.Enabled = label8.Enabled = false;
LanguageSelection.Items.Clear();
LanguageSelection.Items.Add(new ComboBoxItemPair<CultureInfo>(string.Format(Strings.ApplicationSetup.DefaultLanguage, Library.Utility.Utility.DefaultCulture.DisplayName), Library.Utility.Utility.DefaultCulture));
System.Text.RegularExpressions.Regex cix = new System.Text.RegularExpressions.Regex("[A-z][A-z](\\-[A-z][A-z])?");
foreach (string f in System.IO.Directory.GetDirectories(Application.StartupPath))
if (cix.Match(System.IO.Path.GetFileName(f)).Length == System.IO.Path.GetFileName(f).Length)
try
{
CultureInfo ci = CultureInfo.GetCultureInfo(System.IO.Path.GetFileName(f));
LanguageSelection.Items.Add(new ComboBoxItemPair<CultureInfo>(ci.DisplayName, ci));
}
catch
{
}
bool hasEnglish = false;
foreach (ComboBoxItemPair<CultureInfo> c in LanguageSelection.Items)
if (c.Value.Name.Equals("en-US", StringComparison.InvariantCultureIgnoreCase))
hasEnglish = true;
if (!hasEnglish)
{
CultureInfo ci = CultureInfo.GetCultureInfo("en-US");
LanguageSelection.Items.Add(new ComboBoxItemPair<CultureInfo>(ci.DisplayName, ci));
}
try
{
EncryptionModule.Items.Clear();
foreach (Library.Interface.IEncryption e in Library.DynamicLoader.EncryptionLoader.Modules)
EncryptionModule.Items.Add(new ComboBoxItemPair<Library.Interface.IEncryption>(e.DisplayName, e));
}
catch (Exception ex)
{
MessageBox.Show(this, string.Format(Strings.ApplicationSetup.EncryptionModuleLoadError, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
this.Icon = Properties.Resources.TrayNormal;
#if DEBUG
this.Text += " (DEBUG)";
#endif
}
private void RecentDuration_TextChanged(object sender, EventArgs e)
{
if (m_isUpdating || m_settings == null)
return;
try { Library.Utility.Timeparser.ParseTimeSpan(RecentDuration.Value); }
catch { return; }
m_settings.RecentBackupDuration = RecentDuration.Value;
}
private void OKBtn_Click(object sender, EventArgs e)
{
if (UseCommonPassword.Checked && !CommonPassword.VerifyPasswordIfChanged())
return;
foreach (TabPage tab in TabContainer.TabPages)
if (tab.Tag as Library.Interface.ISettingsControl != null)
{
try
{
if (!(tab.Tag as Library.Interface.ISettingsControl).Validate(tab.Controls[0]))
return;
(tab.Tag as Library.Interface.ISettingsControl).Leave(tab.Controls[0]);
}
catch (Exception ex)
{
MessageBox.Show(this, string.Format(Strings.ApplicationSetup.SaveExtensionError, ex), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
//Commit all changes made to the context
m_connection.CommitAllRecursive();
System.Globalization.CultureInfo newCI = System.Threading.Thread.CurrentThread.CurrentUICulture;
try
{
if (string.IsNullOrEmpty(m_settings.DisplayLanguage))
newCI = Library.Utility.Utility.DefaultCulture;
else
newCI = System.Globalization.CultureInfo.GetCultureInfo(m_settings.DisplayLanguage);
}
catch
{
}
if (newCI != System.Threading.Thread.CurrentThread.CurrentUICulture)
{
MessageBox.Show(this, Strings.ApplicationSetup.LanguageChangedWarning, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
//We don't change here, because the application has loaded some
// resources already, so the switch would be partial
}
this.DialogResult = DialogResult.OK;
this.Close();
}
private void RecentDuration_ValueChanged(object sender, EventArgs e)
{
RecentDuration_TextChanged(sender, e);
}
private void TempPathBrowse_Click(object sender, EventArgs e)
{
if (BrowseTempPath.ShowDialog(this) == DialogResult.OK)
TempPath.Text = BrowseTempPath.SelectedPath;
}
private void TempPath_TextChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.TempPath = TempPath.Text;
}
private void ApplicationSetup_Load(object sender, EventArgs e)
{
try
{
this.Text = string.Format(Strings.ApplicationSetup.DialogTitle, License.VersionNumbers.Version);
m_isUpdating = true;
m_connection = new DataFetcherNested(Program.DataConnection);
m_settings = new ApplicationSettings(m_connection);
RecentDuration.Value = m_settings.RecentBackupDuration;
TempPath.Text = m_settings.TempPath;
UseCommonPassword.Checked = m_settings.UseCommonPassword;
CommonPassword.Text = CommonPassword.InitialPassword = m_settings.CommonPassword;
CommonPassword.AskToEnterNewPassword = !string.IsNullOrEmpty(CommonPassword.Text);
if (EncryptionModule.Items.Count > 0)
{
bool foundEncryption = false;
int defaultIndex = 0;
for (int i = 0; i < EncryptionModule.Items.Count; i++)
if (((ComboBoxItemPair<Library.Interface.IEncryption>)EncryptionModule.Items[i]).Value.FilenameExtension == m_settings.CommonPasswordEncryptionModule)
{
foundEncryption = true;
EncryptionModule.SelectedIndex = i;
break;
}
else if (((ComboBoxItemPair<Library.Interface.IEncryption>)EncryptionModule.Items[i]).Value.FilenameExtension == "aes")
defaultIndex = i;
if (!foundEncryption)
EncryptionModule.SelectedIndex = defaultIndex;
}
else
{
PasswordDefaultsGroup.Enabled = false;
}
SignatureCacheEnabled.Checked = m_settings.SignatureCacheEnabled;
SignatureCachePath.Text = m_settings.SignatureCachePath;
CalculateSignatureCacheSize();
StartupDelayDuration.Value = m_settings.StartupDelayDuration;
ThreadPriorityPicker.SelectedPriority = m_settings.ThreadPriorityOverride;
Bandwidth.UploadLimit = m_settings.UploadSpeedLimit;
Bandwidth.DownloadLimit = m_settings.DownloadSpeedLimit;
HideDonateButton.Checked = m_settings.HideDonateButton;
BalloonNotificationLevel.SelectedItem = null;
foreach(ComboBoxItemPair<ApplicationSettings.NotificationLevel> p in BalloonNotificationLevel.Items)
if (p.Value == m_settings.BallonNotificationLevel)
{
BalloonNotificationLevel.SelectedItem = p;
break;
}
if (string.IsNullOrEmpty(m_settings.DisplayLanguage))
LanguageSelection.SelectedIndex = 0;
else
{
try
{
LanguageSelection.SelectedIndex = -1;
System.Globalization.CultureInfo cci = System.Globalization.CultureInfo.GetCultureInfo(m_settings.DisplayLanguage);
for(int i = 0; i < LanguageSelection.Items.Count; i++)
if (((ComboBoxItemPair<CultureInfo>)LanguageSelection.Items[i]).Value == cci)
{
LanguageSelection.SelectedIndex = i;
break;
}
}
catch
{
LanguageSelection.SelectedIndex = -1;
}
}
try
{
foreach (Library.Interface.ISettingsControl ic in Library.DynamicLoader.SettingsControlLoader.Modules)
{
Control c = ic.GetControl(m_settings.CreateDetachedCopy(), Datamodel.SettingExtension.GetExtensions(m_connection, ic.Key));
c.Dock = DockStyle.Fill;
TabPage tab = new TabPage();
tab.Text = ic.PageTitle;
tab.ToolTipText = ic.PageDescription;
tab.Controls.Add(c);
tab.Tag = ic;
TabContainer.TabPages.Add(tab);
}
}
catch (Exception ex)
{
MessageBox.Show(this, string.Format(Strings.ApplicationSetup.SettingControlsLoadError, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
//Place the license page last
TabContainer.TabPages.Remove(LicenseTab);
TabContainer.TabPages.Insert(TabContainer.TabPages.Count, LicenseTab);
string licensePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "licenses");
List<Duplicati.License.LicenseEntry> licenses = Duplicati.License.LicenseReader.ReadLicenses(licensePath);
licenses.Insert(0, new Duplicati.License.LicenseEntry("Duplicati", System.IO.Path.Combine(licensePath, "duplicati-url.txt"), System.IO.Path.Combine(licensePath, "license.txt")));
licenses.Insert(0, new Duplicati.License.LicenseEntry("Acknowledgements", System.IO.Path.Combine(licensePath, "duplicati-url.txt"), System.IO.Path.Combine(licensePath, "acknowledgements.txt")));
LicenseSections.Items.Clear();
LicenseSections.Items.AddRange(licenses.ToArray());
LicenseSections.SelectedIndex = -1;
LicenseSections.SelectedIndex = 0;
}
finally
{
m_isUpdating = false;
}
}
private void UseCommonPassword_CheckedChanged(object sender, EventArgs e)
{
PasswordPanel.Enabled = UseCommonPassword.Checked;
if (m_isUpdating)
return;
m_settings.UseCommonPassword = UseCommonPassword.Checked;
if (m_settings.UseCommonPassword)
m_settings.CommonPassword = CommonPassword.Text;
else
m_settings.CommonPassword = ""; //Clear it from DB
}
private void CommonPassword_TextChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.CommonPassword = CommonPassword.Text;
}
private void SignatureCachePathBrowse_Click(object sender, EventArgs e)
{
if (BrowseSignatureCachePath.ShowDialog(this) == DialogResult.OK)
SignatureCachePath.Text = BrowseSignatureCachePath.SelectedPath;
}
private void SignatureCachePath_TextChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.SignatureCachePath = SignatureCachePath.Text;
CalculateSignatureCacheSize();
}
private void SignatureCacheEnabled_CheckedChanged(object sender, EventArgs e)
{
SignatureCachePath.Enabled = SignatureCachePathBrowse.Enabled = SignatureCacheEnabled.Checked;
if (m_isUpdating)
return;
m_settings.SignatureCacheEnabled = SignatureCacheEnabled.Checked;
CalculateSignatureCacheSize();
}
private void CacheSizeCalculator_DoWork(object sender, DoWorkEventArgs e)
{
lock (m_lock)
m_thread = System.Threading.Thread.CurrentThread;
try
{
e.Result = string.Format(Strings.ApplicationSetup.CacheSize, Library.Utility.Utility.FormatSizeString(Library.Utility.Utility.GetDirectorySize(System.Environment.ExpandEnvironmentVariables((string)e.Argument), null)));
}
catch (System.Threading.ThreadAbortException)
{
System.Threading.Thread.ResetAbort();
e.Cancel = true;
}
finally
{
lock (m_lock)
m_thread = null;
}
}
private void CacheSizeCalculator_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
CacheSizeLabel.Text = Strings.ApplicationSetup.OperationCancelled;
else if (e.Error != null)
CacheSizeLabel.Text = e.Error.Message;
else
CacheSizeLabel.Text = (string)e.Result;
if (m_restartCalculator)
CalculateSignatureCacheSize();
}
private void CalculateSignatureCacheSize()
{
CacheSizeLabel.Text = Strings.ApplicationSetup.CalculatingCacheSize;
lock (m_lock)
if (CacheSizeCalculator.IsBusy)
{
m_restartCalculator = true;
m_thread.Abort();
}
else
{
m_restartCalculator = false;
if (SignatureCacheEnabled.Checked)
CacheSizeCalculator.RunWorkerAsync(SignatureCachePath.Text);
else
CacheSizeLabel.Text = "";
}
}
private void ClearCacheButton_Click(object sender, EventArgs e)
{
try
{
string path = System.Environment.ExpandEnvironmentVariables(SignatureCachePath.Text);
if (MessageBox.Show(this, string.Format(Strings.ApplicationSetup.ConfirmCacheDelete, path), Application.ProductName, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) != DialogResult.Yes)
return;
Library.Main.Interface.RemoveSignatureFiles(path);
CalculateSignatureCacheSize();
}
catch(Exception ex)
{
MessageBox.Show(this, string.Format(Strings.Common.GenericError, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ApplicationSetup_FormClosing(object sender, FormClosingEventArgs e)
{
lock(m_lock)
if (m_thread != null)
{
m_restartCalculator = false;
m_thread.Abort();
}
}
private void LanguageSelection_SelectedIndexChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
if (LanguageSelection.SelectedIndex == 0)
m_settings.DisplayLanguage = "";
else if (LanguageSelection.SelectedIndex > 0)
m_settings.DisplayLanguage = ((ComboBoxItemPair<CultureInfo>)LanguageSelection.SelectedItem).Value.Name;
}
private void StartupDelayDuration_ValueChanged(object sender, EventArgs e)
{
if (m_isUpdating || m_settings == null)
return;
try { Library.Utility.Timeparser.ParseTimeSpan(StartupDelayDuration.Value); }
catch { }
m_settings.StartupDelayDuration = StartupDelayDuration.Value;
}
private void ThreadPriorityPicker_SelectedPriorityChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.ThreadPriorityOverride = ThreadPriorityPicker.SelectedPriority;
}
private void Bandwidth_UploadLimitChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.UploadSpeedLimit = Bandwidth.UploadLimit;
}
private void Bandwidth_DownloadLimitChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.DownloadSpeedLimit = Bandwidth.DownloadLimit;
}
private void EncryptionModule_SelectedIndexChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
if (EncryptionModule.SelectedItem as ComboBoxItemPair<Library.Interface.IEncryption> != null)
m_settings.CommonPasswordEncryptionModule = ((ComboBoxItemPair<Library.Interface.IEncryption>)EncryptionModule.SelectedItem).Value.FilenameExtension;
}
public static Dictionary<string, string> GetApplicationSettings(IDataFetcher connection)
{
Dictionary<string, string> env = new ApplicationSettings(connection).CreateDetachedCopy();
//If there are any control extensions, let them modify the environement
foreach (Library.Interface.ISettingsControl ic in Library.DynamicLoader.SettingsControlLoader.Modules)
ic.BeginEdit(env, SettingExtension.GetExtensions(connection, ic.Key));
return env;
}
public static void SaveExtensionSettings(IDataFetcher connection, IDictionary<string, string> env)
{
//If there are any control extensions, let them modify the environement
foreach (Library.Interface.ISettingsControl ic in Library.DynamicLoader.SettingsControlLoader.Modules)
ic.EndEdit(env, SettingExtension.GetExtensions(connection, ic.Key));
}
private void HideDonateButton_CheckedChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
m_settings.HideDonateButton = HideDonateButton.Checked;
}
private void LicenseSections_SelectedIndexChanged(object sender, EventArgs e)
{
if (LicenseSections.SelectedItem as Duplicati.License.LicenseEntry != null)
{
Duplicati.License.LicenseEntry l = LicenseSections.SelectedItem as Duplicati.License.LicenseEntry;
LicenseText.Text = l.License;
LicenseLink.Visible = !string.IsNullOrEmpty(l.Url);
}
}
private void LicenseLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (LicenseSections.SelectedItem as Duplicati.License.LicenseEntry != null)
{
Duplicati.License.LicenseEntry l = LicenseSections.SelectedItem as Duplicati.License.LicenseEntry;
if (!string.IsNullOrEmpty(l.Url))
Duplicati.Library.Utility.UrlUtillity.OpenUrl(l.Url);
}
}
private void BalloonNotificationLevel_SelectedIndexChanged(object sender, EventArgs e)
{
if (m_isUpdating)
return;
if (BalloonNotificationLevel.SelectedItem as ComboBoxItemPair<ApplicationSettings.NotificationLevel> != null)
m_settings.BallonNotificationLevel = (BalloonNotificationLevel.SelectedItem as ComboBoxItemPair<ApplicationSettings.NotificationLevel>).Value;
}
}
}
File diff suppressed because it is too large Load Diff
-13
View File
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<FullBackupInterval>1M</FullBackupInterval>
<MaxFullBackups>4</MaxFullBackups>
<BackupExpireInterval></BackupExpireInterval>
<RepeatInterval>1D</RepeatInterval>
<VolumeSize>10mb</VolumeSize>
<BackupTimeOffset>13h</BackupTimeOffset>
<EncodedFilters>e:.*\\Thumbs.db</EncodedFilters>
<IncludeSetup>true</IncludeSetup>
<AsyncTransfer>true</AsyncTransfer>
<DisableAESFallbackEncryption>true</DisableAESFallbackEncryption>
</settings>
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.
-151
View File
@@ -1,151 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using Duplicati.Datamodel;
using System.Drawing;
namespace Duplicati.GUI
{
/// <summary>
/// This class encapsulates all communication with Duplicity
/// </summary>
public class DuplicityRunner
{
private StringDictionary m_environment;
public DuplicityRunner(string apppath, StringDictionary environment)
{
if (!apppath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
apppath += System.IO.Path.DirectorySeparatorChar;
System.Environment.SetEnvironmentVariable(ApplicationSettings.APP_PATH_ENV.Substring(1, ApplicationSettings.APP_PATH_ENV.Length - 2) , apppath);
m_environment = new StringDictionary();
if (environment != null)
foreach (string k in environment.Keys)
m_environment[k] = environment[k];
}
private System.Diagnostics.ProcessStartInfo SetupEnv(IDuplicityTask task)
{
task.BeginTime = DateTime.Now;
List<string> args = new List<string>();
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
StringDictionary env = psi.EnvironmentVariables;
foreach (string key in m_environment.Keys)
env[key] = m_environment[key];
env["PATH"] = System.Environment.ExpandEnvironmentVariables(Program.ApplicationSettings.NcFTPPath) + System.IO.Path.PathSeparator + env["PATH"];
env["PATH"] = System.Environment.ExpandEnvironmentVariables(Program.ApplicationSettings.PuttyPath) + System.IO.Path.PathSeparator + env["PATH"];
env["PATH"] = System.Environment.ExpandEnvironmentVariables(Program.ApplicationSettings.PGPPath) + System.IO.Path.PathSeparator + env["PATH"];
args.Add("\"" + System.Environment.ExpandEnvironmentVariables(Program.ApplicationSettings.DuplicityPath) + "\"");
task.GetArguments(args);
if (string.IsNullOrEmpty(task.Task.Encryptionkey))
args.Add("--no-encryption");
else
env["PASSPHRASE"] = task.Task.Encryptionkey;
task.Task.GetExtraSettings(args, env);
psi.CreateNoWindow = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.FileName = System.Environment.ExpandEnvironmentVariables(Program.ApplicationSettings.PythonPath);
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = false;
psi.UseShellExecute = false;
psi.WorkingDirectory = System.IO.Path.GetDirectoryName(psi.FileName);
psi.Arguments = string.Join(" ", args.ToArray());
return psi;
}
public void ExecuteTask(IDuplicityTask task)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = SetupEnv(task);
p.Start();
p.WaitForExit();
string errorstream = p.StandardError.ReadToEnd();
string outstream = p.StandardOutput.ReadToEnd();
string logentry = "";
if (!string.IsNullOrEmpty(errorstream))
{
string tmp = errorstream.Replace("gpg: CAST5 encrypted data", "").Replace("gpg: encrypted with 1 passphrase", "").Trim();
if (tmp.Length > 0)
logentry += "** Error stream: \r\n" + errorstream + "\r\n**\r\n";
}
logentry += outstream;
task.RaiseTaskCompleted(logentry);
if (task.TaskType == DuplicityTaskType.FullBackup || task.TaskType == DuplicityTaskType.IncrementalBackup)
{
if (task.Schedule.KeepFull > 0)
ExecuteTask(new RemoveAllButNFullTask(task.Schedule, (int)task.Schedule.KeepFull));
if (!string.IsNullOrEmpty(task.Schedule.KeepTime))
ExecuteTask(new RemoveOlderThanTask(task.Schedule, task.Schedule.KeepTime));
}
}
private void PerformBackup(Schedule schedule, bool forceFull, string fullAfter)
{
if (forceFull)
ExecuteTask(new FullBackupTask(schedule));
else
ExecuteTask(new IncrementalBackupTask(schedule, fullAfter));
}
public void Restore(Schedule schedule, DateTime when, string where)
{
ExecuteTask(new RestoreTask(schedule, where, when));
}
public string[] ListBackups(Schedule schedule)
{
ListBackupsTask task = new ListBackupsTask(schedule);
ExecuteTask(task);
return task.Backups;
}
public void IncrementalBackup(Schedule schedule)
{
PerformBackup(schedule, false, null);
}
public void FullBackup(Schedule schedule)
{
PerformBackup(schedule, true, null);
}
}
}
-119
View File
@@ -1,119 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class BackupFileList
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackupFileList));
this.treeView = new System.Windows.Forms.TreeView();
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.changeDestinationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.LoadingIndicator = new System.Windows.Forms.GroupBox();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.backgroundWorker = new System.ComponentModel.BackgroundWorker();
this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
this.contextMenuStrip.SuspendLayout();
this.LoadingIndicator.SuspendLayout();
this.SuspendLayout();
//
// treeView
//
this.treeView.CheckBoxes = true;
this.treeView.ContextMenuStrip = this.contextMenuStrip;
resources.ApplyResources(this.treeView, "treeView");
this.treeView.LabelEdit = true;
this.treeView.Name = "treeView";
this.treeView.ShowNodeToolTips = true;
this.treeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterCheck);
this.treeView.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterCollapse);
this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
this.treeView.KeyUp += new System.Windows.Forms.KeyEventHandler(this.treeView_KeyUp);
this.treeView.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_BeforeLabelEdit);
this.treeView.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterExpand);
//
// contextMenuStrip
//
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.changeDestinationToolStripMenuItem});
this.contextMenuStrip.Name = "contextMenuStrip";
resources.ApplyResources(this.contextMenuStrip, "contextMenuStrip");
this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
//
// changeDestinationToolStripMenuItem
//
this.changeDestinationToolStripMenuItem.Name = "changeDestinationToolStripMenuItem";
resources.ApplyResources(this.changeDestinationToolStripMenuItem, "changeDestinationToolStripMenuItem");
this.changeDestinationToolStripMenuItem.Click += new System.EventHandler(this.changeDestinationToolStripMenuItem_Click);
//
// LoadingIndicator
//
resources.ApplyResources(this.LoadingIndicator, "LoadingIndicator");
this.LoadingIndicator.Controls.Add(this.progressBar);
this.LoadingIndicator.Name = "LoadingIndicator";
this.LoadingIndicator.TabStop = false;
//
// progressBar
//
resources.ApplyResources(this.progressBar, "progressBar");
this.progressBar.Name = "progressBar";
this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
//
// backgroundWorker
//
this.backgroundWorker.WorkerSupportsCancellation = true;
this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork);
this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted);
//
// folderBrowserDialog
//
resources.ApplyResources(this.folderBrowserDialog, "folderBrowserDialog");
//
// BackupFileList
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.LoadingIndicator);
this.Controls.Add(this.treeView);
this.Name = "BackupFileList";
this.contextMenuStrip.ResumeLayout(false);
this.LoadingIndicator.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView treeView;
private System.Windows.Forms.GroupBox LoadingIndicator;
private System.Windows.Forms.ProgressBar progressBar;
private System.ComponentModel.BackgroundWorker backgroundWorker;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
private System.Windows.Forms.ToolStripMenuItem changeDestinationToolStripMenuItem;
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
}
}
@@ -1,557 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Duplicati.Datamodel;
using System.Collections;
using Duplicati.Server;
namespace Duplicati.GUI.HelperControls
{
public partial class BackupFileList : UserControl
{
private DateTime m_when;
private List<string> m_files;
private List<string> m_sourcefolders;
private List<string> m_targetfolders;
private string m_defaultTarget;
private TreeNode[] m_rootnodes;
private Schedule m_schedule;
private bool m_isInCheck = false;
private string m_localizedLoadingText;
private object m_lock = new object();
private System.Threading.Thread m_workerThread = null;
public event EventHandler FileListLoaded;
public BackupFileList()
{
InitializeComponent();
m_localizedLoadingText = LoadingIndicator.Text;
}
public void LoadFileList(Schedule schedule, DateTime when, List<string> filelist, List<string> targetFolders, string defaultTarget)
{
//backgroundWorker.CancelAsync();
LoadingIndicator.Visible = true;
progressBar.Visible = true;
treeView.Visible = false;
treeView.TreeViewNodeSorter = new NodeSorter();
LoadingIndicator.Text = m_localizedLoadingText;
m_files = filelist;
m_when = when;
m_schedule = schedule;
m_defaultTarget = defaultTarget;
m_targetfolders = targetFolders;
m_rootnodes = null;
if (!backgroundWorker.IsBusy)
backgroundWorker.RunWorkerAsync();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
lock (m_lock)
m_workerThread = System.Threading.Thread.CurrentThread;
DuplicatiRunner r = new DuplicatiRunner();
//TODO: Speed up by returning the source folders from ListFiles somehow?
IList<string> sourcefolders = r.ListSourceFolders(m_schedule, m_when);
if (r.IsAborted || backgroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
if (m_files == null || m_files.Count == 0)
{
IList<string> files = r.ListFiles(m_schedule, m_when);
if (backgroundWorker.CancellationPending || r.IsAborted)
{
e.Cancel = true;
return;
}
if (m_files != null)
{
m_files.Clear();
m_files.AddRange(files);
}
else
m_files = new List<string>(files);
}
if (m_sourcefolders != null)
{
m_sourcefolders.Clear();
m_sourcefolders.AddRange(sourcefolders);
}
else
m_sourcefolders = new List<string>(sourcefolders);
if (m_targetfolders == null)
m_targetfolders = new List<string>();
if (m_targetfolders.Count != m_sourcefolders.Count)
{
m_targetfolders.Clear();
for (int i = 0; i < m_sourcefolders.Count; i++)
m_targetfolders.Add(null);
}
}
catch (System.Threading.ThreadAbortException)
{
System.Threading.Thread.ResetAbort();
e.Cancel = true;
}
finally
{
lock (m_lock)
m_workerThread = null;
}
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
treeView.Nodes.Clear();
if (e != null && e.Error != null)
{
LoadingIndicator.Visible = true;
treeView.Visible = false;
progressBar.Visible = false;
LoadingIndicator.Text = e.Error.Message;
return;
}
if (e != null && e.Cancelled)
return;
try
{
treeView.BeginUpdate();
bool supported = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.Supported;
if (supported)
treeView.ImageList = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.ImageList;
foreach (string s in m_files)
{
TreeNodeCollection c = treeView.Nodes;
string[] parts = s.Split(System.IO.Path.DirectorySeparatorChar);
for(int i = 0; i < parts.Length; i++)
{
if (parts[i] != "")
{
TreeNode t = FindNode(parts[i], c);
if (t == null)
{
t = new TreeNode(parts[i]);
if (supported)
{
if (i == parts.Length - 1)
t.ImageIndex = t.SelectedImageIndex = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.GetShellIcon(s);
else
t.ImageIndex = t.SelectedImageIndex = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.GetFolderIcon(false);
}
//tag = IsFolder
t.Tag = !(i == parts.Length - 1);
c.Add(t);
}
c = t.Nodes;
}
}
}
//At this point the folders are named 0..n if there are multiple
if (m_sourcefolders.Count > 1)
{
m_rootnodes = new TreeNode[m_sourcefolders.Count];
foreach (TreeNode tn in treeView.Nodes)
{
int ix;
if (!int.TryParse(tn.Text, out ix))
ix = -1;
if (ix < 0 || ix >= m_rootnodes.Length)
{
//TODO: Translate
MessageBox.Show(this, string.Format("A source folder with index {0} ({1}) was found, but the list of source folders have the following {2} entries: {3}{4}", ix, tn.Text, m_sourcefolders.Count, Environment.NewLine, string.Join(Environment.NewLine, m_sourcefolders.ToArray())), "Internal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
m_rootnodes[ix] = tn;
}
for (int i = 0; i < m_rootnodes.Length; i++)
if (m_rootnodes[i] == null)
{
TreeNode tn = new TreeNode(i.ToString());
treeView.Nodes.Add(tn);
m_rootnodes[i] = tn;
}
}
//This call updates the names of the nodes to fit their source/target
RefreshRootDisplay(true);
//TODO: Apparently it is much faster to sort nodes when the tree is detached
treeView.Sort();
}
finally
{
treeView.EndUpdate();
}
if (FileListLoaded != null)
FileListLoaded(this, null);
LoadingIndicator.Visible = false;
treeView.Visible = true;
}
private TreeNode FindNode(string name, TreeNodeCollection items)
{
foreach(TreeNode t in items)
if (t.Text == name)
return t;
return null;
}
private class NodeSorter : IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
if (!(x is TreeNode) || !(y is TreeNode))
return 0;
if ((bool)((TreeNode)x).Tag == (bool)((TreeNode)y).Tag)
return string.Compare(((TreeNode)x).Text, ((TreeNode)y).Text);
else
return (bool)((TreeNode)x).Tag ? -1 : 1;
}
#endregion
}
private void treeView_AfterCheck(object sender, TreeViewEventArgs e)
{
if (!m_isInCheck)
{
try
{
m_isInCheck = true;
Queue<TreeNode> nodes = new Queue<TreeNode>();
nodes.Enqueue(e.Node);
while (nodes.Count > 0)
{
TreeNode n = nodes.Dequeue();
foreach (TreeNode nx in n.Nodes)
nodes.Enqueue(nx);
n.Checked = e.Node.Checked;
}
}
finally
{
m_isInCheck = false;
}
}
}
private void treeView_AfterCollapse(object sender, TreeViewEventArgs e)
{
if (e.Node != null && e.Node.Tag != null && e.Node.Tag is bool)
e.Node.ImageIndex = e.Node.SelectedImageIndex = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.GetFolderIcon(false);
}
private void treeView_AfterExpand(object sender, TreeViewEventArgs e)
{
if (e.Node != null && e.Node.Tag != null && e.Node.Tag is bool)
e.Node.ImageIndex = e.Node.SelectedImageIndex = OSGeo.MapGuide.Maestro.ResourceEditors.ShellIcons.GetFolderIcon(true);
}
public List<string> TargetFolders { get { return m_targetfolders; } }
public string DefaultTarget
{
get { return m_defaultTarget; }
set
{
m_defaultTarget = value;
try
{
treeView.BeginUpdate();
RefreshRootDisplay(false);
}
finally
{
treeView.EndUpdate();
}
}
}
public List<string> LoadedFileList { get { return m_files; } }
public List<string> CheckedFiles
{
get
{
try
{
treeView.BeginUpdate();
//HACK: Re-name the root nodes to match their real path
if (m_sourcefolders != null && m_sourcefolders.Count > 1)
for (int i = 0; i < m_rootnodes.Length; i++)
m_rootnodes[i].Text = i.ToString();
List<string> files = new List<string>();
Queue<TreeNode> items = new Queue<TreeNode>();
foreach (TreeNode t in treeView.Nodes)
items.Enqueue(t);
treeView.PathSeparator = System.IO.Path.DirectorySeparatorChar.ToString();
while (items.Count > 0)
{
TreeNode t = items.Dequeue();
foreach (TreeNode tn in t.Nodes)
items.Enqueue(tn);
if (t.Checked)
{
if (t.Tag != null && (bool)t.Tag == true)
files.Add(Library.Utility.Utility.AppendDirSeparator(t.FullPath));
else
files.Add(t.FullPath);
}
}
return files;
}
finally
{
//HACK: Rename them back
RefreshRootDisplay(false);
treeView.EndUpdate();
}
}
set
{
try
{
treeView.BeginUpdate();
//HACK: Re-name the root nodes to match their real path
if (m_sourcefolders != null && m_sourcefolders.Count > 1)
for (int i = 0; i < m_rootnodes.Length; i++)
m_rootnodes[i].Text = i.ToString();
if (value != null)
foreach (string s in value)
{
TreeNodeCollection col = treeView.Nodes;
TreeNode p = null;
foreach (string e in s.Split(System.IO.Path.DirectorySeparatorChar))
{
foreach (TreeNode n in col)
if (n.Text.Equals(e, Library.Utility.Utility.ClientFilenameStringComparision))
{
p = n;
col = n.Nodes;
break;
}
}
if (p != null)
{
p.Checked = true;
while (p.Parent != null)
{
p.Parent.Expand();
p = p.Parent;
}
}
}
}
finally
{
//HACK: Rename them back
RefreshRootDisplay(false);
treeView.EndUpdate();
}
}
}
public string CheckedAsFilter
{
get
{
List<KeyValuePair<bool, string>> filter = new List<KeyValuePair<bool, string>>();
treeView.PathSeparator = System.IO.Path.DirectorySeparatorChar.ToString();
foreach(string path in this.CheckedFiles)
filter.Add(new KeyValuePair<bool, string>(true, Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(treeView.PathSeparator + path)));
//Exclude everything else
filter.Add(new KeyValuePair<bool, string>(false, ".*"));
return Library.Utility.FilenameFilter.EncodeAsFilter(filter);
}
}
public int CheckedCount { get { return this.CheckedFiles.Count; } }
private void RefreshRootDisplay(bool sort)
{
if (m_sourcefolders == null || m_sourcefolders.Count <= 1 || m_rootnodes == null)
return;
string[] targets = this.TargetSuggestions;
for (int index = 0; index < m_rootnodes.Length; index++)
{
m_rootnodes[index].Text = m_sourcefolders[index] + " => " + (!string.IsNullOrEmpty(m_targetfolders[index]) ? m_targetfolders[index] : targets[index]);
m_rootnodes[index].ToolTipText = string.Format(Strings.BackupFileList.RootNodeTooltip, m_sourcefolders[index], string.IsNullOrEmpty(m_targetfolders[index]) ? targets[index] : m_targetfolders[index]);
}
if (sort)
treeView.Sort();
}
public string[] TargetSuggestions
{
get
{
if (m_sourcefolders == null || m_sourcefolders.Count <= 1)
return null;
List<string> suggestions = new List<string>();
for (int i = 0; i < m_sourcefolders.Count; i++)
{
string s = m_sourcefolders[i];
//HACK: We use a leading / in the path name to detect source OS
// all paths are absolute, so this detects all unix like systems
string dirSepChar = m_sourcefolders[i].StartsWith("/") ? "/" : "\\";
if (s.EndsWith(dirSepChar))
s = s.Substring(0, s.Length - 1);
int lix = s.LastIndexOf(dirSepChar);
if (lix < 0 || lix + 1 >= s.Length)
s = i.ToString();
else
s = s.Substring(lix + 1);
foreach (char c in System.IO.Path.GetInvalidFileNameChars())
s = s.Replace(c, '_');
suggestions.Add(s);
}
Dictionary<string, int> duplicates = new Dictionary<string, int>(Library.Utility.Utility.ClientFilenameStringComparer);
for (int i = 0; i < suggestions.Count; i++)
if (duplicates.ContainsKey(suggestions[i]))
duplicates[suggestions[i]]++;
else
duplicates[suggestions[i]] = 1;
string[] targets = new string[m_rootnodes.Length];
for (int index = 0; index < m_rootnodes.Length; index++)
{
string suffix = duplicates[suggestions[index]] > 1 ? index.ToString() : suggestions[index];
targets[index] = string.IsNullOrEmpty(m_defaultTarget) ? "" : Library.Utility.Utility.AppendDirSeparator(m_defaultTarget) + suffix;
}
return targets;
}
}
private void treeView_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
e.CancelEdit = true;
if (m_sourcefolders != null && m_sourcefolders.Count > 1 && Array.IndexOf<TreeNode>(m_rootnodes, e.Node) >= 0)
browseForTargetFolder(e.Node);
}
private void changeDestinationToolStripMenuItem_Click(object sender, EventArgs e)
{
browseForTargetFolder(changeDestinationToolStripMenuItem.Tag as TreeNode);
}
private void browseForTargetFolder(TreeNode node)
{
if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK)
{
m_targetfolders[Array.IndexOf<TreeNode>(m_rootnodes, node)] = folderBrowserDialog.SelectedPath;
try
{
treeView.BeginUpdate();
RefreshRootDisplay(false);
}
finally
{
treeView.EndUpdate();
}
}
}
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
TreeNode node = treeView.GetNodeAt(this.PointToClient(Cursor.Position));
if (node == null || m_sourcefolders == null || m_sourcefolders.Count <= 1 || Array.IndexOf<TreeNode>(m_rootnodes, node) < 0)
e.Cancel = true;
else
changeDestinationToolStripMenuItem.Tag = node;
}
private void treeView_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
treeView_BeforeLabelEdit(treeView, new NodeLabelEditEventArgs(treeView.SelectedNode));
}
private void treeView_DoubleClick(object sender, EventArgs e)
{
TreeNode node = treeView.GetNodeAt(this.PointToClient(Cursor.Position));
if (node != null)
treeView_BeforeLabelEdit(treeView, new NodeLabelEditEventArgs(treeView.SelectedNode));
}
}
}
@@ -1,264 +0,0 @@
<?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="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>174, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="changeDestinationToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>186, 22</value>
</data>
<data name="changeDestinationToolStripMenuItem.Text" xml:space="preserve">
<value>Change destination...</value>
</data>
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 26</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
<value>contextMenuStrip</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="treeView.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="treeView.Size" type="System.Drawing.Size, System.Drawing">
<value>449, 214</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="treeView.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;treeView.Name" xml:space="preserve">
<value>treeView</value>
</data>
<data name="&gt;&gt;treeView.Type" xml:space="preserve">
<value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;treeView.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;treeView.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LoadingIndicator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="progressBar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
<value>400, 23</value>
</data>
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;progressBar.Name" xml:space="preserve">
<value>progressBar</value>
</data>
<data name="&gt;&gt;progressBar.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar.Parent" xml:space="preserve">
<value>LoadingIndicator</value>
</data>
<data name="&gt;&gt;progressBar.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="LoadingIndicator.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 72</value>
</data>
<data name="LoadingIndicator.Size" type="System.Drawing.Size, System.Drawing">
<value>416, 64</value>
</data>
<data name="LoadingIndicator.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="LoadingIndicator.Text" xml:space="preserve">
<value>Reading filelist, please wait ...</value>
</data>
<data name="LoadingIndicator.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;LoadingIndicator.Name" xml:space="preserve">
<value>LoadingIndicator</value>
</data>
<data name="&gt;&gt;LoadingIndicator.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LoadingIndicator.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LoadingIndicator.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>323, 17</value>
</metadata>
<data name="folderBrowserDialog.Description" xml:space="preserve">
<value>Select the folder to restore to</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>449, 214</value>
</data>
<data name="&gt;&gt;changeDestinationToolStripMenuItem.Name" xml:space="preserve">
<value>changeDestinationToolStripMenuItem</value>
</data>
<data name="&gt;&gt;changeDestinationToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;backgroundWorker.Name" xml:space="preserve">
<value>backgroundWorker</value>
</data>
<data name="&gt;&gt;backgroundWorker.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Name" xml:space="preserve">
<value>folderBrowserDialog</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BackupFileList</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-126
View File
@@ -1,126 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class BackupItems
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackupItems));
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.viewFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusLabel = new System.Windows.Forms.Label();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.WaitPanel = new System.Windows.Forms.Panel();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.backgroundWorker = new System.ComponentModel.BackgroundWorker();
this.listView = new System.Windows.Forms.ListView();
this.contextMenuStrip.SuspendLayout();
this.WaitPanel.SuspendLayout();
this.SuspendLayout();
//
// contextMenuStrip
//
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.viewFilesToolStripMenuItem});
this.contextMenuStrip.Name = "contextMenuStrip";
resources.ApplyResources(this.contextMenuStrip, "contextMenuStrip");
//
// viewFilesToolStripMenuItem
//
this.viewFilesToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.ExamineMenuIcon;
this.viewFilesToolStripMenuItem.Name = "viewFilesToolStripMenuItem";
resources.ApplyResources(this.viewFilesToolStripMenuItem, "viewFilesToolStripMenuItem");
this.viewFilesToolStripMenuItem.Click += new System.EventHandler(this.viewFilesToolStripMenuItem_Click);
//
// statusLabel
//
resources.ApplyResources(this.statusLabel, "statusLabel");
this.statusLabel.Name = "statusLabel";
//
// progressBar
//
resources.ApplyResources(this.progressBar, "progressBar");
this.progressBar.Name = "progressBar";
this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
//
// WaitPanel
//
resources.ApplyResources(this.WaitPanel, "WaitPanel");
this.WaitPanel.Controls.Add(this.statusLabel);
this.WaitPanel.Controls.Add(this.progressBar);
this.WaitPanel.Name = "WaitPanel";
//
// imageList
//
this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
resources.ApplyResources(this.imageList, "imageList");
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
//
// backgroundWorker
//
this.backgroundWorker.WorkerSupportsCancellation = true;
this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork);
this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted);
//
// listView
//
this.listView.ContextMenuStrip = this.contextMenuStrip;
resources.ApplyResources(this.listView, "listView");
this.listView.FullRowSelect = true;
this.listView.MultiSelect = false;
this.listView.Name = "listView";
this.listView.ShowItemToolTips = true;
this.listView.SmallImageList = this.imageList;
this.listView.UseCompatibleStateImageBehavior = false;
this.listView.View = System.Windows.Forms.View.List;
this.listView.DoubleClick += new System.EventHandler(this.listView_DoubleClick);
//
// BackupItems
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.WaitPanel);
this.Controls.Add(this.listView);
this.Name = "BackupItems";
this.contextMenuStrip.ResumeLayout(false);
this.WaitPanel.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label statusLabel;
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.Panel WaitPanel;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
private System.Windows.Forms.ToolStripMenuItem viewFilesToolStripMenuItem;
private System.Windows.Forms.ImageList imageList;
private System.ComponentModel.BackgroundWorker backgroundWorker;
public System.Windows.Forms.ListView listView;
}
}
-192
View File
@@ -1,192 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Duplicati.Datamodel;
using Duplicati.Server;
namespace Duplicati.GUI.HelperControls
{
public partial class BackupItems : UserControl
{
public event EventHandler ListLoaded;
public event EventHandler LoadError;
public event EventHandler ItemDoubleClicked;
private Datamodel.Schedule m_schedule;
private object m_lock = new object();
private DuplicatiRunner m_runner = null;
public BackupItems()
{
InitializeComponent();
imageList.Images.Add("full", Properties.Resources.FullBackup);
imageList.Images.Add("partial", Properties.Resources.PartialBackup);
}
public void Setup(Schedule schedule)
{
m_schedule = schedule;
WaitPanel.Visible = true;
WaitPanel.Dock = DockStyle.None;
statusLabel.TextAlign = ContentAlignment.MiddleCenter;
progressBar.Visible = true;
listView.Visible = false;
backgroundWorker.RunWorkerAsync(schedule);
}
public DateTime SelectedItem
{
get
{
return listView.SelectedItems.Count != 1 ? new DateTime() : ((Library.Main.ManifestEntry)listView.SelectedItems[0].Tag).Time;
}
}
private void viewFilesToolStripMenuItem_Click(object sender, EventArgs e)
{
ListBackupFiles dlg = new ListBackupFiles();
dlg.ShowList(this, m_schedule, this.SelectedItem);
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
lock (m_lock)
m_runner = new DuplicatiRunner();
e.Result = m_runner.ListBackupEntries(m_schedule);
if (m_runner.IsAborted)
e.Cancel = true;
}
finally
{
lock (m_lock)
m_runner = null;
}
}
public void Abort()
{
try
{
lock (m_lock)
if (m_runner != null)
m_runner.Terminate();
}
catch
{
}
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
WaitPanel.Visible = false;
if (e.Error != null || e.Cancelled || e.Result == null)
{
Exception ex = e.Error;
if (ex == null && e.Cancelled)
ex = new Exception(Strings.BackupItems.OperationCancelled);
else if (ex == null && e.Result == null)
ex = new Exception(Strings.BackupItems.NoDataReceived);
progressBar.Visible = false;
WaitPanel.Visible = true;
WaitPanel.Dock = DockStyle.Fill;
statusLabel.Text = string.Format(Strings.BackupItems.ErrorStatusDisplay, ex.Message);
statusLabel.Visible = true;
statusLabel.TextAlign = ContentAlignment.TopLeft;
WaitPanel.Visible = true;
if (LoadError != null)
LoadError(this, null);
}
else
{
try
{
listView.Visible = true;
listView.BeginUpdate();
listView.Items.Clear();
foreach (Library.Main.ManifestEntry ef in (List<Library.Main.ManifestEntry>)e.Result)
{
long fullSize = Math.Max(ef.Fileentry.Size, 0);
foreach (KeyValuePair<Library.Main.SignatureEntry, Library.Main.ContentEntry> v in ef.Volumes)
fullSize += Math.Max(v.Key.Fileentry.Size, 0) + Math.Max(v.Value.Fileentry.Size, 0);
ListViewItem n = new ListViewItem(ef.Time.ToLongDateString() + " " + ef.Time.ToLongTimeString(), 0);
n.Tag = ef;
if (fullSize <= 0)
n.ToolTipText = Strings.BackupItems.TooltipFullBackup;
else
n.ToolTipText = string.Format(Strings.BackupItems.TooltipFullBackupWithSize, Library.Utility.Utility.FormatSizeString(fullSize));
listView.Items.Add(n);
foreach (Library.Main.ManifestEntry i in ef.Incrementals)
{
long incSize = Math.Max(i.Fileentry.Size, 0);
foreach (KeyValuePair<Library.Main.SignatureEntry, Library.Main.ContentEntry> v in i.Volumes)
incSize += Math.Max(v.Key.Fileentry.Size, 0) + Math.Max(v.Value.Fileentry.Size, 0);
ListViewItem nn = new ListViewItem(i.Time.ToLongDateString() + " " + i.Time.ToLongTimeString(), 1);
nn.Tag = i;
fullSize += incSize;
if (fullSize <= 0)
nn.ToolTipText = Strings.BackupItems.TooltipIncrementalBackup;
else
nn.ToolTipText = string.Format(Strings.BackupItems.TooltipIncrementalBackupWithSize, Library.Utility.Utility.FormatSizeString(incSize), Library.Utility.Utility.FormatSizeString(fullSize));
listView.Items.Add(nn);
}
}
}
finally
{
listView.EndUpdate();
}
if (ListLoaded != null)
ListLoaded(this, null);
}
}
private void listView_DoubleClick(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1 && ItemDoubleClicked != null)
ItemDoubleClicked(sender, e);
}
}
}
@@ -1,285 +0,0 @@
<?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="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="viewFilesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 22</value>
</data>
<data name="viewFilesToolStripMenuItem.Text" xml:space="preserve">
<value>View contents ...</value>
</data>
<data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 26</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
<value>contextMenuStrip</value>
</data>
<data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="statusLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="statusLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="statusLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 56</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="statusLabel.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="statusLabel.Text" xml:space="preserve">
<value>Loading list of backups</value>
</data>
<data name="statusLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="&gt;&gt;statusLabel.Name" xml:space="preserve">
<value>statusLabel</value>
</data>
<data name="&gt;&gt;statusLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;statusLabel.Parent" xml:space="preserve">
<value>WaitPanel</value>
</data>
<data name="&gt;&gt;statusLabel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="progressBar.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 56</value>
</data>
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 16</value>
</data>
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;progressBar.Name" xml:space="preserve">
<value>progressBar</value>
</data>
<data name="&gt;&gt;progressBar.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar.Parent" xml:space="preserve">
<value>WaitPanel</value>
</data>
<data name="&gt;&gt;progressBar.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="WaitPanel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="WaitPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 16</value>
</data>
<data name="WaitPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 72</value>
</data>
<data name="WaitPanel.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;WaitPanel.Name" xml:space="preserve">
<value>WaitPanel</value>
</data>
<data name="&gt;&gt;WaitPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;WaitPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;WaitPanel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>155, 17</value>
</metadata>
<data name="imageList.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>254, 17</value>
</metadata>
<data name="listView.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="listView.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="listView.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 139</value>
</data>
<data name="listView.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;listView.Name" xml:space="preserve">
<value>listView</value>
</data>
<data name="&gt;&gt;listView.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listView.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;listView.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 139</value>
</data>
<data name="&gt;&gt;viewFilesToolStripMenuItem.Name" xml:space="preserve">
<value>viewFilesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;viewFilesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;backgroundWorker.Name" xml:space="preserve">
<value>backgroundWorker</value>
</data>
<data name="&gt;&gt;backgroundWorker.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BackupItems</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-73
View File
@@ -1,73 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class BackupTreeView
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackupTreeView));
this.treeView = new System.Windows.Forms.TreeView();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.SuspendLayout();
//
// treeView
//
this.treeView.AllowDrop = true;
resources.ApplyResources(this.treeView, "treeView");
this.treeView.ImageList = this.imageList;
this.treeView.LabelEdit = true;
this.treeView.Name = "treeView";
this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
this.treeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
this.treeView.KeyUp += new System.Windows.Forms.KeyEventHandler(this.treeView_KeyUp);
this.treeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
this.treeView.DragOver += new System.Windows.Forms.DragEventHandler(this.treeView_DragOver);
//
// imageList
//
this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
this.imageList.Images.SetKeyName(0, "Folder");
this.imageList.Images.SetKeyName(1, "Backup");
//
// BackupTreeView
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.treeView);
this.Name = "BackupTreeView";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ImageList imageList;
public System.Windows.Forms.TreeView treeView;
}
}
@@ -1,384 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Duplicati.Datamodel;
using System.Data.LightDatamodel;
using Duplicati.Server;
namespace Duplicati.GUI.HelperControls
{
public partial class BackupTreeView : UserControl
{
private IDataFetcher m_connection;
private bool m_allowEdit;
public event EventHandler TreeDoubleClicked;
public event EventHandler SelectedBackupChanged;
public BackupTreeView()
{
InitializeComponent();
}
public string SelectedFolder
{
get
{
if (treeView.SelectedNode == null)
return "";
else if (treeView.SelectedNode.Tag == null)
return treeView.SelectedNode.FullPath;
else
{
string s = treeView.SelectedNode.FullPath;
if (s == treeView.SelectedNode.Text)
return "";
else
return s.Substring(0, s.Length - treeView.SelectedNode.Text.Length - treeView.PathSeparator.Length);
}
}
set
{
TreeNode match;
FindNode(value, false, out match);
if (match != null)
match.TreeView.SelectedNode = match;
else
treeView.SelectedNode = null;
}
}
public Schedule SelectedBackup
{
get
{
if (treeView.SelectedNode == null)
return null;
else
return treeView.SelectedNode.Tag as Schedule;
}
set
{
if (value == null)
treeView.SelectedNode = null;
else
{
TreeNode t;
FindNode((string.IsNullOrEmpty(value.Path) ? "" : value.Path + treeView.PathSeparator) + value.Name, false, out t);
treeView.SelectedNode = t;
}
}
}
public void Setup(IDataFetcher connection, bool allowEdit, bool onlyFolders)
{
m_connection = connection;
m_allowEdit = allowEdit;
List<Schedule> lst;
lock (Program.DataConnection)
lst = new List<Schedule>(m_connection.GetObjects<Schedule>());
treeView.Nodes.Clear();
foreach (Schedule s in lst)
{
TreeNode t = new TreeNode(s.Name);
t.ImageIndex = t.SelectedImageIndex = imageList.Images.IndexOfKey("Backup");
t.Tag = s;
TreeNodeCollection col;
if (string.IsNullOrEmpty(s.Path))
col = treeView.Nodes;
else
col = FindNode(s.Path, true);
if (!onlyFolders)
col.Add(t);
}
treeView.LabelEdit = m_allowEdit;
}
private TreeNodeCollection FindNode(string path, bool allowCreate)
{
TreeNode dummy;
return FindNode(path, allowCreate, out dummy);
}
private TreeNodeCollection FindNode(string path, bool allowCreate, out TreeNode match)
{
TreeNodeCollection col = treeView.Nodes;
match = null;
if (string.IsNullOrEmpty(path))
return col;
foreach (string p in path.Split(treeView.PathSeparator[0]))
{
match = null;
foreach (TreeNode n in col)
if (n.Text == p)
{
match = n;
col = n.Nodes;
break;
}
if (match == null)
if (allowCreate)
{
match = new TreeNode(p);
match.ImageIndex = match.SelectedImageIndex = imageList.Images.IndexOfKey("Folder");
col.Add(match);
col = match.Nodes;
match.Expand();
}
else
return treeView.Nodes;
}
return col;
}
private TreeNodeCollection GetParentFolder(TreeNode n)
{
if (n == null)
return treeView.Nodes;
else if (n.Tag as Schedule == null)
return n.Nodes;
else
if (n.Parent == null)
return treeView.Nodes;
else
return n.Parent.Nodes;
}
public TreeNode AddFolder(string foldername)
{
TreeNode t = new TreeNode(string.IsNullOrEmpty(foldername) ? Strings.BackupTreeView.NewFolder : foldername);
t.ImageIndex = t.SelectedImageIndex = imageList.Images.IndexOfKey("Folder");
GetParentFolder(treeView.SelectedNode).Add(t);
return t;
}
public void AddBackup(string name)
{
Schedule s;
lock(Program.MainLock)
s = m_connection.Add<Schedule>();
s.Task.FullAfter = "6M";
s.Task.KeepFull = 4;
s.Path = string.IsNullOrEmpty(name) ? Strings.BackupTreeView.NewBackup : name;
s.Repeat = "1W";
s.Weekdays = "sun,mon,tue,wed,thu,fri,sat";
s.When = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour + 1, 0, 0);
TreeNode t = new TreeNode(s.Path);
t.Tag = s;
t.ImageIndex = t.SelectedImageIndex = imageList.Images.IndexOfKey("Backup");
GetParentFolder(treeView.SelectedNode).Add(t);
UpdatePathAndName(t);
treeView.SelectedNode = t;
t.BeginEdit();
}
private void UpdatePathAndName(TreeNode n)
{
if (n == null || n.Tag as Schedule == null)
return;
(n.Tag as Schedule).Name = n.Text;
if (n.FullPath != n.Text)
(n.Tag as Schedule).Path = n.FullPath.Substring(0, n.FullPath.Length - n.Text.Length - treeView.PathSeparator.Length);
}
public void RestoreNode(TreeNode n)
{
if (n == null || n.Tag as Schedule == null)
return;
Schedule s = n.Tag as Schedule;
RestoreBackup dlg = new RestoreBackup();
dlg.Setup(s);
dlg.ShowDialog(this);
}
public void BackupNode(TreeNode n)
{
if (n == null)
return;
if (n.Tag as Schedule == null)
{
foreach(TreeNode nx in FlattenTree(n.Nodes, false))
Program.WorkThread.AddTask(new IncrementalBackupTask(nx.Tag as Schedule));
}
else
Program.WorkThread.AddTask(new IncrementalBackupTask(n.Tag as Schedule));
}
public void RemoveNode(TreeNode n)
{
if (n == null)
return;
if (n.Tag as Schedule != null)
{
if (MessageBox.Show(this, string.Format(Strings.BackupTreeView.ConfirmRemoveBackup, (n.Tag as Schedule).Name), Application.ProductName, MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
{
lock(Program.MainLock)
m_connection.DeleteObject(n.Tag);
n.Remove();
}
}
else
{
if (MessageBox.Show(this, string.Format(Strings.BackupTreeView.ConfirmDeleteFolder, n.Text), Application.ProductName, MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
{
foreach(TreeNode nx in FlattenTree(n.Nodes, false))
lock (Program.MainLock)
m_connection.DeleteObject(nx.Tag);
n.Remove();
}
}
}
private void treeView_KeyUp(object sender, KeyEventArgs e)
{
if (m_allowEdit && e.KeyCode == Keys.Delete)
{
RemoveNode(treeView.SelectedNode);
e.Handled = true;
}
}
private void treeView_DragDrop(object sender, DragEventArgs e)
{
TreeNode source;
TreeNode target;
if (GetDragDropItems(e, out source, out target) == DragDropEffects.Move)
{
source.Remove();
if (target == null)
treeView.Nodes.Add(source);
else
target.Nodes.Add(source);
foreach(TreeNode n in FlattenTree(source.Nodes, false))
UpdatePathAndName(n);
}
}
private List<TreeNode> FlattenTree(TreeNodeCollection entry, bool includeFolders)
{
List<TreeNode> res = new List<TreeNode>();
Queue<TreeNodeCollection> nodelist = new Queue<TreeNodeCollection>();
nodelist.Enqueue(entry);
while (nodelist.Count > 0)
{
TreeNodeCollection col = nodelist.Dequeue();
foreach (TreeNode nx in col)
{
if (nx.Nodes.Count > 0)
nodelist.Enqueue(nx.Nodes);
if (nx.Tag as Schedule != null || includeFolders)
res.Add(nx);
}
}
return res;
}
private DragDropEffects GetDragDropItems(DragEventArgs e, out TreeNode source, out TreeNode target)
{
source = e.Data.GetData(typeof(TreeNode)) as TreeNode;
target = null;
if (source == null)
return DragDropEffects.None;
Point pt = treeView.PointToClient(Cursor.Position);
target = treeView.GetNodeAt(pt.X, pt.Y);
if (target != null && target.Tag as Schedule != null)
return DragDropEffects.None;
//Drag to the root
if (target == null)
return DragDropEffects.Move;
//We now have a valid source and target, make sure the target is not a subnode of the source
if (source == target)
return DragDropEffects.None;
foreach(TreeNode nx in FlattenTree(source.Nodes, true))
if (nx == target)
return DragDropEffects.None;
return DragDropEffects.Move;
}
private void treeView_DragOver(object sender, DragEventArgs e)
{
TreeNode source;
TreeNode target;
e.Effect = GetDragDropItems(e, out source, out target);
treeView.SelectedNode = target;
}
private void treeView_ItemDrag(object sender, ItemDragEventArgs e)
{
if (!m_allowEdit)
return;
if (e.Item as TreeNode != null && (e.Item as TreeNode).TreeView == sender)
treeView.DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView_DoubleClick(object sender, EventArgs e)
{
if (this.SelectedBackup != null || this.SelectedFolder != null)
if (TreeDoubleClicked != null)
TreeDoubleClicked(this, e);
}
private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
if (SelectedBackupChanged != null)
SelectedBackupChanged(this, null);
}
}
}
@@ -1,222 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACU
CQAAAk1TRnQBSQFMAgEBAgEAAQwBAAEMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEgBgABEH4AAVACMwGaAUgCNQGDkAABRQI0AX0BRgI0AX8BRgI0AX8BRgI0AX8BRgI0
AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8DAgEDDAABRQI0AX0BRgI0
AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BRgI0AX8BXAIjAcwBVwGw
AXAB/gFTAi8BqIgAASoCJwE/AYwBxQH5Af8BOAHQAv8BNgHPAv8BNQHOAv8BMgHNAv8BMAHMAv8BLQHK
Av8BLAHJAv8BKQHIAv8BJwHHAv8BJQHGAv8BIwHFAv8BXAEZARwB3wgAASoCJwE/AYwBxQH5Af8BOAHQ
Av8BNgHPAv8BNQHOAv8BMgHNAv8BMAHMAv8BUgHKAW4B/wFzAekBlQH/AXEB6QGTAf8BawHlAYwB/wFj
Ad4BgwH/AVABzgFhAf8BUgHTAXMB/wFbAiUByIQAASoCJwE/AWoBrgH3Af8BVwHdAv8BTQHaAv8BSwHZ
Av8BSQHZAv8BSAHYAv8BRgHXAv8BRAHWAv8BQQHUAv8BQAHTAv8BPgHSAv8BOwHRAv8BXQIeAdcIAAEq
AicBPwFqAa4B9wH/AVcB3QL/AU0B2gL/AUsB2QL/AUkB2QL/AUgB2AL/AVUBzgF1Af8BegHmAYEB/wGB
Ae4BiAH/AYAB8AGHAf8BdAHpAYEB/wFkAd0BdwH/AVQB0QFlAf8BUQGrAVwB/gFgAhoB3oAAASoCJwE/
AYEB1AH+Af8BxgH2Af4B/wFhAeQC/wFgAeMC/wFeAeIC/wFcAeIC/wFaAeEC/wFZAeAC/wFWAd8C/wFV
Ad4C/wFTAd0C/wFRAdwC/wFZAigBvwElAiMBNwQAASoCJwE/AYEB1AH+Af8BxgH2Af4B/wFhAeQC/wFg
AeMC/wFeAeIC/wFvAdsB8AH/AVMBzAFyAf8BbQHWAYAB/wF4AeMBgQH/AYEB7AGHAf8BgQHwAYkB/wF4
AesBgQH/AWgB4AF8Af8BXAGxAWsB/gFeAh0B2IAAASoCJwE/AX0B2AL/AYcBwwH5Af8BcQHsAv8BbwHr
Av8BbgHrAv8BbQHqAv8BbAHqAv8BagHpAv8BaQHoAv8BaAHoAv8BZgHnAv8BZQHmAv8BWwIoAb8BXAEZ
ARwB3wQAASoCJwE/AX0B2AL/AYcBwwH5Af8BcQHsAv8BbwHrAv8BkwHlAecB/wGfAfgB9QH/AU0BxwFm
Af8BYQHWAYEB/wFmAdwBhQH/AWwB4QGLAf8BbwHmAZAB/wGBAfABiQH/AXoB8AGTAf8BVAFDASwB94QA
ASoCJwE/AYEB3QL/AS8BoAH3Af8BhwHxAv8BgQHwAv8BgQHwAv8BgQHwAv8BgQHwAv8BfQHwAv8BewHw
Av8BeQHvAv8BeAHvAv8BdgHvAv8BWwIoAb8BXgIeAdcEAAEqAicBPwGBAd0C/wEvAaAB9wH/AZEB7gH3
Af8BtgH4AfUB/wG0Af0B+AH/Aa8B8wHxAf8BrgH9AfcB/wGoAfQB8QH/AacB9wHzAf8BpgH7AfUB/wFq
Ac4BgQH/AXoB7gGaAf8BZQEdARsB5QFeAh4B14QAASoCJwE/AYoB5gL/AT0BzgH+Af8B6QH4Af4B/wHg
AfsC/wHfAfsC/wHeAfsC/wHXAfoC/wGYAfQC/wGVAfQC/wGSAfQC/wGPAfQC/wGMAfQC/wFbAigBvwFb
AigBvwEoAiUBPAEqAicBPwGKAeYC/wE9Ac4B/gH/Ae8B+AH8Af8B8QH/Af0B/wHvAvwB/wHvAf4B/QH/
AesB/gH8Af8ByQHyAfEB/wHIAf0B+AH/AcMB9gHzAf8BdgHQAYEB/wGBAdoBmwH/AWMCHwHVAVsCKAG/
ASgCJQE8gAABKgInAT8BnAHvAv8BXgHkAv8BXgHkAv8BXgHkAv8BXgHkAv8BXgHkAv8BUgHKAfsB/wHy
Af0B/gH/AegB/AL/AecB/AL/AeYB/AL/AeYB/AL/AXICIwHrAXICIwHrAWEBGwEdAeQBKgInAT8BnAHv
Av8BXgHkAv8BXgHkAv8B8AHLAcQD/wH2Af8B/gH2Ae4B/wG4AdAB6gH/AfkC/QH/AfYB/gH9Af8B9AL6
Af8B9QH+Af0B/wH0Af4B/QH/AfMC+gH/AXICIwHrAWEBGwEdAeSAAAEqAicBPwGvAfkC/wGBAfQC/wGB
AfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wGBAfQC/wwA
ASoCJwE/Aa8B+QL/AYEB9AL/AYEB9AL/AYEB9AH+Av8C8wP/AfwB/wH7AtsB/wH8AfEB7wH/AfsB8gHt
Af8B8QHTAdEB/wL+AfYB/wHyAd4B2QH/Af4B5wHeAf8BZAEaARgB4oQAASoCJwE/AcYD/wGaA/8BmgP/
AZoD/wHQA/8B4wP/AeMD/wHjA/8B4wP/AeMD/wHjA/8B3gH8Af4B/wwAASoCJwE/AcYD/wGaA/8BmgP/
AZoD/wHfAd4B0gX/Af0B7wHwAf8D/gH/AfgB2QHbAf8B+gHsAe0B/wH7AvQB/wL+AfwB/wH0AcoBhQH/
AU0CNAGPhAABKgInAT8B6QP/AdkD/wHZA/8B2QP/AVwCIwHMKAABKgInAT8B6QP/AdkD/wHZA/8B2QP/
AVwCIwHMAXMBIAEfAesE/wH+AvwB/wH5AdMB1QH/Af4C/AH/AfUB3gHfBf8B9QHjAdcB/wEiAiABMYgA
AUYCNAF/AUYCNAF/AUYCNAF/AUYCNAF/Aw0BEiwAAUYCNAF/AUYCNAF/AUYCNAF/AUYCNAF/Aw0BEgQA
Af4B6gHpAf8D/gH/AfwB4QHiAf8B/gL9Bv8C8wH/AUkCNAGI5AABJwIlATsB/wL9Cf8BxAGUAYkB/AMN
ARHsAAFdAiQBygH/AvwB/wFZAisBuPgAASACHwEumAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEA
AQEFAAGAFwAD/wEAA/8B5wQAAYABAwGAAQMFAAEDAQABAQUAAQMHAAEBBwABAQEAAQEFAAEBAQABARUA
AQcBAAEBBQABBwEAAQEEAAEDAf8BAAEBBAABgwH/AYIBAwQAAv8B/gEHBAAD/wEfBAAD/wG/BAAL
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="treeView.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="treeView.SelectedImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="treeView.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 150</value>
</data>
<data name="treeView.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;treeView.Name" xml:space="preserve">
<value>treeView</value>
</data>
<data name="&gt;&gt;treeView.Type" xml:space="preserve">
<value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;treeView.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;treeView.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BackupTreeView</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-91
View File
@@ -1,91 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class BandwidthLimit
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BandwidthLimit));
this.DownloadLimitCheckbox = new System.Windows.Forms.CheckBox();
this.UploadLimitCheckbox = new System.Windows.Forms.CheckBox();
this.UploadLimitPicker = new Duplicati.GUI.HelperControls.SizeSelector();
this.DownloadLimitPicker = new Duplicati.GUI.HelperControls.SizeSelector();
this.SuspendLayout();
//
// DownloadLimitCheckbox
//
resources.ApplyResources(this.DownloadLimitCheckbox, "DownloadLimitCheckbox");
this.DownloadLimitCheckbox.Name = "DownloadLimitCheckbox";
this.DownloadLimitCheckbox.UseVisualStyleBackColor = true;
this.DownloadLimitCheckbox.CheckedChanged += new System.EventHandler(this.DownloadLimitCheckbox_CheckedChanged);
//
// UploadLimitCheckbox
//
resources.ApplyResources(this.UploadLimitCheckbox, "UploadLimitCheckbox");
this.UploadLimitCheckbox.Name = "UploadLimitCheckbox";
this.UploadLimitCheckbox.UseVisualStyleBackColor = true;
this.UploadLimitCheckbox.CheckedChanged += new System.EventHandler(this.UploadLimitCheckbox_CheckedChanged);
//
// UploadLimitPicker
//
resources.ApplyResources(this.UploadLimitPicker, "UploadLimitPicker");
this.UploadLimitPicker.CurrentSize = "0b";
this.UploadLimitPicker.CurrentSizeInBytes = ((long)(0));
this.UploadLimitPicker.Name = "UploadLimitPicker";
this.UploadLimitPicker.UseSpeedNotation = true;
this.UploadLimitPicker.CurrentSizeChanged += new System.EventHandler(this.UploadLimitPicker_CurrentSizeChanged);
//
// DownloadLimitPicker
//
resources.ApplyResources(this.DownloadLimitPicker, "DownloadLimitPicker");
this.DownloadLimitPicker.CurrentSize = "0b";
this.DownloadLimitPicker.CurrentSizeInBytes = ((long)(0));
this.DownloadLimitPicker.Name = "DownloadLimitPicker";
this.DownloadLimitPicker.UseSpeedNotation = true;
this.DownloadLimitPicker.CurrentSizeChanged += new System.EventHandler(this.DownloadLimitPicker_CurrentSizeChanged);
//
// BandwidthLimit
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.UploadLimitPicker);
this.Controls.Add(this.DownloadLimitPicker);
this.Controls.Add(this.DownloadLimitCheckbox);
this.Controls.Add(this.UploadLimitCheckbox);
this.Name = "BandwidthLimit";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private SizeSelector UploadLimitPicker;
private SizeSelector DownloadLimitPicker;
private System.Windows.Forms.CheckBox DownloadLimitCheckbox;
private System.Windows.Forms.CheckBox UploadLimitCheckbox;
}
}
@@ -1,207 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class BandwidthLimit : UserControl
{
public BandwidthLimit()
{
InitializeComponent();
}
public event EventHandler DownloadLimitChanged;
public event EventHandler DownloadLimitInBytesChanged;
public event EventHandler UploadLimitChanged;
public event EventHandler UploadLimitInBytesChanged;
[DefaultValue("")]
public string DownloadLimit
{
get
{
if (!DownloadLimitEnabled)
return null;
else
return DownloadLimitPicker.CurrentSize;
}
set
{
if (string.IsNullOrEmpty(value) || Library.Utility.Sizeparser.ParseSize(value) == 0)
{
DownloadLimitEnabled = false;
}
else
{
DownloadLimitPicker.CurrentSize = value;
DownloadLimitEnabled = true;
}
if (DownloadLimitChanged != null)
DownloadLimitChanged(this, null);
if (DownloadLimitInBytesChanged != null)
DownloadLimitInBytesChanged(this, null);
}
}
[DefaultValue(0)]
public long DownloadLimitInBytes
{
get
{
if (DownloadLimitEnabled)
return DownloadLimitPicker.CurrentSizeInBytes;
else
return 0;
}
set
{
if (value <= 0)
{
DownloadLimitEnabled = false;
}
else
{
DownloadLimitPicker.CurrentSizeInBytes = value;
DownloadLimitEnabled = true;
}
if (DownloadLimitChanged != null)
DownloadLimitChanged(this, null);
if (DownloadLimitInBytesChanged != null)
DownloadLimitInBytesChanged(this, null);
}
}
[DefaultValue(false)]
public bool DownloadLimitEnabled
{
get { return DownloadLimitCheckbox.Checked; }
set { DownloadLimitCheckbox.Checked = value; }
}
[DefaultValue("")]
public string UploadLimit
{
get
{
if (!UploadLimitEnabled)
return null;
else
return UploadLimitPicker.CurrentSize;
}
set
{
if (string.IsNullOrEmpty(value) || Library.Utility.Sizeparser.ParseSize(value) == 0)
{
UploadLimitEnabled = false;
}
else
{
UploadLimitPicker.CurrentSize = value;
UploadLimitEnabled = true;
}
if (UploadLimitChanged != null)
UploadLimitChanged(this, null);
if (UploadLimitInBytesChanged != null)
UploadLimitInBytesChanged(this, null);
}
}
[DefaultValue(0)]
public long UploadLimitInBytes
{
get
{
if (UploadLimitEnabled)
return UploadLimitPicker.CurrentSizeInBytes;
else
return 0;
}
set
{
if (value <= 0)
{
UploadLimitEnabled = false;
}
else
{
UploadLimitPicker.CurrentSizeInBytes = value;
UploadLimitEnabled = true;
}
if (UploadLimitChanged != null)
UploadLimitChanged(this, null);
if (UploadLimitInBytesChanged != null)
UploadLimitInBytesChanged(this, null);
}
}
[DefaultValue(false)]
public bool UploadLimitEnabled
{
get { return UploadLimitCheckbox.Checked; }
set { UploadLimitCheckbox.Checked = value; }
}
private void UploadLimitCheckbox_CheckedChanged(object sender, EventArgs e)
{
UploadLimitPicker.Enabled = UploadLimitEnabled;
if (UploadLimitChanged != null)
UploadLimitChanged(this, null);
if (UploadLimitInBytesChanged != null)
UploadLimitInBytesChanged(this, null);
}
private void DownloadLimitCheckbox_CheckedChanged(object sender, EventArgs e)
{
DownloadLimitPicker.Enabled = DownloadLimitEnabled;
if (DownloadLimitChanged != null)
DownloadLimitChanged(this, null);
if (DownloadLimitInBytesChanged != null)
DownloadLimitInBytesChanged(this, null);
}
private void UploadLimitPicker_CurrentSizeChanged(object sender, EventArgs e)
{
if (UploadLimitChanged != null)
UploadLimitChanged(this, null);
if (UploadLimitInBytesChanged != null)
UploadLimitInBytesChanged(this, null);
}
private void DownloadLimitPicker_CurrentSizeChanged(object sender, EventArgs e)
{
if (DownloadLimitChanged != null)
DownloadLimitChanged(this, null);
if (DownloadLimitInBytesChanged != null)
DownloadLimitInBytesChanged(this, null);
}
}
}
@@ -1,252 +0,0 @@
<?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>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="DownloadLimitCheckbox.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="DownloadLimitCheckbox.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="DownloadLimitCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 32</value>
</data>
<data name="DownloadLimitCheckbox.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 17</value>
</data>
<data name="DownloadLimitCheckbox.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="DownloadLimitCheckbox.Text" xml:space="preserve">
<value>Download limit (restore)</value>
</data>
<data name="&gt;&gt;DownloadLimitCheckbox.Name" xml:space="preserve">
<value>DownloadLimitCheckbox</value>
</data>
<data name="&gt;&gt;DownloadLimitCheckbox.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DownloadLimitCheckbox.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;DownloadLimitCheckbox.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="UploadLimitCheckbox.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="UploadLimitCheckbox.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="UploadLimitCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="UploadLimitCheckbox.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
</data>
<data name="UploadLimitCheckbox.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="UploadLimitCheckbox.Text" xml:space="preserve">
<value>Upload limit (backup)</value>
</data>
<data name="&gt;&gt;UploadLimitCheckbox.Name" xml:space="preserve">
<value>UploadLimitCheckbox</value>
</data>
<data name="&gt;&gt;UploadLimitCheckbox.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;UploadLimitCheckbox.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;UploadLimitCheckbox.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="UploadLimitPicker.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="UploadLimitPicker.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="UploadLimitPicker.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 0</value>
</data>
<data name="UploadLimitPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 21</value>
</data>
<data name="UploadLimitPicker.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;UploadLimitPicker.Name" xml:space="preserve">
<value>UploadLimitPicker</value>
</data>
<data name="&gt;&gt;UploadLimitPicker.Type" xml:space="preserve">
<value>Duplicati.GUI.HelperControls.SizeSelector, Duplicati, Version=1.0.1.276, Culture=neutral, PublicKeyToken=8bfe994a39631a7b</value>
</data>
<data name="&gt;&gt;UploadLimitPicker.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;UploadLimitPicker.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="DownloadLimitPicker.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="DownloadLimitPicker.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="DownloadLimitPicker.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 32</value>
</data>
<data name="DownloadLimitPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 21</value>
</data>
<data name="DownloadLimitPicker.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;DownloadLimitPicker.Name" xml:space="preserve">
<value>DownloadLimitPicker</value>
</data>
<data name="&gt;&gt;DownloadLimitPicker.Type" xml:space="preserve">
<value>Duplicati.GUI.HelperControls.SizeSelector, Duplicati, Version=1.0.1.276, Culture=neutral, PublicKeyToken=8bfe994a39631a7b</value>
</data>
<data name="&gt;&gt;DownloadLimitPicker.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;DownloadLimitPicker.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>321, 54</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BandwidthLimit</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
@@ -1,189 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class CommandLineOptionGrid
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CommandLineOptionGrid));
this.BaseDataSet = new System.Data.DataSet();
this.OverrideTable = new System.Data.DataTable();
this.EnabledDataColumn = new System.Data.DataColumn();
this.NameDataColumn = new System.Data.DataColumn();
this.ValueDataColumn = new System.Data.DataColumn();
this.argumentDataColumn = new System.Data.DataColumn();
this.validatedDataColumn = new System.Data.DataColumn();
this.OptionsGrid = new System.Windows.Forms.DataGridView();
this.enabledDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.nameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.valueDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.argumentDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.InfoLabel = new System.Windows.Forms.TextBox();
this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.BaseDataSet)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.OverrideTable)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).BeginInit();
this.SuspendLayout();
//
// BaseDataSet
//
this.BaseDataSet.DataSetName = "BaseDataSet";
this.BaseDataSet.Tables.AddRange(new System.Data.DataTable[] {
this.OverrideTable});
//
// OverrideTable
//
this.OverrideTable.Columns.AddRange(new System.Data.DataColumn[] {
this.EnabledDataColumn,
this.NameDataColumn,
this.ValueDataColumn,
this.argumentDataColumn,
this.validatedDataColumn});
this.OverrideTable.TableName = "OverrideTable";
//
// EnabledDataColumn
//
this.EnabledDataColumn.Caption = "Enabled";
this.EnabledDataColumn.ColumnName = "Enabled";
this.EnabledDataColumn.DataType = typeof(bool);
//
// NameDataColumn
//
this.NameDataColumn.Caption = "Name";
this.NameDataColumn.ColumnName = "Name";
//
// ValueDataColumn
//
this.ValueDataColumn.Caption = "Value";
this.ValueDataColumn.ColumnName = "Value";
//
// argumentDataColumn
//
this.argumentDataColumn.Caption = "argument";
this.argumentDataColumn.ColumnName = "argument";
this.argumentDataColumn.DataType = typeof(object);
//
// validatedDataColumn
//
this.validatedDataColumn.AllowDBNull = false;
this.validatedDataColumn.ColumnName = "validated";
this.validatedDataColumn.DataType = typeof(bool);
this.validatedDataColumn.DefaultValue = false;
//
// OptionsGrid
//
this.OptionsGrid.AllowUserToAddRows = false;
this.OptionsGrid.AllowUserToDeleteRows = false;
this.OptionsGrid.AutoGenerateColumns = false;
this.OptionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.OptionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.enabledDataGridViewCheckBoxColumn,
this.nameDataGridViewTextBoxColumn,
this.valueDataGridViewTextBoxColumn,
this.argumentDataGridViewTextBoxColumn});
this.OptionsGrid.DataMember = "OverrideTable";
this.OptionsGrid.DataSource = this.BaseDataSet;
resources.ApplyResources(this.OptionsGrid, "OptionsGrid");
this.OptionsGrid.MultiSelect = false;
this.OptionsGrid.Name = "OptionsGrid";
this.OptionsGrid.RowHeadersVisible = false;
this.OptionsGrid.RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.OptionsGrid_RowEnter);
this.OptionsGrid.RowValidating += new System.Windows.Forms.DataGridViewCellCancelEventHandler(this.OptionsGrid_RowValidating);
this.OptionsGrid.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.OptionsGrid_CellValidating);
this.OptionsGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OptionsGrid_CellContentClick);
//
// enabledDataGridViewCheckBoxColumn
//
this.enabledDataGridViewCheckBoxColumn.DataPropertyName = "Enabled";
resources.ApplyResources(this.enabledDataGridViewCheckBoxColumn, "enabledDataGridViewCheckBoxColumn");
this.enabledDataGridViewCheckBoxColumn.Name = "enabledDataGridViewCheckBoxColumn";
this.enabledDataGridViewCheckBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
//
// nameDataGridViewTextBoxColumn
//
this.nameDataGridViewTextBoxColumn.DataPropertyName = "Name";
resources.ApplyResources(this.nameDataGridViewTextBoxColumn, "nameDataGridViewTextBoxColumn");
this.nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn";
this.nameDataGridViewTextBoxColumn.ReadOnly = true;
//
// valueDataGridViewTextBoxColumn
//
this.valueDataGridViewTextBoxColumn.DataPropertyName = "Value";
resources.ApplyResources(this.valueDataGridViewTextBoxColumn, "valueDataGridViewTextBoxColumn");
this.valueDataGridViewTextBoxColumn.Name = "valueDataGridViewTextBoxColumn";
//
// argumentDataGridViewTextBoxColumn
//
this.argumentDataGridViewTextBoxColumn.DataPropertyName = "argument";
resources.ApplyResources(this.argumentDataGridViewTextBoxColumn, "argumentDataGridViewTextBoxColumn");
this.argumentDataGridViewTextBoxColumn.Name = "argumentDataGridViewTextBoxColumn";
//
// InfoLabel
//
this.InfoLabel.BorderStyle = System.Windows.Forms.BorderStyle.None;
resources.ApplyResources(this.InfoLabel, "InfoLabel");
this.InfoLabel.Name = "InfoLabel";
this.InfoLabel.ReadOnly = true;
//
// dataGridViewTextBoxColumn1
//
this.dataGridViewTextBoxColumn1.DataPropertyName = "argument";
resources.ApplyResources(this.dataGridViewTextBoxColumn1, "dataGridViewTextBoxColumn1");
this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
//
// CommandLineOptionGrid
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.OptionsGrid);
this.Controls.Add(this.InfoLabel);
this.Name = "CommandLineOptionGrid";
((System.ComponentModel.ISupportInitialize)(this.BaseDataSet)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.OverrideTable)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Data.DataSet BaseDataSet;
private System.Data.DataTable OverrideTable;
private System.Data.DataColumn EnabledDataColumn;
private System.Data.DataColumn NameDataColumn;
private System.Data.DataColumn ValueDataColumn;
private System.Data.DataColumn argumentDataColumn;
private System.Windows.Forms.DataGridView OptionsGrid;
private System.Data.DataColumn validatedDataColumn;
private System.Windows.Forms.TextBox InfoLabel;
private System.Windows.Forms.DataGridViewCheckBoxColumn enabledDataGridViewCheckBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn valueDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn argumentDataGridViewTextBoxColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
}
}
@@ -1,264 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class CommandLineOptionGrid : UserControl
{
private bool m_unsupported = false;
private bool m_enabledClicked = false;
private Dictionary<string, Library.Interface.ICommandLineArgument> m_optionCache = new Dictionary<string,Library.Interface.ICommandLineArgument>();
public CommandLineOptionGrid()
{
try
{
InitializeComponent();
}
catch (NotImplementedException)
{
OptionsGrid.Enabled = false;
MessageBox.Show(this, Strings.CommandLineOptionsGrid.PageNotSupportedWarning, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
m_unsupported = true;
}
MonoSupport.FixTextBoxes(this);
}
public bool Unsupported { get { return m_unsupported; } }
public void Setup(IList<Library.Interface.ICommandLineArgument> switches, IList<Library.Interface.ICommandLineArgument> extras, IDictionary<string, string> options)
{
if (!m_unsupported)
{
OverrideTable.Rows.Clear();
m_optionCache.Clear();
foreach (IList<Library.Interface.ICommandLineArgument> sw in new IList<Library.Interface.ICommandLineArgument>[] { switches, extras })
if (sw != null)
foreach (Library.Interface.ICommandLineArgument arg in sw)
{
DataRow dr = OverrideTable.NewRow();
dr["Enabled"] = options.ContainsKey(arg.Name);
dr["argument"] = arg;
dr["validated"] = false;
dr["Name"] = arg.Name;
if (options.ContainsKey(arg.Name))
dr["Value"] = options[arg.Name];
OverrideTable.Rows.Add(dr);
//We use this as a lookup table due to a Mono bug
m_optionCache[arg.Name] = arg;
}
}
}
public Dictionary<string, string> GetConfiguration()
{
Dictionary<string, string> opts = new Dictionary<string, string>();
if (!m_unsupported)
foreach (DataRow dr in OverrideTable.Rows)
if ((bool)dr["Enabled"])
opts.Add((string)dr["Name"], (string)(dr["Value"] == DBNull.Value ? "" : dr["Value"] ?? ""));
return opts;
}
public DataSet DataSet
{
get { return BaseDataSet; }
set
{
if (!m_unsupported)
{
BaseDataSet = value;
OptionsGrid.DataSource = BaseDataSet;
OverrideTable = BaseDataSet.Tables["OverrideTable"];
OptionsGrid.DataMember = "OverrideTable";
OptionsGrid.Sort(nameDataGridViewTextBoxColumn, ListSortDirection.Ascending);
}
}
}
public Dictionary<string, Library.Interface.ICommandLineArgument> DataElementCache
{
get { return m_optionCache; }
set
{
if (!m_unsupported)
m_optionCache = value;
}
}
private Duplicati.Library.Interface.ICommandLineArgument GetArgument(DataRow r)
{
Duplicati.Library.Interface.ICommandLineArgument arg;
object v = r["argument"];
if (v is string)
{
//For some reason, the newer Mono versions store the object as a string instance instead of the object
//To counter this, there is now a seperate argument cache
if (r["Name"] == null || r["Name"] == DBNull.Value)
return null;
m_optionCache.TryGetValue((string)r["Name"], out arg);
return arg;
}
else if (v is Duplicati.Library.Interface.ICommandLineArgument)
return (Duplicati.Library.Interface.ICommandLineArgument)v;
else
return null;
}
private DataRow FindRow(int rowIndex)
{
int argIndex = -1;
foreach (DataGridViewColumn c in OptionsGrid.Columns)
if (c.DataPropertyName == "argument")
{
argIndex = c.Index;
break;
}
int nameIndex = -1;
foreach (DataGridViewColumn c in OptionsGrid.Columns)
if (c.DataPropertyName == "Name")
{
nameIndex = c.Index;
break;
}
if (argIndex == -1)
return null;
object _arg = OptionsGrid.Rows[rowIndex].Cells[argIndex].Value;
if (_arg == null)
return null;
Library.Interface.ICommandLineArgument arg;
//For some reason, the newer Mono versions store the object as a string instance instead of the object
//To counter this, there is now a seperate argument cache
if (_arg is string)
{
if (nameIndex == -1)
return null;
string name = OptionsGrid.Rows[rowIndex].Cells[nameIndex].Value as string;
if (name == null)
return null;
m_optionCache.TryGetValue(name, out arg);
}
else if (_arg is Library.Interface.ICommandLineArgument)
{
arg = (Library.Interface.ICommandLineArgument)OptionsGrid.Rows[rowIndex].Cells[argIndex].Value;
}
else
{
return null;
}
foreach (DataRow r in OverrideTable.Rows)
if (GetArgument(r) == arg)
return r;
return null;
}
private void OptionsGrid_RowEnter(object sender, DataGridViewCellEventArgs e)
{
DataRow r = FindRow(e.RowIndex);
if (r == null)
return;
Library.Interface.ICommandLineArgument arg = GetArgument(r);
string typename = arg.Typename;
if (arg.ValidValues != null && arg.ValidValues.Length > 0)
typename += ": " + string.Join(", ", arg.ValidValues);
InfoLabel.Text = string.Format(Strings.CommandLineOptionsGrid.InfoLabelFormat, typename, arg.ShortDescription, arg.LongDescription);
}
private void OptionsGrid_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
DataRow r = FindRow(e.RowIndex);
if (r == null)
return;
if (e.ColumnIndex != 0)
r["Enabled"] = r["Value"] != DBNull.Value;
r["validated"] = false;
if ((bool)r["Enabled"])
{
Library.Interface.ICommandLineArgument arg = GetArgument(r);
string optionvalue = (string)(r["Value"] == DBNull.Value ? "" : r["Value"] ?? "");
string validationMessage = Duplicati.Library.Main.Interface.ValidateOptionValue(arg, arg.Name, optionvalue);
if (validationMessage != null)
if (MessageBox.Show(this, validationMessage, Application.ProductName, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
e.Cancel = true;
if (!e.Cancel)
r["validated"] = true;
}
}
private void OptionsGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
m_enabledClicked = true;
}
private void OptionsGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e == null || e.FormattedValue == null)
return;
if (m_enabledClicked && e.ColumnIndex == 0 && e.FormattedValue.ToString() == true.ToString())
{
DataRow r = FindRow(e.RowIndex);
if (r == null)
return;
Library.Interface.ICommandLineArgument arg = GetArgument(r);
if (arg.Type == Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean)
{
if (r["Value"] == DBNull.Value)
{
r["Value"] = "true";
r["Enabled"] = true; //Required or display is weird
}
}
}
m_enabledClicked = false;
}
}
}
@@ -1,303 +0,0 @@
<?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="BaseDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="enabledDataGridViewCheckBoxColumn.HeaderText" xml:space="preserve">
<value>Enabled</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="enabledDataGridViewCheckBoxColumn.Width" type="System.Int32, mscorlib">
<value>50</value>
</data>
<data name="nameDataGridViewTextBoxColumn.HeaderText" xml:space="preserve">
<value>Name</value>
</data>
<data name="nameDataGridViewTextBoxColumn.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="valueDataGridViewTextBoxColumn.HeaderText" xml:space="preserve">
<value>Value</value>
</data>
<data name="valueDataGridViewTextBoxColumn.Width" type="System.Int32, mscorlib">
<value>240</value>
</data>
<data name="argumentDataGridViewTextBoxColumn.HeaderText" xml:space="preserve">
<value>argument</value>
</data>
<data name="argumentDataGridViewTextBoxColumn.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="argumentDataGridViewTextBoxColumn.Width" type="System.Int32, mscorlib">
<value>5</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="OptionsGrid.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="OptionsGrid.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="OptionsGrid.Size" type="System.Drawing.Size, System.Drawing">
<value>471, 152</value>
</data>
<data name="OptionsGrid.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;OptionsGrid.Name" xml:space="preserve">
<value>OptionsGrid</value>
</data>
<data name="&gt;&gt;OptionsGrid.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;OptionsGrid.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;OptionsGrid.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="InfoLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="InfoLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 152</value>
</data>
<data name="InfoLabel.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="InfoLabel.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="InfoLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>471, 63</value>
</data>
<data name="InfoLabel.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;InfoLabel.Name" xml:space="preserve">
<value>InfoLabel</value>
</data>
<data name="&gt;&gt;InfoLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;InfoLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;InfoLabel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="dataGridViewTextBoxColumn1.HeaderText" xml:space="preserve">
<value>argument</value>
</data>
<data name="dataGridViewTextBoxColumn1.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="dataGridViewTextBoxColumn1.Width" type="System.Int32, mscorlib">
<value>5</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>471, 215</value>
</data>
<data name="&gt;&gt;BaseDataSet.Name" xml:space="preserve">
<value>BaseDataSet</value>
</data>
<data name="&gt;&gt;BaseDataSet.Type" xml:space="preserve">
<value>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;OverrideTable.Name" xml:space="preserve">
<value>OverrideTable</value>
</data>
<data name="&gt;&gt;OverrideTable.Type" xml:space="preserve">
<value>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;EnabledDataColumn.Name" xml:space="preserve">
<value>EnabledDataColumn</value>
</data>
<data name="&gt;&gt;EnabledDataColumn.Type" xml:space="preserve">
<value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NameDataColumn.Name" xml:space="preserve">
<value>NameDataColumn</value>
</data>
<data name="&gt;&gt;NameDataColumn.Type" xml:space="preserve">
<value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ValueDataColumn.Name" xml:space="preserve">
<value>ValueDataColumn</value>
</data>
<data name="&gt;&gt;ValueDataColumn.Type" xml:space="preserve">
<value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;argumentDataColumn.Name" xml:space="preserve">
<value>argumentDataColumn</value>
</data>
<data name="&gt;&gt;argumentDataColumn.Type" xml:space="preserve">
<value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;validatedDataColumn.Name" xml:space="preserve">
<value>validatedDataColumn</value>
</data>
<data name="&gt;&gt;validatedDataColumn.Type" xml:space="preserve">
<value>System.Data.DataColumn, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;enabledDataGridViewCheckBoxColumn.Name" xml:space="preserve">
<value>enabledDataGridViewCheckBoxColumn</value>
</data>
<data name="&gt;&gt;enabledDataGridViewCheckBoxColumn.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewCheckBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nameDataGridViewTextBoxColumn.Name" xml:space="preserve">
<value>nameDataGridViewTextBoxColumn</value>
</data>
<data name="&gt;&gt;nameDataGridViewTextBoxColumn.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;valueDataGridViewTextBoxColumn.Name" xml:space="preserve">
<value>valueDataGridViewTextBoxColumn</value>
</data>
<data name="&gt;&gt;valueDataGridViewTextBoxColumn.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;argumentDataGridViewTextBoxColumn.Name" xml:space="preserve">
<value>argumentDataGridViewTextBoxColumn</value>
</data>
<data name="&gt;&gt;argumentDataGridViewTextBoxColumn.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;dataGridViewTextBoxColumn1.Name" xml:space="preserve">
<value>dataGridViewTextBoxColumn1</value>
</data>
<data name="&gt;&gt;dataGridViewTextBoxColumn1.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>CommandLineOptionGrid</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-83
View File
@@ -1,83 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class DurationEditor
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DurationEditor));
this.EasyDuration = new System.Windows.Forms.ComboBox();
this.CustomDuration = new System.Windows.Forms.TextBox();
this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
this.SuspendLayout();
//
// EasyDuration
//
this.EasyDuration.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.EasyDuration.FormattingEnabled = true;
this.EasyDuration.Items.AddRange(new object[] {
resources.GetString("EasyDuration.Items"),
resources.GetString("EasyDuration.Items1"),
resources.GetString("EasyDuration.Items2"),
resources.GetString("EasyDuration.Items3"),
resources.GetString("EasyDuration.Items4")});
resources.ApplyResources(this.EasyDuration, "EasyDuration");
this.EasyDuration.Name = "EasyDuration";
this.EasyDuration.SelectedIndexChanged += new System.EventHandler(this.EasyDuration_SelectedIndexChanged);
//
// CustomDuration
//
this.errorProvider.SetError(this.CustomDuration, resources.GetString("CustomDuration.Error"));
resources.ApplyResources(this.CustomDuration, "CustomDuration");
this.CustomDuration.Name = "CustomDuration";
this.CustomDuration.TextChanged += new System.EventHandler(this.CustomDuration_TextChanged);
//
// errorProvider
//
this.errorProvider.ContainerControl = this;
//
// DurationEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.CustomDuration);
this.Controls.Add(this.EasyDuration);
this.Name = "DurationEditor";
((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox EasyDuration;
private System.Windows.Forms.TextBox CustomDuration;
private System.Windows.Forms.ErrorProvider errorProvider;
}
}
@@ -1,123 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class DurationEditor : UserControl
{
private string[] m_values = { "1D", "1W", "2W", "1M", "" };
public DurationEditor()
{
InitializeComponent();
this.HandleCreated += new EventHandler(EasyDuration_SelectedIndexChanged);
}
public event EventHandler ValueChanged;
/// <summary>
/// Sets the available intervals
/// </summary>
/// <param name="values">A dictionary where the key is the string to display and the value is the duplicity time string</param>
public void SetIntervals(List<KeyValuePair<string, string>> values)
{
EasyDuration.Items.Clear();
if (values[values.Count - 1].Value != "")
values.Add(new KeyValuePair<string, string>(Strings.DurationEditor.CustomDuration, ""));
m_values = new string[values.Count];
for (int i = 0; i < values.Count; i++)
{
m_values[i] = values[i].Value;
EasyDuration.Items.Add(values[i].Key);
}
}
private void EasyDuration_SelectedIndexChanged(object sender, EventArgs e)
{
//To prevent some flickering when creating the control, we must wait until the handle is created
if (this.IsHandleCreated)
{
CustomDuration.Visible = (EasyDuration.SelectedIndex == EasyDuration.Items.Count - 1);
if (EasyDuration.SelectedIndex == EasyDuration.Items.Count - 1)
CustomDuration.Text = m_values[EasyDuration.Items.Count - 1];
if (ValueChanged != null)
ValueChanged(sender, e);
}
}
private void CustomDuration_TextChanged(object sender, EventArgs e)
{
try
{
Duplicati.Library.Utility.Timeparser.ParseTimeSpan(CustomDuration.Text);
}
catch (Exception ex)
{
errorProvider.SetError(CustomDuration, ex.Message);
return;
}
errorProvider.SetError(CustomDuration, "");
m_values[EasyDuration.Items.Count - 1] = CustomDuration.Text;
if (ValueChanged != null)
ValueChanged(sender, e);
}
public string Value
{
get
{
if (EasyDuration.SelectedIndex < 0)
return "";
else
return m_values[EasyDuration.SelectedIndex];
}
set
{
for (int i = 0; i < m_values.Length - 1; i++)
if (m_values[i] == value)
{
EasyDuration.SelectedIndex = i;
return;
}
m_values[EasyDuration.Items.Count - 1] = value;
EasyDuration.SelectedIndex = EasyDuration.Items.Count - 1;
CustomDuration.Text = m_values[EasyDuration.Items.Count - 1];
if (ValueChanged != null)
ValueChanged(this, null);
}
}
}
}
@@ -1,209 +0,0 @@
<?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>
<data name="EasyDuration.Items" xml:space="preserve">
<value>Each day</value>
</data>
<data name="EasyDuration.Items1" xml:space="preserve">
<value>Each week</value>
</data>
<data name="EasyDuration.Items2" xml:space="preserve">
<value>Each second week</value>
</data>
<data name="EasyDuration.Items3" xml:space="preserve">
<value>Each month</value>
</data>
<data name="EasyDuration.Items4" xml:space="preserve">
<value>Custom ...</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="EasyDuration.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="EasyDuration.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="EasyDuration.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;EasyDuration.Name" xml:space="preserve">
<value>EasyDuration</value>
</data>
<data name="&gt;&gt;EasyDuration.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;EasyDuration.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;EasyDuration.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 21</value>
</data>
<data name="&gt;&gt;errorProvider.Name" xml:space="preserve">
<value>errorProvider</value>
</data>
<data name="&gt;&gt;errorProvider.Type" xml:space="preserve">
<value>System.Windows.Forms.ErrorProvider, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>DurationEditor</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="CustomDuration.Error" xml:space="preserve">
<value>s</value>
</data>
<data name="CustomDuration.Location" type="System.Drawing.Point, System.Drawing">
<value>136, 0</value>
</data>
<data name="CustomDuration.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 20</value>
</data>
<data name="CustomDuration.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="CustomDuration.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;CustomDuration.Name" xml:space="preserve">
<value>CustomDuration</value>
</data>
<data name="&gt;&gt;CustomDuration.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CustomDuration.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;CustomDuration.ZOrder" xml:space="preserve">
<value>0</value>
</data>
</root>
-184
View File
@@ -1,184 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class FilterDialog
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FilterDialog));
this.Inclusive = new System.Windows.Forms.RadioButton();
this.Exclusive = new System.Windows.Forms.RadioButton();
this.label1 = new System.Windows.Forms.Label();
this.FilterText = new System.Windows.Forms.TextBox();
this.OKBtn = new System.Windows.Forms.Button();
this.CancelBtn = new System.Windows.Forms.Button();
this.IsRegExp = new System.Windows.Forms.CheckBox();
this.BrowseFolderButton = new System.Windows.Forms.Button();
this.BrowseFileButton = new System.Windows.Forms.Button();
this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
this.HelpLink = new System.Windows.Forms.LinkLabel();
this.HelpImage = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.HelpImage)).BeginInit();
this.SuspendLayout();
//
// Inclusive
//
resources.ApplyResources(this.Inclusive, "Inclusive");
this.Inclusive.Checked = true;
this.Inclusive.Name = "Inclusive";
this.Inclusive.TabStop = true;
this.Inclusive.UseVisualStyleBackColor = true;
//
// Exclusive
//
resources.ApplyResources(this.Exclusive, "Exclusive");
this.Exclusive.Name = "Exclusive";
this.Exclusive.UseVisualStyleBackColor = true;
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// FilterText
//
resources.ApplyResources(this.FilterText, "FilterText");
this.FilterText.Name = "FilterText";
this.FilterText.TextChanged += new System.EventHandler(this.FilterText_TextChanged);
//
// OKBtn
//
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// CancelBtn
//
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.CancelBtn, "CancelBtn");
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// IsRegExp
//
resources.ApplyResources(this.IsRegExp, "IsRegExp");
this.IsRegExp.Checked = true;
this.IsRegExp.CheckState = System.Windows.Forms.CheckState.Checked;
this.IsRegExp.Name = "IsRegExp";
this.IsRegExp.UseVisualStyleBackColor = true;
//
// BrowseFolderButton
//
resources.ApplyResources(this.BrowseFolderButton, "BrowseFolderButton");
this.BrowseFolderButton.Image = global::Duplicati.GUI.Properties.Resources.FolderOpen;
this.BrowseFolderButton.Name = "BrowseFolderButton";
this.BrowseFolderButton.UseVisualStyleBackColor = true;
this.BrowseFolderButton.Click += new System.EventHandler(this.BrowseFolderButton_Click);
//
// BrowseFileButton
//
resources.ApplyResources(this.BrowseFileButton, "BrowseFileButton");
this.BrowseFileButton.Name = "BrowseFileButton";
this.BrowseFileButton.UseVisualStyleBackColor = true;
this.BrowseFileButton.Click += new System.EventHandler(this.BrowseFileButton_Click);
//
// folderBrowserDialog
//
resources.ApplyResources(this.folderBrowserDialog, "folderBrowserDialog");
this.folderBrowserDialog.ShowNewFolderButton = false;
//
// openFileDialog
//
this.openFileDialog.AddExtension = false;
this.openFileDialog.CheckFileExists = false;
this.openFileDialog.CheckPathExists = false;
this.openFileDialog.DereferenceLinks = false;
resources.ApplyResources(this.openFileDialog, "openFileDialog");
this.openFileDialog.SupportMultiDottedExtensions = true;
this.openFileDialog.ValidateNames = false;
//
// HelpLink
//
resources.ApplyResources(this.HelpLink, "HelpLink");
this.HelpLink.Name = "HelpLink";
this.HelpLink.TabStop = true;
this.HelpLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.HelpLink_LinkClicked);
//
// HelpImage
//
this.HelpImage.Cursor = System.Windows.Forms.Cursors.Hand;
this.HelpImage.Image = global::Duplicati.GUI.Properties.Resources.help;
resources.ApplyResources(this.HelpImage, "HelpImage");
this.HelpImage.Name = "HelpImage";
this.HelpImage.TabStop = false;
this.HelpImage.Click += new System.EventHandler(this.HelpImage_Click);
//
// FilterDialog
//
this.AcceptButton = this.OKBtn;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.Controls.Add(this.HelpImage);
this.Controls.Add(this.HelpLink);
this.Controls.Add(this.BrowseFileButton);
this.Controls.Add(this.BrowseFolderButton);
this.Controls.Add(this.FilterText);
this.Controls.Add(this.IsRegExp);
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.OKBtn);
this.Controls.Add(this.label1);
this.Controls.Add(this.Exclusive);
this.Controls.Add(this.Inclusive);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "FilterDialog";
this.Activated += new System.EventHandler(this.FilterDialog_Activated);
this.Load += new System.EventHandler(this.FilterDialog_Load);
((System.ComponentModel.ISupportInitialize)(this.HelpImage)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.RadioButton Inclusive;
private System.Windows.Forms.RadioButton Exclusive;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox FilterText;
private System.Windows.Forms.Button OKBtn;
private System.Windows.Forms.Button CancelBtn;
private System.Windows.Forms.CheckBox IsRegExp;
private System.Windows.Forms.Button BrowseFolderButton;
private System.Windows.Forms.Button BrowseFileButton;
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
private System.Windows.Forms.OpenFileDialog openFileDialog;
private System.Windows.Forms.LinkLabel HelpLink;
private System.Windows.Forms.PictureBox HelpImage;
}
}
@@ -1,186 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Duplicati.Datamodel;
namespace Duplicati.GUI.HelperControls
{
public partial class FilterDialog : Form
{
public class FilterEntry
{
public FilterEntry(bool include, string filter, string globbing)
{
this.Include = include;
this.Filter = filter;
this.Globbing = globbing;
}
public string Filter;
public bool Include;
public string Globbing;
public string DisplayValue { get { return string.IsNullOrEmpty(this.Globbing) ? this.Filter : this.Globbing; } }
public string ImageKey
{
get
{
return
(string.IsNullOrEmpty(this.Globbing) ? "regexp" : "globbing")
+ "-" +
(this.Include ? "include" : "exclude");
}
}
public override string ToString()
{
return this.DisplayValue;
}
public ListViewItem CreateListViewItem()
{
ListViewItem lvi = new ListViewItem(this.DisplayValue, this.ImageKey);
lvi.Tag = this;
return lvi;
}
}
FilterEntry m_filter;
public FilterDialog(FilterEntry filter)
: this()
{
m_filter = filter;
}
public FilterEntry Filter
{
get { return m_filter; }
}
private FilterDialog()
{
InitializeComponent();
}
private void OKBtn_Click(object sender, EventArgs e)
{
string filter;
string globbing;
if (IsRegExp.Checked)
{
try
{
new System.Text.RegularExpressions.Regex(FilterText.Text);
}
catch (Exception ex)
{
MessageBox.Show(this, string.Format(Strings.FilterDialog.InvalidRegExpMessage, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
filter = FilterText.Text;
globbing = null;
}
else
{
filter = Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(FilterText.Text);
globbing = FilterText.Text;
}
m_filter = new FilterEntry(Inclusive.Checked, filter, globbing);
this.DialogResult = DialogResult.OK;
this.Close();
}
private void FilterDialog_Load(object sender, EventArgs e)
{
Inclusive.Checked = m_filter.Include;
Exclusive.Checked = !m_filter.Include;
FilterText.Text = m_filter.Filter;
if (string.IsNullOrEmpty(m_filter.Globbing))
{
if (string.IsNullOrEmpty(m_filter.Filter))
{
//New filter is default globbing
IsRegExp.Checked = false;
FilterText.Text = "";
}
else
{
IsRegExp.Checked = true;
FilterText.Text = m_filter.Filter;
}
}
else
{
IsRegExp.Checked = false;
FilterText.Text = m_filter.Globbing;
}
try { FilterText.Focus(); }
catch { }
}
private void BrowseFolderButton_Click(object sender, EventArgs e)
{
if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK)
if (IsRegExp.Checked)
FilterText.Text = Duplicati.Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(Duplicati.Library.Utility.Utility.AppendDirSeparator(folderBrowserDialog.SelectedPath));
else
FilterText.Text = Duplicati.Library.Utility.Utility.AppendDirSeparator(folderBrowserDialog.SelectedPath);
}
private void BrowseFileButton_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog(this) == DialogResult.OK)
if (IsRegExp.Checked)
FilterText.Text = Duplicati.Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(openFileDialog.FileName);
else
FilterText.Text = openFileDialog.FileName;
}
private void HelpImage_Click(object sender, EventArgs e)
{
Duplicati.Library.Utility.UrlUtillity.OpenUrl("http://code.google.com/p/duplicati/wiki/FilterUsage");
}
private void HelpLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
HelpImage_Click(sender, e);
}
private void FilterText_TextChanged(object sender, EventArgs e)
{
OKBtn.Enabled = FilterText.Text!= null && FilterText.Text.Trim().Length > 0;
}
private void FilterDialog_Activated(object sender, EventArgs e)
{
try { FilterText.Focus(); }
catch { }
}
}
}
@@ -1,453 +0,0 @@
<?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>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Inclusive.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="Inclusive.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="Inclusive.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 17</value>
</data>
<data name="Inclusive.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="Inclusive.Text" xml:space="preserve">
<value>Include files matching the filter</value>
</data>
<data name="&gt;&gt;Inclusive.Name" xml:space="preserve">
<value>Inclusive</value>
</data>
<data name="&gt;&gt;Inclusive.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Inclusive.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Inclusive.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="Exclusive.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="Exclusive.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 32</value>
</data>
<data name="Exclusive.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 17</value>
</data>
<data name="Exclusive.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="Exclusive.Text" xml:space="preserve">
<value>Exclude files matching the filter</value>
</data>
<data name="&gt;&gt;Exclusive.Name" xml:space="preserve">
<value>Exclusive</value>
</data>
<data name="&gt;&gt;Exclusive.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Exclusive.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Exclusive.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 64</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>29, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Filter</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="FilterText.Location" type="System.Drawing.Point, System.Drawing">
<value>56, 64</value>
</data>
<data name="FilterText.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 20</value>
</data>
<data name="FilterText.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;FilterText.Name" xml:space="preserve">
<value>FilterText</value>
</data>
<data name="&gt;&gt;FilterText.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FilterText.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;FilterText.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="OKBtn.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="OKBtn.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 96</value>
</data>
<data name="OKBtn.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="OKBtn.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="OKBtn.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="&gt;&gt;OKBtn.Name" xml:space="preserve">
<value>OKBtn</value>
</data>
<data name="&gt;&gt;OKBtn.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;OKBtn.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;OKBtn.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="CancelBtn.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 96</value>
</data>
<data name="CancelBtn.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="CancelBtn.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="CancelBtn.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;CancelBtn.Name" xml:space="preserve">
<value>CancelBtn</value>
</data>
<data name="&gt;&gt;CancelBtn.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CancelBtn.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;CancelBtn.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="IsRegExp.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="IsRegExp.Location" type="System.Drawing.Point, System.Drawing">
<value>224, 48</value>
</data>
<data name="IsRegExp.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 17</value>
</data>
<data name="IsRegExp.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="IsRegExp.Text" xml:space="preserve">
<value>Filter is regular expression</value>
</data>
<data name="&gt;&gt;IsRegExp.Name" xml:space="preserve">
<value>IsRegExp</value>
</data>
<data name="&gt;&gt;IsRegExp.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;IsRegExp.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;IsRegExp.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BrowseFolderButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BrowseFolderButton.Location" type="System.Drawing.Point, System.Drawing">
<value>328, 64</value>
</data>
<data name="BrowseFolderButton.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="BrowseFolderButton.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Name" xml:space="preserve">
<value>BrowseFolderButton</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="BrowseFileButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BrowseFileButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BrowseFileButton.Location" type="System.Drawing.Point, System.Drawing">
<value>352, 64</value>
</data>
<data name="BrowseFileButton.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="BrowseFileButton.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="BrowseFileButton.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;BrowseFileButton.Name" xml:space="preserve">
<value>BrowseFileButton</value>
</data>
<data name="&gt;&gt;BrowseFileButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BrowseFileButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BrowseFileButton.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="folderBrowserDialog.Description" xml:space="preserve">
<value>Select the folder path to use for the filter</value>
</data>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>186, 17</value>
</metadata>
<data name="openFileDialog.Filter" xml:space="preserve">
<value>All files (*.*)|*.*</value>
</data>
<data name="openFileDialog.Title" xml:space="preserve">
<value>Select the file to use for the filter</value>
</data>
<data name="HelpLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="HelpLink.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 8</value>
</data>
<data name="HelpLink.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 13</value>
</data>
<data name="HelpLink.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="HelpLink.Text" xml:space="preserve">
<value>Filter help</value>
</data>
<data name="&gt;&gt;HelpLink.Name" xml:space="preserve">
<value>HelpLink</value>
</data>
<data name="&gt;&gt;HelpLink.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;HelpLink.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;HelpLink.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="HelpImage.Location" type="System.Drawing.Point, System.Drawing">
<value>360, 8</value>
</data>
<data name="HelpImage.Size" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="HelpImage.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;HelpImage.Name" xml:space="preserve">
<value>HelpImage</value>
</data>
<data name="&gt;&gt;HelpImage.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;HelpImage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;HelpImage.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>389, 126</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>FilterDialog</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Name" xml:space="preserve">
<value>folderBrowserDialog</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;openFileDialog.Name" xml:space="preserve">
<value>openFileDialog</value>
</data>
<data name="&gt;&gt;openFileDialog.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FilterDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-282
View File
@@ -1,282 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class FilterEditor
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FilterEditor));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.listView = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.AddFilterButton = new System.Windows.Forms.ToolStripButton();
this.RemoveFilterButton = new System.Windows.Forms.ToolStripButton();
this.EditFilterButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.IncludeFolderButton = new System.Windows.Forms.ToolStripButton();
this.ExcludeFolderButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.MoveFilterUpButton = new System.Windows.Forms.ToolStripButton();
this.MoveFilterDownButton = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.MoveFilterTopButton = new System.Windows.Forms.ToolStripButton();
this.MoveFilterBottomButton = new System.Windows.Forms.ToolStripButton();
this.HelpButton = new System.Windows.Forms.ToolStripButton();
this.btnTestSearch = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.FilenameTester = new System.Windows.Forms.TextBox();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.TestResults = new System.Windows.Forms.PictureBox();
this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
this.groupBox1.SuspendLayout();
this.toolStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.TestResults)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.listView);
this.groupBox1.Controls.Add(this.toolStrip1);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// listView
//
this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
resources.ApplyResources(this.listView, "listView");
this.listView.FullRowSelect = true;
this.listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listView.Name = "listView";
this.listView.SmallImageList = this.imageList;
this.listView.UseCompatibleStateImageBehavior = false;
this.listView.View = System.Windows.Forms.View.Details;
this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
this.listView.DoubleClick += new System.EventHandler(this.listView_DoubleClick);
//
// columnHeader1
//
resources.ApplyResources(this.columnHeader1, "columnHeader1");
//
// imageList
//
this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
this.imageList.Images.SetKeyName(0, "globbing-include");
this.imageList.Images.SetKeyName(1, "globbing-exclude");
this.imageList.Images.SetKeyName(2, "regexp-include");
this.imageList.Images.SetKeyName(3, "regexp-exclude");
//
// toolStrip1
//
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.AddFilterButton,
this.RemoveFilterButton,
this.EditFilterButton,
this.toolStripSeparator3,
this.IncludeFolderButton,
this.ExcludeFolderButton,
this.toolStripSeparator1,
this.MoveFilterUpButton,
this.MoveFilterDownButton,
this.toolStripSeparator2,
this.MoveFilterTopButton,
this.MoveFilterBottomButton,
this.HelpButton});
resources.ApplyResources(this.toolStrip1, "toolStrip1");
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
//
// AddFilterButton
//
this.AddFilterButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.AddFilterButton, "AddFilterButton");
this.AddFilterButton.Name = "AddFilterButton";
this.AddFilterButton.Click += new System.EventHandler(this.AddFilterButton_Click);
//
// RemoveFilterButton
//
this.RemoveFilterButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.RemoveFilterButton, "RemoveFilterButton");
this.RemoveFilterButton.Name = "RemoveFilterButton";
this.RemoveFilterButton.Click += new System.EventHandler(this.RemoveFilterButton_Click);
//
// EditFilterButton
//
this.EditFilterButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.EditFilterButton, "EditFilterButton");
this.EditFilterButton.Name = "EditFilterButton";
this.EditFilterButton.Click += new System.EventHandler(this.EditFilterButton_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
//
// IncludeFolderButton
//
this.IncludeFolderButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.IncludeFolderButton.Image = global::Duplicati.GUI.Properties.Resources.AddedFolder;
resources.ApplyResources(this.IncludeFolderButton, "IncludeFolderButton");
this.IncludeFolderButton.Name = "IncludeFolderButton";
this.IncludeFolderButton.Click += new System.EventHandler(this.IncludeFolderButton_Click);
//
// ExcludeFolderButton
//
this.ExcludeFolderButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.ExcludeFolderButton.Image = global::Duplicati.GUI.Properties.Resources.DeletedFolder;
resources.ApplyResources(this.ExcludeFolderButton, "ExcludeFolderButton");
this.ExcludeFolderButton.Name = "ExcludeFolderButton";
this.ExcludeFolderButton.Click += new System.EventHandler(this.ExcludeFolderButton_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
//
// MoveFilterUpButton
//
this.MoveFilterUpButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.MoveFilterUpButton, "MoveFilterUpButton");
this.MoveFilterUpButton.Name = "MoveFilterUpButton";
this.MoveFilterUpButton.Click += new System.EventHandler(this.MoveFilterUpButton_Click);
//
// MoveFilterDownButton
//
this.MoveFilterDownButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.MoveFilterDownButton, "MoveFilterDownButton");
this.MoveFilterDownButton.Name = "MoveFilterDownButton";
this.MoveFilterDownButton.Click += new System.EventHandler(this.MoveFilterDownButton_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
//
// MoveFilterTopButton
//
this.MoveFilterTopButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.MoveFilterTopButton, "MoveFilterTopButton");
this.MoveFilterTopButton.Name = "MoveFilterTopButton";
this.MoveFilterTopButton.Click += new System.EventHandler(this.MoveFilterTopButton_Click);
//
// MoveFilterBottomButton
//
this.MoveFilterBottomButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
resources.ApplyResources(this.MoveFilterBottomButton, "MoveFilterBottomButton");
this.MoveFilterBottomButton.Name = "MoveFilterBottomButton";
this.MoveFilterBottomButton.Click += new System.EventHandler(this.MoveFilterBottomButton_Click);
//
// HelpButton
//
this.HelpButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.HelpButton.Image = global::Duplicati.GUI.Properties.Resources.help;
resources.ApplyResources(this.HelpButton, "HelpButton");
this.HelpButton.Name = "HelpButton";
this.HelpButton.Click += new System.EventHandler(this.HelpButton_Click);
//
// btnTestSearch
//
resources.ApplyResources(this.btnTestSearch, "btnTestSearch");
this.btnTestSearch.Name = "btnTestSearch";
this.btnTestSearch.UseVisualStyleBackColor = true;
this.btnTestSearch.Click += new System.EventHandler(this.btnTestSearch_Click);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// FilenameTester
//
resources.ApplyResources(this.FilenameTester, "FilenameTester");
this.FilenameTester.Name = "FilenameTester";
this.FilenameTester.TextChanged += new System.EventHandler(this.FilenameTester_TextChanged);
//
// TestResults
//
resources.ApplyResources(this.TestResults, "TestResults");
this.TestResults.Name = "TestResults";
this.TestResults.TabStop = false;
//
// folderBrowserDialog
//
this.folderBrowserDialog.ShowNewFolderButton = false;
//
// FilterEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.btnTestSearch);
this.Controls.Add(this.TestResults);
this.Controls.Add(this.FilenameTester);
this.Controls.Add(this.label1);
this.Controls.Add(this.groupBox1);
this.Name = "FilterEditor";
this.Load += new System.EventHandler(this.FilterEditor_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.TestResults)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.ListView listView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ImageList imageList;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton AddFilterButton;
private System.Windows.Forms.ToolStripButton RemoveFilterButton;
private System.Windows.Forms.ToolStripButton EditFilterButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton MoveFilterUpButton;
private System.Windows.Forms.ToolStripButton MoveFilterDownButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripButton MoveFilterTopButton;
private System.Windows.Forms.ToolStripButton MoveFilterBottomButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox FilenameTester;
private System.Windows.Forms.PictureBox TestResults;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.ToolStripButton HelpButton;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripButton IncludeFolderButton;
private System.Windows.Forms.ToolStripButton ExcludeFolderButton;
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
private System.Windows.Forms.Button btnTestSearch;
}
}
@@ -1,509 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
/// <summary>
/// The filter editor is used to graphically edit a set of rules for including or excluding files and folders
/// </summary>
public partial class FilterEditor : UserControl
{
private string[] m_basepath;
private string m_filter = "";
private string m_dynamicFilter;
/// <summary>
/// Initializes a new instance of the <see cref="FilterEditor"/> class.
/// </summary>
public FilterEditor()
{
InitializeComponent();
}
/// <summary>
/// Gets the current filter list.
/// </summary>
/// <param name="includeDynamicFilters">if set to <c>true</c> include dynamic filters.</param>
/// <returns>A list of filters</returns>
private List<FilterDialog.FilterEntry> GetFilterList(bool includeDynamicFilters)
{
List<FilterDialog.FilterEntry> filters = new List<FilterDialog.FilterEntry>();
foreach (ListViewItem lvi in listView.Items)
filters.Add(lvi.Tag as FilterDialog.FilterEntry);
if (includeDynamicFilters && !string.IsNullOrEmpty(m_dynamicFilter))
{
List<KeyValuePair<bool, string>> tmp1 = Library.Utility.FilenameFilter.DecodeFilter(m_dynamicFilter);
List<FilterDialog.FilterEntry> tmp2 = new List<FilterDialog.FilterEntry>();
foreach (KeyValuePair<bool, string> k in tmp1)
tmp2.Add(new FilterDialog.FilterEntry(k.Key, k.Value, null));
tmp2.AddRange(filters);
filters = tmp2;
}
return filters;
}
private string EncodeAsFilter(List<FilterDialog.FilterEntry> items)
{
List<KeyValuePair<bool, string>> r = new List<KeyValuePair<bool, string>>();
foreach (FilterDialog.FilterEntry f in items)
r.Add(new KeyValuePair<bool, string>(f.Include, f.Filter));
return Duplicati.Library.Utility.FilenameFilter.EncodeAsFilter(r);
}
/// <summary>
/// Gets or sets the filter string as displayed in the UI
/// </summary>
[DefaultValue("")]
public string FilterXml
{
get { return EncodeFilterAsXml(GetFilterList(false)); }
set { m_filter = value; RefreshList(); FilenameTester_TextChanged(null, null); }
}
private string EncodeFilterAsXml(List<FilterDialog.FilterEntry> list)
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
System.Xml.XmlNode root = doc.AppendChild(doc.CreateElement("root"));
foreach (FilterDialog.FilterEntry f in list)
{
System.Xml.XmlNode filter = root.AppendChild(doc.CreateElement("filter"));
filter.Attributes.Append(doc.CreateAttribute("include")).Value = f.Include.ToString();
filter.Attributes.Append(doc.CreateAttribute("filter")).Value = f.Filter;
filter.Attributes.Append(doc.CreateAttribute("globbing")).Value = f.Globbing;
}
return doc.OuterXml;
}
/// <summary>
/// Gets or sets the dynamic filter, which is applied to the test area, but not visible in the list
/// </summary>
[DefaultValue("")]
public string DynamicFilter
{
get { return m_dynamicFilter; }
set { m_dynamicFilter = value; FilenameTester_TextChanged(null, null); }
}
/// <summary>
/// Gets or sets the list of source folders
/// </summary>
[DefaultValue(null)]
public string[] BasePath
{
get { return m_basepath; }
set { m_basepath = value; FilenameTester_TextChanged(null, null); }
}
/// <summary>
/// Refreshes the UI with the values found in the filter variable
/// </summary>
private void RefreshList()
{
listView.Items.Clear();
foreach (FilterDialog.FilterEntry f in DecodeFilter(m_filter))
listView.Items.Add(f.CreateListViewItem());
if (listView.Items.Count > 0)
listView.Items[0].Selected = true;
}
private List<FilterDialog.FilterEntry> DecodeFilter(string filter)
{
List<FilterDialog.FilterEntry> res = new List<FilterDialog.FilterEntry>();
if (string.IsNullOrEmpty(filter))
return res;
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(filter);
foreach (System.Xml.XmlNode n in doc.SelectNodes("root/filter"))
{
res.Add(new FilterDialog.FilterEntry(
bool.Parse(n.Attributes["include"].Value),
n.Attributes["filter"].Value,
n.Attributes["globbing"].Value
));
}
return res;
}
/// <summary>
/// Handles the TextChanged event of the FilenameTester control.
/// Used to update the status and tooltip to show if the current path is included or excluded
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void FilenameTester_TextChanged(object sender, EventArgs e)
{
//Basic sanity check
if (FilenameTester.Text.Trim().Length == 0 || m_basepath == null || m_basepath.Length == 0 || (m_basepath.Length == 1 && string.IsNullOrEmpty(m_basepath[0])))
{
SetTooltipMessage("");
TestResults.Visible = false;
return;
}
string filename = FilenameTester.Text;
//Prevent exceptions based on invalid input
if (filename.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
{
SetTooltipMessage(string.Format(Strings.FilterEditor.InvalidCharsInFilenameError, filename));
TestResults.Visible = false;
return;
}
try
{
//Certain paths cause exceptions anyway
System.IO.Path.GetFullPath(filename);
}
catch
{
SetTooltipMessage(string.Format(Strings.FilterEditor.InvalidCharsInFilenameError, filename));
TestResults.Visible = false;
return;
}
//System.IO.Path.IsPathRooted returns true for filenames starting with a backslash on windows
if (System.IO.Path.GetFullPath(filename) != filename)
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FilepathIsNotAbsoluteError, filename));
TestResults.Visible = false;
return;
}
//Find the source folder that matches the path entered
string basepath = null;
foreach (string s in m_basepath)
if (filename.StartsWith(Library.Utility.Utility.AppendDirSeparator(s), Library.Utility.Utility.ClientFilenameStringComparision))
{
basepath = s;
break;
}
if (string.IsNullOrEmpty(basepath))
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FilenameIsNotInAnyRootFolder, filename, m_basepath));
TestResults.Visible = false;
return;
}
if (basepath.Equals(filename, Library.Utility.Utility.ClientFilenameStringComparision))
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FolderIsRootFolder, filename));
TestResults.Image = imageList.Images[0];
TestResults.Visible = true;
return;
}
//Build a list of parent folders to check
List<string> parentFolders = new List<string>();
string folder = filename;
while (folder.Length > basepath.Length)
{
folder = System.IO.Path.GetDirectoryName(folder);
parentFolders.Add(Duplicati.Library.Utility.Utility.AppendDirSeparator(folder));
}
//Work from the source towards the path
parentFolders.Reverse();
//Test if any of the parent folders are excluded
string compact = EncodeAsFilter(GetFilterList(true));
Library.Utility.FilenameFilter fn = new Duplicati.Library.Utility.FilenameFilter(Duplicati.Library.Utility.FilenameFilter.DecodeFilter(compact));
Library.Utility.IFilenameFilter match;
foreach (string s in parentFolders)
{
//Skip rootpath
if (basepath.Equals(s, Library.Utility.Utility.ClientFilenameStringComparision))
continue;
if (!fn.ShouldInclude(basepath, s, out match))
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FolderIsExcluded, s, ((Library.Utility.RegularExpressionFilter)match).Expression.ToString()));
TestResults.Image = imageList.Images[1];
TestResults.Visible = true;
return;
}
}
//Update image based on the inclusion status
TestResults.Image = imageList.Images[fn.ShouldInclude(basepath, filename, out match) ? 0 : 1];
//Set the tooltip to inform the user of the result
if (match == null)
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsIncludedDefault, filename));
else if (match.Include)
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsIncluded, filename, ((Library.Utility.RegularExpressionFilter)match).Expression.ToString()));
else
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsExcluded, filename, ((Library.Utility.RegularExpressionFilter)match).Expression.ToString()));
TestResults.Visible = true;
}
/// <summary>
/// Sets the tooltip message.
/// </summary>
/// <param name="message">The message to show as the tooltip.</param>
private void SetTooltipMessage(string message)
{
toolTip.SetToolTip(FilenameTester, message);
toolTip.SetToolTip(label1, message);
toolTip.SetToolTip(TestResults, message);
if (TestResults != null && this.Visible)
toolTip.Show(message, TestResults, 5000);
}
/// <summary>
/// Handles the SelectedIndexChanged event of the listView control.
/// Used to update the enabled state of the buttons.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void listView_SelectedIndexChanged(object sender, EventArgs e)
{
RemoveFilterButton.Enabled =
EditFilterButton.Enabled = listView.SelectedItems.Count == 1;
MoveFilterUpButton.Enabled =
MoveFilterTopButton.Enabled = listView.SelectedItems.Count == 1 && listView.SelectedItems[0].Index != 0;
MoveFilterDownButton.Enabled =
MoveFilterBottomButton.Enabled = listView.SelectedItems.Count == 1 && listView.SelectedItems[0].Index != listView.Items.Count - 1;
}
/// <summary>
/// Handles the Click event of the RemoveFilterButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void RemoveFilterButton_Click(object sender, EventArgs e)
{
while (listView.SelectedItems.Count > 0)
listView.Items.Remove(listView.SelectedItems[0]);
FilenameTester_TextChanged(sender, e);
}
/// <summary>
/// Handles the Click event of the EditFilterButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void EditFilterButton_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1 && listView.SelectedItems[0].Tag is FilterDialog.FilterEntry)
{
FilterDialog dlg = new FilterDialog((FilterDialog.FilterEntry)listView.SelectedItems[0].Tag);
if (dlg.ShowDialog(this) == DialogResult.OK)
{
listView.SelectedItems[0].Tag = dlg.Filter;
listView.SelectedItems[0].Text = dlg.Filter.DisplayValue;
listView.SelectedItems[0].ImageKey = dlg.Filter.ImageKey;
FilenameTester_TextChanged(sender, e);
}
}
}
/// <summary>
/// Handles the Click event of the MoveFilterUpButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void MoveFilterUpButton_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1)
{
ListViewItem lvi = listView.SelectedItems[0];
int index = listView.SelectedItems[0].Index;
listView.Items.RemoveAt(index);
listView.Items.Insert(index - 1, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Click event of the MoveFilterDownButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void MoveFilterDownButton_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1)
{
ListViewItem lvi = listView.SelectedItems[0];
int index = listView.SelectedItems[0].Index;
listView.Items.RemoveAt(index);
listView.Items.Insert(index + 1, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Click event of the MoveFilterTopButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void MoveFilterTopButton_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1)
{
ListViewItem lvi = listView.SelectedItems[0];
int index = listView.SelectedItems[0].Index;
listView.Items.RemoveAt(index);
listView.Items.Insert(0, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Click event of the MoveFilterBottomButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void MoveFilterBottomButton_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count == 1)
{
ListViewItem lvi = listView.SelectedItems[0];
int index = listView.SelectedItems[0].Index;
listView.Items.RemoveAt(index);
listView.Items.Insert(listView.Items.Count, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Click event of the AddFilterButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void AddFilterButton_Click(object sender, EventArgs e)
{
FilterDialog dlg = new FilterDialog(new FilterDialog.FilterEntry(false, null, null));
if (dlg.ShowDialog(this) == DialogResult.OK)
{
listView.Items.Add(dlg.Filter.CreateListViewItem());
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Load event of the FilterEditor control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void FilterEditor_Load(object sender, EventArgs e)
{
if (listView.Items.Count != 0)
listView.Items[0].Selected = true;
}
/// <summary>
/// Handles the DoubleClick event of the listView control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void listView_DoubleClick(object sender, EventArgs e)
{
if (EditFilterButton.Enabled)
EditFilterButton.PerformClick();
}
/// <summary>
/// Handles the Click event of the help button
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void HelpButton_Click(object sender, EventArgs e)
{
Duplicati.Library.Utility.UrlUtillity.OpenUrl("http://code.google.com/p/duplicati/wiki/FilterUsage");
}
/// <summary>
/// Handles the Click event of the IncludeFolderButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void IncludeFolderButton_Click(object sender, EventArgs e)
{
folderBrowserDialog.Description = Strings.FilterEditor.IncludeFolderBrowseTitle;
if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK)
{
string path = Duplicati.Library.Utility.Utility.AppendDirSeparator(folderBrowserDialog.SelectedPath);
FilterDialog.FilterEntry fe = new FilterDialog.FilterEntry(true, Duplicati.Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(path), path);
listView.Items.Add(fe.CreateListViewItem());
FilenameTester_TextChanged(sender, e);
}
}
/// <summary>
/// Handles the Click event of the ExcludeFolderButton control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void ExcludeFolderButton_Click(object sender, EventArgs e)
{
folderBrowserDialog.Description = Strings.FilterEditor.ExcludeFolderBrowseTitle;
if (folderBrowserDialog.ShowDialog(this) == DialogResult.OK)
{
string path = Duplicati.Library.Utility.Utility.AppendDirSeparator(folderBrowserDialog.SelectedPath);
FilterDialog.FilterEntry fe = new FilterDialog.FilterEntry(false, Duplicati.Library.Utility.FilenameFilter.ConvertGlobbingToRegExp(path), path);
listView.Items.Add(fe.CreateListViewItem());
FilenameTester_TextChanged(sender, e);
}
}
private void btnTestSearch_Click(object sender, EventArgs e) {
TestSearchSelection dlg = new TestSearchSelection();
dlg.Paths = BasePath;
dlg.Filters = GetFilterList(false);
dlg.DynamicFilters = m_dynamicFilter;
if (dlg.ShowDialog() == DialogResult.OK)
{
listView.Items.Clear();
foreach (var filter in dlg.Filters)
listView.Items.Add(filter.CreateListViewItem());
}
}
}
}
@@ -1,742 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
<value>420</value>
</data>
<data name="listView.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="listView.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 41</value>
</data>
<data name="listView.Size" type="System.Drawing.Size, System.Drawing">
<value>498, 164</value>
</data>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>20, 17</value>
</metadata>
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACg
CwAAAk1TRnQBSQFMAgEBBAEAAUQBAAFEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wA7AAMTARoBLAIr
AUMBLAIrAUMBLAIrAUPwAANVAbIBUQHiAYwB/wFQAeEBiQH/AUIByAFqAf/wAANVAbIBRQHUAWUB/wE8
AcsBTAH/AUIByQFqAf9cAAEoAaQBKAH/ASgBpAEoAf8MAAEtAZoBLgH2ASgBpAEoAf8BKgGiASsB/QEo
AaQBKAH/ASIBJgEiATEIAAMIAQsBKAGkASgB/wEoAaQBKAH/BAACKAGkAf8CKAGkAf8MAAItAZ0B9gIo
AaQB/wIqAaMB/QIoAaQB/wIiASYBMQgAAggBCQELAigBpAH/AigBpAH/GAADVQGyAU0B2gFvAf8BPQHM
AU4B/wFCAcoBagH/XAABQgHIAWUB/wFNAdgBfgH/CAABJgErASYBOAFGAdEBaQH/AT4BxQFXAf8BLwGW
ATMB7gFNAdwBeAH/ASoBpwEtAf8IAAEqAaIBKwH9AVsB6wGfAf8BKAGkASgB/wQAAkoByAH/AlsB2gH/
CAACJgErATgCUAHTAf8CRQHGAf8BLwExAZgB7gJZAd0B/wIrAacB/wgAAioBowH9Am0B7AH/AikBogH+
GAADVQGyAVkB4wGBAf8BSQHUAVsB/wFDAcsBawH/XAABQQHHAWIB/wFMAdYBeQH/CAABKAGkASgB/wFK
AdkBcQH/ATABmAEzAfEEAAEtAawBNAH/AUsB2gFzAf8BOgGHAT0BzgFAAWEBRAGMAVIB4AGIAf8BPAHA
AVYB/wEMAQ0BDAEQBAACSgHIAf8CWgHYAf8IAAIoAaQB/wFVAVQB2gH/ATABMQGaAfEEAAIvAa0B/wJX
AdwB/wE6AT0BiAHOAUABQgFhAYwCYgHjAf8CRAHCAf8CDAENARAIAAE+AZgBPAH+AUwB0wFxAf8BTAHU
AXMB/wFNAdQBcwH/AUwB0wFyAf8BZQHqAYQB/wFYAd8BawH/AVYB4wGQAf8BQwHKAWkB/wFBAcgBaAH/
AUABxgFmAf8BQAHFAWYB/wMwAUwMAANIAYQCSAHTAf8CSgHUAf8CTAHUAf8CTQHTAf8CTAHQAf8CSQHM
Af8CRQHHAf8CQQHDAf8CPwHCAf8CPwHCAf8CLgGoAf8MAAFBAcYBYQH/AUsB1QF3Af8BKQExASkCPwF0
AUUBrwFGAdIBaAH/AToBwAFNAf8BDgEPAQ4BEwQAATUBQgE3AVoBQQHMAV4B/wE9AcUBVgH/ATUBtwFF
Af8BUgHgAYcB/wFBAW0BRQGhCAACSgHIAf8CWAHXAf8CKQExAj8BQgF2Aa8CTwHUAf8CPwHCAf8CDgEP
ARMEAAE1ATYBQwFaAkoBzgH/AkUBxwH/AjoBuAH/AmIB4wH/AUEBRAFvAaEMAAFBAZ0BQQH+AWEB2gF0
Af8BagHkAYEB/wFwAewBhgH/AXMB8AGKAf8BcAHvAYcB/wFnAeoBgQH/AVoB4QFuAf8BTQHXAV8B/wFB
Ac4BUgH/ATwBywFMAf8BTwHgAYcB/wMwAUwMAANIAYQCWgHXAf8CYQHWAf8CbQHkAf8CdQHuAf8CdQHw
Af8CaQHpAf8CVgHcAf8CRgHQAf8CQQHMAf8CQQHMAf8COAG3Af8MAAFAAcYBYAH/AVUB5QGPAf8BUQHg
AYQB/wFNAdwBeAH/AUMBzgFgAf8BNAGTATcB5gwAATIBlgE1AesBSwHZAXIB/wFPAd4BfQH/ASgBpAEo
Af8MAAJKAccB/wJnAecB/wJgAeIB/wJZAd4B/wFMAUsB0AH/ATQBNgGUAeYMAAEyATUBlwHrAlcB2wH/
Al0B4AH/AigBpAH/EAABQQGeAUEB/gFaAdYBgQH/AWIB3wGFAf8BaQHnAY0B/wFuAe4BkwH/AXMB7wGK
Af8BcQHwAYgB/wFpAewBhgH/AV4B5wGCAf8BUwHeAXUB/wFJAdcBagH/AVAB4QGKAf8DMAFMDAADSAGE
AlsB2gH/AmIB3QH/AmwB6AH/AnIB8AH/AnIB8gH/AmkB7AH/AloB4gH/AkwB2AH/AkcB1AH/AkcB1AH/
AjgBtwH/DAABQAHGAWAB/wFKAdUBdQH/ASgBpAEoAf8BKAGlASkB/wFHAdUBaQH/ATgBvwFKAf8DCQEM
CAABPwFcAUQBhQFHAdQBagH/AU8B3gF8Af8BLQGeAS8B9wwAAkoBxwH/AlcB1gH/AigBpAH/AikBpQH/
AVIBUQHXAf8CPgHBAf8DCQEMCAABPwFBAV4BhQJSAdYB/wJdAeAB/wEtAS4BnwH3EAABVgJVAbEDVQG1
A1UBtQNVAbUBVwFVAU0B6AFuAe0BkwH/AXMB7wGJAf8BTwHWAYEB/wNVAbUDVQG1A1UBtQNVAbUDGAEh
DAADLQFGA1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1A1UBtQFWAlUBtAwAAUEBxgFg
Af8BSgHVAXYB/wgAATEBswE8Af8BRgHVAWYB/wE2AUYBOAFfBAADBAEGATEBswE8Af8BSgHYAXAB/wE7
AcEBUwH/AU4B2wF9Af8BPQFWAUEBeQgAAkoByAH/AlgB1wH/CAACNQG0Af8CUAHXAf8BNgE3AUcBXwQA
AwQBBgI1AbQB/wJXAdsB/wJDAcMB/wJdAd4B/wE9AUABVwF5HAADVQGyAWcB5QGLAf8BbgHoAYMB/wFP
AdYBgQH/XAABQQHHAWIB/wFLAdYBeAH/AUEBcQFBAZ8BOgGGAUAB0AFDAc4BYwH/AUYB0wFnAf8BJgEr
ASYBOAQAASkBnQErAfsBSgHZAXEB/wEoAaQBKAH/AT8BeAFEAbQBVAHjAYwB/wE1AbYBRQH/AwMBBAQA
AkoByAH/AloB2AH/AkEBcQGfAToBPgGJAdACTgHQAf8CUQHVAf8CJgErATgEAAEpASoBngH7AlcB3AH/
AigBpAH/AT8BQgF6AbQCZgHmAf8COgG3Af8DAwEEGAADVQGyAV4B2wGBAf8BZQHeAYAB/wFOAdUBdwH/
XAABQgHIAWQB/wFZAekBmQH/AVUB5QGPAf8BUgHhAYYB/wFOAdwBewH/ASkBoAEqAf4EAAE/AV0BQwGE
AUgB1gFuAf8BOAG8AUsB/wEOAQ8BDgETBAABKAGlASkB/wFbAeoBnQH/ASoBnQErAfkEAAJKAcgB/wJs
AesB/wJoAegB/wJjAeQB/wJdAeAB/wIpAaIB/gQAAT8BQQFeAYQCVQHZAf8CPwG+Af8CDgEPARMEAAIp
AaUB/wJtAewB/wEqASsBngH5GAADVQGyAVUB0gF2Af8BWgHTAW0B/wFNAdQBdQH/XAABPgGBAT4BuwE+
AYQBPgG/AT4BhAE+Ab8BPgF8AUMBuwE4AUoBOgFlCAABMQE9ATMBUQE+AYIBPgG/AT0BVgFAAXgIAAER
ARIBEQEXAT4BggE+Ab8BQQF2AUIBrAQAAj4BgQG7Aj4BhAG/Aj4BhAG/AT4BQAF/AbsBOAE5AUoBZQgA
ATEBMgE9AVECPgGCAb8BPQE/AVcBeAgAAhEBEgEXAj4BggG/AkEBeAGsGAADVAGrATABuQE1Af8BMAG4
ATUB/wEuAbUBMQH//wD/ANoAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BAAj/
AfwBPwb/AfwBPwb/AfwBPwL/AZwBGAGcARgB/AE/Av8BmAEYAZgBGAH8AT8C/wGYAYABmAGAAcABAQHA
AQMBgAGBAYABgQHAAQEBwAEDAYEBwwGBAcMBwAEBAcABAwGAAcMBgAHDAcABAQHAAQMBmAGBAZgBgQH8
AT8C/wSAAfwBPwL/AYEBCAGBAQgB/AE/Av8BgwEYAYMBGAH8AT8W/ws=
</value>
</data>
<data name="listView.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;listView.Name" xml:space="preserve">
<value>listView</value>
</data>
<data name="&gt;&gt;listView.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;listView.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;listView.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>3, 16</value>
</metadata>
<data name="AddFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIMSURBVDhPjZPvS1NhFMf9S5bOeb0rJ5orKElRQ4JehGQx
bBSTWQvsml4ql4itDcVYLVySkowKDKEyfFHRjCCWu4lztzbpB4HsdeDf8K3vgd0aa9UDB84995zPc349
VVUVjjfuQUekVYR6Jb8y+55gLY7c64CevIDJdEiE+uH5Q9h91VEZpD+8iIYpB4aSAcTMG5jdimHu8wzu
mjOIb91ENDuJwAuf+NC37Ob6sA2+532Y2BjFVP4aprNhvC+kRQiJ5MZxfUND38pxKBFbKYBpH3zQjMHU
AEazw5jIBREyxlA8idw8xj9ehr45iPNv+rE/4QJjrCyc0Rp0PTkA/5oXWuasQIIp3QLMmXGx8Z8v5UHr
cjMYIwB2uHGhDm3P3Diz2ouhtwFcWfspr4YtwB3jtth5O30IYIxMh2Pih/upE/dzC1ZQJYU9aXmsSgxj
LQCNbNa/jlF4VwoolkBA72o3gukAwhkN08aIxVrMz8oEWBpLKGZgLRgbsm9JQedrFT3rLpw2m+A33BYg
9qUfpzabcMxwoT3pRMsj5VcT2UiOZG/Cge5kHTymgnNfVWgfXCUA/ycVJzL16HqpSP0lYySEi9S+ZId3
3Q5t2w59uxqFnbzIrW89Yjtp1IoPfcs2keup/ga5VNiF0HebCGEEty3WiM8fV7lIZGqNUZs4H12pFqFO
W1naf3ui//ucfwCJ3vHLSjlN7AAAAABJRU5ErkJggg==
</value>
</data>
<data name="AddFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="AddFilterButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="AddFilterButton.Text" xml:space="preserve">
<value>toolStripButton1</value>
</data>
<data name="AddFilterButton.ToolTipText" xml:space="preserve">
<value>Add a new filter</value>
</data>
<data name="RemoveFilterButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="RemoveFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHfSURBVDhPjVPfS1NhGPZvCbpYY1ITm5rMHxETlFYiwkCE
SIc1XYtaY00cBssNwekIm4MKCYIu8yaoq67EC0EQbHVRi5hehGebLfzROk/neccmx+PUDx54z/M+33Pe
9/ver66uxnrnHsTbnk4B41o6A/+mqR7L/T3IhB9hazYm+D7+QLjXNkttow8hPz5eMYk4v5DAn1dJ7C6m
BMUX81DmZ5Dxe/C+2QJqDX9eumzCz3vD+D39BEhE8S81p8PB3BR2ohP4cWcQ1OoMWPaXbjsKIR9KkcdQ
45GqCZJxicmpk37kA6NIO1r07XzSytrsc2D/4YiIEAtXTSqbhdNyRe8tZG9eBfdIFTzh9TYrtjWSSUWr
Qnk6bsRkAErQi1/3h0TLPXI7vCZ+7Dlt2H75HKctZXUFiqMJ6Q6rXLEYfOu6KCRP+rRlMGAZG5obDQq3
e5GLBpGbnSjjmR5sjS1QW22B58ADyV5rxP4NG9SBVsDdBozZD3FXi93tkmOr1FYPkQa8RraRczagNHAJ
qtsKeBp0IMccNdQappLDwcSOy4LSsAl/veeg+s4LGJNjjhrDILEKjicTX69fgOIyY3ekvJFgTO5zl0U0
x45yZTRZGt/EmsMsZgRjcic+pqOP46zP+T9spgnV3QfwFQAAAABJRU5ErkJggg==
</value>
</data>
<data name="RemoveFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="RemoveFilterButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="RemoveFilterButton.Text" xml:space="preserve">
<value>toolStripButton2</value>
</data>
<data name="RemoveFilterButton.ToolTipText" xml:space="preserve">
<value>Remove the selected filter</value>
</data>
<data name="EditFilterButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="EditFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG1SURBVDhPlVPBSgJRFPU3WrTpA1q4jtZSq4igaNXCpbYN
WtaqFkJWhJFUC22GqCEqysrMSMU0MhXDpNJMrdFUpFJcnLyvnpWOQQOHO2/m3XPPue8+lerr8fnC8Hp9
8F9cssjX9E6QpC3wvYqxXKmiWKq0xLHDDbv9pDUJEeQKZQYikvOfkX9zudxIPiRbk3ACnvQzmUgCwSg2
NncgzptgGxxqVsItUGVelcfn3CsIsdsUTnt6EdVo4Oju/k3CFaQyBbbxOpqog6/DoSCcCyZIajU2tNpm
ApIdf3ypE/DEqM+GuxM9qA+iuA5h2qBsgSQ3KoiHnCgeq5GW2hCxDLMmKp4Gt8AVUHWqnDvoZMlPpnbI
4gBTSEqaZoETpOU3ZuFnZUpOrPSy4YrFs38TPKYLoGbld78rZ6z9cLkD2D86x6knpDyVpICOkCRGrgTI
/n68rHYgbOyCxbKGmbllGIxmCJt21sgmC+/lKpj8mkTvoQ5hxwiEqT7odaMYG59gBJR8HrhXbmKdoOZ/
1jCJ+YUlLJqt2N47Y0mhmywitwXcJUvKPeC3jkePx4tGUPcJZOnPm/mfnx/Qo1STSDASFQAAAABJRU5E
rkJggg==
</value>
</data>
<data name="EditFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="EditFilterButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="EditFilterButton.Text" xml:space="preserve">
<value>toolStripButton1</value>
</data>
<data name="EditFilterButton.ToolTipText" xml:space="preserve">
<value>Edit the selected filter</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>6, 25</value>
</data>
<data name="IncludeFolderButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="IncludeFolderButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="IncludeFolderButton.Text" xml:space="preserve">
<value>toolStripButton1</value>
</data>
<data name="IncludeFolderButton.ToolTipText" xml:space="preserve">
<value>Adds an included folder to the list</value>
</data>
<data name="ExcludeFolderButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="ExcludeFolderButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="ExcludeFolderButton.Text" xml:space="preserve">
<value>toolStripButton2</value>
</data>
<data name="ExcludeFolderButton.ToolTipText" xml:space="preserve">
<value>Adds an excluded folder to the list</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>6, 25</value>
</data>
<data name="MoveFilterUpButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="MoveFilterUpButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFZSURBVDhPY2AgAKbenPqfkBqc8klnXP9nnPP433e1j3RD
QJo7HiSDcd5Fn/9dF7uINwSmufpB+v+Gpzn/p7zL/59zzf1/12kiDEHX3ALU3Pm+5P/Mz4UQl+AzBKa5
9mEG2GaY5o4PRWB237vM/yA1WA1B1wyyFYRhmmteZfwvf5b8v+5RxP+UE06ohjjuNftfcz3wf8394P9t
96PAfgZpBOGmt7n/QZpBGkHyBRc8/xeed//vuMEIu0u897iA/QvTXPUi7X/egyiwAe5bbAnHRNiBALAB
IJsrnqeANSffDPhfdifgv+8WJ+IMmPYhC+zfnPuR/xNv+P8Pu+D6P/+GF3EGBO/0/d/3Ovl/1r3w/wnX
/cCafU/bgtMBUS4AGdDyNPp/3DUfuGaSDQCFdsh5Z7DNMAxygc9GR8JhAHbBg0Cwk5Fx7V1f4gxI3psE
9is6BtkevikMwwUAbadPHR9BO40AAAAASUVORK5CYII=
</value>
</data>
<data name="MoveFilterUpButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="MoveFilterUpButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="MoveFilterUpButton.Text" xml:space="preserve">
<value>toolStripButton3</value>
</data>
<data name="MoveFilterUpButton.ToolTipText" xml:space="preserve">
<value>Move the selected filter up</value>
</data>
<data name="MoveFilterDownButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="MoveFilterDownButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF9SURBVDhPlZPbSgJhFIV7pm66soMZosQ0CCp2onHCmLTS
yEPdGFFmBToGBfUS3XUReJF0pCSzRIXSiA4iItYLrNoTM4kmTgMbZuBf31p77/k7Ohoeb8oLW8KslDVh
Ut7tJxwazzd9207N2MpZEMiyWM2PYrPIQXx1YL86AzauUwH4dl95tGIqaYE7M47FggPBFyd2SoJ6QPhh
TBGvld2g2vvwqAdEnnnJmYTLFSdCFc//ABSXxCTcqC1Itfs5B+ZIq24GNDASy4D12jyiVUEdgIkbpbiy
M7WwVHIgVOJgONQ0J4jltqGNd0lr82dN0gYoLgFk8ezTMHwFE3x3RvAXOgiX/eg96ETwLPgDjGQicN0O
NjkH3idBYj7PwpbWg73ugT2tg+O871cs/0nRe1GCkDs5+994uIo2cLkhWFIDYK66W4tliJgWISQNCJd5
TBesmMgy6sX1EOqTelbt3HghKMnIsQZCRt8+dqvbJd7EJMifA2t7JesOKKtqIfoCZo5mLImpLeYAAAAA
SUVORK5CYII=
</value>
</data>
<data name="MoveFilterDownButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="MoveFilterDownButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="MoveFilterDownButton.Text" xml:space="preserve">
<value>toolStripButton4</value>
</data>
<data name="MoveFilterDownButton.ToolTipText" xml:space="preserve">
<value>Move the selected filter down</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>6, 25</value>
</data>
<data name="MoveFilterTopButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="MoveFilterTopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGSSURBVDhPlZPNSwJhEMb9r7xE1kHqYh8gRBmakZJYm5VJ
mBhEB7PMj0ADKSz0kHSKukRJQZ40ychDRnSoFssEqz9gcmZ5daVdthaGPez7/J5n5p1VqRSeaPIelM7I
fu9150C3UoTgTun/EBRP7lWAi9UIsr59+3cIE88F3sCxVQNn6kuARG+UIT2eAjmj2OR5ALP3EVzROswe
ChB/+Foegs5c5AO4tRcwLZWh05aFLnuWQJhkJvkJeEYSwpwdfl4QT1yAbb8GU8kqQQzuMsEtu+8ECQRz
rSRqYwb0kTLVoK8E3ZZMsw1sZT79TRDdchH6/XdU6oGjdgjepcuXB435DMYOeMAkKMb+2QwQPL1wKT8D
dLHHhQFiOUPVJgAhXLpO6SQXB8VSziwBDpFmkKpSyjYIDgzF1gRPg8PDTIhvEjcWCsXGxCtVh/64BXFv
FICVZvSU7lzsjAAEo2jRe9WsUDj/u50+63kbAGPbNit0fdrhE+VNFAPIuSEex8WK86AdEsWW+wUZQCw2
rD7BSOxZEvADn5ifu693HIQAAAAASUVORK5CYII=
</value>
</data>
<data name="MoveFilterTopButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="MoveFilterTopButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="MoveFilterTopButton.Text" xml:space="preserve">
<value>toolStripButton5</value>
</data>
<data name="MoveFilterTopButton.ToolTipText" xml:space="preserve">
<value>Move the selected filter to the top</value>
</data>
<data name="MoveFilterBottomButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="MoveFilterBottomButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGUSURBVDhPlZPLSwJhFMX7q2oRtehBUeEiUnNhY1RSLXyQ
CVGGFiVlJFkpBS5qMRC0aBcYteiFIVJI0QvFonSR2esPOHm/+tSZpsyByzDDPb9z7v1mKipkl9p6iMH1
Z1g9adi8T7AvZmH3v8Ky+Y4Gww7k/T+eO0z7MItZJrYufYmphsWP/wPIjTtzAL2r04eUE7j9MfCiJgb4
dqY7JaGxqrXbmJ49YTUxeVyA1QghCOIjjGKGlT34lgeYfBlQ9S2kIaykoF6OQx1MMJhk/vqB3OwbLxJn
cidxz8wDuqbuoHHeQhtIggwVl0mQ4vhcbHDflxYT0eGJMjpBSGycS6FYXGsIwTy0J3X3rV2hSr8LzXwC
7Z5LtLnOQI20C503CZ0rzmYncKPlCC3OKKtK1VZhkd7gBRPSWdPc3aM3DEJCLm7tDTMYGTWPReAYP5Al
WY1JIMLINds0gUqK+UZ9OQjRKQntoNN2DlV/5G9n+XFwCH04dHwUm3ahGPu3H4MgTbYwm79scX6cwCnb
elnOSokk37xCwycvE6v477beNgAAAABJRU5ErkJggg==
</value>
</data>
<data name="MoveFilterBottomButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="MoveFilterBottomButton.Size" type="System.Drawing.Size, System.Drawing">
<value>23, 22</value>
</data>
<data name="MoveFilterBottomButton.Text" xml:space="preserve">
<value>toolStripButton6</value>
</data>
<data name="MoveFilterBottomButton.ToolTipText" xml:space="preserve">
<value>Move the selected filter to the bottom</value>
</data>
<data name="HelpButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="HelpButton.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 22</value>
</data>
<data name="HelpButton.Text" xml:space="preserve">
<value>Filter help</value>
</data>
<data name="HelpButton.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>TextBeforeImage</value>
</data>
<data name="HelpButton.ToolTipText" xml:space="preserve">
<value>Opens the Duplicati Filter usage Wiki page</value>
</data>
<data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 16</value>
</data>
<data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>498, 25</value>
</data>
<data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="toolStrip1.Text" xml:space="preserve">
<value>toolStrip1</value>
</data>
<data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
<value>toolStrip1</value>
</data>
<data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>504, 208</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Filters</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="btnTestSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnTestSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>369, 213</value>
</data>
<data name="btnTestSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 23</value>
</data>
<data name="btnTestSearch.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="btnTestSearch.Text" xml:space="preserve">
<value>Test Search Selection...</value>
</data>
<data name="&gt;&gt;btnTestSearch.Name" xml:space="preserve">
<value>btnTestSearch</value>
</data>
<data name="&gt;&gt;btnTestSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnTestSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnTestSearch.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 216</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Test a filename:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="FilenameTester.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="FilenameTester.Location" type="System.Drawing.Point, System.Drawing">
<value>85, 214</value>
</data>
<data name="FilenameTester.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 20</value>
</data>
<data name="FilenameTester.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;FilenameTester.Name" xml:space="preserve">
<value>FilenameTester</value>
</data>
<data name="&gt;&gt;FilenameTester.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FilenameTester.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;FilenameTester.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>130, 17</value>
</metadata>
<data name="TestResults.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="TestResults.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="TestResults.Location" type="System.Drawing.Point, System.Drawing">
<value>345, 216</value>
</data>
<data name="TestResults.Size" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="TestResults.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;TestResults.Name" xml:space="preserve">
<value>TestResults</value>
</data>
<data name="&gt;&gt;TestResults.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TestResults.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TestResults.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>227, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>506, 242</value>
</data>
<data name="&gt;&gt;columnHeader1.Name" xml:space="preserve">
<value>columnHeader1</value>
</data>
<data name="&gt;&gt;columnHeader1.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;AddFilterButton.Name" xml:space="preserve">
<value>AddFilterButton</value>
</data>
<data name="&gt;&gt;AddFilterButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;RemoveFilterButton.Name" xml:space="preserve">
<value>RemoveFilterButton</value>
</data>
<data name="&gt;&gt;RemoveFilterButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;EditFilterButton.Name" xml:space="preserve">
<value>EditFilterButton</value>
</data>
<data name="&gt;&gt;EditFilterButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;IncludeFolderButton.Name" xml:space="preserve">
<value>IncludeFolderButton</value>
</data>
<data name="&gt;&gt;IncludeFolderButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ExcludeFolderButton.Name" xml:space="preserve">
<value>ExcludeFolderButton</value>
</data>
<data name="&gt;&gt;ExcludeFolderButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
<value>toolStripSeparator1</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;MoveFilterUpButton.Name" xml:space="preserve">
<value>MoveFilterUpButton</value>
</data>
<data name="&gt;&gt;MoveFilterUpButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;MoveFilterDownButton.Name" xml:space="preserve">
<value>MoveFilterDownButton</value>
</data>
<data name="&gt;&gt;MoveFilterDownButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
<value>toolStripSeparator2</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;MoveFilterTopButton.Name" xml:space="preserve">
<value>MoveFilterTopButton</value>
</data>
<data name="&gt;&gt;MoveFilterTopButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;MoveFilterBottomButton.Name" xml:space="preserve">
<value>MoveFilterBottomButton</value>
</data>
<data name="&gt;&gt;MoveFilterBottomButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;HelpButton.Name" xml:space="preserve">
<value>HelpButton</value>
</data>
<data name="&gt;&gt;HelpButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolTip.Name" xml:space="preserve">
<value>toolTip</value>
</data>
<data name="&gt;&gt;toolTip.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Name" xml:space="preserve">
<value>folderBrowserDialog</value>
</data>
<data name="&gt;&gt;folderBrowserDialog.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FilterEditor</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-107
View File
@@ -1,107 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class FolderPathEntry
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FolderPathEntry));
this.BrowseFolderButton = new System.Windows.Forms.Button();
this.FolderPath = new System.Windows.Forms.TextBox();
this.SizeLabel = new System.Windows.Forms.Label();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.DeleteButton = new System.Windows.Forms.Button();
this.FolderStateImage = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.FolderStateImage)).BeginInit();
this.SuspendLayout();
//
// BrowseFolderButton
//
resources.ApplyResources(this.BrowseFolderButton, "BrowseFolderButton");
this.BrowseFolderButton.Name = "BrowseFolderButton";
this.toolTip.SetToolTip(this.BrowseFolderButton, resources.GetString("BrowseFolderButton.ToolTip"));
this.BrowseFolderButton.UseVisualStyleBackColor = true;
//
// FolderPath
//
resources.ApplyResources(this.FolderPath, "FolderPath");
this.FolderPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.FolderPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;
this.FolderPath.Name = "FolderPath";
this.toolTip.SetToolTip(this.FolderPath, resources.GetString("FolderPath.ToolTip"));
this.FolderPath.TextChanged += new System.EventHandler(this.FolderPath_TextChanged);
this.FolderPath.Leave += new System.EventHandler(this.FolderPath_Leave);
this.FolderPath.KeyUp += new System.Windows.Forms.KeyEventHandler(this.FolderPath_KeyUp);
//
// SizeLabel
//
resources.ApplyResources(this.SizeLabel, "SizeLabel");
this.SizeLabel.Name = "SizeLabel";
this.toolTip.SetToolTip(this.SizeLabel, resources.GetString("SizeLabel.ToolTip"));
//
// DeleteButton
//
resources.ApplyResources(this.DeleteButton, "DeleteButton");
this.DeleteButton.Image = global::Duplicati.GUI.Properties.Resources.Trash;
this.DeleteButton.Name = "DeleteButton";
this.toolTip.SetToolTip(this.DeleteButton, resources.GetString("DeleteButton.ToolTip"));
this.DeleteButton.UseVisualStyleBackColor = true;
//
// FolderStateImage
//
this.FolderStateImage.Image = global::Duplicati.GUI.Properties.Resources.AddedFolder;
resources.ApplyResources(this.FolderStateImage, "FolderStateImage");
this.FolderStateImage.Name = "FolderStateImage";
this.FolderStateImage.TabStop = false;
//
// FolderPathEntry
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.FolderStateImage);
this.Controls.Add(this.FolderPath);
this.Controls.Add(this.SizeLabel);
this.Controls.Add(this.DeleteButton);
this.Controls.Add(this.BrowseFolderButton);
this.MinimumSize = new System.Drawing.Size(178, 20);
this.Name = "FolderPathEntry";
((System.ComponentModel.ISupportInitialize)(this.FolderStateImage)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button BrowseFolderButton;
private System.Windows.Forms.TextBox FolderPath;
private System.Windows.Forms.Label SizeLabel;
private System.Windows.Forms.Button DeleteButton;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.PictureBox FolderStateImage;
}
}
@@ -1,168 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
/// <summary>
/// A helper class to encapsulate a single folder entry UI
/// </summary>
public partial class FolderPathEntry : UserControl
{
/// <summary>
/// An internal reference to the folder browser
/// </summary>
private FolderBrowserDialog m_browseDialog = null;
/// <summary>
/// Constructs a new FolderPathEntry
/// </summary>
public FolderPathEntry()
{
InitializeComponent();
FolderPath.TextChanged += new EventHandler(FolderPath_TextChanged);
DeleteButton.Click += new EventHandler(DeleteButton_Click);
BrowseFolderButton.Click += new EventHandler(BrowseFolderButton_Click);
base.GotFocus += new EventHandler(FolderPathEntry_GotFocus);
}
/// <summary>
/// An event that handles the control getting focus
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">An unused event argument</param>
void FolderPathEntry_GotFocus(object sender, EventArgs e)
{
try { FolderPath.Focus(); }
catch { }
}
/// <summary>
/// An event handler for the click of the BrowseFolderButton
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">An unused event argument</param>
private void BrowseFolderButton_Click(object sender, EventArgs e)
{
if (m_browseDialog != null)
if (m_browseDialog.ShowDialog(this) == DialogResult.OK)
{
FolderPath.Text = m_browseDialog.SelectedPath;
FolderPath_Leave(this, null);
}
}
/// <summary>
/// An event hander for the click of the DeleteButton
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">An unused event argument</param>
private void DeleteButton_Click(object sender, EventArgs e)
{
if (DeleteButton_Clicked != null)
DeleteButton_Clicked(this, null);
}
/// <summary>
/// An event handler for changed text in the FolderPath textbox
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">An unused event argument</param>
private void FolderPath_TextChanged(object sender, EventArgs e)
{
FolderStateImage.Image = FolderPath.Text.Trim().Length == 0 ? Properties.Resources.AddedFolder : Properties.Resources.FolderOpen;
if (SelectedPathChanged != null)
SelectedPathChanged(this, null);
}
/// <summary>
/// An event that is raised when the current folder changes
/// </summary>
public event EventHandler SelectedPathChanged;
/// <summary>
/// An event that is raised when the delete button is clicked
/// </summary>
public event EventHandler DeleteButton_Clicked;
/// <summary>
/// An event that is raised when the current folder looses focus
/// </summary>
public event EventHandler SelectedPathLeave;
/// <summary>
/// Gets the current path
/// </summary>
public string SelectedPath
{
get { return FolderPath.Text; }
set { FolderPath.Text = value; }
}
/// <summary>
/// Gets or sets the dialog used for folder browsing
/// </summary>
public FolderBrowserDialog FolderBrowserDialog
{
get { return m_browseDialog; }
set { m_browseDialog = value; }
}
/// <summary>
/// Gets or sets the size of the folder
/// </summary>
public string FolderSize
{
get { return SizeLabel.Text; }
set { SizeLabel.Text = value; }
}
/// <summary>
/// An event handler for leaving the FolderPath textbox
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">An unused event argument</param>
private void FolderPath_Leave(object sender, EventArgs e)
{
if (SelectedPathLeave != null)
SelectedPathLeave(this, null);
}
/// <summary>
/// An event handler for turning the Enter keypress into a Tab keypress
/// </summary>
/// <param name="sender">The event sender</param>
/// <param name="e">The keypress information argument</param>
private void FolderPath_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.Parent.SelectNextControl(this, true, false, true, false);
e.Handled = true;
}
}
}
}
@@ -1,288 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BrowseFolderButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BrowseFolderButton.Location" type="System.Drawing.Point, System.Drawing">
<value>48, 0</value>
</data>
<data name="BrowseFolderButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>20, 3, 3, 3</value>
</data>
<data name="BrowseFolderButton.Size" type="System.Drawing.Size, System.Drawing">
<value>27, 20</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BrowseFolderButton.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="BrowseFolderButton.Text" xml:space="preserve">
<value>...</value>
</data>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="BrowseFolderButton.ToolTip" xml:space="preserve">
<value>Click to browse for a folder</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Name" xml:space="preserve">
<value>BrowseFolderButton</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BrowseFolderButton.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="FolderPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="FolderPath.Location" type="System.Drawing.Point, System.Drawing">
<value>24, 0</value>
</data>
<data name="FolderPath.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 20</value>
</data>
<data name="FolderPath.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="FolderPath.ToolTip" xml:space="preserve">
<value>Enter the path to the folder here</value>
</data>
<data name="&gt;&gt;FolderPath.Name" xml:space="preserve">
<value>FolderPath</value>
</data>
<data name="&gt;&gt;FolderPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FolderPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;FolderPath.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="SizeLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="SizeLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="SizeLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>80, 4</value>
</data>
<data name="SizeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 13</value>
</data>
<data name="SizeLabel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="SizeLabel.Text" xml:space="preserve">
<value>(...)</value>
</data>
<data name="SizeLabel.ToolTip" xml:space="preserve">
<value>The size of the selected folder</value>
</data>
<data name="&gt;&gt;SizeLabel.Name" xml:space="preserve">
<value>SizeLabel</value>
</data>
<data name="&gt;&gt;SizeLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;SizeLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;SizeLabel.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="DeleteButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="DeleteButton.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 0</value>
</data>
<data name="DeleteButton.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 20</value>
</data>
<data name="DeleteButton.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="DeleteButton.ToolTip" xml:space="preserve">
<value>Click to remove the entry</value>
</data>
<data name="&gt;&gt;DeleteButton.Name" xml:space="preserve">
<value>DeleteButton</value>
</data>
<data name="&gt;&gt;DeleteButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DeleteButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;DeleteButton.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="FolderStateImage.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="FolderStateImage.Size" type="System.Drawing.Size, System.Drawing">
<value>20, 20</value>
</data>
<data name="FolderStateImage.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;FolderStateImage.Name" xml:space="preserve">
<value>FolderStateImage</value>
</data>
<data name="&gt;&gt;FolderStateImage.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FolderStateImage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;FolderStateImage.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 20</value>
</data>
<data name="&gt;&gt;toolTip.Name" xml:space="preserve">
<value>toolTip</value>
</data>
<data name="&gt;&gt;toolTip.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FolderPathEntry</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-73
View File
@@ -1,73 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class SizeSelector
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SizeSelector));
this.Suffix = new System.Windows.Forms.ComboBox();
this.Number = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.Number)).BeginInit();
this.SuspendLayout();
//
// Suffix
//
this.Suffix.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.Suffix.FormattingEnabled = true;
resources.ApplyResources(this.Suffix, "Suffix");
this.Suffix.Name = "Suffix";
this.Suffix.SelectedIndexChanged += new System.EventHandler(this.Suffix_SelectedIndexChanged);
//
// Number
//
resources.ApplyResources(this.Number, "Number");
this.Number.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.Number.Name = "Number";
this.Number.ValueChanged += new System.EventHandler(this.Number_ValueChanged);
//
// SizeSelector
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.Suffix);
this.Controls.Add(this.Number);
this.Name = "SizeSelector";
((System.ComponentModel.ISupportInitialize)(this.Number)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ComboBox Suffix;
private System.Windows.Forms.NumericUpDown Number;
}
}
@@ -1,147 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class SizeSelector : UserControl
{
private bool m_useSpeedNotation = false;
public SizeSelector()
{
InitializeComponent();
ResetSuffixCombo();
Suffix.SelectedIndex = 1;
}
public event EventHandler CurrentSizeInBytesChanged;
public event EventHandler CurrentSizeChanged;
[DefaultValue(false)]
public bool UseSpeedNotation
{
get
{
return m_useSpeedNotation;
}
set
{
if (m_useSpeedNotation != value)
{
m_useSpeedNotation = value;
ResetSuffixCombo();
}
}
}
private void ResetSuffixCombo()
{
int ix = Suffix.SelectedIndex;
Suffix.Items.Clear();
if (m_useSpeedNotation)
Suffix.Items.AddRange(new string[] {
Strings.SizeSelector.BytesPerSecond,
Strings.SizeSelector.KBPerSecond,
Strings.SizeSelector.MBPerSecond,
Strings.SizeSelector.GBPerSecond
});
else
Suffix.Items.AddRange(new string[] {
Strings.SizeSelector.BytesName,
Strings.SizeSelector.KBName,
Strings.SizeSelector.MBName,
Strings.SizeSelector.GBName
});
Suffix.SelectedIndex = ix;
}
public long CurrentSizeInBytes
{
get
{
return (long)((double)Number.Value * Math.Pow(2, 10 * Suffix.SelectedIndex));
}
set
{
Suffix.SelectedIndex = -1;
for (int i = 0; i < Suffix.Items.Count; i++)
if (value < Math.Pow(2, 10 * (i + 1)))
{
Suffix.SelectedIndex = i;
Number.Value = (int)(value / (long)Math.Pow(2, 10 * i));
break;
}
if (Suffix.SelectedIndex == -1)
{
Suffix.SelectedIndex = 0;
Number.Value = 0;
}
}
}
public string CurrentSize
{
get
{
string[] suffixes = new string[] { "b", "kb", "mb", "gb" };
long value = CurrentSizeInBytes;
for (int i = 0; i < suffixes.Length; i++)
if (value < Math.Pow(2, 10 * (i + 1)))
return (value / (long)Math.Pow(2, 10 * i)) + suffixes[i];
return value.ToString() + "b";
}
set
{
CurrentSizeInBytes = Duplicati.Library.Utility.Sizeparser.ParseSize(value);
if (CurrentSizeChanged != null)
CurrentSizeChanged(this, null);
if (CurrentSizeInBytesChanged != null)
CurrentSizeInBytesChanged(this, null);
}
}
private void Suffix_SelectedIndexChanged(object sender, EventArgs e)
{
if (CurrentSizeChanged != null)
CurrentSizeChanged(this, null);
if (CurrentSizeInBytesChanged != null)
CurrentSizeInBytesChanged(this, null);
}
private void Number_ValueChanged(object sender, EventArgs e)
{
if (CurrentSizeChanged != null)
CurrentSizeChanged(this, null);
if (CurrentSizeInBytesChanged != null)
CurrentSizeInBytesChanged(this, null);
}
}
}
@@ -1,186 +0,0 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="Suffix.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 0</value>
</data>
<data name="Suffix.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Suffix.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;Suffix.Name" xml:space="preserve">
<value>Suffix</value>
</data>
<data name="&gt;&gt;Suffix.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Suffix.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Suffix.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Number.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="Number.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="Number.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 20</value>
</data>
<data name="Number.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="Number.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;Number.Name" xml:space="preserve">
<value>Number</value>
</data>
<data name="&gt;&gt;Number.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Number.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Number.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 21</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SizeSelector</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
@@ -1,74 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class BackupFileList {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal BackupFileList() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.BackupFileList", typeof(BackupFileList).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Source folder {0}
///Target folder: {1}
///Right click to change target folder.
/// </summary>
internal static string RootNodeTooltip {
get {
return ResourceManager.GetString("RootNodeTooltip", resourceCulture);
}
}
}
}
@@ -1,126 +0,0 @@
<?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>
<data name="RootNodeTooltip" xml:space="preserve">
<value>Source folder {0}
Target folder: {1}
Right click to change target folder</value>
<comment>A tooltip that is displayed to assist the user in selecting target folders</comment>
</data>
</root>
@@ -1,126 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class BackupItems {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal BackupItems() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.BackupItems", typeof(BackupItems).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Error: {0}.
/// </summary>
internal static string ErrorStatusDisplay {
get {
return ResourceManager.GetString("ErrorStatusDisplay", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No data received.
/// </summary>
internal static string NoDataReceived {
get {
return ResourceManager.GetString("NoDataReceived", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cancelled.
/// </summary>
internal static string OperationCancelled {
get {
return ResourceManager.GetString("OperationCancelled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Full backup.
/// </summary>
internal static string TooltipFullBackup {
get {
return ResourceManager.GetString("TooltipFullBackup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Full backup - {0}.
/// </summary>
internal static string TooltipFullBackupWithSize {
get {
return ResourceManager.GetString("TooltipFullBackupWithSize", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Incremental backup.
/// </summary>
internal static string TooltipIncrementalBackup {
get {
return ResourceManager.GetString("TooltipIncrementalBackup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Incremental backup - {0}, chain: {1}.
/// </summary>
internal static string TooltipIncrementalBackupWithSize {
get {
return ResourceManager.GetString("TooltipIncrementalBackupWithSize", resourceCulture);
}
}
}
}
@@ -1,141 +0,0 @@
<?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>
<data name="ErrorStatusDisplay" xml:space="preserve">
<value>Error: {0}</value>
</data>
<data name="NoDataReceived" xml:space="preserve">
<value>No data received</value>
</data>
<data name="OperationCancelled" xml:space="preserve">
<value>Cancelled</value>
</data>
<data name="TooltipFullBackup" xml:space="preserve">
<value>Full backup</value>
</data>
<data name="TooltipFullBackupWithSize" xml:space="preserve">
<value>Full backup - {0}</value>
</data>
<data name="TooltipIncrementalBackup" xml:space="preserve">
<value>Incremental backup</value>
</data>
<data name="TooltipIncrementalBackupWithSize" xml:space="preserve">
<value>Incremental backup - {0}, chain: {1}</value>
</data>
</root>
@@ -1,99 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class BackupTreeView {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal BackupTreeView() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.BackupTreeView", typeof(BackupTreeView).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Do you want to delete the folder {0} and all the backups contained in it?.
/// </summary>
internal static string ConfirmDeleteFolder {
get {
return ResourceManager.GetString("ConfirmDeleteFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Remove the backup &apos;{0}&apos; ?.
/// </summary>
internal static string ConfirmRemoveBackup {
get {
return ResourceManager.GetString("ConfirmRemoveBackup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to New Backup.
/// </summary>
internal static string NewBackup {
get {
return ResourceManager.GetString("NewBackup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to New Folder.
/// </summary>
internal static string NewFolder {
get {
return ResourceManager.GetString("NewFolder", resourceCulture);
}
}
}
}
@@ -1,132 +0,0 @@
<?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>
<data name="ConfirmDeleteFolder" xml:space="preserve">
<value>Do you want to delete the folder {0} and all the backups contained in it?</value>
</data>
<data name="ConfirmRemoveBackup" xml:space="preserve">
<value>Remove the backup '{0}' ?</value>
</data>
<data name="NewBackup" xml:space="preserve">
<value>New Backup</value>
</data>
<data name="NewFolder" xml:space="preserve">
<value>New Folder</value>
</data>
</root>
@@ -1,84 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class CommandLineOptionsGrid {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal CommandLineOptionsGrid() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.CommandLineOptionsGrid", typeof(CommandLineOptionsGrid).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Value type: {0}.
///{1}.
///{2}.
/// </summary>
internal static string InfoLabelFormat {
get {
return ResourceManager.GetString("InfoLabelFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This page is not supported on the current platform, this is a known issue.
///A newer version of Mono will enable this page..
/// </summary>
internal static string PageNotSupportedWarning {
get {
return ResourceManager.GetString("PageNotSupportedWarning", resourceCulture);
}
}
}
}
@@ -1,129 +0,0 @@
<?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>
<data name="InfoLabelFormat" xml:space="preserve">
<value>Value type: {0}.
{1}.
{2}</value>
</data>
<data name="PageNotSupportedWarning" xml:space="preserve">
<value>This page is not supported on the current platform, this is a known issue.
A newer version of Mono will enable this page.</value>
</data>
</root>
@@ -1,72 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class DurationEditor {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal DurationEditor() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.DurationEditor", typeof(DurationEditor).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Custom ....
/// </summary>
internal static string CustomDuration {
get {
return ResourceManager.GetString("CustomDuration", resourceCulture);
}
}
}
}
@@ -1,124 +0,0 @@
<?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>
<data name="CustomDuration" xml:space="preserve">
<value>Custom ...</value>
<comment>A value displayed when the user enters a non-standard duration</comment>
</data>
</root>
@@ -1,72 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class FilterDialog {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal FilterDialog() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.FilterDialog", typeof(FilterDialog).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to The expression is not a valid regular expression: {0}.
/// </summary>
internal static string InvalidRegExpMessage {
get {
return ResourceManager.GetString("InvalidRegExpMessage", resourceCulture);
}
}
}
}
@@ -1,124 +0,0 @@
<?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>
<data name="InvalidRegExpMessage" xml:space="preserve">
<value>The expression is not a valid regular expression: {0}</value>
<comment>A message displayed to the user if the regular expression is not valid</comment>
</data>
</root>
@@ -1,153 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class FilterEditor {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal FilterEditor() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.FilterEditor", typeof(FilterEditor).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Choose the folder to add for exclusion.
/// </summary>
internal static string ExcludeFolderBrowseTitle {
get {
return ResourceManager.GetString("ExcludeFolderBrowseTitle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is excluded due to rule {1}.
/// </summary>
internal static string FileIsExcluded {
get {
return ResourceManager.GetString("FileIsExcluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is included due to rule {1}.
/// </summary>
internal static string FileIsIncluded {
get {
return ResourceManager.GetString("FileIsIncluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is included because no rule matched.
/// </summary>
internal static string FileIsIncludedDefault {
get {
return ResourceManager.GetString("FileIsIncludedDefault", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The filename {0} is not located in any of the source folders.
/// </summary>
internal static string FilenameIsNotInAnyRootFolder {
get {
return ResourceManager.GetString("FilenameIsNotInAnyRootFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The filename {0} is not an absolute path.
/// </summary>
internal static string FilepathIsNotAbsoluteError {
get {
return ResourceManager.GetString("FilepathIsNotAbsoluteError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The folder {0} is excluded due to rule {1}.
/// </summary>
internal static string FolderIsExcluded {
get {
return ResourceManager.GetString("FolderIsExcluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The folder {0} is included because it is a source folder.
/// </summary>
internal static string FolderIsRootFolder {
get {
return ResourceManager.GetString("FolderIsRootFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Choose the folder to add for inclusion.
/// </summary>
internal static string IncludeFolderBrowseTitle {
get {
return ResourceManager.GetString("IncludeFolderBrowseTitle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The filename {0} has invalid characters.
/// </summary>
internal static string InvalidCharsInFilenameError {
get {
return ResourceManager.GetString("InvalidCharsInFilenameError", resourceCulture);
}
}
}
}
@@ -1,150 +0,0 @@
<?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>
<data name="ExcludeFolderBrowseTitle" xml:space="preserve">
<value>Choose the folder to add for exclusion</value>
</data>
<data name="FileIsExcluded" xml:space="preserve">
<value>The file {0} is excluded due to rule {1}</value>
</data>
<data name="FileIsIncluded" xml:space="preserve">
<value>The file {0} is included due to rule {1}</value>
</data>
<data name="FileIsIncludedDefault" xml:space="preserve">
<value>The file {0} is included because no rule matched</value>
</data>
<data name="FilenameIsNotInAnyRootFolder" xml:space="preserve">
<value>The filename {0} is not located in any of the source folders</value>
</data>
<data name="FilepathIsNotAbsoluteError" xml:space="preserve">
<value>The filename {0} is not an absolute path</value>
</data>
<data name="FolderIsExcluded" xml:space="preserve">
<value>The folder {0} is excluded due to rule {1}</value>
</data>
<data name="FolderIsRootFolder" xml:space="preserve">
<value>The folder {0} is included because it is a source folder</value>
</data>
<data name="IncludeFolderBrowseTitle" xml:space="preserve">
<value>Choose the folder to add for inclusion</value>
</data>
<data name="InvalidCharsInFilenameError" xml:space="preserve">
<value>The filename {0} has invalid characters</value>
</data>
</root>
@@ -1,135 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class SizeSelector {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal SizeSelector() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.SizeSelector", typeof(SizeSelector).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to bytes.
/// </summary>
internal static string BytesName {
get {
return ResourceManager.GetString("BytesName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to bytes/s.
/// </summary>
internal static string BytesPerSecond {
get {
return ResourceManager.GetString("BytesPerSecond", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to gb.
/// </summary>
internal static string GBName {
get {
return ResourceManager.GetString("GBName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to gb/s.
/// </summary>
internal static string GBPerSecond {
get {
return ResourceManager.GetString("GBPerSecond", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to kb.
/// </summary>
internal static string KBName {
get {
return ResourceManager.GetString("KBName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to kb/s.
/// </summary>
internal static string KBPerSecond {
get {
return ResourceManager.GetString("KBPerSecond", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to mb.
/// </summary>
internal static string MBName {
get {
return ResourceManager.GetString("MBName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to mb/s.
/// </summary>
internal static string MBPerSecond {
get {
return ResourceManager.GetString("MBPerSecond", resourceCulture);
}
}
}
}
@@ -1,144 +0,0 @@
<?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>
<data name="BytesName" xml:space="preserve">
<value>bytes</value>
</data>
<data name="BytesPerSecond" xml:space="preserve">
<value>bytes/s</value>
</data>
<data name="GBName" xml:space="preserve">
<value>gb</value>
</data>
<data name="GBPerSecond" xml:space="preserve">
<value>gb/s</value>
</data>
<data name="KBName" xml:space="preserve">
<value>kb</value>
</data>
<data name="KBPerSecond" xml:space="preserve">
<value>kb/s</value>
</data>
<data name="MBName" xml:space="preserve">
<value>mb</value>
</data>
<data name="MBPerSecond" xml:space="preserve">
<value>mb/s</value>
</data>
</root>
@@ -1,90 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class TestSearchSelection {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal TestSearchSelection() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.TestSearchSelection", typeof(TestSearchSelection).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to File Name &apos;{0}&apos;.
/// </summary>
internal static string FileName {
get {
return ResourceManager.GetString("FileName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File Type &apos;{0}&apos;.
/// </summary>
internal static string FileType {
get {
return ResourceManager.GetString("FileType", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Total {0} files at {1}.
/// </summary>
internal static string TotalSizeLabel {
get {
return ResourceManager.GetString("TotalSizeLabel", resourceCulture);
}
}
}
}
@@ -1,129 +0,0 @@
<?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>
<data name="FileName" xml:space="preserve">
<value>File Name '{0}'</value>
</data>
<data name="FileType" xml:space="preserve">
<value>File Type '{0}'</value>
</data>
<data name="TotalSizeLabel" xml:space="preserve">
<value>Total {0} files at {1}</value>
</data>
</root>
@@ -1,81 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class WaitForOperation {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal WaitForOperation() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.WaitForOperation", typeof(WaitForOperation).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Are you sure you want to abort the operation?.
/// </summary>
internal static string ReallyAbortQuestion {
get {
return ResourceManager.GetString("ReallyAbortQuestion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The user cancelled the operation.
/// </summary>
internal static string UserCancelled {
get {
return ResourceManager.GetString("UserCancelled", resourceCulture);
}
}
}
}
@@ -1,126 +0,0 @@
<?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>
<data name="ReallyAbortQuestion" xml:space="preserve">
<value>Are you sure you want to abort the operation?</value>
</data>
<data name="UserCancelled" xml:space="preserve">
<value>The user cancelled the operation</value>
</data>
</root>
@@ -1,334 +0,0 @@
namespace Duplicati.GUI.HelperControls {
partial class TestSearchSelection {
/// <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(TestSearchSelection));
this.ctxSelection = new System.Windows.Forms.ContextMenuStrip(this.components);
this.miInclude = new System.Windows.Forms.ToolStripMenuItem();
this.miIncludeFileName = new System.Windows.Forms.ToolStripMenuItem();
this.miIncludeFileExt = new System.Windows.Forms.ToolStripMenuItem();
this.miIncludeFilePath = new System.Windows.Forms.ToolStripMenuItem();
this.miExclude = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFileName = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFileExt = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFilePath = new System.Windows.Forms.ToolStripMenuItem();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.label1 = new System.Windows.Forms.Label();
this.btnCancel = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.lvFilters = new System.Windows.Forms.ListView();
this.ctxFilters = new System.Windows.Forms.ContextMenuStrip(this.components);
this.removeFilterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scanWorker = new System.ComponentModel.BackgroundWorker();
this.lbTotalSize = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.tbSearch = new System.Windows.Forms.TextBox();
this.btnSearch = new System.Windows.Forms.PictureBox();
this.btnClearSearch = new System.Windows.Forms.PictureBox();
this.lvFiles = new System.Windows.Forms.ListView();
this.chFile = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chFileExt = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lbLoading = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.ctxSelection.SuspendLayout();
this.ctxFilters.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.btnSearch)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.btnClearSearch)).BeginInit();
this.SuspendLayout();
//
// ctxSelection
//
this.ctxSelection.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miInclude,
this.miExclude});
this.ctxSelection.Name = "ctxSelection";
resources.ApplyResources(this.ctxSelection, "ctxSelection");
this.ctxSelection.Opened += new System.EventHandler(this.ctxSelection_Opened);
//
// miInclude
//
this.miInclude.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miIncludeFileName,
this.miIncludeFileExt,
this.miIncludeFilePath});
this.miInclude.Name = "miInclude";
resources.ApplyResources(this.miInclude, "miInclude");
//
// miIncludeFileName
//
this.miIncludeFileName.Name = "miIncludeFileName";
resources.ApplyResources(this.miIncludeFileName, "miIncludeFileName");
this.miIncludeFileName.Tag = "1";
this.miIncludeFileName.Click += new System.EventHandler(this.miIncludeFileName_Click);
//
// miIncludeFileExt
//
this.miIncludeFileExt.Name = "miIncludeFileExt";
resources.ApplyResources(this.miIncludeFileExt, "miIncludeFileExt");
this.miIncludeFileExt.Click += new System.EventHandler(this.miIncludeFileExt_Click);
//
// miIncludeFilePath
//
this.miIncludeFilePath.Name = "miIncludeFilePath";
resources.ApplyResources(this.miIncludeFilePath, "miIncludeFilePath");
//
// miExclude
//
this.miExclude.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miExcludeFileName,
this.miExcludeFileExt,
this.miExcludeFilePath});
this.miExclude.Name = "miExclude";
resources.ApplyResources(this.miExclude, "miExclude");
//
// miExcludeFileName
//
this.miExcludeFileName.Name = "miExcludeFileName";
resources.ApplyResources(this.miExcludeFileName, "miExcludeFileName");
this.miExcludeFileName.Click += new System.EventHandler(this.addFilenameFilterToolStripMenuItem_Click);
//
// miExcludeFileExt
//
this.miExcludeFileExt.Name = "miExcludeFileExt";
resources.ApplyResources(this.miExcludeFileExt, "miExcludeFileExt");
this.miExcludeFileExt.Click += new System.EventHandler(this.addFileExtensionFilterToolStripMenuItem1_Click);
//
// miExcludeFilePath
//
this.miExcludeFilePath.Name = "miExcludeFilePath";
resources.ApplyResources(this.miExcludeFilePath, "miExcludeFilePath");
this.miExcludeFilePath.Click += new System.EventHandler(this.addFilePathFilerToolStripMenuItem_Click);
//
// imageList
//
this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
this.imageList.Images.SetKeyName(0, "globbing-include");
this.imageList.Images.SetKeyName(1, "globbing-exclude");
this.imageList.Images.SetKeyName(2, "icon_up_sort_arrow[1].png");
this.imageList.Images.SetKeyName(3, "icon_down_sort_arrow[1].png");
this.imageList.Images.SetKeyName(4, "sort_ascending[1].png");
this.imageList.Images.SetKeyName(5, "sort_descending[1].png");
this.imageList.Images.SetKeyName(6, "sort_up[1].png");
this.imageList.Images.SetKeyName(7, "sort_down[1].png");
this.imageList.Images.SetKeyName(8, "regexp-include");
this.imageList.Images.SetKeyName(9, "regexp-exclude");
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// btnCancel
//
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Name = "btnCancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnClose_Click);
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.ForeColor = System.Drawing.Color.DimGray;
this.label2.Name = "label2";
//
// lvFilters
//
resources.ApplyResources(this.lvFilters, "lvFilters");
this.lvFilters.ContextMenuStrip = this.ctxFilters;
this.lvFilters.FullRowSelect = true;
this.lvFilters.Name = "lvFilters";
this.lvFilters.SmallImageList = this.imageList;
this.lvFilters.UseCompatibleStateImageBehavior = false;
this.lvFilters.View = System.Windows.Forms.View.List;
//
// ctxFilters
//
this.ctxFilters.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.removeFilterToolStripMenuItem});
this.ctxFilters.Name = "ctxFilters";
resources.ApplyResources(this.ctxFilters, "ctxFilters");
//
// removeFilterToolStripMenuItem
//
this.removeFilterToolStripMenuItem.Name = "removeFilterToolStripMenuItem";
resources.ApplyResources(this.removeFilterToolStripMenuItem, "removeFilterToolStripMenuItem");
this.removeFilterToolStripMenuItem.Click += new System.EventHandler(this.removeFilterToolStripMenuItem_Click);
//
// scanWorker
//
this.scanWorker.WorkerSupportsCancellation = true;
this.scanWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.scanWorker_DoWork);
this.scanWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.scanWorker_RunWorkerCompleted);
//
// lbTotalSize
//
resources.ApplyResources(this.lbTotalSize, "lbTotalSize");
this.lbTotalSize.Name = "lbTotalSize";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// tbSearch
//
resources.ApplyResources(this.tbSearch, "tbSearch");
this.tbSearch.Name = "tbSearch";
this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged);
//
// btnSearch
//
resources.ApplyResources(this.btnSearch, "btnSearch");
this.btnSearch.Name = "btnSearch";
this.btnSearch.TabStop = false;
//
// btnClearSearch
//
resources.ApplyResources(this.btnClearSearch, "btnClearSearch");
this.btnClearSearch.BackColor = System.Drawing.SystemColors.Window;
this.btnClearSearch.Name = "btnClearSearch";
this.btnClearSearch.TabStop = false;
this.btnClearSearch.Click += new System.EventHandler(this.btnClearSearch_Click);
//
// lvFiles
//
resources.ApplyResources(this.lvFiles, "lvFiles");
this.lvFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chFile,
this.chFileExt,
this.chSize,
this.chPath});
this.lvFiles.ContextMenuStrip = this.ctxSelection;
this.lvFiles.FullRowSelect = true;
this.lvFiles.Name = "lvFiles";
this.lvFiles.SmallImageList = this.imageList;
this.lvFiles.UseCompatibleStateImageBehavior = false;
this.lvFiles.View = System.Windows.Forms.View.Details;
this.lvFiles.VirtualMode = true;
this.lvFiles.CacheVirtualItems += new System.Windows.Forms.CacheVirtualItemsEventHandler(this.lvFiles_CacheVirtualItems);
this.lvFiles.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvFiles_ColumnClick);
this.lvFiles.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.lvFiles_RetrieveVirtualItem);
//
// chFile
//
resources.ApplyResources(this.chFile, "chFile");
//
// chFileExt
//
resources.ApplyResources(this.chFileExt, "chFileExt");
//
// chSize
//
resources.ApplyResources(this.chSize, "chSize");
//
// chPath
//
resources.ApplyResources(this.chPath, "chPath");
//
// lbLoading
//
resources.ApplyResources(this.lbLoading, "lbLoading");
this.lbLoading.BackColor = System.Drawing.SystemColors.Control;
this.lbLoading.Name = "lbLoading";
//
// btnOK
//
resources.ApplyResources(this.btnOK, "btnOK");
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnOK.Name = "btnOK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// TestSearchSelection
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.btnOK);
this.Controls.Add(this.lbLoading);
this.Controls.Add(this.label3);
this.Controls.Add(this.btnClearSearch);
this.Controls.Add(this.lvFiles);
this.Controls.Add(this.lvFilters);
this.Controls.Add(this.btnSearch);
this.Controls.Add(this.label2);
this.Controls.Add(this.tbSearch);
this.Controls.Add(this.lbTotalSize);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnCancel);
this.MinimizeBox = false;
this.Name = "TestSearchSelection";
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.Load += new System.EventHandler(this.dlgTestSearchSelection_Load);
this.ctxSelection.ResumeLayout(false);
this.ctxFilters.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.btnSearch)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.btnClearSearch)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ContextMenuStrip ctxSelection;
private System.Windows.Forms.ToolStripMenuItem miInclude;
private System.Windows.Forms.ToolStripMenuItem miIncludeFileName;
private System.Windows.Forms.ToolStripMenuItem miIncludeFileExt;
private System.Windows.Forms.ToolStripMenuItem miExclude;
private System.Windows.Forms.ToolStripMenuItem miExcludeFileName;
private System.Windows.Forms.ToolStripMenuItem miExcludeFileExt;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ImageList imageList;
private System.Windows.Forms.ListView lvFilters;
private System.ComponentModel.BackgroundWorker scanWorker;
private System.Windows.Forms.ContextMenuStrip ctxFilters;
private System.Windows.Forms.ToolStripMenuItem removeFilterToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem miExcludeFilePath;
private System.Windows.Forms.Label lbTotalSize;
private System.Windows.Forms.ToolStripMenuItem miIncludeFilePath;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox tbSearch;
private System.Windows.Forms.PictureBox btnSearch;
private System.Windows.Forms.PictureBox btnClearSearch;
private System.Windows.Forms.ListView lvFiles;
private System.Windows.Forms.ColumnHeader chFile;
private System.Windows.Forms.ColumnHeader chFileExt;
private System.Windows.Forms.ColumnHeader chSize;
private System.Windows.Forms.ColumnHeader chPath;
private System.Windows.Forms.Label lbLoading;
private System.Windows.Forms.Button btnOK;
}
}
@@ -1,537 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Duplicati.Library.Utility;
using System.Collections;
namespace Duplicati.GUI.HelperControls {
public partial class TestSearchSelection : Form {
private class AbortException : Exception { }
private class ResultItem {
public string FileName;
public string Ext;
public string Path;
public long Size;
public ResultItem(string path)
{
this.FileName = System.IO.Path.GetFileNameWithoutExtension(path);
this.Path = System.IO.Path.GetDirectoryName(path);
this.Size = new FileInfo(path).Length;
this.Ext = System.IO.Path.GetExtension(path);
if (!string.IsNullOrEmpty(this.Ext) && this.Ext.StartsWith("."))
this.Ext = this.Ext.Substring(1);
}
public override int GetHashCode() {
return FileName.GetHashCode() + Ext.GetHashCode() + Path.GetHashCode() + (int)Size;
}
}
enum ResultItemSortBy { FileName=0, Ext=1, Size=2, Path=3 }
class ResultItemComparer : IComparer<ResultItem> {
private ResultItemSortBy _sortBy;
private bool _ascending = false;
public ResultItemComparer() {
_sortBy = ResultItemSortBy.Size;
}
public ResultItemComparer(ResultItemSortBy sortBy, bool ascending) {
_sortBy = sortBy;
//_col = column;
_ascending = ascending;
}
#region IComparer<ListViewItem> Members
private string GetAttrib(ResultItem itm, ResultItemSortBy prm) {
if( prm == ResultItemSortBy.FileName )
return itm.FileName;
else if( prm == ResultItemSortBy.Ext )
return itm.Ext;
else if( prm == ResultItemSortBy.Path )
return itm.Path;
else return string.Empty;
}
public int Compare(ResultItem a, ResultItem b) {
switch( _sortBy ) {
case ResultItemSortBy.FileName:
case ResultItemSortBy.Ext:
case ResultItemSortBy.Path:
string strA = GetAttrib(_ascending ? a : b, _sortBy);
string strB = GetAttrib(_ascending ? b : a, _sortBy);
return String.Compare(strA, strB);
case ResultItemSortBy.Size:
long iA = (_ascending ? a : b).Size;
long iB = (_ascending ? b : a).Size;
return Math.Sign(iA - iB);
}
return 0;
}
#endregion
}
const int PAGE_SIZE = 800;
const int SORT_ASC_IMAGEINDEX = 2;
int currentSortingColumn = 0;
bool sortingOrderAsc = true;
private string[] m_paths;
private string m_dynamicFilters;
public string[] Paths { get { return m_paths; } set { m_paths = value; } }
public List<FilterDialog.FilterEntry> Filters
{
get
{
List<FilterDialog.FilterEntry> filters = new List<FilterDialog.FilterEntry>();
foreach (ListViewItem lvi in lvFilters.Items)
filters.Add((FilterDialog.FilterEntry)lvi.Tag);
return filters;
}
set
{
lvFilters.Items.Clear();
foreach (FilterDialog.FilterEntry fe in value)
lvFilters.Items.Add(fe.CreateListViewItem());
}
}
public string DynamicFilters { get { return m_dynamicFilters; } set { m_dynamicFilters = value; } }
List<ResultItem> _results = new List<ResultItem>();
List<ResultItem> _subResults = null;
bool _updating = false;
private ListViewItem[] _cache;
public TestSearchSelection() {
InitializeComponent();
}
private void dlgTestSearchSelection_Load(object sender, EventArgs e) {
currentSortingColumn = 2;
lvFiles.Columns[currentSortingColumn].ImageIndex = SORT_ASC_IMAGEINDEX + ( sortingOrderAsc ? 0 : 1 );
StartScanThread();
}
ListViewItem _CreateListViewItem(ResultItem ri) {
var lvi = new ListViewItem(ri.FileName);
lvi.SubItems.Add(ri.Ext);
lvi.SubItems.Add(Utility.FormatSizeString(ri.Size)).Tag = ri.Size;
lvi.SubItems.Add(ri.Path);
lvi.Tag = ri.GetHashCode();
return lvi;
}
void UpdateTotalStat(List<ResultItem> items) {
long sum = 0;
foreach (ResultItem r in items)
sum += r.Size;
lbTotalSize.Text = string.Format(Strings.TestSearchSelection.TotalSizeLabel, items.Count, Utility.FormatSizeString(sum));
}
void LoadFileView() {
lvFiles.VirtualListSize = _results.Count;
_cache = new ListViewItem[_results.Count];
UpdateTotalStat(_results);
ResizeColumns();
}
private void UpdateFileView() {
if( _updating )
return;
_updating = true;
try {
string str = tbSearch.Text;
lvFiles.BeginUpdate();
try {
ClearFileCache();
if( !string.IsNullOrEmpty(str) ) {
_subResults = new List<ResultItem>();
foreach (ResultItem r in _results)
if (r.FileName.Contains(str) || r.Ext.Contains(str) || r.Path.Contains(str))
_subResults.Add(r);
_cache = new ListViewItem[_subResults.Count];
lvFiles.VirtualListSize = _subResults.Count;
UpdateTotalStat(_subResults);
if( !btnClearSearch.Visible )
btnClearSearch.Visible = true;
} else {
_subResults = null;
lvFiles.VirtualListSize = _results.Count;
btnClearSearch.Visible = false;
UpdateTotalStat(_results);
}
} finally {
lvFiles.EndUpdate();
}
} finally {
_updating = false;
}
}
private List<ResultItem> DoTestSearchSelection(List<FilterDialog.FilterEntry> filters) {
List<KeyValuePair<bool, string>> dyn_filters = new List<KeyValuePair<bool, string>>();
foreach (FilterDialog.FilterEntry fe in filters)
dyn_filters.Add(new KeyValuePair<bool, string>(fe.Include, fe.Filter));
if (!string.IsNullOrEmpty(DynamicFilters))
dyn_filters.AddRange(Library.Utility.FilenameFilter.DecodeFilter(DynamicFilters));
FilenameFilter fn = new FilenameFilter(dyn_filters);
try
{
CallbackHandler handler = new CallbackHandler(scanWorker, fn);
foreach (string scanDir in Paths)
{
if (!scanWorker.CancellationPending)
Library.Utility.Utility.EnumerateFileSystemEntries(scanDir, handler.AddFileToList_Callback);
}
return handler.Results;
}
catch (AbortException)
{
return null;
}
}
private class CallbackHandler
{
public List<ResultItem> Results = new List<ResultItem>();
private BackgroundWorker Worker;
private FilenameFilter Filter;
public CallbackHandler(BackgroundWorker worker, FilenameFilter filter)
{
Worker = worker;
Filter = filter;
}
public bool AddFileToList_Callback(string rootpath, string path, FileAttributes attributes)
{
if (Worker.CancellationPending)
throw new AbortException();
if (!Filter.ShouldInclude(rootpath, path))
return false;
if ((attributes & FileAttributes.Directory) == 0 && (attributes & Utility.ATTRIBUTE_ERROR) == 0)
{
Results.Add(new ResultItem(path));
}
return true;
}
}
// Update Search Selection upon changed Filter
//TODO: Does not work, because the folder that contains a file could be excluded,
// causing files to be excluded even though they match no filter...
//
//This should probably not be used, because it can accidentially show wrong
// results if some subtle aspect of the filter process is not done 100% correct
//
/*private void UpdateSearchSelection()
{
FilenameFilter fn = new FilenameFilter(Filters);
List<ResultItem> bin = new List<ResultItem>();
foreach( ResultItem ri in _results ) {
string fileName = string.Format("{0}.{1}", ri.FileName, ri.Ext);
if( !fn.ShouldInclude(ri.Path, Path.Combine(ri.Path, fileName) ) )
bin.Add(ri);
}
foreach( ResultItem ri in bin )
_results.Remove(ri);
}*/
private void ResizeColumns() {
//lvFiles.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
//lvFiles.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
lvFiles.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.ColumnContent);
}
private ResultItem GetResultItem(int index) {
if( _subResults == null ) {
if( index < _results.Count )
return _results[index];
} else if( index < _subResults.Count )
return _subResults[index];
return null;
}
private List<ResultItem> GetResultList() {
if( _subResults == null )
return _results;
else return _subResults;
}
private void ClearFileCache() {
for( int i = 0;i < _cache.Length;i++ )
_cache[i] = null;
}
private void SortView(ResultItemSortBy sortBy, bool sortDirectionAsc) {
ClearFileCache();
GetResultList().Sort(new ResultItemComparer(sortBy, sortDirectionAsc));
lvFiles.Invalidate();
}
void AddFilter(bool include, string filter) {
FilterDialog.FilterEntry fe = new FilterDialog.FilterEntry(include, FilenameFilter.ConvertGlobbingToRegExp(filter), filter);
lvFilters.Items.Add(fe.CreateListViewItem());
}
string GetFileFilterStr(string filename, string ext) {
if (filename == "*")
return string.Format("*.{0}", ext);
else
return string.Format("*\\{0}.{1}", filename, ext);
}
void _AddSelectedFilter(bool include, bool anyFileName) {
if( lvFiles.SelectedIndices.Count > 0 ) {
foreach( int index in lvFiles.SelectedIndices ) {
ResultItem itm = GetResultItem(index);
string filter = GetFileFilterStr(!anyFileName ? itm.FileName : "*", itm.Ext);
AddFilter(include, filter);
}
StartScanThread();
}
}
// Exclude FileName
private void addFilenameFilterToolStripMenuItem_Click(object sender, EventArgs e) {
_AddSelectedFilter(false, false);
}
// Exclude File Ext
private void addFileExtensionFilterToolStripMenuItem1_Click(object sender, EventArgs e) {
_AddSelectedFilter(false, true);
}
// Exclude File Path
private void ctxSelection_Opened(object sender, EventArgs e) {
if( lvFiles.SelectedIndices.Count > 0 ) {
ResultItem itm = GetResultItem(lvFiles.SelectedIndices[0]);
// Set Include names
string fileName = string.Format(Strings.TestSearchSelection.FileName, GetFileFilterStr(itm.FileName, itm.Ext));
string fileExt = string.Format(Strings.TestSearchSelection.FileType, GetFileFilterStr("*", itm.Ext));
miIncludeFileName.Text = fileName;
miIncludeFileExt.Text = fileExt;
miExcludeFileName.Text = fileName;
miExcludeFileExt.Text = fileExt;
// Add Path items
miExcludeFilePath.DropDownItems.Clear();
miIncludeFilePath.DropDownItems.Clear();
string fullpath = Utility.AppendDirSeparator(itm.Path);
string root = System.IO.Path.GetPathRoot(fullpath);
string curpath = System.IO.Path.GetDirectoryName(fullpath);
List<string> folderlist = new List<string>();
do
{
if (curpath != System.IO.Path.GetDirectoryName(curpath))
folderlist.Add(Utility.AppendDirSeparator(curpath));
curpath = System.IO.Path.GetDirectoryName(curpath);
} while (root != curpath);
folderlist.Add(root);
foreach (string s in folderlist)
{
if (s.Length >= fullpath.Length)
continue;
string filter = string.Format(@"*\{0}", fullpath.Substring(s.Length));
miIncludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = true;
miExcludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
}
foreach (string s in folderlist)
{
string filter = string.Format(@"{0}", s);
miIncludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = true;
miExcludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
}
}
}
// Include fileName
private void miIncludeFileName_Click(object sender, EventArgs e) {
_AddSelectedFilter(true, false);
}
// Include File Ext
private void miIncludeFileExt_Click(object sender, EventArgs e) {
_AddSelectedFilter(true, true);
}
void StartScanThread() {
lbLoading.Visible = true;
tbSearch.Enabled = false;
lvFiles.Enabled = false;
lvFilters.Enabled = false;
scanWorker.RunWorkerAsync(this.Filters);
}
private void scanWorker_DoWork(object sender, DoWorkEventArgs e) {
//if( _results.Count == 0 )
e.Result = DoTestSearchSelection((List<FilterDialog.FilterEntry>)e.Argument);
//else UpdateSearchSelection();
if (scanWorker.CancellationPending)
e.Cancel = true;
}
private void scanWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
if (e.Error == null && !e.Cancelled && e.Result as List<ResultItem> != null)
{
lbLoading.Visible = false;
tbSearch.Enabled = true;
lvFiles.Enabled = true;
lvFilters.Enabled = true;
_results = (List<ResultItem>)e.Result;
LoadFileView();
SortView((ResultItemSortBy)currentSortingColumn, true);
}
else
{
//Should report the error to the user somehow
}
}
private void FilterFilePath_Click(object sender, EventArgs e) {
ToolStripItem itm = sender as ToolStripItem;
AddFilter((bool)itm.Tag, itm.Text);
StartScanThread();
}
private void lvFiles_ColumnClick(object sender, ColumnClickEventArgs e) {
if( currentSortingColumn != e.Column )
sortingOrderAsc = true;
else sortingOrderAsc = !sortingOrderAsc;
if( currentSortingColumn != -1 ) {
lvFiles.Columns[currentSortingColumn].ImageIndex = -1;
lvFiles.Columns[currentSortingColumn].TextAlign = HorizontalAlignment.Left;
}
lvFiles.Columns[e.Column].ImageIndex = SORT_ASC_IMAGEINDEX + ( sortingOrderAsc ? 0 : 1 );
SortView((ResultItemSortBy)e.Column, sortingOrderAsc);
currentSortingColumn = e.Column;
}
private void removeFilterToolStripMenuItem_Click(object sender, EventArgs e) {
if( lvFilters.SelectedItems.Count > 0 ) {
for(int i = lvFilters.SelectedItems.Count-1; i > -1; i--) {
lvFilters.Items.RemoveAt(lvFilters.SelectedItems[i].Index);
}
StartScanThread();
}
}
private void addFilePathFilerToolStripMenuItem_Click(object sender, EventArgs e) {
}
private void btnClose_Click(object sender, EventArgs e) {
scanWorker.CancelAsync();
Close();
}
private void lvFiles_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) {
ListViewItem itm = e.ItemIndex < _cache.Length ? _cache[e.ItemIndex] : null;
if( itm == null ) {
ResultItem ri = GetResultItem(e.ItemIndex);
if( ri != null )
itm = _CreateListViewItem(ri);
}
e.Item = itm;
}
private void lvFiles_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e) {
if( _cache.Length > 0 ) {
int length = e.EndIndex - e.StartIndex + 1;
for( int i = e.StartIndex;i < length;i++ ) {
if( _cache[i] == null )
_cache[i] = _CreateListViewItem(GetResultItem(i));
}
}
}
private void tbSearch_TextChanged(object sender, EventArgs e) {
UpdateFileView();
}
private void btnClearSearch_Click(object sender, EventArgs e) {
tbSearch.Text = string.Empty;
_subResults = null;
LoadFileView();
btnClearSearch.Visible = false;
}
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
}
}
File diff suppressed because it is too large Load Diff
@@ -1,74 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class ThreadPriorityPicker
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ThreadPriorityPicker));
this.ThreadPriority = new System.Windows.Forms.ComboBox();
this.ThreadPriorityEnabled = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// ThreadPriority
//
resources.ApplyResources(this.ThreadPriority, "ThreadPriority");
this.ThreadPriority.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.ThreadPriority.FormattingEnabled = true;
this.ThreadPriority.Items.AddRange(new object[] {
resources.GetString("ThreadPriority.Items"),
resources.GetString("ThreadPriority.Items1"),
resources.GetString("ThreadPriority.Items2"),
resources.GetString("ThreadPriority.Items3"),
resources.GetString("ThreadPriority.Items4")});
this.ThreadPriority.Name = "ThreadPriority";
this.ThreadPriority.SelectedIndexChanged += new System.EventHandler(this.ThreadPriority_SelectedIndexChanged);
//
// ThreadPriorityEnabled
//
resources.ApplyResources(this.ThreadPriorityEnabled, "ThreadPriorityEnabled");
this.ThreadPriorityEnabled.Name = "ThreadPriorityEnabled";
this.ThreadPriorityEnabled.UseVisualStyleBackColor = true;
this.ThreadPriorityEnabled.CheckedChanged += new System.EventHandler(this.ThreadPriorityEnabled_CheckedChanged);
//
// ThreadPriorityPicker
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.ThreadPriority);
this.Controls.Add(this.ThreadPriorityEnabled);
this.Name = "ThreadPriorityPicker";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox ThreadPriority;
private System.Windows.Forms.CheckBox ThreadPriorityEnabled;
}
}
@@ -1,105 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class ThreadPriorityPicker : UserControl
{
/// <summary>
/// Textual representation of priorities
/// </summary>
private static readonly string[] THREAD_PRIORITIES = new string[] {
GUI.Strings.Common.ThreadPriorityHighest,
GUI.Strings.Common.ThreadPriorityAboveNormal,
GUI.Strings.Common.ThreadPriorityNormal,
GUI.Strings.Common.ThreadPriorityBelowNormal,
GUI.Strings.Common.ThreadPriortyLowest
};
/// <summary>
/// Mapping the priority to the string index
/// </summary>
private static readonly System.Threading.ThreadPriority[] PRIORITY_LOOKUP = new System.Threading.ThreadPriority[] {
System.Threading.ThreadPriority.Highest,
System.Threading.ThreadPriority.AboveNormal,
System.Threading.ThreadPriority.Normal,
System.Threading.ThreadPriority.BelowNormal,
System.Threading.ThreadPriority.Lowest,
};
public event EventHandler SelectedPriorityChanged;
public ThreadPriorityPicker()
{
InitializeComponent();
ThreadPriority.Items.Clear();
ThreadPriority.Items.AddRange(THREAD_PRIORITIES);
ThreadPriority.SelectedIndex = 2;
}
[DefaultValue(null)]
public System.Threading.ThreadPriority? SelectedPriority
{
get
{
if (ThreadPriorityEnabled.Checked)
return PRIORITY_LOOKUP[ThreadPriority.SelectedIndex];
else
return null;
}
set
{
if (value == null)
ThreadPriorityEnabled.Checked = false;
else
{
ThreadPriorityEnabled.Checked = true;
ThreadPriority.SelectedIndex = Array.IndexOf<System.Threading.ThreadPriority>(PRIORITY_LOOKUP, value.Value);
}
if (SelectedPriorityChanged != null)
SelectedPriorityChanged(this, null);
}
}
private void ThreadPriorityEnabled_CheckedChanged(object sender, EventArgs e)
{
ThreadPriority.Enabled = ThreadPriorityEnabled.Checked;
if (SelectedPriorityChanged != null)
SelectedPriorityChanged(this, null);
}
private void ThreadPriority_SelectedIndexChanged(object sender, EventArgs e)
{
if (SelectedPriorityChanged != null)
SelectedPriorityChanged(this, null);
}
}
}
@@ -1,210 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ThreadPriority.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ThreadPriority.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="ThreadPriority.Items" xml:space="preserve">
<value>High (Not recommended)</value>
</data>
<data name="ThreadPriority.Items1" xml:space="preserve">
<value>Above normal</value>
</data>
<data name="ThreadPriority.Items2" xml:space="preserve">
<value>Normal</value>
</data>
<data name="ThreadPriority.Items3" xml:space="preserve">
<value>Below normal</value>
</data>
<data name="ThreadPriority.Items4" xml:space="preserve">
<value>Low</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ThreadPriority.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 0</value>
</data>
<data name="ThreadPriority.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 21</value>
</data>
<data name="ThreadPriority.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="&gt;&gt;ThreadPriority.Name" xml:space="preserve">
<value>ThreadPriority</value>
</data>
<data name="&gt;&gt;ThreadPriority.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ThreadPriority.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ThreadPriority.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="ThreadPriorityEnabled.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ThreadPriorityEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="ThreadPriorityEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="ThreadPriorityEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 17</value>
</data>
<data name="ThreadPriorityEnabled.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="ThreadPriorityEnabled.Text" xml:space="preserve">
<value>Set thread priority</value>
</data>
<data name="&gt;&gt;ThreadPriorityEnabled.Name" xml:space="preserve">
<value>ThreadPriorityEnabled</value>
</data>
<data name="&gt;&gt;ThreadPriorityEnabled.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ThreadPriorityEnabled.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ThreadPriorityEnabled.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>322, 23</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ThreadPriorityPicker</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
@@ -1,70 +0,0 @@
namespace Duplicati.GUI.HelperControls
{
partial class WaitForOperation
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForOperation));
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.SuspendLayout();
//
// progressBar1
//
resources.ApplyResources(this.progressBar1, "progressBar1");
this.progressBar1.Name = "progressBar1";
this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//
// WaitForOperation
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.progressBar1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "WaitForOperation";
this.ShowInTaskbar = false;
this.Load += new System.EventHandler(this.WaitForOperation_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WaitForOperation_FormClosing);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ProgressBar progressBar1;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
}
}
@@ -1,143 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI.HelperControls
{
public partial class WaitForOperation : Form
{
private Exception m_exception;
private DoWorkEventHandler m_handler;
private bool m_useAbortCancel;
private object m_lock = new object();
private System.Threading.Thread m_workerThread = null;
public WaitForOperation()
{
InitializeComponent();
}
public void Setup(DoWorkEventHandler callback, string title, bool useAbortCancel)
{
m_handler = callback;
this.Text = title;
m_useAbortCancel = useAbortCancel;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
m_exception = e.Error;
if (e.Cancelled || e.Error != null)
this.DialogResult = DialogResult.Cancel;
else
this.DialogResult = DialogResult.OK;
this.Close();
}
private void WaitForOperation_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
public Exception Error { get { return m_exception; } }
private delegate void SetTitleDelegate(string title);
private delegate void SetProgressDelegate(int progress);
public void SetTitle(string title)
{
if (this.InvokeRequired)
this.Invoke(new SetTitleDelegate(SetTitle), title);
else
{
this.Text = title;
}
}
public void SetProgress(int progress)
{
if (this.InvokeRequired)
this.Invoke(new SetProgressDelegate(SetProgress), progress);
else
{
if (progress < 0)
{
progressBar1.Style = ProgressBarStyle.Marquee;
}
else
{
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.Value = Math.Max(0, Math.Min(progress, 100));
}
}
}
private void WaitForOperation_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing && backgroundWorker1.IsBusy)
{
if (!backgroundWorker1.CancellationPending)
{
if (MessageBox.Show(this, Strings.WaitForOperation.ReallyAbortQuestion, Application.ProductName, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3) == DialogResult.Yes)
{
backgroundWorker1.CancelAsync();
if (m_useAbortCancel)
{
lock (m_lock)
if (m_workerThread != null)
m_workerThread.Abort();
}
}
}
e.Cancel = true;
return;
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
lock (m_lock)
m_workerThread = System.Threading.Thread.CurrentThread;
m_handler.Invoke(sender, e);
}
catch(System.Threading.ThreadAbortException)
{
System.Threading.Thread.ResetAbort();
e.Cancel = true;
}
finally
{
lock (m_lock)
m_workerThread = null;
}
}
}
}
@@ -1,680 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="progressBar1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="progressBar1.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 8</value>
</data>
<data name="progressBar1.Size" type="System.Drawing.Size, System.Drawing">
<value>274, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="progressBar1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;progressBar1.Name" xml:space="preserve">
<value>progressBar1</value>
</data>
<data name="&gt;&gt;progressBar1.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;progressBar1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>307, 41</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ
AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm
AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3
d3d3d4eAAAAAAAAAAAAAAAAAAAAAB3d3iIiIiHd4cAAAAAAAAAAAAAAAAAAHd4j4eHd3eIiHeHAAAAAA
AAAAAAAAAAh3iIdnZmZuZmd4iHhwAAAAAAAAAAAAAHd/d2Z2Z2hnZ2ZnaIeHAAAAAAAAAAAAB3iHZnZn
52ZnZ+dudniHgAAAAAAAAAAAd4hnZ+dmdududmdnZ2eIeAAAAAAAAAAHeIZ25nbnZ2Z2Z252bnZoh4AA
AAAAAACHiGZnZ2Z25n52fnZnZ2Z2iHgAAAAAAAh4dnfnZoZnZ2dudmdudufmaIeAAAAAAAd4duZ2525+
duZ2Z3Z2Z2Z2dohwAAAAAIeHZ2dmdmdmZ2fnb/hobnZ+Z3h4AAAAAHiG5+Z+Z+Z+dnZmiP9md25nbmiI
AAAACHh2dn5n52fnZ/+Gj492j4dn52eHgAAAB3hm52dnZudmaPj4+P///4hmdn54cAAAh4fnZufm52aG
eP////j4/4hufmd4iAAAh4dn52Z2dobm5o+PiIj//4ZnZn5oeAAAd4bnZ+fn5udnZ4/4dmaI+IZ+fmdo
eAAAh4Z+bnZmdn5oiI+IZoZo/4iGZ+fneAAAeH52dufn5+doj/+Gfm54j/+IZnZ4eAAAeHbn52dmdnZo
/4/252do/4+Ibn5neAAAd4Z+ZufohohnePj3Z+Zo/4h+dufneAAAeH5n52d4j4h+Zo//hnaP+HbmfnZo
dwAAeHbnbn5/iPj4do+PiI/4/4Z+Z+fneAAAh45+doj4dnj4eI//////j4fn5n5oeAAAd4Zn5niIbmiH
aI+I+Pj4/4dufmfneAAAh45+fmb4dniPhoiGf/hniI5n5+doeAAAh4fm52j4iIiIbmbmePhuZm5+Z+aH
iAAAiHfnbniIiPiGfn5+aPhn6Ghufn53iAAACHhufm5m+H9+bnbn52bn5ubn5seHgAAACIh+fnaGhudu
fn5+fn5+fn5+fo54gAAAAIeG5+fm525+fmhufm5+aOfn5mh4AAAAAHiHfm5+fn5ufn5n5+fn5m5+fneI
AAAAAAh4aOfn5+fn5ufm5+fmjn7H54eAAAAAAAiHhufOfm5+fn5+fs5+bn5+aFiAAAAAAACIeG6Obn5+
fn5+fn5+fn5od4gAAAAAAAAIh4bn5+fm5+zn5ufn5+fneIAAAAAAAAAAiHh+fn5+fn5+fn5+bnaHiAAA
AAAAAAAACId35ufn5ufm5+fmjId4gAAAAAAAAAAAAIiHh+fs5+fn5+bn53eIAAAAAAAAAAAAAAiId3d+
fn5+fnd4d4iAAAAAAAAAAAAAAAAIiHh4d3aGd4d3iIAAAAAAAAAAAAAAAAAACIiHd3d3d3iIgAAAAAAA
AAAAAAAAAAAAAAiIj4j4iIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//+AAf//AAD//gAAf/8AAP/4AAAf/wAA/+AAAAf/
AAD/wAAAA/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAAD4AAAAAB8AAPAA
AAAADwAA8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAHAADwAAAAAA8AAPAAAAAADwAA+AAAAAAf
AAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP+AAAAB/wAA/8AAAAP/AAD/4AAAB/8AAP/4
AAAf/wAA//4AAH//AAD//4AB//8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3eIAAAAAAAAAAAAAAh3
iIiIh3eAAAAAAAAAAAB3iHZnZneIhwAAAAAAAACHiGZnZnZmZ3h4AAAAAAAIeHZ2dn5naGZniIAAAAAA
h4ZmfmdnZ+Z+dmh4AAAAAHhnaGZ+ZudmZ252iAAAAAeHZ+ZnZ2dmiGZ2dnhwAACHhuZ2huZ+d/hn5+Z4
iAAAiGdn5mdniIf/iIdn5ocAAHhudnbn5o//+P/4bnaIAAh3Z+bnZ2fo+HiPhnZnaIAIhoZ2fn5oj4bm
f/h+fneAB4bm5+ZnePiHbm//hnbngAeGd+Z4eGiP9nd/iIbnaHAHhuZ2iPiGb/jnj4bn5oeACHhueIho
iIj4///3bnbngAh+fmiG5/aPiPiI9+fnd4AIh2hoiIiIZ+b4bnbnbniAAHjm5+iPbm52iGfn5ud4AACH
fn54aH5+fm5+bn5+eAAAiIbn5ubn5+fn5+fn54gAAAh4bn5+fm5+fm5+fneAAAAAh+fn5+fn5ufn5+d4
AAAAAIh35ufn5+fn5+Z3iAAAAAAIh45+zn7Ofn5+eIAAAAAAAIh3fn5+fn5nd4gAAAAAAAAAiHeG5+fn
h4gAAAAAAAAAAAiIh3d3d4iAAAAAAAAAAAAAAIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////w
D///gAH//wAA//wAAD/4AAAf8AAAD/AAAA/gAAAHwAAAA8AAAAPAAAADgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAHAAAADwAAAA8AAAAPgAAAH8AAAD/AAAA/4AAAf/AAAP/8AAP//gAH///AP////
//8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA
AACHeId4AAAAAAAAAHh4dneHhwAAAAAAB4dmZ2ZmeIAAAAAAeGZ2fmfnZocAAAAHhnbnZnZmdmiAAACI
Zudm52iG52aIAAB3Z2fnaGj3hoZ4AAiG5+Z2j//4+G5ogAd2dnbnaPd/9nZ3gAh+bn52/4bn/45ucAd+
doaHj4Zn+HZ3gAhn54iIaPiI9ufncAeOaIaIb/j/+G5+cAh254joh2iGhudogAiGfniH5ueObn5ogACO
fmjm5+5ufn54AACH5+aG52jn5+d4AAAIfn5ufuZ+bneAAAAAh+fn537n53gAAAAACHfn7mhud4AAAAAA
AIh3d+eHiAAAAAAAAACIiIeIAAAAAAAAAAAAAAAAAAAAAP///wD/AP8A/AA/APgAHwDwAA8A4AAHAMAA
AwDAAAMAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQDAAAMAwAADAOAABwDwAA8A+AAfAPwA
PwD/AP8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA
AAAAAId3eHgAAAAHdn5maHAAAIdudnZ2eAAIdnZnb25ogAdufn+PiGaACGdmaI6IfnAH5+iPdo92gAfn
iHj4+OZwB2iGjn9+fnAI5ojn5+dngAh+bn5ufueAAIfn5+fnaAAACH5ufmiAAAAAiHd4eAAAAAAAAAAA
AAD//wAA8A8AAOAHAADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAADAAwAA4AcAAPAP
AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAB7dyQAeXcuAH57
KgBycnMAdHR0AHl5eQB9fX0Agn4mAIV/KACLhSYAhoMpAImFKQCIhSwAjIYsAI2JKQCPjCsAjYksAI+O
LwCQiikAkYwqAJSPKwCRjiwAl5EqAJKQLgCVki4Al5QvAJmRKQCdlisAmJMsAJmWLgCcli0Am5gvAJyZ
LgCHgzIAiYUyAI2KMQCOjTAAj400AIqGPgCLiDoAiog9AI2IPQCRjzAAkIo4AJCOOACQizwAkow9AJKQ
MACUkjAAl5UwAJKQNgCZljAAmJM0AJqWNACdmTAAnpk0AJOROQCYkz4An5k6AKKbLQCgmzAAoZwwAKSe
MACjnjUAoZo7AKegLwCroy0AsKcuALKpLgC4ri8ApqEwAKukMACvqDEAs6sxALiuMAC8sjEAvbI6AMG2
MQDEuDIAyb0yAM3AMgCGhUIAjotCAIuJRACIhkoAi4hKAI2LSQCOjEkAkIxFAJKQRQCZk0EAn5lDAJSQ
TACYlEsAnppLAIaFUgCMi10AkY1TAJCOXgCUklMAlZNXAJqVUQCfmlcAlZJfAJWUXwCYllsAmJZcAJ2Z
XACinEIAo51WAKOdWwCnoEMAradMALKpRQCyqkgAqKFWAKahWACqpFsAiophAI+OZQCLi2gAjItoAJWT
ZwCZlmAAmJZlAJ6bZwCVlGgAnplsAJaWdwCfnXQAmZd/AKOdYwChnGgAoJ1yAKGfeACmomUAp6RqAKik
agClonEAqaZzAKyodwCkonsAqKV+AKupfgB/f4AAgH+AAIGBgQCEhYUAiYmJAIuLjACNjY0AnJqEAJeW
jwCYl4wAm5qKAJyciwCZmIwAnZ2NAJGRkQCVlZIAk5OUAJWVlQCbmpQAl5eYAJmYmQCbm5wAnJucAJ2d
nQCgnokAp6WDAKmngwCrqYQApKOPAKqoigCtq4sArqyMALOwjQCioZUApKOXAKWklACop5AAraySAKOj
mQCkpJkAoqKcAKamnQCop54Aq6qfALCukwC0spIAsrGVALWzlQC2tJ0AuLefAKGhoQCkpKEApKSkAKur
pQCurqcAqampAK6uqgCtra0AubejALq5owCwsKwAvLupAL6+rgCxsbEAtbW1AL+/sQC6urcAt7e4ALm5
uQC9vb0AwL6tAMLAqgDEw7YAwcG4AMXEuQDAwL8Ax8a/AMnJvgC/v8AAwcHBAMXFxQDIx8AAx8jHAMnJ
wgDNzMIAz87FAMnJyQDPz8sAzc3NANDPxgDQz8oA0dHNAM/P0ADR0dEA1tXRANXV1QDZ2dYA2dnZANzb
2ADc3NsA3d3dAOHh3gDh4eEA5uXjAOXl5QDo6OcA6unpAO3t7QDw8PAA9fX1AP///wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTDn5+WlJSUlJ+fpMPUAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDlpQElsPU5+fn49TIlpKWw8MAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAw5QEn+fv07SBeGFheIG00+/nwwbDwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AMOWBMjv0HpSJCQrEhIkKxIrJFJ6yPHIBsPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5Sf8rpgJCsrKysr
KysrKysrKysrJGC78sOWwwAAAAAAAAAAAAAAAAAAAAAAAACfBNTheCQrKysrKysrKysrKysrKysrKysr
eNTclMMAAAAAAAAAAAAAAAAAAAAAAJ8E78gpKysrKysrKysrKysrKysrKysrKysrK1S755bDAAAAAAAA
AAAAAAAAAAAAnwbvmyQrKx4rNCs0KzQrNCs0KzQrNCs0KzQrKzQtm++VwwAAAAAAAAAAAAAAAADDBOeb
OSsgHis0Hh4rICs0Hh4rICs0Hh4rICsgHiseK5vnn8MAAAAAAAAAAAAAAMgG4bs5KzQ0NDQ0KzQ0NDQ0
KzQ0NB4rKyseNDQrNDQrNDm61MPIAAAAAAAAAAAAAJ/D01o0NDQeHh40IB40Hh40IB40HhJUaykSHjQg
HjQ0NDRa0cPIAAAAAAAAAAAAwwbnfzQ0NDQgHh40Hh40Hh4eHiseK1ny++MKHh4rHh4gIDQ0f+GlyAAA
AAAAAAAAn9G6NDQ+ND4gID00PSA0PSASKWYOEn37/fYDEiNlDisgIDQ9NLrQyAAAAAAAAADIBuFrND4+
PjQ+PjQ+Pj4+NB5Z7/m/Aq77/fpjVer5zyMgPj40PmvUw8gAAAAAAADDw8g0Pj4+Pj4+Pj4+Pj4+PhLT
+/399vr7+/v5+/39+a4rPT4+PjS6w8gAAAAAAOGU0YJHPj4+Pj4+Pj4+Pj4+PRLM+/39+/39//37/f39
+a4ePT4+Pj6CyMPnAAAAAMiU1F9HR0dHR0dHPkc+Rz5HPhwq8v39/frj2fH7/f395Q4gPkc+R0df0J/R
AAAAAMOWyEdHR0dHR0dHR0dHR0c+PRIB2/388WgKEiK9+f39qggePT1HR0c+w5/RAAAAAMOftkdHR0dH
R0dHR0dHR0cebMzq+vz5hxI9Qj0O2/v9+duuXj1HR0dHtpbIAAAAAJbDj0dHR0dHR0dHR0dHPkcS3vr7
+/z5WT1EREcerv39+/v5vxxHSUdHqp/IAAAAAJbDi0dKR0pHSkc+NBwebzoS2fr+/vz6WUJER0cervz9
/v3yrz1ER0pHjJbDAAAAAJbDikpHSkpJSUdn2oBV770TXarM+vz7kCtERD0S5f399s+MNEdHSkdKipbD
AAAAAJbDiUlKSUdKRz2A8vLs8sFifhIKqvz89o8OEivM+v37ZRM9R0pKSkpJipTDAAAAAJ/DiUpKSkpK
Pm+H9/fx+fL28V4k5fv7+/rv4/b6+/z7wR5FSkpKSkpKjJTIAAAAAMOfrkVKSkpHiu/38msOWez32yqw
+fv9/fv8/Pz8/fz78mdHSkpKSkpKj5TRAAAAAMOftkpKSktKOq7y3hJFHq/2hwm9+f39+fv9/P36+v39
8mdKS0pKSkpKtgbRAAAAAMOf0EpNS0tKRCrx7CQcE8738r0r2u+MDov5+/ZZLdrxrz1GS01GTUZKw5bI
AAAAANGk0HFNRk1FPdn3996PzPLqwYhCHEFCRFvy++wbRRxtQkVNRU1GRk1xn8PUAAAAAOHIw4xGTUZN
RJDBzPb29/eqG0VLRktNRj3b8sBCS0tLRkZGRkZORkaNldTnAAAAAADIw8hNRk5GRkU9XvLYsPK+RUtO
TkZORkVtdj9LTk5NTk5OTk5NTk20ldQAAAAAAADIyMh2Tk5OTkZOcMxtHHY/S05OTk5OTk5NRk1OTU5O
Rk5NTk5ORnaf0MgAAAAAAAAA0aS8TU5OTk5ORkVLTkxOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTreR4AAA
AAAAAAAAyNG6iU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OiZXRyAAAAAAAAAAAANHDu3NO
TlBOUE5QTlBOUE5QTk5QTk5QTk5QTk5QTk5QTk5zpJfcAAAAAAAAAAAAAMjjn7pNTlBOUFBOUFBQTlBQ
UFBOUFBOUFBOUFBOUFBOUE2yBufQAAAAAAAAAAAAAADD4Z+tTVBQUFBQUFBQUFBPUFBQUFBQUFBQUFBQ
UFBQTakG3LsAAAAAAAAAAAAAAAAAyNGfrU1QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNmAbRyAAAAAAA
AAAAAAAAAAAAANHUn7RzUFBQUFBQUFBQUFBQUFBQUFBQUFBQUHObBtHRAAAAAAAAAAAAAAAAAAAAAADQ
4ZXDiU1RUVBRUVBRUVBRUVBRUVBRUVBQfqQG4dAAAAAAAAAAAAAAAAAAAAAAAAAAw++fn7R2UFFRUVFR
UVFRUVFRUVFRUHaklJTxwwAAAAAAAAAAAAAAAAAAAAAAAAAAAMjn3JSlw4ByUFFRUVFRUVFRUHOApJYG
3OPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw+/UlJXDpIOAfnZ2foCDpJ8HB9TxwwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAADD5+/Qn5IHkpSSBwYGltDx58QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAANTQ1PHy8u7u8vbx1NDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//+AAf//AAD//gAAf/8AAP/4AAAf/wAA/+AAAAf/
AAD/wAAAA/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAAD4AAAAAB8AAPAA
AAAADwAA8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAHAADwAAAAAA8AAPAAAAAADwAA+AAAAAAf
AAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP+AAAAB/wAA/8AAAAP/AAD/4AAAB/8AAP/4
AAAf/wAA//4AAH//AAD//4AB//8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
AAAAAAAAAAAAAAABAAAAAQAAAAAAAH9/fwCGgyoAjYcqAI+MLwCRjSwAlZEuAJeULwCaky4AmZUuAJyW
LQCdmC4Ai4YzAI6MMACKiTQAkY8wAJKNNQCRjT8Ak5EwAJWSMACXlDAAmZYwAJ2ZMACalTsAoJouAKOd
LgCgmDAAoZ0xAKSeMACmoC4AqqIuAKykLgCwpy4AsqkvALWsLwC4ri8Ap6EwAKqjMACqpDAAraYwAK+o
MQCmoTgArqc5ALGpMQC1rTEAubAxALyyMQC+tDEAwbYyAMS3NwDFuTMAyb0zAM2/MwDNwDMAiIdAAIuK
QACPjEUAkI9AAJORQQCTkEQAnZdBAJuYRQCemEcAk5FPAJmUSgCPjlMAkI5UAJaSVgCWlFUAnJhQAJ6a
VQCZll4AnppZAKSeQQCjn0kAoZ1ZAKylQgCuqEoAt61DALSsRwC5r0MAua9EALqwQwC6sEQAqqRQAK6n
XwCxqVUAsapYAJOSYQCdmmMAnptmAJ6cZwCYlnwAnZp4AKKfZQChnmsAo6FnAKShZgCsp2QAo6BqAKai
aQCloWwAr6tpAK2pbwCxrWsAoaBwAKekcgCqpnEAral1AKKgfgClon8ApaR+AKinfQCBgYEAhYWFAI6N
gwCKioUAh4eIAImJiQCLi4wAjo6OAJCPjwCenIIAn52EAJGRkQCTk5QAlZWVAJmYkwCdnJIAmZmZAJ6e
mQCbnJwAnZ2dAKyqhgCtrIcApKOJAKamjgCop40Arq2LAK6sjQCxrogAtLGMALe0jQCmpZAArKuSAK2s
lwCzsZIAs7KVALWzlAC2tZgAsbGfALi3mgC4t5wAn5+gAKCgoQCjo6QApaWmAKqqqgCsra0AsbGgALy7
owC+vKQAv76qAL69rACxsbEAt7ewALW1tQC5uLEAubm2ALm5uQC8vLkAvb29AMHAqQDIxq0Ax8a0AMjH
tQDHxrkAyMe5AM7NuwDNzL0AwcHBAMXFxQDNzMIAz87FAMnJyQDMzMwA1NPJANbVygDU080A1dXQANfX
1ADZ2NIA3NvXANra2ADd3dsA3d3cAOLi3gDh4eEA5eXjAOXl5QDq6uoA7e3tAPDw8AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAqZl1AXF1m6kAAAAAAAAAAAAAAAAAAAAAAAAAAACpdXWbpKioqKaom3x8tAAAAAAAAAAAAAAA
AAAAAAAAdZmon1g2Dg4NDjZYlqmZfAAAAAAAAAAAAAAAAAAAqHGohzcPDw8PDw8OEg8PN4epfKkAAAAA
AAAAAAAAAJ11qUISEhISEhISEhISEhISEkKpmZ0AAAAAAAAAAACodac6EhISEhISEhISEhISEhISFDmk
gqkAAAAAAAAAAHWnOhIUFBQUFBQUFBQJEgkJFBQUFDqnmQAAAAAAAAB8qEQUFhQUFBQUFBQJCQ9waQ8J
CRQUFkSomwAAAAAAuHyJFhYWFhYaFhoYDzsPP8jFAg06EhgWFIebuAAAAAB8pj0WGhYaGhYaFgmGyJeL
yMhvs8VeFBoaPZ6dAAAAAHyRGhsbGxsbGxsbErfKysjKysjKyqMJGhsbiJsAAAC0mWAbGxsbGxsbGyQY
R8jKwI2XxcrIOhobGxtgmbgAAJ2ZSiYmJiYmJycbFmqgyMM5GBhayMqSXhgmJkqBqAAAmZsbJiYmJhsb
JBhGxcjKrwkmJg/FysjDFyYmKYGbAAB5myYnJiYmS2BblBKXv8rAEh8fQMjKu4wYJycnfJsAAHyaKysr
KxqMw8W2i0AOxcivSF67yr8DHycrKyd8mwAAm5kqKysmo76gSLDFX5TIysjIyMjIx2snKyssKnydAACo
mU0tLCZIw0UfYL5Elsi7ssjIrcXIZystLCxNfKkAALSZZy0tLWzDo16xto0YVRpJxcMJSWIfLS0tLWd8
uAAAAJmJLS0tVGy7w8VkIS0tLR+sjiEtLS0tLS0we5wAAAAAnZtTMS0tIJc7aE0uMS4wLSEhMS4xLjAw
ME98pgAAAAC4nYsxMDAtLjEtMS4wMDAwMDAwMDAwMDAwb5q4AAAAAAComVYwMDMwMDAwMzAwMDMwMDAw
MDMwMFd1qQAAAAAAAAComVIzMDMzMzMzMzMzMzMzMzMzMzNSc6kAAAAAAAAAAKmkgFIzMzMzMzMzMzMz
MzMzMzMzUnOdtAAAAAAAAAAAAKeofFczMzMzMzMzMzMzMzMzM1d0nqkAAAAAAAAAAAAAAKmwfHBSNTU1
NTU1NTU1NVJddKm0AAAAAAAAAAAAAAAAAACpnXx7VVAwNTUzUFVcdJ2pAAAAAAAAAAAAAAAAAAAAAAC4
qaibeXFxcXF1mqSpuAAAAAAAAAAAAAAAAAAAAAAAAAAAALi0tKmpqbS4AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////AP//+AAf//AAD//AAAP/gAAB/wAAAP8AAAD+AA
AAfAAAADwAAAA8AAAAOAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAPAAAADwAAAA+AA
AAfwAAAP8AAAD/gAAB/8AAA//wAA//+AAf//8A///////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
AAAAAAAAAAEAAAABAAAAAAAAjYgvAJGPLgCUki8Al5QvAJmVLwCdmC8AiYc/AJGPMACRizUAlJIwAJKQ
NQCVkTQAmpcwAJqTNwCYlTUAnZkwAJqUOACinS4ApJ4uAKCcMACknzAAopw7AKOcPwCooi8ApqAwAKii
MACqpDAArKUwALCpMQC1rDEAtq01ALivMQCwqDoAu7ExALyyMQC+tDEAv7U4AMC1MQDDuDIAx7syAMS4
NQDKvTIAzb8yAMS4OACOjUgAkY9HAJeTRACZl08Ak5JVAJ2ZUwCdmlUAnpxXAJaVWwCjnlcAq6REAKql
TwCtp08AsKlCALmvRwCnolQApqJaAKWhXgCppFsAqKVdAK+qXQCxqlEAtKxSALCqVgCyrFcAta1UALSu
WQCxrF4AnJhgAJ+cZgCNjH0Am5dxAJuYcwChn2YApqJmAKiiZwCmpGsApqNuAKmlaQCsqG8ApaJ0AKqn
cQCkoXoApqJ9AKqoeQCsqXkAsKx3ALKvfwC1sXoAtrN+AIyMjACRkIEAlJOEAJeWiACbmosAkZGRAJOT
lACWlpYAmZmZAJ2dnQCoqIAArqyAAKeniwCop4sAqKeMAKmojAC0sYIAsrCEALSyjAC1tI0ApKOVAKSk
mACnp50AqKidALSzkQC2tZEAt7WUALi2lAC5t5sAvbuZAL+8nQCgoKAApaWlAK2sogCurqQAqampAKus
qwCtra0Avr2gAL69qACxsbEAtra2ALq6ugC8vLwAw8GmAMbFsQDIx7cAysq+AMPDwwDGxsYAz8/HANDP
wADT0scA1NPKANXVzwDX1tEA19fUANjY1QDc3NUA2trYAN7e2ADg39oA4ODbAODg3QDp6ekA7OvqAO3s
6wDt7e0A8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCX2h/f39fggAA
AAAAAAAAAAAAAAAAaGh1aTUtLTVpgH9/AAAAAAAAAAAAAABkgDEICAgIAggICDGAaAAAAAAAAAAAAGRt
CAgICAgIBAgECAgIbn8AAAAAAAAAZG4IDQ0FBQ0FBQQEBA0NCGt/AAAAAAB/gA0QDQ0FEAUFBU53BAQF
EAiAggAAAABoNBAQEBAQEAh6LoyfB3IwEBA0ggAAAId2FBQUFBQUFFGfn5+jn6ONBRQUdYoAAGRqFBkU
GRQZFAien3hqmaNKBhQaVX8AAGg9GhoaGhoaPZafhQYYT5+eegYaP2gAAGQ5HR0aPy9pNJKjixgYUaOe
bxgdOGQAAGY5HR0WhpmVewiUn3xvnKMyGB0dOWgAAGhBHR1clhFWjUqfn6Ofn6N8HSAdQWcAAGhbIiI8
mk96lDRdFn2eDV43IiIiUn8AAIpzIiI6VJaVPyAiIkReICAiIiIiYo8AAACCQScmHUQhHiYmJiYiJiYm
JyZEfwAAAACHdCYnJycmJycnJycnJycnJyVhigAAAAAAh1gnKioqKioqKioqKicqJ02CAAAAAAAAAIJY
LCoqKioqKioqKionTX8AAAAAAAAAAACHY0QqKioqKioqKkRhggAAAAAAAAAAAAAAioJhUUY7O0ZQS3+K
AAAAAAAAAAAAAAAAAACQhISEgoKCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP8A
/wD8AD8A+AAfAPAADwDgAAcAwAADAMAAAwCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAMAA
AwDAAAMA4AAHAPAADwD4AB8A/AA/AP8A/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
AAAAAQAAAAEAAAAAAACQjS4AlZIvAJuXLwCdmS8AkI80AJKQMACWkzAAk5A3AJaTNACblzAAn5s2AKCc
MAChnD0ApqAwAKqjMACrpDAAraYwALGqMQC2rjEAuK8wALivOQC6sDEAvLMxAL+1MQC6sTcAwbYyAMK4
MgDHuzcAyLwzAMy/MwCcm1gAoZxBAKWeWwCmn1wApKBJAKulSwCsp04AsKlDALKqTwCloVYAtq5TAJ+c
YwCfnGUAn59yAJ6deQCbm30AnZ1/AKGfcgCgnnYAqKJiAKmlYACoo2UArqhnAKekawCmo2wArqpuALCr
bQC4smUAo6FxAKSicgChoXQApqJ1AKekfQCyr3QAtbJ5ALq2egC5tX4AnZ2aAJ6enQCyr4cAs7CCALq2
gQC7uIYAoaCbAKKinQCmpp8AvryRAL67lAC8up8Ap6agAKampQCpqagAr6+uALGxsQC3t7cAubi5AMPA
nADEwqUAxsSlAMbFqwDFw60AxsSuAMfGtwDMy7YAzcy3AMzLuQDCwsIAxMTEANDQwQDU1MYA1tXIAOTj
3wDm5uQA6OjlAO7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAFRELj09LktUAAAAAAAAAEQsBQYGBgYGPVIA
AAAAAEQfBgcGBwcGBgcfUgAAAFY9BAQEBAYIXAUHBz1hAABLCwsMCwNlY2ljYwwLTAAALg4ODg4gXl8z
ZVkNDi4AADYRESMoR2hBEU1oQBErAAA2EiVdW0ZYZlhoTRESKgAAPxIlWzhPSUNnSEMSFjEAAFIWGUhX
JhYWOhYWGhZLAABhORsWGxsbGxsbGxszYQAAAFIpHh0dHR0dHR0nUgAAAAAAVDUbHh0eHR0zUgAAAAAA
AABhUD4iIj1LYQAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAPAPAADgBwAAwAMAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAACAAQAAwAMAAOAHAADwDwAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAenp6EXd3dzh2dnZaenp6cH5+
fn1/f399e3t7cHd3d1t4eHg4fHx8EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1Nnl5eYeHh4fKkJCQ95GR
kf6Li4v/hISE/oGBgf6CgoL/h4eH/o+Pj/6VlZX/k5OT94iIiMt7e3uHeXl5NgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe3t7CHV1dWSEhITTkZGR/4CA
gP90dHT/iYmJ/6Ojo/+7u7v/yMjI/8rKyv/Kysr/x8jH/7u7u/+lpaX/jo6O/39/f/+MjIz/mpqa/4mJ
idN7e3tkg4ODCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7ewF1dXVWiYmJ3IuL
i/51dXX/mJiY/svLy/7U1NT/urq3/qWklP6Wlnf/j45l/oyLXf6Mi13/j45l/paWd/6lpJT/urq3/tTU
1P7Ly8v/nZ2d/oCAgP+ZmZn+kZGR3Ht7e1aDg4MBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXl5F35+
frGPj4/+dHR0/qurq/7W1tb/r6+q/oyLaP6GhUL/jYsy/o+OMP6PjjD/j44v/o+OL/6PjjD/j44v/o+O
L/6PjjD/jYsy/oaFQv6Li2j/r66q/tbW1v+urq7+f39//p6env6Dg4OxgICAGAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAB4eHg7ioqK5X19ff+UlJT/19fX/6amnf+GhVL/jowy/5GPMP+RjzD/kY8w/5GPMP+RjzD/kY8w/5GP
MP+RjzD/kY8w/5GPMP+RjzD/kY8w/5GPMP+RjzD/jowy/4aFUv+mpZ3/1tbW/5qamv+QkJD/kpKS5X9/
fzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHZ2dk2QkJD0dHR0/r29vf/AwL/+ioph/o+NNP6SkDD/kpAv/pKQL/6SkDD/kpAv/pKQ
L/6SkDD/kpAv/pKQL/6SkDD/kpAv/pKQL/6SkDD/kpAv/pKQL/6SkDD/kpAv/pKQMP+PjTT+ioph/r+/
vv++vr7+iIiI/pycnPR7e3tNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAeHh4UpGRkfhzc3P/zs7O/qennv+LiUT+k5Ew/pORL/6TkTD/k5Ev/pOR
L/6TkTD/k5Ev/pORL/6TkTD/k5Ev/pORL/6TkTD/k5Ev/pORL/6TkTD/k5Ev/pORL/6TkTD/k5Ev/pOR
MP+TkS/+k5Ew/ouJRP+mpp7+zc3N/omJif+dnZ34fn5+UgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9fX08kpKS9XJyc//R0dH/m5uL/5COOP+UkjD/lJIw/5SS
MP+UkjD/lJIw/5SSMP+UkjD/lJIw/5SSMP+UkjD/lJIw/5SSMP+UkjD/lJIw/5SSMP+UkjD/lJIw/5SS
MP+UkjD/lJIw/5SSMP+UkjD/lJIw/5SSMP+Qjjj/m5qK/8/P0P+Kior/nZ2d9oSEhDwAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKCgheTk5PldHR1/s3Nzf6dnY3/kpA2/paT
MP+Wky/+lpMv/paTL/6WkzD/lpMv/paTL/6WkzD/lpMv/paTL/6WkzD/lpMv/paTL/6WkzD/lpMv/paT
L/6WkzD/lpMv/paTL/6WkzD/lpMv/paTMP+Wky/+lpMv/paTMP+Wky/+kpA2/pyci//Ly8v+kJCQ/peX
l+WJiYkXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4eIAYuLi7F9fX3/vb29/6en
nv+TkTn/l5Uw/5eVMP+XlTD/l5Uw/5eVMP+XlTD/l5Uw/5eVMP+XlTD/l5Uw/5eVMP+XlTD/l5Uw/5eV
MP+XlTD/l5Uw/5aTL/+TkS7/ko8u/5SRLv+XlC//l5Uw/5eVMP+XlTD/l5Uw/5eVMP+XlTD/l5Uw/5OR
Of+kpJv/vr6+/5ybnP+NjY2xj4+PAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhISEV5OT
k/6bm5z/u7u5/pKQRf6ZljD/mZYv/pmWMP+Zli/+mZYv/pmWL/6ZljD/mZYv/pmWL/6ZljD/mZYv/pmW
L/6ZljD/mZYv/pmWL/6ZljD/mJUv/o2KLP6Ni0n/lZRf/oqIPf6Sjy3/mZYv/pmWMP+Zli/+mZYv/pmW
MP+Zli/+mZYv/pmWMP+SkEX+tbW0/qWlpf+pqKn+ioqKVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACMjIwImJiY3Hp6ev7Ly8v/lZRo/puXMP6blzD/m5cv/puXMP+bly/+m5cv/puXL/6blzD/m5cv/puX
L/6blzD/m5cv/puXL/6ali//mJQv/peTLv6Zli//lpMu/o6MSf7c3Nv/6Ojo/snJwv6Ggyn/mZUv/piV
L/+Wky7+mJUv/pqXL/+bly/+m5cv/puXMP+blzD+lZNn/sTExP+Wlpb+np6e3JSUlAgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACKiopkj4+P/q6urv6op57/mpY0/pyZL/6cmTD/nJkv/pyZMP+cmS/+nJkv/pyZ
L/6cmTD/nJkv/pyZL/6cmTD/nJkv/puYL/6Sjyz/i4g6/pSSU/6Khir/j4wr/piWZf7q6ur/8PDw/t/f
3/5+eyr/kI0s/omFMv+Vk1f+iIUt/paTLv+cmC/+nJkv/pyZMP+cmS/+mpY0/qOjmf+vr6/+qamp/o+P
j2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYmJjUf3+A/8TExf+Yllz/npow/56aMP+emjD/npow/56a
MP+emjD/npow/56aMP+emjD/npow/56aMP+emjD/npow/5eTLv+Oi0n/1dTQ/+bm5v+zspf/eXcu/6mo
iv/s7Oz/7+/v/+jo6P+Qjl7/iIZK/9DPxv/m5ub/vr6u/4mGM/+ali//npow/56aMP+emjD/npow/5iW
W/+6urv/mJiZ/56entQAAAAAAAAAAAAAAAAAAAAAAAAAAIuLizaamZr/n5+f/qurpf6emjT/oJsw/qCb
MP6gnDH/oJsw/qCcMf+gmzD+oJsw/qCbMP6gnDH/oJsw/qCbMP6gnDH/n5sw/o6KK/6/v7H/6+vr/vLy
8v7v7+//39/c/ubm5v7r6+v/6+vr/uvr6/7l5eT/6eno/vLy8v/w8PD+5eXl/qmnh/+UkC3+oJsw/qCc
Mf+gmzD+oJsw/p6aNP+lpZ/+oqKi/q6urv+RkZI2AAAAAAAAAAAAAAAAAAAAAJSUlImGh4f/t7e4/qCe
df6inTH/op0w/qKdMP6inTH/op0w/qKdMf+inTD+op0w/qKdMP6inTH/op0w/qKdMP6inTH/oZww/pGN
K/66uaX/6+vr/vDw8P7w8PD/7e3t/u7u7v719fX/9/f3/vHx8f7t7e3/7+/v/vLy8v/x8fH+5ubm/qup
iv+Wki3+op0w/qKdMf+inTD+op0w/qKdMf+fnXT+rKys/qKiov+ZmZmJAAAAAAAAAAAAAAAAAAAAAJ6e
ntF/f4D/urq6/56aS/+knzH/pJ8x/6SfMf+knzH/pJ8x/6SfMf+knzH/pJ8x/6SfMf+knzH/pJ8x/6Sf
Mf+knzH/o54w/5yYLv+Khj7/3NvY/+/v7//w8PD/8fHx/+bm5v/MzMP/w8K0/9nZ1v/t7e3/8fHx//Dw
8P/w8PD/ycm+/4mFMf+fmi//pJ4x/6SfMf+knzH/pJ8x/6SfMf+emkv/ra2t/5SUlP+kpKTRAAAAAAAA
AAAAAAAAkpKSEp6enviMjI3/rq6q/qOeNf6moDH/pqAw/qagMP6moDH/pqAw/qagMf+moDD+pqAw/qag
MP6moDH/pqAw/qagMP6knjD/nZcu/pKNK/57dyT/x8a3/u7u7v7t7e3/1tbU/pWSX/6IhCn/jIgp/oeD
Mv6urJL/5eXl/vDw8P/w8PD+p6WD/oJ+Jv+WkSz+n5ov/qWfMP+moDD+pqAw/qagMf+jnjX+paWh/pGR
kv+tra34m5ubEgAAAAAAAAAAkpKSOZiYmP6Wlpb/qaiT/qeiMf6nojH/p6Iw/qeiMP6nojH/p6Iw/qei
Mf+nojD+p6Iw/qeiMP6nojH/p6Iw/qehMP6cly3/nJle/rq5pP7Qz8f/6Ojn/u3t7f7l5eX/oqB4/pSP
K/6knzD/pqAw/qGcL/6JhSz/xsW6/uzs7P/x8fH+5eXk/sXFuP+urY3+mJRL/qGbL/+nojD+p6Iw/qei
Mf+nojH+pKOP/o2Njv+urq7+mZmZOQAAAAAAAAAAlJSUW5GRkf+enp7/qKZ//6qjMf+qozH/qqMx/6qj
Mf+qozH/qqMx/6qjMf+pozD/qaIw/6mjMP+noTD/pZ8v/6WfL/+Tjiz/yMfA/+bm5v/q6ur/7Ozs/+3t
7f/i4uL/jotC/6OdL/+qozH/qqMx/6mjMP+ZlCz/qqiE/+3t7f/w8PD/7e3t/+np6f/j4+P/srCU/5yW
Lf+pozH/qqMx/6qjMf+qozH/pqR+/46Pj/+oqan/mpqaWwAAAAAAAAAAmJiYcYyMjP6hoaL/pqNw/qul
MP6spTH/q6Uw/qulMP6spTH/q6Uw/qqkMP+hmy7+mJMu/pyWLP6Ykyz/n5tc/piTPv6Qiyr/wsK3/ubm
5v719fX/9PT0/vDw8P7m5ub/kY1F/qWeL/6rpTH/q6Uw/qukMP6alSz/rauH/u7u7v/y8vL+9fX1/vDw
8P/e3t7+rKmE/p+ZLf+rpTD+q6Uw/qylMf+rpTD+pqNw/o6Oj/+io6P+nZ2dcQAAAAAAAAAAnJycfYmJ
if6fn5//qKRq/q2nMP6tpzH/racw/q2nMP6tpzH/racw/qegL/+bl1H+wcC4/p2abf6LiEr/0tLS/q+u
k/6Piij/lJBM/qqohf66uaH/5eTj/vDw8P7r6+v/qqeA/peRKv6poi//q6Qw/qafLv6NiC3/zs3D/u/v
7//y8vL+4ODe/rq5pv+mpHn+mJM0/qmiL/+tpzD+racw/q2nMf+tpzD+p6Rq/omJif+goKD+oaGhfAAA
AAAAAAAAnZ2dfYuLjP+cnJ3/qaVr/7CoMf+wqDH/sKgx/7CoMf+vqDH/raUw/6CZLP+gnXD/2tra/9fX
1//R0c3/3t7e/7a0nv+QjFD/nptn/5CKKf+LhSb/q6mH/+vr6//u7u7/4eHg/6imff+PiTD/kYsp/5CL
PP+7uqP/6enp/+/v7//q6ur/ko9X/5KMKP+jnC3/q6Qw/6+oMf+wqDH/sKgx/7CoMf+wqDH/qKVr/4SF
hf+kpKT/oqKifQAAAAAAAAAAmZmZcZWVlf6cnJ3/qaZx/rGqMf6xqjL/saox/rGqMf6upzH/n5k0/pyY
W/+hn3j+39/f/uHh4f7X1tD/4uLh/t7e3v7e3t7/1tbW/pqWUv6OiTL/ysq//urq6v7r6+v/6+vr/ubm
5v7W1tH/z87F/t7e3f7o6Oj/6+vr/uzs7P/q6ur+uLef/pmTLP+vqDH+saox/rGqMv+xqjH+saox/rGq
Mv+xqjH+qaZx/oSEhP+rq6v+n5+fcQAAAAAAAAAAlpaWWpycnP6Wl5f/rKmA/rOrMf6zqzL/s6sx/rOr
Mf6tpTD/pqJn/tbW1v/e3t7+2dnZ/pmWYP6OiCr/kIxF/tDPyv7i4uL/xcS7/o2JPP6urIz/4+Pj/unp
6f7w8PD/8fHx/u3t7f7s7Oz/7e3t/uzs7P7v7+//8fHx/u3t7f/o6Oj+29vb/p+aV/+tpjD+s6sx/rOr
Mv+zqzH+s6sx/rOrMv+zqzH+qqh//oCAgf+wsLD+m5ubWwAAAAAAAAAAlJSUOaSkpP+QkJH/rq2W/7Wt
Mv+1rTL/ta0y/7WtMv+yqTH/n5k6/6uphv/e3t3/x8a7/5KLKP+vpzD/nZYr/62ri//e3t7/paJ9/4V/
KP+vrZD/5OTk//X19f/u7u7/4+Pe/+vq6f/v7+//7e3t//Dw8P/n5+P/5+bj//Pz8//v7+//2dnZ/6Gc
V/+vpzD/ta0y/7WtMv+1rTL/ta0y/7WtMv+1rTL/qKeQ/4CAgf+zs7P/m5ubOQAAAAAAAAAAlZWVEqKi
oviSkpP/sLCs/rSsNv63rzL/t68x/revMf62rjH/qKAt/o2IPv/W1tP+0dHN/pCKOP6hmiz/kYsq/ry7
qf7h4eH/2tra/rCuk/6Qizj/wL6t/tPT0f6opXf/jIYs/qShdf7j4+P/6urq/t3d3f6Qi0f/kow9/sC/
rv/X19f+rqyF/qKbLf+1rTH+t68x/revMv+3rzH+t68x/revMv+0rDb+oaGd/ouLjP+tra34nZ2dEgAA
AAAAAAAAAAAAAJ6entCZmZn/rq6u/q2nTP65sDL/ubAx/rmwMf64rzH/pZ0u/sLCuP/h4eH+4ODg/sXE
uf6opX7/ubej/tra2v7NzML/t7We/qaiZP6nnyz/opou/qGaO/6ooC3/rqYv/pmTQf7a2tr/6+vr/s/P
y/6YkSr/rqUu/qGaL/+hm0T+pZ4t/rWsMP+5sDH+ubAx/rmwMv+5sDH+ubAx/rmwMv+tp0z+l5eX/qGh
of+ioqLQAAAAAAAAAAAAAAAAAAAAAJeXl4msrKz/nZ2d/6yod/+7sjL/u7Iy/7uyMv+7sTH/rKMt/62q
ff+3tZ3/vbyk/97e3v/f39//4+Pj/+Li4v+qp4P/mpIp/7CnLv+5sDH/ubAx/7mwMf+6sTH/ubAx/6CY
LP/Hxr//3Nzc/7Wzlf+poS3/urEx/7mwMf+4rzH/urEx/7uyMv+7sjL/u7Iy/7uyMv+7sjL/u7Iy/7uy
Mv+rp3b/hISE/7m5uv+bm5uJAAAAAAAAAAAAAAAAAAAAAJCQkDatra3/mZmZ/q6up/65sDX/vbMx/r2z
Mf69szL/ubAx/q+mLv+jmyv+mZRQ/tzc3P7CwKr/s7CN/tfX1/60spL/rqUt/ryzMf69szL/vbMx/r2z
Mf69szL/vLMx/rOqL/6knUD/pqFY/qaeMv64rjD/vbMx/r2zMv+9szH+vbMx/r2zMv+9szH+vbMx/r2z
Mv+9szH+vbMx/rmwNf+jo5z+ioqK/re3t/+WlpY2AAAAAAAAAAAAAAAAAAAAAAAAAACYmJjTqqur/6mp
qf+rpV3/v7Uy/7+1Mv+/tTL/v7Uy/761Mf+6sDD/p6BD/7u5o/+fmUP/oZks/6mjWf+nnzL/ua8w/7+1
Mv+/tTL/v7Uy/7+1Mv+/tTL/v7Uy/760Mf+7sTD/ua8w/7yyMf++tTH/v7Uy/7+1Mv+/tTL/v7Uy/7+1
Mv+/tTL/v7Uy/7+1Mv+/tTL/v7Uy/6umXf+Pj4//sbCw/5ycnNMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACSkpJjt7e3/peXmP6rqp//vLI2/sG2Mf7BtjL/wbYx/sG2Mv+/tTH+uK4v/rGoLv64ri//vbMx/ruy
MP6+szH/wLYx/sG2Mf7BtjL/wbYx/sG2Mf7BtjL/wbYx/sG2Mf7BtjL/wbYx/sG2Mf7BtjL/wbYx/sG2
Mv/BtjH+wbYx/sG2Mv/BtjH+wbYx/sG2Mv/BtjH+vLI2/qSjl/+AgYH+wMHB/peXl2MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACVlZUImZmZ3LW1tf6jo6P/qKNr/sK4Mv7CuDL/wrgy/sK4Mv/CuDL+wrgy/sK3
Mv7CuDL/wrgy/sK4Mv7CuDL/wrgy/sK4Mv7CuDL/wrgy/sK4Mv7CuDL/wrgy/sK4Mv7CuDL/wrgy/sK4
Mv7CuDL/wrgy/sK4Mv/CuDL+wrgy/sK4Mv/CuDL+wrgy/sK4Mv/CuDL+qKRr/oWFhf+3t7f+np6e3J2d
nQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjo6OVra2tv6cnJz/qqqo/7KqSP/EuTP/xLkz/8S5
M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5
M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M/+yqkj/mZmX/4yM
jP++vr7+kZGRVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk5OTAY6OjrHFxcX/k5OU/qWk
mP68sTv/xroy/sa6M//GujL+xroy/sa6Mv7GujP/xroy/sa6Mv7GujP/xroy/sa6Mv7GujP/xroy/sa6
Mv7GujP/xroy/sa6Mv7GujP/xroy/sa6Mv7GujP/xroy/sa6M//GujL+xroy/sa6M//GujL+xroy/rux
O/+dnJH+eHh5/svLy/+QkJCxmpqaAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKS
kheamprlv7+//pWVlf6hn4n/v7Q5/si8M//IvDL+yLwy/si8Mv7IvDP/yLwy/si8Mv7IvDP/yLwy/si8
Mv7IvDP/yLwy/si8Mv7IvDP/yLwy/si8Mv7IvDP/yLwy/si8Mv7IvDP/yLwy/si8M//IvDL+yLwy/si8
M//IvDL+v7Q5/p2bhf95eXn+v7/A/p2dneWWlpYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACNjY07qKio9bS0tP+VlJT/oJ6J/76zO//JvTP/yb0z/8m9M//JvTP/yb0z/8m9
M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9
M//JvTP/yb0z/8m9M/++szv/m5mD/3p7e/+ysrL/rKys9Y+PjzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhoaGUbKysvi2trb/kJCR/qKhlv+zqkf+y74z/su+
Mv7LvjP/y74y/su+Mv7LvjP/y74y/su+Mv7LvjP/y74y/su+Mv7LvjP/y74y/su+Mv7LvjP/y74y/su+
Mv7LvjP/y74y/su+M//LvjL+y74z/rOpRv+Yl4z+enp6/rOzs/+0tLT4h4eHUQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWFhVGtra31w8PD/oiI
iP+kpKL+pJ9l/sS4Nv7MvzP/zL8y/sy/Mv7MvzP/zL8y/sy/Mv7MvzP/zL8y/sy/Mv7MvzP/zL8y/sy/
Mv7MvzP/zL8y/sy/Mv7MvzP/zL8y/sy/M//EuDb+opxi/pWVk/94eHj+w8PD/q6urvWGhoZRAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACLi4s7mZmZ5dXV1f+Pj4//lZWV/6KhlP+ooVb/x7o1/83AM//NwDP/zcAz/83AM//NwDP/zcAz/83A
M//NwDP/zcAz/83AM//NwDP/zcAz/83AM//NwDP/x7o1/6afVf+ZmIz/hoaG/4iIiP/W1tb/mpqa5YyM
jDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAkJCQF4WFhbHIyMj+vb29/oODg/6ZmZn/nZ2W/qKdaf6yqUX/xro2/s7B
M/7OwTP/zsEy/s7BMv7OwTP/zsEy/s7BMv7OwTP/xro2/rKoRf6gm2j/l5aP/oyMjP97e3v+vb29/snJ
yf6FhYWxkpKSFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGRkQGGhoZWl5eX29LS0v66urr/iIiI/omJ
if6ZmZn/mZiU/pqXf/6emWz/opxe/qWeWP6ln1n/opxe/p+abf6Zl3//lpWR/pCQkP59fX3/gYGB/rm5
uf/S0tL+l5eX24eHh1aVlZUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlZWVCImJ
iWORkZHTyMjI/9TU1P+0tLT/k5OT/4B/gP9+fn7/gYGB/4SEhP+Dg4P/fn5+/3d3d/95eXn/jIyM/7Ky
sv/U1NT/yMjI/5GRkdOKiopjmJiYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAjIyMNoeHh4eXl5fKt7e399XV1f7c3Nz/2NjY/tHR0f7R0dH/2NjY/tzc
3P7V1dX/t7e395iYmMqIiIiHjo6ONgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiYEZOTkziPj49al5eXcJ6e
nnyenp58l5eXcJCQkFqUlJQ4m5ubEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP//
4Af//wAA//8AAP//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/
AAD8AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA/AAAAAA/
AAD+AAAAAH8AAP8AAAAA/wAA/4AAAAH/AAD/wAAAA/8AAP/gAAAH/wAA//gAAB//AAD//wAA//8AAP//
4Af//wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0B3l5eU2Hh4eShYWFyH5+
fup9fX37fn5++4GBgeqJiYnIiIiIknt7e014eHgHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3EICAgIOBgYHriYmJ/6Gh
of+wsLD/t7e3/7W1tf+1tbX/t7e3/7Kysv+np6f/kZGR/4qKiuuHh4eDfn5+EAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7e1mDg4Pqk5OT/7a2
tv+xsaD/k5Jh/4iHQP+KiTT/jo0w/46NMP+KiTT/iIdA/5OSYf+xsZ//t7e3/5ubm/+Pj4/qgoKCWgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHh4eAOBgYGXhISE/7W1
tf+npo7/i4pA/5GPMP+RjzD/kY8w/5GPMP+RjzD/kY8w/5GPMP+RjzD/kY8w/5GPMP+LikD/pqaO/7e3
t/+Tk5P/iIiIl39/fwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7e3sEg4ODrYmJ
if+9vbn/kI5U/5ORMP+TkTD/k5Ew/5ORMP+TkTD/k5Ew/5ORMP+TkTD/k5Ew/5ORMP+TkTD/k5Ew/5OR
MP+TkTD/j45T/7y8uf+ZmZn/i4uLrYKCggQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeG
h5iJiYn/ubix/5CPQP+VkjD/lZIw/5WSMP+VkjD/lZIw/5WSMP+VkjD/lZIw/5WSMP+VkjD/lZIw/5WS
MP+VkjD/lZIw/5WSMP+VkjD/kI9A/7e3sP+bnJz/jY2NmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACHh4dah4eI/7u7t/+TkUH/l5Qw/5eUMP+XlDD/l5Qw/5eUMP+XlDD/l5Qw/5eUMP+XlDD/l5Qw/5eU
L/+UkS//lJIv/5eUL/+XlDD/l5Qw/5eUMP+XlDD/k5FB/7i4tf+dnZ3/jIyMWgAAAAAAAAAAAAAAAAAA
AAAAAAAAh4eHEIuLi+q0tLT/l5VW/5mWMP+ZljD/mZYw/5mWMP+ZljD/mZYw/5mWMP+ZljD/mZYw/5mW
L/+Zli//j4ww/6inff+hoHD/ko8t/5mWMP+Zli//mZYw/5mWMP+ZljD/lpRV/7W1tf+dnZ3qj4+PEAAA
AAAAAAAAAAAAAAAAAACSkpKDlZWW/6injf+cmDD/nJgw/5yYMP+cmDD/nJgw/5yYMP+cmDD/nJgw/5yY
L/+Sji3/k5BE/5GNLP+TkU//6+vr/+Pj4v+Ggyr/j4wv/5KPQf+VkS3/nJgv/5yYMP+cmDD/pKOJ/6am
p/+ZmZmDAAAAAAAAAAAAAAAAioqKB46OjuuysrL/m5hF/5+bMP+fmzD/n5sw/5+bMP+fmzD/n5sw/5+b
MP+fmzD/l5Mu/62sh//p6en/uLeb/66sjf/t7e3/6+vr/6Wkfv/NzL3/5eXk/56cZ/+ali//n5sw/5+b
MP+bmEX/ra2t/6CgoOuTk5MHAAAAAAAAAACSkpJOkpKT/62sl/+hnTH/oZ0x/6GdMf+hnTH/oZ0x/6Gd
Mf+hnTH/oZ0x/6GdMf+VkS3/zc3D//Dw8P/v7+//7Ozs//Ly8v/w8PD/7e3t//Ly8v/v7+//v76r/5mV
Lv+hnTH/oZ0x/6GdMf+mpZD/o6Ok/5iYmE4AAAAAAAAAAJqampWWl5f/paJo/6SfMf+knzH/pJ8x/6Sf
Mf+knzH/pJ8x/6SfMf+knzH/pJ8w/56ZL/+Zll7/7e3t/+/v7//Z2NP/r66L/7e2mf/l5eP/8PDw/+rq
6f+PjEX/oJsv/6SfMP+knzH/pJ8x/6OhZ/+ampv/o6OjlQAAAAAAAAAAlZWVyKCgoP+jn0n/p6Ex/6eh
Mf+noTH/p6Ex/6ehMf+noTH/p6Ex/6ehMP+bljL/p6Ry/7y7o//s7Oz/3d3b/5GNP/+gmi7/nJct/52a
Y//p6en/7e3s/7Oxkv+hn2X/npgu/6ehMf+noTH/o59J/5iZmf+kpKTJAAAAAAAAAACQkJDqpKWl/6ah
OP+qpDH/qqQx/6qkMf+qpDD/p6Ew/6agL/+jnS7/n5ot/56aVf/i4uL/7e3t/+7u7v/Ix7X/nJYt/6qk
Mf+qpDD/kYwt/+Xl5f/w8PD/7Ozs/9zc3P+alTv/qqQx/6qkMf+moTj/mZmZ/6CgoOoAAAAAAAAAAJGR
kfuhoaH/rKYx/62mMf+tpjH/raYx/6qjMP+inlr/o6Bq/56bZv+zspX/ko01/7i3nP/W1sv/8PDw/9ra
0/+VkC//qqQw/6miL/+ZlEn/6urq//Hx8f/U08r/sa6I/6GbLv+tpjH/raYx/6ymMf+Tk5P/n5+g+wAA
AAAAAAAAk5OU+5+foP+vqDL/sKkx/7CpMf+upzH/npgs/66si//d3d3/39/d/83Mwv+tq4b/mZVL/4uG
M//l5eX/7Ozs/8fGtP+gnFn/pKFm/9TTyf/u7u7/2djR/42HKv+poi//r6gx/7CpMf+wqTH/r6gy/4+P
j/+jo6T7AAAAAAAAAACXl5fqoKCh/66nOf+zqzL/s6sy/6egLv++vaz/1dXQ/768pP+fm1r/yMe5/+Dg
4P+hnmv/tbOU/+jo6P/u7u7/7e3t/+rq6v/r6+v/7u7u/+3t7f/m5ub/q6dx/7CoMf+zqzL/s6sy/7Or
Mv+upzn/kJCQ/6WlpeoAAAAAAAAAAJycnMigoKD/rqhL/7auMv+2rjL/r6cw/52ZWP/b29n/nJhQ/6uj
Lv+loWz/19fU/5aSVv+2tJj/6+vr/9bVyv/Ozbv/7Ozs/+vr6//Ixq3/4uLe/+bm5v+sqG//s6ox/7au
Mv+2rjL/tq4y/66oSv+RkZH/qKioyQAAAAAAAAAAnJyclZycnf+xrWv/ubAy/7mwMv+1rDD/ral1/+Dg
4P+/vqr/o59l/8fGuf/PzsX/tLGM/6CYMP+sp2T/pJwx/52XQf/i4uL/2dnY/5qTLv+knkH/rKdl/6yk
Lv+4sDH/ubAy/7mwMv+5sDL/r6tp/5OTlP+jo6OVAAAAAAAAAACVlZVOoaGh/6yrkv+8sjL/vLIy/7mw
Mf+qpFD/qaVx/9TTzf/c29f/4uLi/6eja/+wpy7/urEx/7qxMf+7sjH/q6Mu/8HAqf+3tI3/sagv/7ux
Mf+6sDH/u7Ix/7yyMv+8sjL/vLIy/7yyMv+fnYT/pqWm/5ubm04AAAAAAAAAAI+Pjwenp6froqKi/7Ss
R/++tTL/vrQy/7yzMf+wpy7/ubeZ/56YR/+vq2//rKVC/72zMf++tTL/vrUy/761Mv+9szH/s6ov/7Ws
L/++tDH/vrUy/761Mv++tTL/vrUy/761Mv++tTL/tKxH/5CQkP+vr6/rl5eXBwAAAAAAAAAAAAAAAJeX
l4OoqKj/rKmH/8G2Mv/BtzL/wbcy/7+1Mf+4ri//vLIx/760Mf+/tTH/wbcy/8G3Mv/BtzL/wbcy/8G3
Mv/BtzL/wbcy/8G3Mv/BtzL/wbcy/8G3Mv/BtzL/wbcy/8G2Mv+ioH7/oaKi/52dnYMAAAAAAAAAAAAA
AAAAAAAAj4+PEKurq+qhoaH/sapZ/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5
M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/xLkz/8S5M//EuTP/sapY/4uLjP+xsbHqlpaWEAAA
AAAAAAAAAAAAAAAAAAAAAAAAkJCQWbW1tf+enpn/ua9E/8e7M//HuzP/x7sz/8e7M//HuzP/x7sz/8e7
M//HuzP/x7sz/8e7M//HuzP/x7sz/8e7M//HuzP/x7sz/8e7M//HuzP/x7sz/7mvRP+Li4b/tbW1/5SU
lFkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJSUmLGxsf+dnJL/urBE/8m9M//JvTP/yb0z/8m9
M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M//JvTP/yb0z/8m9M/+6sEP/jo2D/6ur
q/+WlpaYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIgEmJiYrrOzs/+ZmJP/sqpW/8u+
M//LvjP/y74z/8u+M//LvjP/y74z/8u+M//LvjP/y74z/8u+M//LvjP/y74z/8u+M//LvjP/sKhU/4mJ
hP+trq7/mZmZro2NjQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIgEk5OTmLy8
vP+VlZX/paJ//7qwRP/NwDP/zcAz/83AM//NwDP/zcAz/83AM//NwDP/zcAz/83AM//NwDP/ua9D/52a
eP+JiYn/urq6/5SUlJmNjY0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAi4uLWbOzs+qrq6v/kJCQ/56cgv+up1//t61D/8S3N//NvzP/zb8z/8S3N/+3rUP/rqdf/5iW
fP+Hh4f/p6en/7S0tOqMjIxZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAioqKEJSUlIOzs7Prs7Oz/6SkpP+Qj4//hISE/4KCgv+BgYH/gYGB/4qK
iv+dnZ3/sLCw/7S0tOuVlZWDjo6OEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAImJiQeLi4tNoaGhkbW1tci3t7fqt7e3+7e3
t/u3t7fqtbW1yKKiopGNjY1NjIyMBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP//////wAP//wAA//4AAH/4AAAf8AAAD/AAAA/gAAAHwAAAA8AAAAOAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP8AAAD/gA
AB/+AAB//wAA///AA///////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdXVwRjY2Mka2trO2traztkZGQkWlpaBAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1d
XQJ6enpOgICAroWFhfCenp7/pqam/6enp/6hoaH/ioqK8IaHhq9/f39OZmZmAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4MoCAgMygoKD+p6ed/qiogP6Wllv+jo1I/o6N
SP6WlVv+qKiA/qmon/6np6f+ioqKzICAgDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAB+fn5fjo6O+K2to/+TklX/kY8w/pGPMP+RjzD/kY8w/5GPL/6RjzD/kY8v/pGPMP+TklX/rq6k/pqa
mviGhoZfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKCgmGSkpL9qKeM/pKQNf+UkjD/lJIv/pSS
MP+UkjD/lJIw/5SSL/6UkjD/lJIv/pSSMP+UkjD/kpA1/qeni/+goKD9iYmJYQAAAAAAAAAAAAAAAAAA
AAAAAAAAhISEMpCQkfipqIz+lpMx/peUL/6XlC/+l5Qv/peUL/6XlC/+l5Qv/peUL/6Vky/+lJIv/peU
L/6XlC/+l5Qv/paTMf6op4v+oKCg+IqKijIAAAAAAAAAAAAAAABubm4CioqKzK6tov+YlTX/mpcv/pqX
MP+alzD/mpcv/pqXMP+ali//mJUv/5iVL/6hn2b/tLOR/pKPLf+YlS//mZYv/pqXMP+YlTX/rayh/pqa
msx7e3sCAAAAAAAAAACPj49OoKCg/p6cV/+dmTD/nZkw/p2ZMP+dmTD/nZkw/p2ZMP+VkTT/trWR/5GP
R/7GxbH/6urq/omHP/+1tI3/mZdP/pyYL/+dmTD/nZpW/qurq/+WlpZOAAAAAAAAAACQkJCvqKic/qCc
Mf6hnDD+oZww/qGcMP6hnDD+oZww/qGcMP6mpGv+7u7u/uvr6v7t7e3+8PDw/urq6v7x8fH+yMe3/puW
L/6hnDD+oJwx/qSkmP6enp6vAAAAAG5ubgSSkpLxqqh5/qWfMf+lnzH/pZ8w/qWfMf+lnzH/pZ8w/qKd
MP+NiC//4ODb/+np6P60soz/rKl5/tzc1f/w8PD/n5xm/p6ZL/+knzD/pZ8w/qWidP+enp7xgYGBBIGB
gSWXl5f/qKVd/qmjMf+pozH/qKMw/qiiMP+oojD/pqAw/qWhXv/W1s//7Ozs/769oP6hnC7/pqEw/qWh
Zf/u7u7/4ODc/re1lP+jni//qKMw/qejW/+dnZ3/k5OTJYmJiTuVlZb/qqVP/qymMf+spjH/qqQw/qWh
Wf+Xk0T/rqyA/p6aVf/Qz8D/7u7u/8PBpv6kni7/qqMw/qmlaf/w8PD/4N/a/rKwhP+ooi//rKYw/qql
T/+Wlpf/nJycO4qKijuWlpf+radP/rCpMf6wqDH+opw7/r69qP7Y2NX+1dXP/rm3m/6RizX+09LH/unp
6f69u5n+tLGC/t7e2P7s7Oz+nZlT/qylMP6wqTH+sKkx/q2nT/6Wlpb+nZ2dO4KCgiWampr/saxe/rSs
Mv+yqjH/sq9//tfX1P+alDj/qqdx/srKvv+cmGD/6urq/+3s6/7t7ez/7e3t/uzr6v/u7u7/vbuZ/rGp
Mf+0rDL/tKwx/q+qXf+ZmZn/lZWVJXJycgSbm5vxsKx3/rivMf64rzH+p6JU/tra2P6no2f+uLaU/s/P
x/6jnlf+tbF6/qOcP/6/vJ3+4ODf/pqTN/62s37+q6RE/rivMf64rzH+uK8x/qajbv6fn5/xhISEBAAA
AACgoKCvpKOV/ruyMv+8sjH/sKlC/qyob//X1tH/1NPK/qmkW/+5rzH/u7Ix/7uyMf6wqlb/t7N//rat
MP+7sTH/vLIx/ryzMv+8szL/u7Iy/peWiP+oqKivAAAAAAAAAACTk5NOqKio/rSuWf/AtjL/wLUx/rat
Nf+xqlH/sKg6/reuMf/AtjL/wLYy/8C2Mf6+tDH/vrMx/sC1Mf/AtjL/wLYx/sC2Mv/AtjL/sqxX/qCg
oP+ZmZlOAAAAAAAAAAB1dXUCpKSkzKSjlf6/tTj+w7gy/sO4Mv7DuDL+w7gy/sO4Mv7DuDL+w7gy/sO4
Mv7DuDL+w7gy/sO4Mv7DuDL+w7gy/sO4Mv6/tTj+lJOF/qmpqcyDg4MCAAAAAAAAAAAAAAAAjY2NMqys
rPimon3/xbk0/se7M//HuzP/x7sy/se7M//HuzP/x7sz/8e7Mv7HuzP/x7sy/se7M//HuzP/x7sy/sW5
NP+bmHP/qKio+JKSkjIAAAAAAAAAAAAAAAAAAAAAAAAAAJKSkmCsrKz9pKF6/sS4OP/KvTP/yr0y/sq9
M//KvTP/yr0z/8q9Mv7KvTP/yr0y/sq9M//KvTP/xLg3/puXcf+lpaX9lZWVYAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACSkpJgrq6u+Juai/63rlX+y74z/s2/Mv7NvzL+zb8y/s2/Mv7NvzL+zb8y/su+
M/60rFL+kZCB/qurq/iVlZVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIiIMqmp
qcuqqqr/lJOE/qqlav+1rVT/ua9H/7mvR/61rVT/qKJn/o2Mff+kpKT/qampy4uLizIAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9vbwKMjIxOrKysrqWlpfCrq6v/rKys/6ur
q/6oqKj/o6Oj8KysrK6Ojo5OdXV1AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFxcQSAgIAkj4+PO4+PjzuBgYEkdHR0BAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/ACgA
AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpK
ShVsbGxWcnJyeXR0dHlubm5WTk5OFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV1dXFoOD
g5+cnJj6m5t9/6GhdP+hoXT/nZ1//6GhnPqMjIyfX19fFgAAAAAAAAAAAAAAAAAAAAAAAAAAbGxsLZOT
kuWfn3L/kI80/5KQMP+SkDD/kpAw/5KQMP+QjzT/oJ9y/5ycm+V0dHQtAAAAAAAAAAAAAAAAYGBgFpSU
lOWdm1n/lpMw/5aTMP+WkzD/lpMw/5aTL/+Uki//lpMv/5aTMP+cm1j/n5+f5WpqahYAAAAAAAAAAI+O
j5+konL/m5cw/5uXMP+blzD/m5cv/5aTNP+TkDf/xsWv/5CNLv+WkzP/m5cv/6Ohcf+bm5ufAAAAAF1d
XRWgn5r6n5s2/6CcMP+gnDD/oJww/5uXL//V1Mn/0NDB/+7u7v/U1Mb/zMu5/52ZL/+fmzb/pqWg+mlp
aRWBgYFXn556/6agMf+moDH/pqAx/6agMP+hnEH/zMu2/83Mt/+ppWD/19bI/8bFq/+hnD3/pqAx/56d
ef+SkpJXiYmJeaajbP+spTH/q6Qw/6SgSf+loVb/s7CC/+jo5f+1snn/qqMw/768kf/o6Ob/sq90/6ul
Mf+fnGX/nZ2deYyMjHmnpGv/saox/6ynTv/Hxrf/xcOt/7Kvh//EwqX/5OPf/8bEpf/n5+T/vruU/6+n
MP+xqjH/n5xj/6CgoHmFhYVXp6R9/7evMv+rpUv/xsSt/66qbv+8up//u7iG/7m1fv/l5eT/urZ//7q2
ev+2rjH/t68y/6Cedv+VlZVXYWFhFaaln/q6sTf/uK85/7q2gf/DwJz/sKlD/7yzMf+4rzD/uLJl/7qw
Mf+8szH/vbMy/7qxN/+hoJr6bW1tFQAAAACen5+fsKtt/8K4Mv+/tTH/wLYy/8K3Mv/CuDL/wrgy/8K4
Mv/CuDL/wrgy/8K4Mv+oo2X/oaGhnwAAAAAAAAAAaWlpFqampeW2rlP/yLwz/8i8M//IvDP/yLwz/8i8
M//IvDP/yLwz/8i8M/+yqk//oKCf5XNzcxYAAAAAAAAAAAAAAAB7e3stpqal5a6oZ//Huzf/zL8z/8y/
M//MvzP/zL8z/8e7N/+oomL/oaGg5YGBgS0AAAAAAAAAAAAAAAAAAAAAAAAAAGVlZRafn5+fpaWe+qai
df+mn1z/pZ5b/6Ofcv+hoJr6oKCgn2traxYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtb
WxWLi4tWpKSkeaWlpXmNjY1WXl5eFQAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAOAHAADAAwAAgAEAAIAB
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADgBwAA+B8AAA==
</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>WaitForOperation</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Name" xml:space="preserve">
<value>backgroundWorker1</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WaitForOperation</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-118
View File
@@ -1,118 +0,0 @@
namespace Duplicati.GUI
{
partial class ListBackupFiles
{
/// <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(ListBackupFiles));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.ContentPanel = new System.Windows.Forms.Panel();
this.ContentTree = new System.Windows.Forms.TreeView();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.CancelBtn = new System.Windows.Forms.Button();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.groupBox1.SuspendLayout();
this.ContentPanel.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.progressBar1);
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// progressBar1
//
resources.ApplyResources(this.progressBar1, "progressBar1");
this.progressBar1.Name = "progressBar1";
this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
//
// ContentPanel
//
resources.ApplyResources(this.ContentPanel, "ContentPanel");
this.ContentPanel.Controls.Add(this.ContentTree);
this.ContentPanel.Name = "ContentPanel";
//
// ContentTree
//
resources.ApplyResources(this.ContentTree, "ContentTree");
this.ContentTree.ImageList = this.imageList;
this.ContentTree.Name = "ContentTree";
this.ContentTree.ShowNodeToolTips = true;
//
// imageList
//
this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
resources.ApplyResources(this.imageList, "imageList");
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
//
// CancelBtn
//
resources.ApplyResources(this.CancelBtn, "CancelBtn");
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// backgroundWorker1
//
this.backgroundWorker1.WorkerSupportsCancellation = true;
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//
// ListBackupFiles
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.ContentPanel);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
this.Name = "ListBackupFiles";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ListBackupFiles_FormClosing);
this.groupBox1.ResumeLayout(false);
this.ContentPanel.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Panel ContentPanel;
private System.Windows.Forms.Button CancelBtn;
private System.ComponentModel.BackgroundWorker backgroundWorker1;
private System.Windows.Forms.ImageList imageList;
private System.Windows.Forms.TreeView ContentTree;
}
}
-294
View File
@@ -1,294 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Duplicati.Server;
namespace Duplicati.GUI
{
public partial class ListBackupFiles : Form
{
private object m_lock = new object();
private System.Threading.Thread m_thread = null;
private const string FOLDER_IMAGE_KEY = "folder";
private const string NEW_FOLDER_IMAGE_KEY = "new folder";
private const string REMOVED_FOLDER_IMAGE_KEY = "removed folder";
private const string ADDED_OR_MODIFIED_FILE_IMAGE_KEY = "added or modified file";
private const string CONTROL_FILE_IMAGE_KEY = "control file";
private const string DELETED_FILE_IMAGE_KEY = "deleted file";
private const string ADDED_FILE_IMAGE_KEY = "added file";
private const string MODIFIED_FILE_IMAGE_KEY = "modified file";
private const string INCOMPLETE_FILE_IMAGE_KEY = "incomplete file";
public ListBackupFiles()
{
InitializeComponent();
imageList.Images.Add(FOLDER_IMAGE_KEY, Properties.Resources.FolderOpen);
imageList.Images.Add(NEW_FOLDER_IMAGE_KEY, Properties.Resources.AddedFolder);
imageList.Images.Add(REMOVED_FOLDER_IMAGE_KEY, Properties.Resources.DeletedFolder);
imageList.Images.Add(ADDED_OR_MODIFIED_FILE_IMAGE_KEY, Properties.Resources.AddedOrModifiedFile);
imageList.Images.Add(CONTROL_FILE_IMAGE_KEY, Properties.Resources.ControlFile);
imageList.Images.Add(DELETED_FILE_IMAGE_KEY, Properties.Resources.DeletedFile);
imageList.Images.Add(ADDED_FILE_IMAGE_KEY, Properties.Resources.AddedFile);
imageList.Images.Add(MODIFIED_FILE_IMAGE_KEY, Properties.Resources.ModifiedFile);
imageList.Images.Add(INCOMPLETE_FILE_IMAGE_KEY, Properties.Resources.IncompleteFile);
this.Icon = Properties.Resources.TrayNormal;
#if DEBUG
this.Text += " (DEBUG)";
#endif
}
public void ShowList(Control owner, Datamodel.Schedule schedule, DateTime when)
{
backgroundWorker1.RunWorkerAsync(new object[] { schedule, when });
this.ShowDialog(owner);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
lock (m_lock)
m_thread = System.Threading.Thread.CurrentThread;
try
{
object[] args = (object[])e.Argument;
DuplicatiRunner r = new DuplicatiRunner();
IList<string> sourceFolders = r.ListSourceFolders((Datamodel.Schedule)args[0], (DateTime)args[1]);
if (r.IsAborted)
e.Cancel = true;
else
{
r = new DuplicatiRunner();
List<KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string>> files = r.ListActualFiles((Datamodel.Schedule)args[0], (DateTime)args[1]);
e.Result = new KeyValuePair<IList<string>, List<KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string>>>(sourceFolders, files);
if (r.IsAborted)
e.Cancel = true;
}
}
catch (System.Threading.ThreadAbortException)
{
System.Threading.Thread.ResetAbort();
e.Cancel = true;
}
finally
{
lock (m_lock)
m_thread = null;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//If the user has closed, ignore any results
if (!this.Visible)
return;
if (e.Cancelled)
this.Close();
else if (e.Error != null || e.Result == null)
{
Exception ex = e.Error;
if (ex == null)
ex = new Exception(Strings.ListBackupFiles.NoDataError);
MessageBox.Show(this, string.Format(Strings.Common.GenericError, ex.ToString()), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
}
else
{
try
{
ContentTree.BeginUpdate();
KeyValuePair<IList<string>, List<KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string>>> res = (KeyValuePair<IList<string>, List<KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string>>>)e.Result;
IList<string> sourcefolders = res.Key;
List<KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string>> entries = res.Value;
List<string> addedfolders = new List<string>();
List<string> removedfolders = new List<string>();
List<string> addedOrUpdatedfiles = new List<string>();
List<string> updatedfiles = new List<string>();
List<string> addedfiles = new List<string>();
List<string> incompletefiles = new List<string>();
List<string> deletedfiles = new List<string>();
List<string> controlfiles = new List<string>();
foreach (KeyValuePair<Library.Main.RSync.RSyncDir.PatchFileType, string> x in entries)
switch (x.Key)
{
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.AddedFolder:
addedfolders.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.DeletedFolder:
removedfolders.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.AddedOrUpdatedFile:
addedOrUpdatedfiles.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.AddedFile:
addedfiles.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.UpdatedFile:
updatedfiles.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.IncompleteFile:
incompletefiles.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.ControlFile:
controlfiles.Add(x.Value);
break;
case Duplicati.Library.Main.RSync.RSyncDir.PatchFileType.DeletedFile:
deletedfiles.Add(x.Value);
break;
}
addedfolders.Sort();
removedfolders.Sort();
deletedfiles.Sort();
addedOrUpdatedfiles.Sort();
addedfiles.Sort();
updatedfiles.Sort();
incompletefiles.Sort();
controlfiles.Sort();
foreach (string s in addedfolders)
AddTreeItem(s, NEW_FOLDER_IMAGE_KEY);
foreach (string s in removedfolders)
AddTreeItem(s, REMOVED_FOLDER_IMAGE_KEY);
foreach (string s in addedOrUpdatedfiles)
AddTreeItem(s, ADDED_OR_MODIFIED_FILE_IMAGE_KEY);
foreach (string s in addedfiles)
AddTreeItem(s, ADDED_FILE_IMAGE_KEY);
foreach (string s in updatedfiles)
AddTreeItem(s, MODIFIED_FILE_IMAGE_KEY);
foreach (string s in incompletefiles)
AddTreeItem(s, INCOMPLETE_FILE_IMAGE_KEY);
foreach (string s in controlfiles)
AddTreeItem(s, CONTROL_FILE_IMAGE_KEY);
foreach (string s in deletedfiles)
AddTreeItem(s, DELETED_FILE_IMAGE_KEY);
//Patch display to show actual source folder rather than the internal enumeration system
if (sourcefolders != null && sourcefolders.Count > 1)
{
foreach (TreeNode t in ContentTree.Nodes)
{
int ix;
if (int.TryParse(t.Text, out ix))
{
if (ix >= 0 && ix < sourcefolders.Count)
t.Text = sourcefolders[ix];
}
}
}
}
finally
{
ContentTree.EndUpdate();
ContentPanel.Visible = true;
}
}
}
private void AddTreeItem(string value, string imagekey)
{
if (value.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
value = value.Substring(0, value.Length - 1);
string[] items = value.Split(System.IO.Path.DirectorySeparatorChar);
TreeNodeCollection parent = ContentTree.Nodes;
for (int i = 0; i < items.Length; i++)
{
TreeNode match = null;
foreach (TreeNode n in parent)
if (n.Text == items[i])
{
match = n;
break;
}
if (match == null)
{
match = new TreeNode(items[i]);
match.ImageKey = match.SelectedImageKey =
i == items.Length - 1 ? imagekey : FOLDER_IMAGE_KEY;
switch (match.ImageKey)
{
case FOLDER_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipExistingFolder;
break;
case NEW_FOLDER_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipAddedFolder;
break;
case REMOVED_FOLDER_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipDeletedFolder;
break;
case ADDED_OR_MODIFIED_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipAddedOrModifiedFile;
break;
case ADDED_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipAddedFile;
break;
case MODIFIED_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipModifiedFile;
break;
case INCOMPLETE_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipIncompleteFile;
break;
case CONTROL_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipControlFile;
break;
case DELETED_FILE_IMAGE_KEY:
match.ToolTipText = Strings.ListBackupFiles.TooltipDeletedFile;
break;
}
parent.Add(match);
}
parent = match.Nodes;
}
}
private void ListBackupFiles_FormClosing(object sender, FormClosingEventArgs e)
{
lock (m_lock)
if (m_thread != null)
m_thread.Abort();
}
}
}
-303
View File
@@ -1,303 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<data name="progressBar1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="progressBar1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="progressBar1.Size" type="System.Drawing.Size, System.Drawing">
<value>249, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="progressBar1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;progressBar1.Name" xml:space="preserve">
<value>progressBar1</value>
</data>
<data name="&gt;&gt;progressBar1.Type" xml:space="preserve">
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;progressBar1.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;progressBar1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 153</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 56</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Loading file list, please wait ...</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="ContentPanel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ContentTree.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="ContentTree.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>169, 17</value>
</metadata>
<data name="imageList.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="ContentTree.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="ContentTree.SelectedImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="ContentTree.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 339</value>
</data>
<data name="ContentTree.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;ContentTree.Name" xml:space="preserve">
<value>ContentTree</value>
</data>
<data name="&gt;&gt;ContentTree.Type" xml:space="preserve">
<value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ContentTree.Parent" xml:space="preserve">
<value>ContentPanel</value>
</data>
<data name="&gt;&gt;ContentTree.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="ContentPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="ContentPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 339</value>
</data>
<data name="ContentPanel.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="ContentPanel.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;ContentPanel.Name" xml:space="preserve">
<value>ContentPanel</value>
</data>
<data name="&gt;&gt;ContentPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ContentPanel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ContentPanel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="CancelBtn.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="CancelBtn.Location" type="System.Drawing.Point, System.Drawing">
<value>116, 371</value>
</data>
<data name="CancelBtn.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="CancelBtn.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="CancelBtn.Text" xml:space="preserve">
<value>Close</value>
</data>
<data name="&gt;&gt;CancelBtn.Name" xml:space="preserve">
<value>CancelBtn</value>
</data>
<data name="&gt;&gt;CancelBtn.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CancelBtn.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;CancelBtn.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>301, 407</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>188, 233</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Files in selected backup</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Name" xml:space="preserve">
<value>backgroundWorker1</value>
</data>
<data name="&gt;&gt;backgroundWorker1.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>ListBackupFiles</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-77
View File
@@ -1,77 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2008, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
namespace Duplicati.GUI
{
partial class LogViewer
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogViewer));
this.LogText = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// LogText
//
resources.ApplyResources(this.LogText, "LogText");
this.LogText.Name = "LogText";
this.LogText.ReadOnly = true;
//
// LogViewer
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.LogText);
this.Name = "LogViewer";
this.ShowInTaskbar = false;
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
public System.Windows.Forms.TextBox LogText;
}
}
-42
View File
@@ -1,42 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI
{
public partial class LogViewer : Form
{
public LogViewer()
{
InitializeComponent();
this.Icon = Properties.Resources.LogViewer;
#if DEBUG
this.Text += " (DEBUG)";
#endif
}
}
}
-174
View File
@@ -1,174 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LogText.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LogText.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LogText.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LogText.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Both</value>
</data>
<data name="LogText.Size" type="System.Drawing.Size, System.Drawing">
<value>388, 335</value>
</data>
<data name="LogText.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;LogText.Name" xml:space="preserve">
<value>LogText</value>
</data>
<data name="&gt;&gt;LogText.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LogText.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LogText.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>405, 352</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Log data</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>LogViewer</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-235
View File
@@ -1,235 +0,0 @@
namespace Duplicati.GUI
{
partial class MainForm
{
/// <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(MainForm));
this.TrayIcon = new System.Windows.Forms.NotifyIcon(this.components);
this.TrayMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.statusToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.wizardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.controlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pauseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pausePeriodToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.DelayDuration05Menu = new System.Windows.Forms.ToolStripMenuItem();
this.DelayDuration15Menu = new System.Windows.Forms.ToolStripMenuItem();
this.DelayDuration30Menu = new System.Windows.Forms.ToolStripMenuItem();
this.DelayDuration60Menu = new System.Windows.Forms.ToolStripMenuItem();
this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.throttleOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.label1 = new System.Windows.Forms.Label();
this.TrayMenu.SuspendLayout();
this.SuspendLayout();
//
// TrayIcon
//
this.TrayIcon.ContextMenuStrip = this.TrayMenu;
resources.ApplyResources(this.TrayIcon, "TrayIcon");
this.TrayIcon.BalloonTipClicked += new System.EventHandler(this.TrayIcon_BalloonTipClicked);
this.TrayIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(this.TrayIcon_MouseClick);
this.TrayIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.TrayIcon_MouseDoubleClick);
//
// TrayMenu
//
this.TrayMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.statusToolStripMenuItem,
this.wizardToolStripMenuItem,
this.toolStripSeparator1,
this.optionsToolStripMenuItem,
this.toolStripSeparator2,
this.controlToolStripMenuItem,
this.toolStripSeparator3,
this.quitToolStripMenuItem});
this.TrayMenu.Name = "TrayMenu";
resources.ApplyResources(this.TrayMenu, "TrayMenu");
this.TrayMenu.LocationChanged += new System.EventHandler(this.TrayMenu_LocationChanged);
//
// statusToolStripMenuItem
//
resources.ApplyResources(this.statusToolStripMenuItem, "statusToolStripMenuItem");
this.statusToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.StatusMenuIcon;
this.statusToolStripMenuItem.Name = "statusToolStripMenuItem";
this.statusToolStripMenuItem.Click += new System.EventHandler(this.statusToolStripMenuItem_Click);
//
// wizardToolStripMenuItem
//
this.wizardToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.WizardMenuIcon;
this.wizardToolStripMenuItem.Name = "wizardToolStripMenuItem";
resources.ApplyResources(this.wizardToolStripMenuItem, "wizardToolStripMenuItem");
this.wizardToolStripMenuItem.Click += new System.EventHandler(this.wizardToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
//
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.SettingsMenuIcon;
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
resources.ApplyResources(this.optionsToolStripMenuItem, "optionsToolStripMenuItem");
this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
//
// controlToolStripMenuItem
//
this.controlToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.pauseToolStripMenuItem,
this.pausePeriodToolStripMenuItem,
this.stopToolStripMenuItem,
this.throttleOptionsToolStripMenuItem});
this.controlToolStripMenuItem.Name = "controlToolStripMenuItem";
resources.ApplyResources(this.controlToolStripMenuItem, "controlToolStripMenuItem");
//
// pauseToolStripMenuItem
//
this.pauseToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.Pause;
this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem";
resources.ApplyResources(this.pauseToolStripMenuItem, "pauseToolStripMenuItem");
this.pauseToolStripMenuItem.Click += new System.EventHandler(this.pauseToolStripMenuItem_Click);
//
// pausePeriodToolStripMenuItem
//
this.pausePeriodToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.DelayDuration05Menu,
this.DelayDuration15Menu,
this.DelayDuration30Menu,
this.DelayDuration60Menu});
this.pausePeriodToolStripMenuItem.Name = "pausePeriodToolStripMenuItem";
resources.ApplyResources(this.pausePeriodToolStripMenuItem, "pausePeriodToolStripMenuItem");
//
// DelayDuration05Menu
//
this.DelayDuration05Menu.Image = global::Duplicati.GUI.Properties.Resources.Clock05;
this.DelayDuration05Menu.Name = "DelayDuration05Menu";
resources.ApplyResources(this.DelayDuration05Menu, "DelayDuration05Menu");
this.DelayDuration05Menu.Tag = "5m";
//
// DelayDuration15Menu
//
this.DelayDuration15Menu.Image = global::Duplicati.GUI.Properties.Resources.Clock15;
this.DelayDuration15Menu.Name = "DelayDuration15Menu";
resources.ApplyResources(this.DelayDuration15Menu, "DelayDuration15Menu");
this.DelayDuration15Menu.Tag = "15m";
//
// DelayDuration30Menu
//
this.DelayDuration30Menu.Image = global::Duplicati.GUI.Properties.Resources.Clock30;
this.DelayDuration30Menu.Name = "DelayDuration30Menu";
resources.ApplyResources(this.DelayDuration30Menu, "DelayDuration30Menu");
this.DelayDuration30Menu.Tag = "30m";
//
// DelayDuration60Menu
//
this.DelayDuration60Menu.Image = global::Duplicati.GUI.Properties.Resources.Clock60;
this.DelayDuration60Menu.Name = "DelayDuration60Menu";
resources.ApplyResources(this.DelayDuration60Menu, "DelayDuration60Menu");
this.DelayDuration60Menu.Tag = "1h";
this.DelayDuration60Menu.Click += new System.EventHandler(this.DelayDurationMenu_Click);
//
// stopToolStripMenuItem
//
resources.ApplyResources(this.stopToolStripMenuItem, "stopToolStripMenuItem");
this.stopToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.Stop;
this.stopToolStripMenuItem.Name = "stopToolStripMenuItem";
this.stopToolStripMenuItem.Click += new System.EventHandler(this.stopToolStripMenuItem_Click);
//
// throttleOptionsToolStripMenuItem
//
this.throttleOptionsToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.Throttle;
this.throttleOptionsToolStripMenuItem.Name = "throttleOptionsToolStripMenuItem";
resources.ApplyResources(this.throttleOptionsToolStripMenuItem, "throttleOptionsToolStripMenuItem");
this.throttleOptionsToolStripMenuItem.Click += new System.EventHandler(this.throttleOptionsToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
//
// quitToolStripMenuItem
//
this.quitToolStripMenuItem.Image = global::Duplicati.GUI.Properties.Resources.CloseMenuIcon;
this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
resources.ApplyResources(this.quitToolStripMenuItem, "quitToolStripMenuItem");
this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// MainForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "MainForm";
this.ShowInTaskbar = false;
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Load += new System.EventHandler(this.MainForm_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.TrayMenu.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.NotifyIcon TrayIcon;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ContextMenuStrip TrayMenu;
private System.Windows.Forms.ToolStripMenuItem statusToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem wizardToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem controlToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pauseToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pausePeriodToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem DelayDuration05Menu;
private System.Windows.Forms.ToolStripMenuItem DelayDuration15Menu;
private System.Windows.Forms.ToolStripMenuItem DelayDuration30Menu;
private System.Windows.Forms.ToolStripMenuItem DelayDuration60Menu;
private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem throttleOptionsToolStripMenuItem;
}
}
-827
View File
@@ -1,827 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Duplicati.Server;
using Duplicati.Server.Serialization;
namespace Duplicati.GUI
{
/// <summary>
/// This class handles the Duplicati TrayIcon
/// </summary>
public partial class MainForm : Form
{
private static readonly int BALLOON_SHOW_TIME = (int)TimeSpan.FromSeconds(60).TotalMilliseconds;
private ServiceStatus StatusDialog;
private WizardHandler WizardDialog;
private Datamodel.ApplicationSettings m_settings;
private delegate void EmptyDelegate();
private string[] m_initialArguments;
private bool m_hasAttemptedBackupTermination = false;
private RunnerResult m_currentIconState;
private Icon m_currentIcon;
private string m_currentTooltip;
private TrayIconProxy m_trayIcon;
public string[] InitialArguments
{
get { return m_initialArguments; }
set { m_initialArguments = value; }
}
/// <summary>
/// A recursion protection helper flag
/// </summary>
private bool m_inQuit = false;
/// <summary>
/// Internal helper class that can filter all access to the trayicon if the program runs without a trayicon
/// </summary>
private class TrayIconProxy
{
private readonly NotifyIcon m_owner = null;
private Icon m_icon;
private bool m_visible;
private string m_text;
public TrayIconProxy(NotifyIcon owner)
{
if (!Program.TraylessMode)
m_owner = owner;
}
public Icon Icon
{
get { return m_icon; }
set
{
m_icon = value;
if (m_owner != null)
m_owner.Icon = value;
}
}
public bool Visible
{
get { return m_visible; }
set
{
m_visible = value;
if (m_owner != null)
m_owner.Visible = value;
}
}
public string Text
{
get { return m_text; }
set
{
m_text = value;
if (m_owner != null)
m_owner.Text = value;
}
}
public void ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon)
{
if (m_owner != null)
m_owner.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon);
}
}
public MainForm()
{
InitializeComponent();
m_trayIcon = new TrayIconProxy(TrayIcon);
m_currentIcon = Properties.Resources.TrayNormal;
m_currentTooltip = Strings.MainForm.TrayStatusReady;
Program.LiveControl.StateChanged += new EventHandler(LiveControl_StateChanged);
Program.WorkThread.StartingWork += new EventHandler(WorkThread_StartingWork);
Program.WorkThread.CompletedWork += new EventHandler(WorkThread_CompletedWork);
Program.SingleInstance.SecondInstanceDetected += new SingleInstance.SecondInstanceDelegate(SingleInstance_SecondInstanceDetected);
m_settings = new Duplicati.Datamodel.ApplicationSettings(Program.DataConnection);
Program.DataConnection.AfterDataChange += new System.Data.LightDatamodel.DataChangeEventHandler(DataConnection_AfterDataChange);
Program.Runner.ProgressEvent += new DuplicatiRunner.ProgressEventDelegate(Runner_DuplicatiProgress);
Program.Runner.ResultEvent += new DuplicatiRunner.ResultEventDelegate(Runner_ResultEvent);
#if DEBUG
this.Text += " (DEBUG)";
#endif
}
public void SetCurrentIcon(RunnerResult icon, string message)
{
if (icon == RunnerResult.Error)
{
m_currentIcon = Properties.Resources.TrayNormalError;
m_currentIconState = icon;
m_currentTooltip = message;
}
else if ((icon == RunnerResult.Warning || icon == RunnerResult.Partial) && m_currentIconState != RunnerResult.Error)
{
m_currentIcon = Properties.Resources.TrayNormalWarning;
m_currentIconState = icon;
m_currentTooltip = message;
}
UpdateTrayIcon();
}
public void ResetCurrentIcon()
{
m_currentIcon = Properties.Resources.TrayNormal;
m_currentTooltip = Strings.MainForm.TrayStatusReady;
m_currentIconState = RunnerResult.OK;
UpdateTrayIcon();
}
private void UpdateTrayIcon()
{
//TODO: Hard to maintain consistent state because the number of cases here can change
if (Program.LiveControl.State == LiveControls.LiveControlState.Running && !Program.WorkThread.Active)
{
m_trayIcon.Icon = m_currentIcon;
SetTrayIconText(m_currentTooltip);
}
}
void Runner_ResultEvent(RunnerResult result, string parsedMessage, string message)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new DuplicatiRunner.ResultEventDelegate(Runner_ResultEvent), result, parsedMessage, message);
return;
}
string name = "";
//Dirty read of the instance variable
try { name = Program.WorkThread.CurrentTask.Schedule.Name; }
catch { }
if (result == RunnerResult.Error)
SetCurrentIcon(result, String.Format(Strings.MainForm.BalloonTip_Error, name, parsedMessage));
else if (result == RunnerResult.Partial || result == RunnerResult.Warning)
SetCurrentIcon(result, String.Format(Strings.MainForm.BalloonTip_Warning, name));
if (result == RunnerResult.OK || m_settings.BallonNotificationLevel == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.Off)
return;
if (result == RunnerResult.Error)
m_trayIcon.ShowBalloonTip(BALLOON_SHOW_TIME, Application.ProductName, String.Format(Strings.MainForm.BalloonTip_Error, name, parsedMessage), ToolTipIcon.Error);
else if (result == RunnerResult.Warning || result == RunnerResult.Partial)
m_trayIcon.ShowBalloonTip(BALLOON_SHOW_TIME, Application.ProductName, String.Format(Strings.MainForm.BalloonTip_Warning, name), ToolTipIcon.Warning);
}
void DataConnection_AfterDataChange(object sender, string propertyname, object oldvalue, object newvalue)
{
if (sender as Datamodel.ApplicationSetting == null)
return;
if (this.InvokeRequired)
{
this.BeginInvoke(new System.Data.LightDatamodel.DataChangeEventHandler(DataConnection_AfterDataChange), sender, propertyname, oldvalue, newvalue);
return;
}
m_settings = new Duplicati.Datamodel.ApplicationSettings(Program.DataConnection);
}
void Runner_DuplicatiProgress(DuplicatiOperation operation, RunnerState state, string message, string submessage, int progress, int subprogress)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new DuplicatiRunner.ProgressEventDelegate(Runner_DuplicatiProgress), operation, state, message, submessage, progress, subprogress);
return;
}
string name = "";
//Dirty read of the instance variable
try { name = Program.WorkThread.CurrentTask.Schedule.Name; }
catch {}
Datamodel.ApplicationSettings.NotificationLevel level;
try { level = m_settings.BallonNotificationLevel; }
catch
{
m_settings = new Datamodel.ApplicationSettings(Program.DataConnection);
try { level = m_settings.BallonNotificationLevel; }
catch
{
//TODO: Should find the cause for this, but at least we do not crash the process
return;
}
}
if (state == RunnerState.Started && (level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.StartAndStop || level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.Start || level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.Continous))
{
//Show start balloon
m_trayIcon.ShowBalloonTip(BALLOON_SHOW_TIME, Application.ProductName, String.Format(Strings.MainForm.BalloonTip_Started, name), ToolTipIcon.Info);
}
else if (state == RunnerState.Stopped && (level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.StartAndStop || level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.Continous))
{
//Show stop balloon
m_trayIcon.ShowBalloonTip(BALLOON_SHOW_TIME, Application.ProductName, String.Format(Strings.MainForm.BalloonTip_Stopped, name), ToolTipIcon.Info);
}
else if (state == RunnerState.Running && level == Duplicati.Datamodel.ApplicationSettings.NotificationLevel.Continous)
{
//Show update balloon
m_trayIcon.ShowBalloonTip(BALLOON_SHOW_TIME, Application.ProductName, String.Format(Strings.MainForm.BalloonTip_Running, message), ToolTipIcon.Info);
}
}
void LiveControl_StateChanged(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke(new EventHandler(LiveControl_StateChanged), sender, e);
return;
}
switch (Program.LiveControl.State)
{
case LiveControls.LiveControlState.Paused:
pauseToolStripMenuItem.Text = Strings.Common.MenuResume;
pauseToolStripMenuItem.Checked = true;
m_trayIcon.Icon = Program.WorkThread.Active ? Properties.Resources.TrayWorkingPause : Properties.Resources.TrayNormalPause;
SetTrayIconText(Strings.MainForm.TrayStatusPause);
break;
case LiveControls.LiveControlState.Running:
//Restore the icon and tooltip
if (Program.WorkThread.Active)
WorkThread_StartingWork(Program.WorkThread, null);
else
WorkThread_CompletedWork(Program.WorkThread, null);
pauseToolStripMenuItem.Checked = false;
pauseToolStripMenuItem.Text = Strings.Common.MenuPause;
break;
}
}
private void MainForm_Load(object sender, EventArgs e)
{
m_trayIcon.Icon = m_currentIcon;
SetTrayIconText(m_currentTooltip);
LiveControl_StateChanged(Program.LiveControl, null);
m_trayIcon.Visible = true;
long count = 0;
lock (Program.MainLock)
count = Program.DataConnection.GetObjects<Datamodel.Schedule>().Length;
if (count == 0)
ShowWizard();
else if (InitialArguments != null)
HandleCommandlineArguments(InitialArguments);
if (Library.Utility.Utility.IsMono)
MonoSupport.BeginInvoke (this, new EmptyDelegate(HideWindow));
else
BeginInvoke(new EmptyDelegate(HideWindow));
if (Program.TraylessMode)
ShowStatus();
}
private void HideWindow()
{
this.Visible = false;
}
private void TrayIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
TrayIcon_MouseClick(sender, e);
}
private static void AbortOwnThread(object thread)
{
System.Threading.Thread.Sleep(5000);
if (Program.IsRunningMainLoop)
{
Program.IsRunningMainLoop = false;
((System.Threading.Thread)thread).Abort();
}
}
private void TrayIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (Program.DataConnection.GetObjects<Datamodel.Schedule>().Length == 0)
ShowWizard();
else
ToggleStatus();
}
}
private void DelayDurationMenu_Click(object sender, EventArgs e)
{
Program.LiveControl.Pause((string)((ToolStripItem)sender).Tag);
}
private void pauseToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Program.LiveControl.State == LiveControls.LiveControlState.Running)
Program.LiveControl.Pause();
else
Program.LiveControl.Resume();
}
private void stopToolStripMenuItem_Click(object sender, EventArgs e)
{
Program.Runner.Stop(Duplicati.Server.Serialization.CloseReason.UserClosing);
}
private void SetTrayIconText(string text)
{
//Strange 64 character limit on linux: http://code.google.com/p/duplicati/issues/detail?id=298
try { m_trayIcon.Text = text; }
catch
{
if (text.Length >= 64)
m_trayIcon.Text = text.Substring(0, 60) + "...";
}
}
private void WorkThread_StartingWork(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke(new EventHandler(WorkThread_StartingWork), sender, e);
return;
}
m_trayIcon.Icon = Properties.Resources.TrayWorking;
string tmp = string.Format(Strings.MainForm.TrayStatusRunning, Program.WorkThread.CurrentTask == null ? "" : Program.WorkThread.CurrentTask.Schedule.Name);
SetTrayIconText(tmp);
stopToolStripMenuItem.Enabled = true;
}
private void WorkThread_CompletedWork(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke(new EventHandler(WorkThread_CompletedWork), sender, e);
return;
}
if (Program.LiveControl.State != LiveControls.LiveControlState.Paused)
{
m_trayIcon.Icon = m_currentIcon;
SetTrayIconText(m_currentTooltip);
}
stopToolStripMenuItem.Enabled = false;
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
Quit();
}
public bool IsInQuit
{
get { return m_inQuit; }
}
public bool Quit()
{
//Under Mono we somehow keep invoking this function recursively, eventually causing a stack-overflow exception
if (m_inQuit)
return false;
try
{
m_inQuit = true;
if (Program.WorkThread.Active && MessageBox.Show(Strings.MainForm.ExitWhileBackupIsRunningQuestion, Application.ProductName, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
return false;
Program.LiveControl.Pause();
Program.Runner.Stop(Duplicati.Server.Serialization.CloseReason.ApplicationExitCall);
m_trayIcon.Visible = false;
if (StatusDialog != null && StatusDialog.Visible)
StatusDialog.Close();
if (WizardDialog != null && WizardDialog.Visible)
WizardDialog.Close();
EnsureBackupIsTerminated(Duplicati.Server.Serialization.CloseReason.ApplicationExitCall);
Application.Exit();
return true;
}
finally
{
m_inQuit = false;
}
}
private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowSettings();
}
private void statusToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowStatus();
}
private void wizardToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowWizard();
}
private void throttleOptionsToolStripMenuItem_Click(object sender, EventArgs e)
{
new ThrottleControl().ShowDialog(this);
}
private void ChangeStatusVisibility(bool toggle)
{
if (InvokeRequired)
{
Invoke(new EmptyDelegate(ShowStatus));
return;
}
if (StatusDialog == null || !StatusDialog.Visible)
StatusDialog = new ServiceStatus();
if (toggle && StatusDialog.Visible)
StatusDialog.Close();
else
{
StatusDialog.Show();
StatusDialog.Activate();
}
}
public void ToggleStatus()
{
ChangeStatusVisibility(true);
}
public void ShowStatus()
{
ChangeStatusVisibility(false);
}
public void ShowWizard()
{
if (InvokeRequired)
{
Invoke(new EmptyDelegate(ShowWizard));
return;
}
if (WizardDialog == null || !WizardDialog.Visible)
WizardDialog = new WizardHandler();
WizardDialog.Show();
}
public void ShowSettings()
{
if (InvokeRequired)
{
Invoke(new EmptyDelegate(ShowSettings));
return;
}
lock (Program.MainLock)
{
ApplicationSetup dlg = new ApplicationSetup();
dlg.ShowDialog(this);
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
m_trayIcon.Visible = false;
Program.LiveControl.StateChanged -= new EventHandler(LiveControl_StateChanged);
Program.WorkThread.StartingWork -= new EventHandler(WorkThread_StartingWork);
Program.WorkThread.CompletedWork -= new EventHandler(WorkThread_CompletedWork);
Program.SingleInstance.SecondInstanceDetected -= new SingleInstance.SecondInstanceDelegate(SingleInstance_SecondInstanceDetected);
Duplicati.Server.Serialization.CloseReason cr = Server.Serialization.CloseReason.None;
switch (e.CloseReason)
{
case System.Windows.Forms.CloseReason.UserClosing:
case System.Windows.Forms.CloseReason.ApplicationExitCall:
case System.Windows.Forms.CloseReason.FormOwnerClosing:
case System.Windows.Forms.CloseReason.MdiFormClosing:
cr = Duplicati.Server.Serialization.CloseReason.ApplicationExitCall;
break;
case System.Windows.Forms.CloseReason.None:
cr = Server.Serialization.CloseReason.None;
break;
case System.Windows.Forms.CloseReason.TaskManagerClosing:
cr = Server.Serialization.CloseReason.TaskManagerClosing;
break;
case System.Windows.Forms.CloseReason.WindowsShutDown:
cr = Server.Serialization.CloseReason.WindowsShutDown;
break;
}
EnsureBackupIsTerminated(cr);
//The form occasionally hangs on Mono, so we force kill it after 5 secs if it did not quit itself
if (Library.Utility.Utility.IsMono)
new System.Threading.Thread(AbortOwnThread).Start (System.Threading.Thread.CurrentThread);
}
private void SingleInstance_SecondInstanceDetected(string[] commandlineargs)
{
if (this.InvokeRequired)
{
this.Invoke(new SingleInstance.SecondInstanceDelegate(SingleInstance_SecondInstanceDetected), new object[] { commandlineargs });
return;
}
if (HandleCommandlineArguments(commandlineargs))
return;
//TODO: This actually blocks the app thread, and thus may pile up remote invocations
if (Program.TraylessMode)
try { StatusDialog.Focus(); }
catch { }
else
ShowWizard();
}
private bool HandleCommandlineArguments(string[] _args)
{
bool anyUiShown = false;
List<string> args = new List<string>(_args);
Dictionary<string, string> options = Library.Utility.CommandLineParser.ExtractOptions(args);
//Backwards compatible options
if (args.Count == 2 && args[0].ToLower().Trim() == "run-backup")
options["run-backup"] = args[1].Trim();
//Backwards compatible options
if (args.Count == 1 && args[0] == "show-status")
options["show-status"] = "";
//Backwards compatible options
if (args.Count == 2 && args[0].ToLower().Trim() == "run-backup-group")
options["run-backup-group"] = args[1].Trim();
//If pause is requested, pause before parsing --run-backup
if (options.ContainsKey("pause"))
{
string period = options["pause"];
if (string.IsNullOrEmpty(period))
Program.LiveControl.Pause();
else
{
try
{
Program.LiveControl.Pause(period);
}
catch (Exception ex)
{
Program.LiveControl.Pause();
MessageBox.Show(this, string.Format(Strings.MainForm.PauseOperationFailed, ex), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
anyUiShown = true;
}
if (options.ContainsKey("run-backup"))
{
string backupname = options["run-backup"];
if (string.IsNullOrEmpty(backupname))
{
if (WizardDialog == null || !WizardDialog.Visible)
{
WizardDialog = new WizardHandler(new System.Windows.Forms.Wizard.IWizardControl[] { new Wizard_pages.SelectBackup(Duplicati.GUI.Wizard_pages.WizardSettingsWrapper.MainAction.RunNow) });
WizardDialog.Show();
anyUiShown = true;
}
}
else
{
anyUiShown = true;
Datamodel.Schedule[] schedules = Program.DataConnection.GetObjects<Datamodel.Schedule>("Name LIKE ?", backupname.Trim());
if (schedules == null || schedules.Length == 0)
{
MessageBox.Show(string.Format(Strings.MainForm.NamedBackupNotFound, backupname), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (schedules.Length > 1)
{
MessageBox.Show(string.Format(Strings.MainForm.MultipleNamedBackupsFound, backupname, schedules.Length), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
if (Library.Utility.Utility.ParseBoolOption(options, "full"))
Program.WorkThread.AddTask(new FullBackupTask(schedules[0]));
else
Program.WorkThread.AddTask(new IncrementalBackupTask(schedules[0]));
}
}
}
if (options.ContainsKey("run-backup-group"))
{
string groupname = options["run-backup-group"];
if (string.IsNullOrEmpty(groupname))
{
if (WizardDialog == null || !WizardDialog.Visible)
{
WizardDialog = new WizardHandler(new System.Windows.Forms.Wizard.IWizardControl[] { new Wizard_pages.SelectBackup(Duplicati.GUI.Wizard_pages.WizardSettingsWrapper.MainAction.RunNow) });
WizardDialog.Show();
anyUiShown = true;
}
}
else
{
Datamodel.Schedule[] schedules = Program.DataConnection.GetObjects<Datamodel.Schedule>("Path LIKE ?", groupname.Trim());
if (schedules == null || schedules.Length == 0)
{
MessageBox.Show(string.Format(Strings.MainForm.NamedBackupGroupNotFound, groupname), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
bool full = Library.Utility.Utility.ParseBoolOption(options, "full");
foreach(Datamodel.Schedule s in schedules)
if (full)
Program.WorkThread.AddTask(new FullBackupTask(s));
else
Program.WorkThread.AddTask(new IncrementalBackupTask(s));
}
anyUiShown = true;
}
}
if (Library.Utility.Utility.ParseBoolOption(options, "show-status"))
{
ShowStatus();
anyUiShown = true;
}
if (Library.Utility.Utility.ParseBoolOption(options, "show-wizard"))
{
ShowWizard();
anyUiShown = true;
}
//Resume if requested
if (Library.Utility.Utility.ParseBoolOption(options, "resume"))
{
Program.LiveControl.Resume();
anyUiShown = true;
}
return anyUiShown;
}
private void EnsureBackupIsTerminated(Duplicati.Server.Serialization.CloseReason reason)
{
//Ensure that this function can only be called once,
// as this prevents multiple termination questions presented to the user
if (m_hasAttemptedBackupTermination)
return;
m_hasAttemptedBackupTermination = true;
if (Program.Runner != null && Program.WorkThread != null && Program.WorkThread.Active)
{
//Make sure no new items can enter the queue
if (Program.Scheduler != null)
Program.Scheduler.Terminate(true);
//We want no new items to enter the queue
Program.WorkThread.Terminate(false);
Program.Runner.Pause();
if (!Program.Runner.IsStopRequested)
Program.Runner.Stop(reason);
//Wait 15 seconds to see if the stop works
for (int i = 0; i < 15; i++)
{
Program.WorkThread.Join(1000);
Application.DoEvents();
if (!Program.WorkThread.Active)
break;
}
while (Program.WorkThread.Active)
{
//Ask the user if we should abort
if (MessageBox.Show(Strings.MainForm.TerminateForExitQuestion, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
//Abort the thread
Program.Runner.Terminate(reason);
//Give last 5 second chance to write the remaining data
int i = 5;
while (i > 0 && !Program.WorkThread.Join(1000))
{
//The Join call blocks the main thread, so let pending events through
Application.DoEvents();
i--;
}
break;
}
//Wait 18 * 10 seconds = 3 minutes before asking again
for (int i = 0; i < 18; i++)
{
Program.WorkThread.Join(1000 * 10);
Application.DoEvents();
if (!Program.WorkThread.Active)
break;
}
}
}
}
private void TrayIcon_BalloonTipClicked(object sender, EventArgs e)
{
ShowStatus();
}
private void TrayMenu_LocationChanged(object sender, EventArgs e)
{
// This is a workaround by Jenlehma for not displaying the context menu on the right screen:
// http://code.google.com/p/duplicati/issues/detail?id=600
// We assume that only Windows is broken here
if (!Duplicati.Library.Utility.Utility.IsClientLinux)
{
// First we get the top/left position of the TrayMenu and the current mouse position
Point TrayMenuTopLeft = new Point(TrayMenu.Left, TrayMenu.Top);
Point mousePos = Cursor.Position;
// Now get the screen objects of both coordinates (mouse / traymenu)
Screen ScrContextMenu = Screen.FromPoint(TrayMenuTopLeft);
Screen ScrCursor = Screen.FromPoint(mousePos);
// if the mouse and the tray menu is on different screens ...
if (ScrContextMenu.DeviceName != ScrCursor.DeviceName)
{
// if the mouse sits exactly on the top or the bottom of the menu, the menu might have an offset on the x-axis
if (TrayMenuTopLeft.Y + TrayMenu.Height == mousePos.Y || TrayMenuTopLeft.Y == mousePos.Y)
{
if (TrayMenuTopLeft.X < mousePos.X)
TrayMenu.Left = mousePos.X;
else if (TrayMenuTopLeft.X > mousePos.X)
TrayMenu.Left = mousePos.X - TrayMenu.Width;
}
else
{
// if the y-axis is off .. just move that.
TrayMenu.Top = mousePos.Y;
}
}
}
}
}
}
-880
View File
@@ -1,880 +0,0 @@
<?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="TrayIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="TrayMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>115, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="statusToolStripMenuItem.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt, style=Bold</value>
</data>
<data name="statusToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 22</value>
</data>
<data name="statusToolStripMenuItem.Text" xml:space="preserve">
<value>Status</value>
</data>
<data name="wizardToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 22</value>
</data>
<data name="wizardToolStripMenuItem.Text" xml:space="preserve">
<value>Wizard...</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 6</value>
</data>
<data name="optionsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 22</value>
</data>
<data name="optionsToolStripMenuItem.Text" xml:space="preserve">
<value>Options...</value>
</data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 6</value>
</data>
<data name="pauseToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="pauseToolStripMenuItem.Text" xml:space="preserve">
<value>Pause</value>
</data>
<data name="DelayDuration05Menu.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="DelayDuration05Menu.Text" xml:space="preserve">
<value>5 minutes</value>
</data>
<data name="DelayDuration15Menu.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="DelayDuration15Menu.Text" xml:space="preserve">
<value>15 minutes</value>
</data>
<data name="DelayDuration30Menu.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="DelayDuration30Menu.Text" xml:space="preserve">
<value>30 minutes</value>
</data>
<data name="DelayDuration60Menu.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="DelayDuration60Menu.Text" xml:space="preserve">
<value>1 hour</value>
</data>
<data name="pausePeriodToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="pausePeriodToolStripMenuItem.Text" xml:space="preserve">
<value>Pause period</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="stopToolStripMenuItem.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="stopToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="stopToolStripMenuItem.Text" xml:space="preserve">
<value>Stop</value>
</data>
<data name="throttleOptionsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 22</value>
</data>
<data name="throttleOptionsToolStripMenuItem.Text" xml:space="preserve">
<value>Throttle options...</value>
</data>
<data name="controlToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 22</value>
</data>
<data name="controlToolStripMenuItem.Text" xml:space="preserve">
<value>Control</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 6</value>
</data>
<data name="quitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 22</value>
</data>
<data name="quitToolStripMenuItem.Text" xml:space="preserve">
<value>Quit</value>
</data>
<data name="TrayMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 132</value>
</data>
<data name="&gt;&gt;TrayMenu.Name" xml:space="preserve">
<value>TrayMenu</value>
</data>
<data name="&gt;&gt;TrayMenu.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TrayIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ
AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm
AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4d3d3d3d3
d3d3d3d3d3d3d3cAAAAAAIeIiPj4+Pj4+Pj4+Pj4+Pj4+Ph4AAAACHh3JyNiNiNiNiNiNiNiNiNiNniH
cAAACIcnInI2I2I2I2I2I2I2I2I2MiN/cAAAh4JyemJjanJ6cnpyenJ6cnpyY2poiAAAiHIqNjOmMjYj
ajY2JycjajYnpycnhwAAiCcnImJyemOoeHh4eHh4eHh4dyMniAAAh3KnJ6cqNjY4////////////h6an
hwAAiCciejJyY6Jn/4+PiPiI+I+P9ycj9wAAiCJ6JyajYnJ4+P+P+Pj4j4iPh6cmiAAAiHo2NqNjp6Ko
/4+Pj4+PiPiP9yJ69wAAiCYno2NiYnJ3//j4iIiIiIj492OniAAAiCOmJjpjo2p4+PiIiIiIiIiPh6Yy
9wAAiHJzeHd4d3d3//j/j/j4+Ij49yemiAAAiCpqiP/4///4//+P+Pj4j4+Ph6Yz+AAAiHI3j4j4+IiI
+PiIiPiIiIiP9yNqiAAA96emf/j4+Pj3//j4+Ij4+IiPh6aniAAAiHI6j4+PiPiI+P+P/4//j/iP92On
iAAA9yp2iPj4j4iI/4iIj4j4+Pj496cm+AAAiHp6j4+IiIiI//j4j4j//4iPh6ajiAAA+CcjiPiIiIiI
+P//+Pj4+Pj/9yen+AAAiCp6j////4+I/4iIj4j4+PiPh6ei9wAAiHpjiIiIiIiI//iIj4iIiIj/96Y2
+AAA+Cenj/+IiPiIj4//////+Pj492p6iAAAiKeniPj/j4iI//+Pj4+Pj4+Ph6en+AAAiHp6j/+IiPj4
+P///////4iIiHp6iAAA+Cd3j4+I+PiI/4+Pj4+Pj4iIhqh3+AAAiKeoj/j/j4+I////////+I+Id3p6
iAAAiHeniP+I+PiI/4+Pj4+Pj4iIp6in9wAAiKeKj/j4iPj4////////+IiGiod6+AAAiDqHj/+P+P+I
+Pj4+Pj4/4eoqKiniAAAiGioj4/4/4/4iIiIiIiIeH53d3qK9wAAiKeKj/j/j/j///iPiH6neoqKioh6
9wAAiHqIj/+P+P+Pj4iIiIeKiKiHeKin9wAAh6h3j4/4/4//+Pj4iKiod4qKioiKiAAA93d3j///j/j4
/4j4joeHd4eHiKin9wAAiKh4j4+P////j/iId3eoeoqKh4eKiAAAiDioj///j4+P+PiOuKiIeIiIqKh6
9wAA92eIiIiIiIiIiIh4qIiod6ioiId3iAAAiHqKh4eHiHiHjod4iKiIeIiHd3eohwAAD3eoioeKh4qH
h3h3eIioioeHh6eHgAAACIh3p6p6emp6qqqqqqenp6qqp3h4cAAAAIiHh4eHh4h4eIiIh4eHeHh4h4eI
AAAAAACIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/AAAAAA/AADwAAAAAA8AAOAAAAAABwAA4AAAAAAH
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAA
AAAABwAA8AAAAAAPAAD8AAAAAD8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAId3d3d3d3d3d3d3eAAAAAeIiHiI
eIh4iHiIeIhwAACHciJyInIiciJyInInhwAIgicnononpypypyejYniACHcqcnI2d3d3d3d3d3oocAhy
ciKnInj///////hyeHAIenJ6cnp4+Pj4iIj/aihwCHJ6cmOmP/+Pj/j4j3NogAh6NiOmMn+IiIiIiI9q
OHAIgmeIiIh///+PiI+PcmiACHOn+PiPiPiI+IiIj2OocAiCd/j4+I//j4j/+P96eIAIemf4+IiPj4j4
+PiPY6hwCIKo+IiIiPj4+P+I/2pogAh3p//4+I/4+PiP+PhzqHAIinf4iIiPj4j4iIj/aniACHp3/4/4
j//////4+HeocAiHqPiIj4j4+Pj4+Ih6eIAIenj//4+P/////4j3eniACIeo+Ij4j4+Pj4+IioeocAh6
iI/4/4//////iH6oqIAIh6j/j4+IiIiHeOeod4hwCHqI//////iIjqioiop4cAh4ePj4+Pj4+HiKh3h4
qIAIeoj/////+Ih6iHioqIhwCHio+I+I+IiOiKh4h4eocAiKiIiIiOiId3iHeoeHqIAAh3qKinqKioqK
ioiop4gAAAiHd3eHd3d3d3d3d4hwAAAAiIiIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAAAAAAAA//////AA
AA/gAAAHwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAPgAAAH8AAAD///
//8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAACI
iIiIiIiIiIh4AAh3IiIiIiIiIid4gAhycnNnNnNnNjIngAgiNiY2iIiIiPgigAh6Y6On////j4hjgAgj
anYn/4iI+IimgAhqdzd3+Pj4iPgjgAg2j4+I/4+IiIhqgAgjj4+I+Pj/+PgngAh6j4iI+I+I+PimgAin
j4+I//j/iPgjgAh6j4iI+I+I+Pim8Ainj4+I////+Ih6gAh3j4+I/4+PiIengAinj4j4////+IqK8Ah3
j//4iIiIiGh3gAioj4+P+PiKioqKgAh4j///+IjoeHiogAioj/j4+IioqKiKgAh4iIiIiHiIiIeHgAiK
enp6eoqnp6iogACIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAP///wDAAAMAgAABAIAAAQCAAAEAgAABAIAA
AQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA
AQDAAAMA////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA
AAAId3d3d3d3gAcioqenp6JwB6cnj4+P93AHInKI+IiGcAd4iI+Pj/KACn+Pj4+I9jAHeIiPj/j3oAev
+P+Pj4eAB4j4j//4ioAHf4+P+PiGgAeI//iId6igCo/4+Iioh4AIiIiIh4d4oAh6h3qKioeAAAAAAAAA
AAD//wAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AAD//wAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAvkS8AL5YvAC+a
LwAvnS8ANYk1ADWMNQA/hj8AN484ADiPOAAwkTAAMJUwADaRNgA2lTYAMJgwADCeMAA3kzgAOJQ4ADiZ
OAA5nTkAMKMwADigNwAwqzAAOqE6ADumOwA8ojwAPaY8ADyrPAAxsDEAPbQ9AECLQABdi10AQK9BAEK0
QgBDu0QATb5NAFukXABZvlkAYY1hAGGQYgBrkGkAdJJyAHWUcwB2lnQAd5h0AHicdgB8n3oAYaphAH6i
fAB7sXkARMREAEjASABUwlQAW8ZbAF/KXwBjxWMAY8xjAGrMagBr0WsAbNpsAHPUcwB22HYAe9V7AHzZ
fACAk30AgaJ/AIDXfwCLi4sAi4uMAI2NjgCFkYEAg5eDAIaShQCIlIQAiZWIAI+PkACRkZIAlJaQAJSU
lQCWmZMAl5qUAJiblQCZnJYAl5eYAJiYmQCbnpgAnJ6YAJqanACdnZ0AhKSFAI+jjwCGsIQAi7OJAJC1
jwCYoZkAnaCaAJq6mACjp58An5+gAKGhogCjpKAApaaiAKOjpACkpKYAqqamAKOooAClqaEApqikAKio
pACnp6gAp66oAKioqQCrrKgAqqqsAKysrgCyrq0AqrSoALOwrwCurrAAsLCyALWxsQC2tbIAs7O0ALa2
tgC8tbIAtby1ALq5tQC5uLkAvbq6AL2+ugC+vLwAwreyAMK4swDBubYAxbq2AMG8uQDGvbkAwb+/AMW/
vADIv7wAgt2CAIrdigCSwpEAmcSXAJ7AnQCF4IUAi+KLAJPkkwClwaIAqcOnAK/HrQCzzrEAvsy8AMPA
vgDIwb4AwM2+AMHBwADFwsEAxcXCAMPDxADGxcYAy8PAAMrEwQDMxcIAyMbFAM3HxADCzcAAzcjGAMnJ
yADNysgAy8zJAM3OywDNzc4A2s3HAN3MxgDSzcoA2M7JAN7OyADP0M0A1dDOAN7QygDa0s0A3tHNAM/P
0ADR0dEA1tLQANPT1ADV1dUA29XSAN7Y1QDX19gA2dnZANvb3ADc3N0A4dHKAODTzQDk08wA4tTPAOXV
zgDr1s4A7NfOAOzYzwDh1tIA5tfQAOjX0ADm2NIA4drWAOXa1QDo2dMA7drSAO3c0wDp2tQA7tvUAOnc
1gDu3dUA4tzZAOXd2gDh390A5d/cAOne2QDt39gA8N/XAOXg3QDr4d0A8OHaAPDi3ADx5N4A4+LhAOrk
4ADs5eEA6ubkAOzn5ADu6OUA6urpAOvs6wDv7+0A8ubgAPLo4gDx6eYA9OrmAPTs5wDw6+gA8u3qAPXu
6gDz7uwA9O/tAPbw7QD48u8A8vLxAPn08QD5+PcA+fn4AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUU1NERERERERERERERERERERERERERERERERE
RERERERERFMAAAAAAAAAAAAAZ2dUiauruLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjAuHJEVAAA
AAAAAAByZ2duHwcFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUHJ324S1QAAAAAAACeZ0cFCgoK
AQoBAQEKAQEKAQEKAQEKAQEKAQEKAQoBAQoBAQoKCgVauFMAAAAAAH9tVAUKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoJfXpTAAAAALhnHwELAQEKAQoBAQEKAQEKCgkSCQkJEgkJCRIJCQkS
CQkJEgkKCgoBJ8BTAAAAALhUHgEKAQEKAQoBAQEKAQESSmFfX19fX19fVVVVVVVVUVVRUVEoAQoBHsBV
AAAAAKtUCRICAhIBAhIBAhIBAhISYfv7+/v7+/v7+/v7+/r6+vr7++kpChICCr5TAAAAALdUEQECAgIC
AgICAgICAgESYfvw8Ozs7Ozd3d3d3cnd3cnd3ekpAgICCbhUAAAAALhUCQ8PAQICAgICAgICAgIVavvw
7Ozs3d3d3d3HycnHx8fH7OkpAgICCcBUAAAAALhnEQIPAgIPAgIPAgIPAg8Vavvw8PDs7Ozs3d3d3cfJ
x8fH3ekpAhUCEr5nAAAAALhnChICDwIUAhQCDw8PAg8Vavvw8N3OzsXFtraxsbGurq7H7OksAg8CEr5n
AAAAALhnEg8PDxQUFQ8PDw8PDw8Xavv38KShoaGIiIiGhoaGg4PH7OkpDw8PEr9nAAAAALhnEg8PFUBH
R0dHR0dGRkZHaPv28PDn593n3dvb3c7dxczd7OksDw8PE79nAAAAALhyEhQUF2fp6enp6enp6enncvv2
9vDw6e3w8N3n293O3d3M7OksFBQPE8BuAAAAALhyEhQVF2Hw59vb293O3c7Fc/v28KSkpaHavaSkiIiI
hobd8OksFBQUE8ByAAAAAMByFw8WF2rp3dvdxc7HxcWxc/v29trazs7wvbbn3efd2ojb8OksFBUPF8By
AAAAALhyFxYWGmr43d7a293FzsfFc/v29vD38/P3vbbw8PDw7Yjd8OksFhYWF8ByAAAAAMByFxYVGmrr
593Oxb22xa6uc/v28LOvr6fnvb329vDw8Ijp8OktFBQWF8B2AAAAAL92FxYWGmrr6dqIf4Z8fHx8c/v2
9raztq/tvb3w9vfw8KHt8OktFhYWF8B6AAAAAL92GhwWHXDr593Avb22tranc/v39vb28Pbwvb3w9vf3
8J7w9+ktFhYWGsF2AAAAAMB2GhwWHWfr5+fd593j3d7devv38L29vb3pva/n3ePn3Z7w9ukuHBYcGsF6
AAAAAMB2GhwcHXDp6d2eiYl/3q+Ic/v28K+ppKTd2qukqaSkpKTw+ekuHBwcGsF6AAAAAMB2HSIdIXL2
596vr6+n3amkevv29vDw8/D28PDw8PDw8PDw8OkuIiIiHcB6AAAAAL92HSMjJXr26fDn6fDp6a+zfvv3
9vf39/P58Pn58/fw59ra4+MuIyMjIMB2AAAAAL9yITQ0NXz48Oe2s7Oz3bi9ifv59/f39/n5+ff5+fnw
r56IqKtBNDQ0IcB2AAAAAL5yHTQlN3746eevr6+p6ba4ofv59/f39/f39/f38/nnc6ief2gxNDQ0IcB2
AAAAALh2ITU1OH/48Onw6fDp8L29nvv59/f59/f59/f5+fPngOnZiVs1NTU1IcByAAAAAMByHTg1OYH4
8Ona2trO6b24qfv5+fn5+fn5+fn3+fnnf9mJXDg2NTg1IsByAAAAALhyHTg4OZ748Omvr6un3cCvnvv7
+fv5+/n7+fn5+fnwiaBdOTg4ODg4IsBuAAAAALhnIjk6PIn48PDp6fDp6fDnpPj4+Pj4+Pj4+Pj4+Pjp
e2A5OTo6Ojo6IsBnAAAAALhnIjo6PKT49unw8PDw8Onwr6urpKSknqSedpSUlJSUjzw6Ojo6Ojo6IsBn
AAAAALhnIjw8PqT66fbw8Pjw+PD48PDw6b2vqbezXTw8PD08PDw8PDw8PDw8M71jAAAAALhhIj09Qqv4
9vD48Pjw8Pjw+PD424CeiYl6jj09PT09PT09PT09PT09M75jAAAAALdUIj1CQqv49vbw+PD4+PD48Pjw
457p2aiQPUI9jD2MPYw9jD2MPYw9I7hjAAAAALdUM4yMkqv4+Pjw+Pj48Pjw+PD446jZt5RCjIyMQoxC
QoyMjEKMjIyMI75UAAAAALhUMoyMkrP4+Pj4+Pj3+Pj4+Pj456i3lY2MkYySjJKMkpKMkoySjIyMMrhU
AAAAAMBUIZKSk7L4+Pn4+Pj4+Pj3+Pn46YmWjZKSkpKSkpKSkpKSkpKSkpKRI7hjAAAAAMBULzuSk5um
pqampqSmpJukm6Sbm5eTjZKSk5KSkpKSkpKSkpKSkpI7L6RUAAAAAH9/SjKSk5OTk5OTk5OTk5OTkpOS
k5OTk5OTk5OTk5OTkpOSk5KTk5IylGNjAAAAAADjUykyPJOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OT
k5OTk5OTOzJZbW0AAAAAAAB6uFNKJCIyMzMzMzIyMzIyMzI0MjIjMjMzMjMyMzIzMjMyNDIzL15fbm0A
AAAAAAAAesB6U0tMTExNTFFMTUxRTExMTExMTExMTExMTExMTUxNSkxTU2OfcgAAAAAAAAAAAAB6uMCr
pKCgpJ+goKCkn6CboKCfoKCgoKCgoKCgoKCgoKC3t30AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/AAAAAA/AADwAAAAAA8AAOAAAAAABwAA4AAAAAAH
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAA
AAAABwAA8AAAAAAPAAD8AAAAAD8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
AAAAAAAAAAAAAAABAAAAAQAAAAAAADCPMAAwkTAAMJYwADCaMAAwnTAAMaIxADGlMQAxqjEAMa0xADKw
MgA1sjUARItEAEWMRQBGlkUATJJLAFWaVABWnlUAXZNcAF6VXABemF0AYJteAGCeXgBGu0YAS79LAEy9
TABVu1YAYaJfAHmXdwBzm3EAc5p0AHSadAB9kH4Ae5R8AH2XfgB6mHgAfJp6AH6cewB+nXwAYqVgAG+q
bQB0r3IAfaJ+AFHCUQBVx1UAVshWAFrHWgBfw18AWstaAFzMXABnx2YAYcthAGHPYQBoz2gAb8tuAGXS
ZQBo02gAa9ZrAG/TbwBu124AbNpsAHbXdgBy2nIAeNJ4AH3bfQB94H0AhoaGAI2NjQCBlIIAhJKEAIeU
hwCAmoEAgp2DAISYhQCQkJEAk5OUAJWVlgCXl5gAmZmaAJubnACenp8AgaWCAIWghgCDp4QAhqaEAIao
hQCIqoYAiayHAIejiACJpooAiamJAIuqjACMq40Ai6yMAIysjQCZopoAmqiaAJe3lQCetp4AnrybAKOn
nwCgsp4An7egAKGhogClpaYApa2iAKavpACmpqgAqamqAKqqrACtra4AprKmAKiwpQCjvKQApL6kAKm4
pwCsuakAqr6rALixrgCvr7AAr7uwALGxsQC1t7MAs7O0ALW1tQC7trQAsr+yALy4twC5ubkAvrq5ALu7
vAC+vb0Awru3AMa6tQDDvLkAxL+9AMi9uQCOzo0AhN6EAJPDkgCSx5EAlMiSAJXRlACd1J0Ant6eAKDf
nwCK4YoAkeSRAJrgmgCiwKAApsKlAKPIowCmyqYAp8OoAKnGqQCpyqoArsqtALLNsQC6w7oAt9G1ALrU
uQDGwL4AysG9AM3BvAC/v8AAwcHBAMXCwgDDw8QAxcXGAMjCwADNxMEAz8fEAMjIxgDHx8gAycnJAM3K
yQDNzMsAzMzMANDFwQDRyMUA1MvHANHNywDUzcoA0s7NANXPzADW0M4A2NHOANXU1ADY09AA2tTRANzW
0wDa1dQA3djVANrZ2QDf29gA3d3dAODSzQDl1M0A7NfOAOzYzwDi1tEA5tfQAOfZ0wDg2dYA5NrVAOrZ
0gDs2dEA6dvVAO7b1ADu3dYA4drYAOLd2gDl3tsA6t7YAO/f2ADl4N0A6uDbAO7h2wDp4t0A7uPdAO/k
3wDw4doA8ePcAPHk3gDj4uEA5OPiAOTk4wDl5eQA6OLgAOrk4ADt5eEA6OfmAOzn5ADu6OQA6urpAO3q
6QDt7OoA7u7sAPDm4QDx6eUA9OnkAPXs5wDw6+gA8u3qAPXu6QDy7uwA8vDuAPbw7QD48u8A8/HwAPXz
8QD09PIA+PPwAPj08gAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlK
QkJCQkJCQkJCQkJCQkJCQkJCQkJDbQAAAAAAAABQbW9iYmJiYmJiYmJiYmJiYmJiYmJiZnilSgAAAAAA
bWANAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ2eUAAAAK5tDQECAgICAgICAgICAgICAgICAgICAgICAg2l
eQAApEYBAQICAgICAgIOJSUlJSUlJSUlJRwlHA8CAn5NAACkHAIEAgQCBAIEAhDg/f39+Pj29vb29vbs
EgIEcUoAAKQcAgQEBAQCBAQEEODw7u7W1tbGxsbGxvYSBAKWUAAApEcEBAQEBAQEBAQQ4Pju7u7W1tbO
xsbG6RIEBHFQAAClRwQEBAQEBgQEBhHg+MSysrKIiIiIiMbsFAQGllAAAKVYBgYdb29qb2pqZOD48PDm
3Nzczs7OzuwUBgSZZwAArVgGBlTs5tzc1Nyr4PjCvLjmuLS0qqrW7BUGBplnAAClWwYGVezWzMzJybLg
+Obm1Pa08ObctNzsFQYGm2sAAK5bCAZV7NzMyMm6iOD31MK+6br29PC07vYWCAiZbQAArlsICFfs1KmH
hIR24P3cwszpxPb097rw7BsICJttAACuWwgIV+zm5tzc1rTg9+bUwva45vDmuPD2GwgIm20AAK5bCwtV
7NyppKm6fef4wsLE5r6+usS6+OwnCwubbQAArlsXGGHs6dTm5r6l5vj49vb3+Pb29tTm4CgYGJttAACu
WxgrY/jmvK68wq7s+Pf39/f39/fCh32eKSsYm20AAK1bKy6W7Ozg5uDCuOz99/399/39977CwmYvLiub
bQAApVssM5b46cLCwsK47P399/399/33wrxzMjMzLJtnAAClVy43mf3swtTg8Lzg/f39/f39/f3CczY1
NTUum2cAAKVVNDqb/fb29vb25sK8vK6upYuNjYs/Ojo6OjeYZwAApVE3PZ347Pbw9vb29vaqpap5PT09
PT0/PT0/N5hQAACkKjlAn/329vbw9vbw9q7srYlAQEBAQEBAQEA7mEoAAKQqO4qg/fb2+Pj29vj2uK6O
ioqKioqKioqKij2YTQAApUY5kqDg4Obg4ODg4OCuj5KSkpKSkpKSkpKSPJZQAACuahqSlJGRkZGRkZGR
kZSTk5OTk5OTk5OTk5IreXkAAACtRho9QUFBQUFBQUFBQUFBQUFBQUFBQUE7K2BnAAAAAAClZxwdHh4e
HR4dHh0eHR0dHR0dHR0dHUZndwAAAAAAAACupYB5gHmAeYB5gHmAeYB5gHmAeYB7gK0AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////8AAAD+AAAAfAAAADgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABwAAAA+AAAAfwAAAP/////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
AAAAAAAAAAEAAAABAAAAAAAAL5EvAC+WLwAvmi8AMowyADWLNQAwkTAAMZQxADSSNAAwmjAAMZ4xADSZ
NAA1nzUAMKEwADClMAA1ojUANqY2ADCpMAAwrTAANqk2ADetNgA7rzsAObM5ADyxPABWklYAW5ZaAFuY
WQBcmFoAX5pfAEi4SABNvE0AZ5tlAG6ibABmtmcAabppAG2/bQBRwFEAVsBWAFbFVgBYxlgAXsZeAF3J
XQBizGIAZcxlAGvRawBs0WwAbdVtAHDRbwB11nUAedZ5AH/bfwB+3H4AhKGBAIK0gACRvY8Al6iVAJuh
nACcpJ0AoaGiAKenqACpqaoArq6uAKu7qQCvvq4AsL+uAK+vsACwsLAAsbaxALW1tgC+t7QAvrm3ALe3
uAC4uLkAvLy9AIPJggCC24IAid+JAJfBlQCH4IcAjeONAJDjkACjyaIArM6rALDArgCl2KQAqdmoALHC
sACyxLEAysC7AM3DvwC/v8AAwcHCAMPDxADFxMUAycLAAMrFwgDPx8MAycbGAM3HxQDIycYAx8fIAMnJ
yADOy8oAy8zIAM3MygDPz88A1cfBANHKxgDVycQA18zHANjLxgDVzswA2c7JAMnXxwDN1ssAy9rKANrQ
ywDa0c0Az8/QANbS0ADV1NIA1tbVANrV0QDc1dEA2tbUANnZ1wDe2NUA3NrZANvc2gDe3NsA3t7dAOXS
ygDl08wA5dXOAOfY0gDi2tYA6NnTAO3Z0QDp3NYA7t3WAOHb2ADi3NoA5N3ZAOXf3ADq39oA4OHfAOfg
3QDr4NsA6OHeAPDg2QDw4twA4uLhAOnj4ADq5OEA7OXiAO/p5QDv6ugA8ebhAPHq5gDy7eoA9u7qAPPv
7AD17+wA9vHuAPjy7gD08vEA+PTyAPn29AD6+PYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJOkE9PT09PT09PT09PT09
PUI7QgAAAGQ4GQUFBQUFBQUFBQUFBQUFBQUcREkAAEIZAQEBAQEBAQcHBwcHBwcHBwcBHD0AAEcFBwcB
AQEBH2dnZ2dnYWddYTcBB0kAAEILCQEDAwMDIKSdlpWLi4mJiz8LB0kAAEkHCwMDCwMDIKadk4uGhYWF
iz8DB0kAAEkLDRwaHBoZNKaTenVwbmpqi1MNC1oAAEkND2eYmJiYYaaZfo6GdXBullMNDV0AAF0PEGeT
hoaFWKaemZ56np11nVYND10AAF0NFWeTZm5YRaaOb4Z6pKB6nlYSDWcAAF0VEmeZmH6GXaaemZt6np56
oFYSFWQAAF0VF2eZYWF1RaaZjpiOjn5+pFYXF10AAF0dJXmejo6OZ6ampKCmoKB6eT4kHV0AAF0eKHmb
jn+OZ6ampKampqBdYTUnHl0AAEkkK36cenqOZ6impqampqBkNisrJF0AAEkkL3+cnJygf5F/f39yc3JN
LCwsJF0AAEkpMZGkoJymoKB6ZWFKLzAvMS8wKkkAAEIrS5GcppygnKR5f1FLMzMzMzMzK0gAAEkrTJil
pqWmpaV5UkxOTk5OTk5OK0gAAEghTFVVVVVVVVVUUFBQUFBQUFBMIzwAAHY4IiwuLi4uLiwsLC4sLi4u
LiwiOFsAAAByR0E9PDw8PDxBPTw9PTw9PT1DZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AMAA
AwCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA
AQCAAAEAgAABAIAAAQCAAAEAgAABAMAAAwD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
AAAAAQAAAAEAAAAAAAAwkjAAMJYwADeSNgAwmzAAR5VGAEeZRgBInUcASZVIAFWUUwBWllUAWJtZAEii
RwBJp0gAVqBVAFSvUwBcp1sAW6FcAF2mXQBcq1sAXqtfAGiWaQBynnIAZ6NnAGmqagBqrmsAZLFlAGe0
ZgBgv2AAbLJsAGy2bABuuW4AeaZ6AHupewByu3MAdb11AHqzegB5tHoAeL14AGTNZAB0wXUAe8F6AHnG
eQB8xnwActVyAH7RfQCcvpsAp6moAKusqwCrr6wAt7q3AIbBhwCByoEAhsmFAIXOhgCF0IQAgN2AAIXZ
hACK0IoAncGcAJHQkQCS35IAnNecAJvemwChw58AjeKNAL3AuwC52rkAx8e/AMnGxgDIycIAyszFAM7O
ygDZycMA28zGANbOygDE08MA1NHPAN3QygDY0s8A39TPANbS0ADZ09AA2tTRANrW1QDe2NYA3dvaAN/d
2wDj1c4A4NbRAOPZ1QDl2dQA4NvYAOLc2QDk3dkA4d7cAOjf2wDC4sEA5eDeAOjh3gDt4dwA8ePdAPHk
3wDt5eEA6+bkAO3o5QDy5+IA8ermAPTq5QDx7OkA9e7qAPPw7gD08O0A+PLvAPXy8AD29PEA+PPwAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAADAWFxcXFxcXFxcXFyAvAAAVAQEBAQgKCgoKCgoB
IQAACgECAQIubmxqZmZqCBgAAAsCBAIEO2pZTkpKZAYYAAARDkdHREhsXGBOTmQHHQAAERNnW1hZZ1xi
bFtnDR0AABMTZ1lITW5cXG5cbw0fAAAaG21NWU1uZGdqXG0PKAAAHSttVFZWb3Nzb01CHCsAAB81bVxi
VnNzc3NIKyc1AAAiPHNubmpNR0A3LSwsNQAAIj5zbW9vX0w5OTg4ODoAACU+YWFhYUM9QUFBQUEzAAAy
JSYmJiYmJiYrIiYlMAAAAAAAAAAAAAAAAAAAAAAA//8AAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAA//8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9fX4GeHh5Onp6
emmAgIF8gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GB
gn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf4GBgn+BgYJ/gYGCf39/
gHx4eHlpdnZ3Onp6ewYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhISFBnl5
enSOjo7klpaX/pKSk/6Ojo7/i4uM/ouLi/+Li4v+i4uM/ouLjP6Li4v/i4uL/ouLi/6Li4v/i4uL/ouL
i/6Li4v/i4uL/ouLi/6Li4z/i4uL/ouLi/6Li4z/i4uM/ouLi/6Li4v/i4uL/ouLjP+Li4z+i4uM/ouL
i/+Li4z+i4uL/oyMjP+Ojo/+jY2O/oWFhuR1dXZ0enp7BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACHh4gVjIyNxqSkpf+ZmZr/wMDB/87Ozv/Pz8//0NDQ/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR
0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR
0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0v/Y2Nn/1tbW/62trf+Pj4//fn5/xnh4eRYAAAAAAAAAAAAA
AAAAAAAAAAAAAJOTkwaUlJXGpqan/qSkpf6nrqj/X4tf/j+GP/42iDb/NYk1/jWJNf81iTX+NYk1/jWJ
Nf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJNf41iTX/NYk1/jWJ
Nf41iTX/NYk1/jWJNf81iTX+NYk1/jWJNf81iTX+NYk1/jaINv8/hj/+YY1h/rW8tf/U1NT+jIyM/oCA
gMZ9fX4GAAAAAAAAAAAAAAAAAAAAAImJinTFxcX/n5+g/oOXg/41izX/L5Av/i+QL/4wkDD/L5Av/jCQ
MP8vkC/+L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+QL/4wkDD/L5Av/i+Q
L/4wkDD/L5Av/i+QL/4wkDD/L5Av/jCQMP8vkC/+L5Av/jCQMP8vkC/+L5Av/jCQMP8vkC/+L5Av/jWM
Nf+Po4/+1NTV/pKSk/96ent0AAAAAAAAAAAAAAAAmpqbB7CwsOSnp6j/maCa/zWNNf8wkTD/MJEw/zCR
MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR
MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR
MP8wkTD/MJEw/zCRMP81jTX/tby1/7Ozs/+Li4zkg4OEBwAAAAAAAAAAl5eYO9PT1P6fn5//XItc/i+S
L/4wkjD/L5Iv/i+SL/4wkjD/L5Iv/jCSMP8vki/+L5Iv/i+SL/4wkjD/L5Iv/i+SL/4wkjD/N5Q3/jmU
Of45lTn/OZQ5/jmUOf45lDn/OZQ5/jmUOf45lDn/OZQ5/jmUOf45lDn/OZQ5/jmUOf85lDn+OZQ5/jmU
Of85lDn+OZQ5/jmUOf80kzT+L5Iv/jCSMP8vki/+YZBi/tra2v+VlZb+gICBOwAAAAAAAAAAnJydatPT
0/6cnJ3/QItA/i+TL/4wkzD/L5Mv/i+TL/4wkzD/L5Mv/jCTMP8vky/+L5Mv/i+TL/4wkzD/L5Mv/i+T
L/42ljb/i5eI/p6hm/6eoZv/naCa/p2fmf6cn5n/nJ6Y/puemP6bnZf/mp2X/pmclv6ZnJb/mZuV/pib
lf+Ym5X+l5qU/pealP+XmZP+lpmT/pSWkP9rkGn+L5Mv/jCTMP8vky/+QItB/tvb2/+ZmZn+g4OEagAA
AAAAAAAAq6urfc3Nzv+ZmZr/N484/zCVMP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCV
MP8wlTD/MJUw/zCVMP85mDj/o6ef//n6+f/6+vj/+fn4//n5+P/5+fj/+fn3//n59//5+fj/+fn3//n4
9//5+Pf/+fj3//n49//5+Pf/+fn3//n49//5+Pf/+fn3/+nq6f90knL/MJUw/zCVMP8wlTD/OI84/9XV
1v+YmJn/jIyNfQAAAAAAAAAAr6+wf87Ozv6bm5z/N5E3/i+WL/4wljD/L5Yv/i+WL/4wljD/L5Yv/jCW
MP8vli/+L5Yv/i+WL/4wljD/L5Yv/i+WL/45mjj/o6ig/vn5+P706+b/8+ji/vLm4P7y5d//8ePd/vDi
2/7w4Nr/79/Y/u/e1/7u3dX/7tzU/u3c0//t29P+7tvT/u3b0//t29P+8eXf/urq6f90knL+L5Yv/jCW
MP8vli/+N5E3/tXV1v+ampv+j4+QfwAAAAAAAAAAsbGyf8/Pz/+dnZ7/N5M4/zCYMP8wmDD/MJgw/zCY
MP8wmDD/MJgw/zCYMP8wmDD/MJgw/zCYMP8wmDD/MJgw/zCYMP85mzj/pKmh//n5+P/06+b/8+fi//Lm
4P/y5N7/8eLb//Dg2f/w39f/7t3V/+7b1P/t2tL/7dnR/+zYz//s187/7NfO/+zXzv/s187/8OLc/+rq
6f91k3L/MJgw/zCYMP8wmDD/N5M4/9bW1/+dnZ7/kZGSfwAAAAAAAAAAs7Ozf9DQ0f6fn6D/OJQ4/i+Z
L/4wmTD/L5kv/i+ZL/4wmTD/L5kv/jCZMP8vmS/+L5kv/i+ZL/4wmTD/L5kv/i+ZL/45nDj/pamh/vn5
+P717en/9Orl/vPp4/7z5+H/8uXf/vHj3f7x4tv/8ODZ/u/e1/7u3NX/7tvT/u3Z0f/s2ND+7NfP/uzX
zv/r1s3+8OLc/urq6f91lHP+L5kv/jCZMP8vmS/+OJQ4/tfX1/+fn6D+lJSVfwAAAAAAAAAAtLS1f9HR
0v6hoaL/OJY4/i+bL/4wmzD/L5sv/i+bL/4wmzD/L5sv/jCbMP8vmy/+L5sv/i+bL/4wmzD/L5sv/i+b
L/45njj/paqi/vn6+f727+v/9ezn/ufe2v7l29f/5NrV/uLX0/7i1tH/4dTP/uDTzf7f0cz/39DK/t7O
yP/dzcf+3czG/t/Nxv/s187+8OPd/urq6v91lHP+L5sv/jCbMP8vmy/+OJY4/tjY2P+hoaP+lpaXfwAA
AAAAAAAAtra2f9LS0/6jo6T/OJg4/i+dL/4wnTD/L50v/jGdMf4xnjH/MZ4x/jGeMf8xnjH+MZ4x/jGe
Mf4xnjH/MZ4x/jGeMf46oDr/pqqi/vn6+P738O3/8erm/s3Gw/7MxMH/y8PA/sjAvf7Hv7v/xr26/sa8
uf7Fu7f/xbq2/sO5tf/CuLP+wrey/sO3sv/r18/+8ePd/urq6v92lXP+L50v/jCdMP8vnS/+OJg4/tnZ
2f+kpKX+mJiZfwAAAAAAAAAAt7e4f9PT1P+lpaf/OZo5/zCfMP8wnzD/OKA3/4CTff+IlIX/iJSE/4eT
hP+Gk4P/hpOD/4WSgv+EkYH/hJGB/4SQgP+GkYL/qqem//n6+f/38e3/9u/r//Dp5f/u5+P/7ubh/+3k
3//s497/6+Hc/+vf2v/q3tj/6dzW/+ja1P/o2dP/59fR/+jX0P/t29P/8eXf/+rr6v92lnT/MJ8w/zCf
MP8wnzD/OZo5/9nZ2v+mpqf/mpqbfwAAAAAAAAAAuLi5f9TU1f6np6j/Opw6/jCgMP4xoDH/PKI8/qOk
oP7r7Ov/6+vq/uvr6v/r6+r+6+vq/uvr6v7r6+r/6uvq/urr6v7n5+b/sa6u/vn6+P738e3/9u/r/vLr
6P7x6ub/8enl/vDo5P716+f/8+nk/u7k3/7u4t3/7ODb/uzf2f/r3df+6tvV/uvb1P/u3dX+8ubg/urr
6v93l3T+MKAw/jGgMf8woDD+Opw6/tra2/+oqKn+nJydfwAAAAAAAAAAubm6f9XV1v6pqar/Op06/jCi
MP4xojH/PaM8/qSmov7v7+3/6uLd/urg2//p3tr+6N3Y/ujc1v7n29X/5trU/ubZ0v7j1c//sq2s/vn6
+P738e3/8uvn/s/Jx/7Nx8X/zcfE/sjCv/7o4d3/39jU/szFwv7Lw8D/x7+8/se+uv/Gvbn+xby4/sa8
uP/u3tf+8uji/urr6v93mHT+MKIw/jGiMf8wojD+Op06/tvb2/+qqqv+np6ffwAAAAAAAAAAurq7f9bW
1/+rq6z/Op86/zGkMf8xpDH/PaU8/6Wmov/v7+3/6uDb/+nd1//o29b/59nU/+fY0v/m19D/5dXO/+TT
zP/h0Mn/sq6t//n6+f/38e3/9e/r/+Xe2//j3Nn/49zZ/+Ha1//z7Oj/3dfT/9jSzv/u5uL/7eTg/+3j
3v/s4tz/6t7Z/8W8uP/u4Nr/8+nl/+rr6v93mXX/MaQx/zGkMf8xpDH/Op86/9vb3P+srK3/n5+hfwAA
AAAAAAAAu7u8f9fX2P6srK7/OqE7/jCmMP4xpjH/Pac8/qano/7v7+3/6+Ld/urf2v/p3tj+6dzX/uja
1f7n2dP/5tfR/uXWz/7i08v/sq6t/vn6+f738e3/9u/r/vbv6/738Oz/9u/r/vbv6/738Oz/3dfU/tvV
0f727ur/9e3p/vXs5//06uX+8ufi/sa+uv/v493+9Ovn/urr6v94mnX+MKYw/jGmMf8wpjD+OqE7/tzc
3P+tra/+oaGifwAAAAAAAAAAvLy9f9jY2P6tra//O6M7/jCoMP4xqDH/Pak8/qaopP7v7+7/7OTg/uvi
3f/i2dT+4NfS/t/V0P7e087/3tHN/t3Qy/7azcf/s6+u/vr6+f738e3/9O3p/tXPzf7Tzcr/0szJ/s/I
xv7t5uL/3tfV/tvV0v738Oz/9+/r/vbu6v/27ej+8+nl/si/vP/x5uH+9e3p/uvr6v94m3b+MKgw/jGo
Mf8wqDD+O6M7/tzc3f+vr7D+oqKjfwAAAAAAAAAAvb2+f9jY2f+urrD/O6U7/zGqMf8xqjH/Pas8/6eo
pP/v7+7/7ebi/+Xd2f/Cvbr/wry5/8C6t/++uLT/vbaz/721sf+8tLD/sa2s//n6+f/38e3/9O3p/9rT
0f/X0c7/1tDO/9PNyv/v6OT/3dfU/9vV0v/38Oz/9/Ds//fv6//27+v/9Ozn/8jBvv/y6OP/9u/r/+vr
6v95nHb/Maox/zGqMf8xqjH/O6U7/93d3f+wsLH/o6OlfwAAAAAAAAAAvb2+f9jY2f6vr7H/O6c7/jCs
MP4xrDH/Pa08/qiopP7v7+7/7ebi/uzk4P/f2dX+3tfT/t3W0v7c1ND/29PO/tvRzP7Yzsn/s7Cv/vn6
+f738e3/9u/r/vbv6/738Oz/9u/r/vbv6/738Oz/3dfU/tvV0v738Oz/9u/r/vfw7P/38Oz+9O3p/sjC
v//z6ub+9/Ht/uvr6v95nXb+MKww/jGsMf8wrDD+O6c7/t3d3f+wsLL+pKSlfwAAAAAAAAAAvr6+f9nZ
2f6wsLH/O6g7/jCuMP4xrjH/Pa49/qippf7v7+7/7ebi/u3m4v/s5eH+6+Tg/uvj3/7q4t7/6+Ld/urg
2/7m29b/tbGw/vn6+f738e3/9e7q/uDa1/7e2NX/3tfV/tzV0v7x6ub/3dfU/tfRz/7r5eH/6uTg/urk
4P/r5OD+6eLf/sjCv//z7Oj+9/Lv/uvr6v96nnf+MK4w/jGuMf8wrjD+O6g7/t3d3f+xsbP+pKSmfwAA
AAAAAAAAvr6+f9nZ2f+wsLH/O6o8/zGwMf8xsDH/PbA9/6mppf/v7+7/7ebi/+fg3P/Gwb//xcC+/8S/
vf/AvLn/49vX/9TNyv/Dvbr/s6+v//n6+f/38e3/8+zo/9HLyf/Pycf/zsjG/8rEwf/q5OD/4tzZ/8/J
x//OyMb/y8XC/8rEwv/LxML/ysTB/83Gw//17ur/+PPw/+vr6v96n3j/MbAx/zGwMf8xsDH/O6o8/93d
3f+xsbP/paWmfwAAAAAAAAAAvr6+f9nZ2f6vr7H/Pq0+/kG3Qf49tj3/RrVG/qusqP7v7+7/7ebi/urj
3//Uzsv+083K/tLNyv7Qy8j/6OHd/s/Kxv7MxsP/tbGx/vn6+f738e3/9u/r/vXu6v717ur/9O7q/vTt
6v738Oz/9u/r/vTu6v707er/9O3p/vTt6f/07en+8uvn/vHr5//z7Oj+9PDt/urq6f9+onz+P7c//kK4
Qv9GuUb+P60//t3d3f+xsbL+pKSmfwAAAAAAAAAAvb2+f9jY2f6vr7D/P68//k6+Tv5Ovk7/Wb5Z/ra2
sv7x8fD/7+nm/u/p5f/v6OX+7+jl/u7o5P7u6OT/7ujk/tPOy/7Uz8z/u7e3/vr6+f738u7/9/Dt/vfw
7f738O3/9/Dt/vfw7f738e3/9/Dt/vfx7f738e3/9/Ht/vfx7f/07uv+7Obj/ubg3f/l39z+5+Ph/uLi
4f9+n3z+Tr5O/k6+Tv9Ovk7+QK9B/t3d3f+wsLL+o6OlfwAAAAAAAAAAvb2+f9jY2f+urq//QLFA/1LB
Uv9SwVL/XcFd/7i4tf/y8vH/8Orn/+3n5P/Y09H/19LQ/9bRz//U0M3/6+Xi/9fT0f/Z1NL/wr+///v7
+v/48/D/+PLv//jy7//48u//+PLv//jy7//48u//+PLv//jy7//48u//+PLv//jy7//x7On/0s3L/8bB
v//FwL7/yMXE/8rJyP+Bon//UsFS/1LBUv9SwVL/QbFB/9zc3f+vr7D/o6OkfwAAAAAAAAAAvLy9f9fX
2P6tra7/QLJA/lfEV/5XxFf/YcRh/rq7t/7y8vH/8Ovn/uvm4//Szsz+0c3L/tHMy/7Oy8j/6eTh/tjU
0f7Z1dP/xMHA/vv7+v749PD/+PLv/vjy7/748+//+PLv/vjy7/748+//+PLv/vjy7/748+//+PLv/vjy
7//s5uP+s6+v/sjGx//FxMT+v729/qqmpv97sXn+V8RX/lfEV/9XxFf+QrNC/tzc3f+urq/+oaGjfwAA
AAAAAAAAu7u8f9bW1/6rq63/QLRB/lvHW/5bx1v/Zcdl/ry9uf7y8vH/8evo/vDr6P/w6uf+8Orn/vDq
5/7w6uf/8Orn/tnV0/7a1tT/xsPC/vv7+v759PH/+PLv/vjy7/758/D/+PLv/vjy7/758/D/+PLv/vjy
7/758/D/+PLv/vjy7//s5+T+vbq6/urq6v/g39/+vry8/oawhP9cx1z+W8db/lvHW/9bx1v+QrRC/tvb
3P+srK7+oKChfwAAAAAAAAAAurq7f9bW1v+qqqv/QbVB/1/KX/9fyl//acpp/76/u//y8/H/8ezp/+/q
5//j39z/497b/+Ld2//h3dr/7+nm/9rW1P/a1tT/x8XE//v7+v/59PH/+fPw//nz8P/58/D/+fPw//nz
8P/58/D/+fPw//nz8P/58/D/+fPw//jz7//t6OX/vru7/+Hh4f/BwL//i7OJ/2HKYf9fyl//X8pf/1/K
X/9fyl//Q7ZD/9vb2/+qqqz/np6gfwAAAAAAAAAAubm6f9XV1f6oqKn/QbdB/mTNZP5kzWT/bc1t/sDB
vv7z8/L/8ezp/uzn5P/Szs3+0s7N/tHOzP7Oy8j/6eTh/t3Z1/7Rzsz/x8XE/vv7+v769/X/+vf0/vr3
9P769/T/+vf0/vr39P769/T/+vf0/vr39P769/T/+vf0/vr39P/w7ev+vbu7/sXDw/+RtY/+Zsxm/mTN
ZP9kzWT+ZM1k/mTNZP9kzWT+Q7hE/tra2/+oqKr+nZ2efwAAAAAAAAAAt7e4f9TU1P+mpqf/QbhC/2nQ
af9p0Gn/ctBy/8LDwP/z8/L/8u3q//Hs6f/u6eb/7ejm/+3o5f/t6OX/8ezp//Dr6P/r5uT/ycbG//Hx
8P/y8vH/8fHx//Hx8f/x8fH/8fHx//Hx8P/x8vH/8fHw//Hx8P/x8fD/8fHw//Hx8P/q6un/t7Sz/5q6
mP9qz2r/adBp/2nQaf9p0Gn/adBp/2nQaf9p0Gn/RLlF/9ra2v+np6j/m5ucfwAAAAAAAAAAtra3f9LS
0/6kpKX/QrpC/m3Tbf5t023/dtJ2/sTGwv7z9PP/8u3q/vLt6v/x7er+8u3q/vLt6v7y7er/8e3q/vHt
6v7w7On/0s7N/s3Kyf7Oysn/zMnH/snGxf7HxMP/x8PC/sfExP7FwsL/rLWp/qbCo/6mw6T/psOk/qXB
o/+jwKH+mcSX/nHScf9t023+bdNt/m3Tbf9t023+bdNt/m3Tbf9t023+RbtF/tnZ2f+kpKb+mZmafwAA
AAAAAAAAtbW1f9HR0v6ioqP/Q7tD/nPVc/5z1XP/e9V7/sfIxf709PT/8+7r/vPu6//z7uv+8+7r/vPu
6/7z7uv/8+7r/vPu6/7z7uv/8+7r/vPu6/7z7ev/7ejm/tnV0/7RzMr/0MvK/tTR0P7R0ND/kLWP/nPV
c/5z1XP/c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+c9Vz/nPVc/9z1XP+RrxG/tjY
2P+ioqP+l5eYfwAAAAAAAAAAs7O0f9DQ0f+goKH/Q7xD/3fYd/932Hf/gNd//8nKxv/09fT/8+7s//Pu
7P/z7uv/8+7s//Pu7P/z7uz/8+7r//Pu6//z7uz/8+7r//Pu6//z7uv/5eHf/7u5uf/GxMT/xMLC/8G/
v/+1srL/ksKR/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fYd/932Hf/d9h3/3fY
d/932Hf/R71H/9fX2P+goKH/lJSWfwAAAAAAAAAAsrKyf8/P0P6dnZ7/Q75D/nzafP582nz/hNqE/svM
yf709fT/8+/s/vPv7P/z7uz+8+/s/vPv7P7z7+z/8+7s/vPu7P7z7+z/8+7s/vPu7P7z7uz/5eHf/sfG
xv7o6Oj/4eHh/sjHxv6ewJ3/fdl9/nzafP582nz/fNp8/nzafP982nz+fNp8/nzafP982nz+fNp8/nza
fP982nz+fNp8/nzafP982nz+SL9I/tbW1/+dnZ7+kpKTfwAAAAAAAAAAsLCxf87Oz/6bm5z/RL9E/oDd
gP6B3YH/iNyI/s3Oy/719fT/9PDt/vTv7f/z7+z+9O/t/vTv7f707+3/8+/s/vPv7P707+3/8+/s/vPv
7P7z7+3/5+Lg/snHx/7i4uL/y8rK/qTCov6C3IL/gN2A/oDdgP6B3YH/gN2A/oHdgf+A3YD+gN2A/oHd
gf+A3YD+gN2A/oHdgf+A3YD+gN2A/oHdgf+A3YD+ScFJ/tXV1f+bm5z+kJCRfwAAAAAAAAAArKytfdHR
0f+ZmZr/RL9E/4TfhP+F34X/jN6M/8/Qzf/19vX/9fLv//Xx7//18e//9fHv//Xx7//18e//9fHv//Xx
7//18e//9fHv//Xx7//08e//6ebl/8jGxv/Ozc3/qcOn/4fdh/+F34X/hd+F/4Xfhf+F34X/hd+F/4Xf
hf+F34X/hd+F/4Xfhf+F34X/hd+F/4Xfhf+F34X/hd+F/4Xfhf+F34X/SMBI/9PT1P+ampz/jY2OfQAA
AAAAAAAAnp6fatvb2/6YmJn/RbVG/oXghf6J4Yn/keCQ/tDRzv7z9PP/8/Pz/vP08//z8/P+8/Tz/vPz
8/7z8/P/8/Pz/vPz8/7z8/P/8/Pz/vPz8/7z8/P/6urq/sLAwP6vx63/i9+L/onhif6J4Yn/ieGJ/onh
if6J4Yn/ieGJ/onhif+J4Yn+ieGJ/onhif+J4Yn+ieGJ/onhif+J4Yn+ieGJ/onhif+F4IX+R7ZH/tLS
0v+cnJ3+hYWGagAAAAAAAAAAm5ubO9vb2/6cnJz/XKVc/nDbcP6O447/kuKS/r7PvP7Cz8D/ws/A/sLP
wP/Cz8D+ws/A/sLOv/7Bzr//wc6//sHNv/7Bzb//wM2+/sDNvv6/zL3/vcq7/rPOsf6R4pH/juOO/o7j
jv6O447/juOO/o7jjv6O447/juOO/o7jjv+O447+juOO/o7jjv+O447+juOO/o7jjv+O447+juOO/o7j
jv9s2mz+Yaph/sbGxv+enp/+hISFOwAAAAAAAAAAoKCgB7GxsuS3t7f/iJSJ/0XGRf+K44r/kuSS/5Lk
kv+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Pkk/+T5JP/k+ST/5Lk
kv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lkkv+S5JL/kuSS/5Lk
kv+S5JL/kuSS/4Xhhf9AxUD/qLSo/6Cgof+UlJXkioqKBwAAAAAAAAAAAAAAAI+PkHTg4OD/kpKS/naV
dv5Fx0b/dd51/pHkkf6V5pX/luaW/pbmlv+W5pb+luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbm
lv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv6W5pb/luaW/pbmlv+W5pb+luaW/pbm
lv+W5pb+luaW/pXmlf+P5I/+cN1w/kDGQP+EpIX+pqan/qenqP9/f4B0AAAAAAAAAAAAAAAAAAAAAKCg
oAaenp/G1tbX/pCQkf6GkYf/WqNb/kS2Rf5Fw0X/RcRF/kXERf9FxEX+RcRF/kXERf5FxEX/RcRF/kXE
Rf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXERf5FxEX/RcRF/kXE
Rf9FxEX+RcRF/kXERf9FxEX+RcRF/kXDRf9EtkT+XKRd/pijmf+enp/+p6eo/o+Pj8aKiosGAAAAAAAA
AAAAAAAAAAAAAAAAAACampoVnZ2dxd/f3/+zs7T/lJSV/4+PkP+Ojo//jo6P/46Oj/+Ojo//jo6P/46O
j/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/46O
j/+Ojo//jo6P/46Oj/+Ojo//jo6P/46Oj/+Ojo//jo6P/4+PkP+UlJX/mJiZ/6Ojo//Dw8T/k5OUxYmJ
ihUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5+fBoyMjHSurq7k19fY/tjY2P7MzMz/x8fH/sbG
x//Gxsf+xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbG
x/7Gxsf/xsbH/sbGx/7Gxsf/xsbH/sbGx//Gxsf+xsbH/sbGx//Gxsf+xsbH/sjIyP/Pz9D+0NDQ/qys
rOOHh4d0lZWVBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgoKAGl5eXOpaW
l2ihoaJ8pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6Sk
pH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6SkpH+kpKR/pKSkf6Gh
oXyVlZZolpaWOp6engYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAPwA
AAAAPwAA8AAAAAAPAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA
AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA
AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADwAAAAAA8AAPwA
AAAAPwAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB9fX02ioqKqoaGh+mHh4f9hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aG
h/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaH/4aGh/+Ghof/hoaG/YODg+mCgoOqd3d4NgAA
AAAAAAAAAAAAAAAAAAAAAAAAjIyNap2dnvytra7/prKm/561nv+ftp//n7ef/5+3n/+ft5//n7ef/5+3
n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft5//n7ef/5+3n/+ft6D/r7uw/8HB
wf+VlZX8e3t8agAAAAAAAAAAAAAAAI+Pjzavr6/8maKa/0SLRP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCP
MP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCPMP8wjzD/MI8w/zCP
MP8wjzD/RYxG/7rDuv+Xl5j8fHx9NgAAAAAAAAAAr6+vq6enqP9EjET/MJEw/zCRMP8wkTD/MJEw/zCR
MP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCRMP8wkTD/MJEw/zCR
MP8wkTD/MJEw/zCRMP8wkTD/Ro5G/8XFxf+JiYqrAAAAAAAAAAC5ubnph5SH/zCTMP8wkzD/MJMw/zCT
MP8wkzD/MJMw/zCTMP8wkzD/MJMw/0aWRf99m3v/f559/3+dfP9+nHz/fpx7/32be/98mnr/fJp6/3ya
ef97mXn/e5l5/3qYeP95l3f/TJJL/zCTMP8wkzD/sr+y/42NjukAAAAAAAAAALu7vP57lHz/MJUw/zCV
MP8wlTD/MJUw/zCVMP8wlTD/MJUw/zCVMP8wlTD/VZlU/+Pi4f/49fP/9/Tx//fz8P/38u//9/Lv//bx
7v/28O3/9fDt//bw7f/28O3/9vDt/+7u7P9dk1z/MJUw/zCVMP+jvKT/k5OU/gAAAAAAAAAAvb2+/32X
fv8wlzD/MJcw/zCXMP8wlzD/MJcw/zCXMP8wlzD/MJcw/zCXMP9Wm1T/4+Ph//Tp5P/y5d//8ePc//Dg
2f/v3tb/7tvT/+3Z0f/s2M//7NfO/+zXzv/s187/7evp/16UXP8wlzD/MJcw/6S+pP+Xl5j/AAAAAAAA
AAC/v8D/gJqB/zCaMP8wmjD/MJow/zCaMP8wmjD/MJow/zCaMP8wmjD/MJow/1adVf/k4+L/9e3o//Tp
5P/y5+H/8eTe//Di2//v39j/7t3V/+3a0v/s2ND/7NfO/+zXzv/t6+n/XpZc/zCaMP8wmjD/pb+l/5qa
m/8AAAAAAAAAAMHBwv+CnYP/MJww/zCcMP8wnTD/MZ0x/zGdMf8xnTH/MZ0x/zGdMf8xnTH/V59W/+Tj
4//38Oz/29TQ/8/HxP/NxMH/y8K+/8rAvP/Jvrr/yLy4/8a7tv/HurX/7NjQ/+7r6v9emF3/MJww/zCc
MP+mwab/np6f/wAAAAAAAAAAw8PE/4Wghv8wnzD/MJ8w/3Obcf+osKX/p6+l/6avpP+mrqP/pa6j/6Wt
ov+jp5//5OTj//fw7f/07On/8enl//Dn4//v5eD/7uPd/+3g2//r3tj/6tvV/+rZ0v/u29T/7uzq/1+Z
Xf8wnzD/MJ8w/6fDqP+hoaL/AAAAAAAAAADFxcb/h6OI/zGiMf8xojH/hqWE/+7s6v/s5eL/6+Tg/+rj
3//q4t3/6eDc/9HKxv/k5OP/9/Dt/+Hb2P/X0c//1M7L/+7m4v/Xz8z/1MvH/9HIxP/RxsL/0MXA/+7e
1//u7Ov/YJte/zGiMf8xojH/qMSp/6Skpf8AAAAAAAAAAMfHx/+Jpor/MaQx/zGkMf+Gp4T/7ero/+ne
2f/o29b/59nT/+bX0P/l1M3/zsG8/+Xk4//38O3/7ujk/+nj3//o4t7/8uvn/9XPy//x6OT/8Obh/+/k
3//SyMT/7+Lb/+7t6/9gnV7/MaQx/zGkMf+pxqn/pqao/wAAAAAAAAAAyMjJ/4qoi/8xpzH/Macx/4eo
hf/u6+n/6+Ld/+Ta1f/j19P/4dXQ/+DSzf/Mwbz/5eXk//fw7f/n4N3/39jV/93W0//v6OX/19DO//fv
6//27un/9ezn/9XMyP/x5uD/7+7s/2CfX/8xpzH/Macx/6rHqv+oqKr/AAAAAAAAAADJycr/i6qM/zGq
Mf8xqjH/iKqG/+7s6v/o4d3/x8K//8bAvf/DvLn/wru3/7ixrv/l5eT/9/Dt/+ni3//i29j/4NnW//Dp
5f/X0M7/9/Ds//fv6//27+v/1s7L//Pq5f/v7u3/YaFf/zGqMf8xqjH/qsmr/6qqq/8AAAAAAAAAAMrK
yv+Mq43/Ma0x/zGtMf+Iq4b/7uzq/+3m4v/s5eH/6+Pf/+ri3f/q4Nv/0snG/+Xl5P/38O3/7OXi/+bg
3f/l3tv/8erm/9XPzP/v6OT/7ujk/+/o5P/Uzcr/9O3o/+/v7f9ho1//Ma0x/zGtMf+ryqv/q6ut/wAA
AAAAAAAAysrK/4ysjf8ysTL/MbAx/4msh//u7Or/6eLe/8XAvv/Ev73/yMPA/9vU0P+7trT/5uXk//fw
7f/j3dr/29XS/9jSz//w6eX/3NbT/9nT0P/Y0c7/2NHO/9jSz//27+v/8O/t/2KlYP8zsTP/NbI1/6vL
q/+rq63/AAAAAAAAAADJycr/jKyN/0a7Rv9MvUz/l7eV//Du7P/u6OT/6+Xh/+vk4f/r5eH/29XS/8jC
wP/n5uX/9/Ht//fw7P/38Oz/9/Ds//fw7f/38Oz/9/Dt//fw7f/z7en/6uTh/+nj4P/n5uX/b6pt/029
Tf9Hu0f/q8ur/6qqrP8AAAAAAAAAAMjIyf+LrIz/S79L/1PCU/+evJv/8e/u/+3n5P/Uz83/087N/9bS
z//g2tj/z8vJ/+rq6f/48/D/+PLv//jy7//48u//+PLv//jy7//48u//+PLv/+Pe2/++urn/vLi3/7+8
vP90r3L/U8JT/0y/TP+qy6v/qamq/wAAAAAAAAAAx8fI/4mriv9Qw1D/Wsda/6LAoP/x8O7/8Orn/+ji
4P/n4t//6eTh/+Hc2f/Rzcv/6+vq//nz8P/48/D/+PPw//jz8P/58/D/+PPw//jz8P/48u//2NPR/93d
3f/a2tr/oLKe/1/DX/9ax1r/UcNR/6nLqv+np6j/AAAAAAAAAADFxcb/iKqI/1XHVf9hy2H/psOk//Lw
7//v6eb/3dnW/9zY1v/f29j/4t3b/8/Lyv/s7Ov/+fTx//nz8P/58/D/+fPw//nz8P/58/D/+fPw//nz
8P/a1tT/1dTU/6m4p/9nx2b/Ycth/2HLYf9WyFb/qcup/6Skpv8AAAAAAAAAAMTExf+FqYb/Wsta/2jP
aP+qx6j/8/Hw//Dr6P/l4N7/5ODd/+bi3//t6OX/2NTS/+jn5v/19PP/9PTz//T08//09PP/9PTz//T0
8//09PL/9PTy/9vZ2f+suan/b8tu/2jPaP9oz2j/aM9o/1zMXP+oy6j/oqKj/wAAAAAAAAAAwsLC/4On
hP9gz2D/b9Nv/67Krf/z8vD/8u3q//Lt6v/y7ev/8u3q//Lt6v/s5+X/2tbU/9rV1P/Tz87/zcnI/87L
yv/DwcH/k8OS/5XJk/+UyJL/kseR/3jReP9v02//b9Nv/2/Tb/9v02//Ys9i/6fKp/+enp//AAAAAAAA
AADAwMD/gaWC/2XSZf9213b/ss2x//Tz8f/z7uv/8+7r//Pu6//z7uv/8+7r//Pu6//z7uv/8u3q/8zJ
yP/Gw8P/xMLC/7W3s/9403j/dtd2/3bXdv9213b/dtd2/3bXdv9213b/dtd2/3bXdv9o02j/psqm/5ub
nP8AAAAAAAAAAL6+vv9+o3//a9Zr/33bff+30bX/9PPy//Pv7P/z7+z/8+/s//Pv7P/z7+z/8+/s//Pv
7P/y7uv/zszL/+Xl5f/Iycb/js6N/33bff99233/fdt9/33bff99233/fdt9/33bff99233/fdt9/27X
bv+lyqX/l5eY/wAAAAAAAAAAvb29/nyhff9v2W//hN6E/7rUuf/19PP/9PHu//Tx7v/08e7/9PHu//Tx
7v/08e7/9PHu//Pw7v/Qzs3/zc3L/5XRlP+E3oT/hN6E/4TehP+E3oT/hN6E/4TehP+E3oT/hN6E/4Te
hP+E3oT/ctpy/6PIo/+UlJX+AAAAAAAAAAC+vr/phJiF/2nZaf+K4Yr/u9S6/+bl5f/m5eX/5uXl/+bl
5f/l5eX/5eXk/+Xl5P/l5OT/5eTk/8jIx/+d1J3/iuGK/4rhiv+K4Yr/iuGK/4rhiv+K4Yr/iuGK/4rh
iv+K4Yr/iuGK/4rhiv9o2Wj/qr6r/5GRkekAAAAAAAAAALOzs6unp6f/VrtX/43jjf+a4Zr/oN+f/6Df
n/+g35//n9+f/5/fn/+f35//n9+e/5/fnv+e3p7/m+Ca/5Hkkf+R5JH/keSR/5Hkkf+R5JH/keSR/5Hk
kf+R5JH/keSR/5Hkkf+R5JH/i+OL/1W9Vf+ysrL/kpKSqwAAAAAAAAAAlpaXNsbGx/yEkoT/V7tX/2/d
b/994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33gff994H3/feB9/33g
ff994H3/feB9/33gff994H3/feB9/27dbv9UvFX/mqia/5+foPyFhYU2AAAAAAAAAAAAAAAAnJydacXF
xvyjo6P/fZB+/3SadP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP9zmnT/c5p0/3Oa
dP9zmnT/c5p0/3OadP9zmnT/c5p0/3OadP90mnT/gZSC/6Ojo/+tra78jY2OaQAAAAAAAAAAAAAAAAAA
AAAAAAAAlZWVNq+vr6q5ubnotbW1/bOztP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP+zs7T/s7O0/7Oz
tP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP+zs7T/s7O0/7OztP2zs7PorKysqpCQkTYAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP/////gAAAHwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABwAAAA+AAAAf/////KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGNjYxBsbGw5cHBxP3FxcT9xcXE/cXFxP3FxcT9xcXE/cXFxP3FxcT9xcXE/cXFxP3Fx
cT9xcXE/cXFxP3BwcT9ra2w5Y2NjEAAAAAAAAAAAAAAAAAAAAABubm8Fi4uMj5+foPivr7D/rq6u/q6u
rv+urq7/rq6u/q6urv+urq7/rq6u/66urv6urq7/rq6u/q6urv+urq7/rq6u/q6urv+xsbH/paWm+H9/
gI9ra2wFAAAAAAAAAACdnZ6Qm6Cc/luVW/41izX+Mowy/jKMMv4yjDL+Mowy/jKMMv4yjDL+Mowy/jKM
Mv4yjDL+Mowy/jKMMv4yjDL+Mowy/jKMMv41izX+X5lf/rG2sf6CgoOQAAAAAHh4eBCysrP4VpJW/jCR
MP8wkTD/L5Ev/jCRMP8wkTD/L5Ev/jGSMf80kzT/NJM0/zSTNP40kzT/NJI0/jSTNP80kjT/NJI0/jSS
NP8zkjP/L5Ev/l+bX/+rq6z4dnZ3EImJiTm1tbb/NpA2/jCUMP8wlDD/L5Qv/jCUMP8wlDD/L5Qv/meb
Zf/Mzcr/y8zJ/8vMyP7Ky8f/ycrH/snKxv/Iysb/yMnF/sjJxf+XqJX/L5Qv/jaRNv+4uLn/g4OEOZWV
lj+1tbb+M5Qz/i+XL/4vly/+L5cv/i+XL/4vly/+L5cv/m6hbP738u/+8+fh/vHj3f7w4Nn+793W/u3b
0/7t2dH+7dnQ/u/e1/6vvq7+L5cv/jOUM/65ubn+jY2OP5iYmT+4uLn/NJg0/jCaMP8wmjD/L5ov/jCa
MP8wmjD/L5ov/m+jbf/49PH/8efi/+vg2/7q3Nf/6NnT/ubWz//l08z/5dLK/u7d1f+wv67/L5ov/jSY
NP+8vL3/kZGTP5ubnD+8vLz/NJs0/jKeMv9bmVn/XJlb/lyYWv9bmFn/W5dZ/oShgf/49fP/6eLe/9zV
0f7a0c3/2c7K/tfMx//VycT/1cfB/u/e1/+wwK7/MJ4w/jSbNP+/v8D/lpaXP56enz++vr/+NZ81/jai
Nv7Iycb+6ubj/urk4v7p4+D+6OLe/svGxP749fP+6uTg/t/Y1f7l3dr+49vW/tvRzf7Zzsn+2MvG/vDi
3P6xwa/+MKEw/jWfNf7CwsP+mpqbP6CgoT/BwcL/NaM1/jemNv/Ky8j/6t/a/ujc1v/n2NL/5dXO/srA
u//49fP/8uvn/+3m4v7w6eb/29XS/vLq5f/x5+L/2tDL/vHm4f+xwrD/MKUw/jWjNv/ExMX/nZ2eP6Ki
oz/Dw8T/NqY2/jepNv/LzMn/6uLe/tHKxv/Px8P/zcO//r63tP/49fP/5t/c/9XOzP7f2db/3NbT/vfv
6//27ur/3dXR/vPr5v+yw7D/MKkw/jamNv/Gxsf/n5+hP6Ojoz/ExMX/Nqo2/jetNv/LzMn/7Obi/uXe
2v/k3Nj/49nV/snCwP/49fP/8erm/+rk4P7v6OT/29XS/vHq5v/x6ub/29XR/vXu6/+yxLD/MK0w/jaq
Nv/Hx8j/oaGiP6OjpD/ExMX+O687/jyzPP7Mzcr+6uTg/s3Hxf7KxcL+29XR/r65t/749fP+7OXi/uLb
2P7o4d7+5+Dd/uDa1/7f2dX+3tjV/vXv7P6zxbL+ObM5/jywPP7Hx8j+oaGiP6Kioz/Dw8T/SLhI/lbA
Vv/U1NL/7+nm/uPd2v/i3Nn/4dvY/svGxf/59vT/9/Hu//fx7v748e7/9/Hu/vfx7v/17+z/2tXT/tbS
0P+ru6n/UMBQ/km4Sf/Gxsf/oKChP6CgoT/BwcL+TbxN/l7GXv7W19X+7+rm/uHc2v7g29j+497b/s/M
yv769/X++PLv/vjy7/748+/++PLv/vjy7/7y7On+yMbH/snHx/6CtID+WcZZ/k29Tv7ExMX+nZ2fP56e
nz+/v8D/UcFR/mbMZv/Z2df/7+rn/trW1P/Z1dL/5N/d/s7Lyv/6+Pb/+fXy//n18v759fL/+fXy/vn1
8v/08O3/yMfG/pG9j/9izGL/Ysxi/lLBUv/CwsP/mpqcP5ycnT+8vL3/VsVW/nDRb//b3Nr/8u3q/u/r
6P/v6uj/8ezp/t7a2P/f3t3/3tzb/9za2v7c2tr/zdbL/svayv/J18f/l8GV/mzRbP9r0Wv/a9Fr/ljG
WP+/v8D/l5eYP5mZmj+5ubr+XMlc/nnWef7e393+8+7r/vPu6/7z7uv+8+7r/vPu6/7z7uv+2tbU/srH
x/7HxcT+g8mC/nXWdf511nX+ddZ1/nXWdf511nX+ddZ1/l7JXv68vL3+kpKTP5aWlj+1tbb/Yc1h/oLb
gv/g4d//8+/s/vPv7P/z7+z/8+/s/vPv7P/z7+z/19TT/97d3f6jyaL/f9t//n7cfv9+3H7/ftx+/n7c
fv9+3H7/ftx+/mPOY/+5ubr/jo6PP4uLizm3t7j/Zc1l/ovfi//i4uH/9PLx/vTy8f/08vH/9PLx/vTy
8f/08vH/19bV/6zOq/6I34j/h+CH/ofgh/+H4If/h+CH/ofgh/+H4If/h+CH/mbNZv+3t7j/hYWGOXx8
fBC4uLj4ZrZn/o/jj/6p2qj+qtqp/qraqf6q2an+qtmp/qrZqf6p2Kj+pdik/pDjkP6Q45D+kOOQ/pDj
kP6Q45D+kOOQ/pDjkP6Q45D+jOOM/m2/bf6mpqf4e3t8EAAAAACrq6yQm6Oc/me2Z/9s0Wz/bdVt/m3V
bf9t1W3/bdVt/m3Vbf9t1W3/bdVt/23Vbf5t1W3/bdVt/m3Vbf9t1W3/bdVt/m3Vbf9r0Wv/abpp/pyk
nf+QkJGQAAAAAAAAAACAgIAFqqqqj7OztPiwsLH/qqqr/qqqq/+qqqv/qqqr/qqqq/+qqqv/qqqr/6qq
q/6qqqv/qqqr/qqqq/+qqqv/qqqr/qqqq/+vr6//rq6u+J2dnY99fX4FAAAAAAAAAAAAAAAAAAAAAIKC
gxCRkZI5m5ucP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ycnD+cnJw/nJycP5ub
nD+SkpI5hISEEAAAAAAAAAAAAAAAAOAABwCAAAEAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEA4AAHACgA
AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tMDXR0dGR5eXp/eXl6f3l5
en95eXp/eXl6f3l5en95eXp/eXl6f3l5en95eXl/cXFyZExMTA0AAAAAU1NUDZyendhynnL/Z6Nn/2ej
Z/9no2f/Z6Nn/2ejZ/9no2f/Z6Nn/2ejZ/9no2f/Z6Nn/3mmev+YmpnYU1NTDZWVlWVolmn/MJIw/zCS
MP8wkjD/MJIw/0mVSP9Xl1b/V5dW/1aWVf9WlVT/VZVU/1WUU/83kjb/e6l7/4KCg2Wmpqd/VpZW/zCW
MP8wljD/MJYw/zCWMP+cvpv/9e7q//Tq5f/y5+L/8eTf//Hj3f/v6OT/R5VG/2mqav+QkJF/rKysf1ib
Wf8wmzD/MJsw/zCbMP8wmzD/ncGc/+/m4v/g1tH/3dDL/9vMxv/ZycP/7eHc/0eZRv9qrmv/l5eZf6+v
sH9boVz/VqBV/8rMxf/IycL/x8e//8/Oy//x6ub/49zY/+jf2//f1M//3dDK/+7k4P9InUf/bLJs/56e
n3+zs7N/XaZd/1ynW//s5eL/5dnU/+PVzv/Z09D/8erm/+Pd2f/j3dn/8+vn/+PZ1f/v6OX/SKJH/222
bf+jo6R/tLS1f16rX/9cq1v/7Ojl/9nSz//Wzsr/1dHP//Hq5v/j3dn/493Z//Ps6P/k3dn/8e3q/0mn
SP9tum7/pqanf7W1tX9ksWX/Z7Rm/+3p5v/Y0s//2tTR/9TRz//y7Oj/6OLe/+7o5P/o4d7/493a/+3q
5/9Ur1P/dMF1/6amqH+zs7R/bLZs/3vBev/w7Or/3tjW/+Db2P/d29r/+PPw//jy7//48u//+PLv/9bS
0P+9wLv/YL9g/3zGfP+jo6V/sLCxf2+5b/+GyYX/8e7r/+Hc2v/l4N7/393b//f08v/29PH/9vTx//bz
8f/Nz8r/ecZ5/2TNZP+ByoH/np6gf6ysrX9yu3P/kdCR//Pw7v/y7ev/8u3r/+vm5P/a1tX/ycbG/6HD
n/+F0IT/ftF9/3LVcv9y1XL/hc6G/5iYmX+oqKh/db11/5zXnP/08vD/9PDt//Tw7f/08O3/4d7c/8TT
w/+F2YT/gN2A/4DdgP+A3YD/gN2A/4rQiv+RkZJ/mZmZZXq1e/+b3pv/w+LC/8Piwv/C4sL/wuLB/7na
uf+S35L/juOO/47jjv+O447/juOO/4zijP+GwYf/h4eIZVtbXA2rrqvYerN6/3i9eP94vXj/eL14/3i9
eP94vXj/eL14/3i9eP94vXj/eL14/3i9eP95tHr/naGe2FxcXA0AAAAAXl5eDZycnWSpqap/qqqqf6qq
qn+qqqp/qqqqf6qqqn+qqqp/qqqqf6qqqn+pqal/m5ubZGBgYA0AAAAAgAEAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==
</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>123, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Duplicati dummy window</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>143, 29</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Duplicati Control Window</value>
</data>
<data name="&gt;&gt;TrayIcon.Name" xml:space="preserve">
<value>TrayIcon</value>
</data>
<data name="&gt;&gt;TrayIcon.Type" xml:space="preserve">
<value>System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;statusToolStripMenuItem.Name" xml:space="preserve">
<value>statusToolStripMenuItem</value>
</data>
<data name="&gt;&gt;statusToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;wizardToolStripMenuItem.Name" xml:space="preserve">
<value>wizardToolStripMenuItem</value>
</data>
<data name="&gt;&gt;wizardToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
<value>toolStripSeparator1</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;optionsToolStripMenuItem.Name" xml:space="preserve">
<value>optionsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;optionsToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
<value>toolStripSeparator2</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;controlToolStripMenuItem.Name" xml:space="preserve">
<value>controlToolStripMenuItem</value>
</data>
<data name="&gt;&gt;controlToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pauseToolStripMenuItem.Name" xml:space="preserve">
<value>pauseToolStripMenuItem</value>
</data>
<data name="&gt;&gt;pauseToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pausePeriodToolStripMenuItem.Name" xml:space="preserve">
<value>pausePeriodToolStripMenuItem</value>
</data>
<data name="&gt;&gt;pausePeriodToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DelayDuration05Menu.Name" xml:space="preserve">
<value>DelayDuration05Menu</value>
</data>
<data name="&gt;&gt;DelayDuration05Menu.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DelayDuration15Menu.Name" xml:space="preserve">
<value>DelayDuration15Menu</value>
</data>
<data name="&gt;&gt;DelayDuration15Menu.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DelayDuration30Menu.Name" xml:space="preserve">
<value>DelayDuration30Menu</value>
</data>
<data name="&gt;&gt;DelayDuration30Menu.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DelayDuration60Menu.Name" xml:space="preserve">
<value>DelayDuration60Menu</value>
</data>
<data name="&gt;&gt;DelayDuration60Menu.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;stopToolStripMenuItem.Name" xml:space="preserve">
<value>stopToolStripMenuItem</value>
</data>
<data name="&gt;&gt;stopToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;throttleOptionsToolStripMenuItem.Name" xml:space="preserve">
<value>throttleOptionsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;throttleOptionsToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;quitToolStripMenuItem.Name" xml:space="preserve">
<value>quitToolStripMenuItem</value>
</data>
<data name="&gt;&gt;quitToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
-114
View File
@@ -1,114 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace Duplicati.GUI
{
public static class MonoSupport
{
/// <summary>
/// Fixes a bug in Mono MWF support for localized forms and multiline textboxes:
/// https://bugzilla.novell.com/show_bug.cgi?id=440191
/// </summary>
/// <param name="owner">The toplevel control to run the procedure on</param>
public static void FixTextBoxes(Control owner)
{
FixTextBoxes(owner, new System.ComponentModel.ComponentResourceManager(owner.GetType()));
}
/// <summary>
/// Fixes a bug in Mono MWF support for localized forms and multiline textboxes:
/// https://bugzilla.novell.com/show_bug.cgi?id=440191
/// </summary>
/// <param name="owner">The toplevel control to run the procedure on</param>
public static void FixTextBoxes(Control owner, System.ComponentModel.ComponentResourceManager resources)
{
try
{
if (!Duplicati.Library.Utility.Utility.IsClientLinux)
return;
Dictionary<Control, Control> visited = new Dictionary<Control, Control>();
Queue<Control> work = new Queue<Control>();
work.Enqueue(owner);
while (work.Count > 0)
{
Control c = work.Dequeue();
visited[c] = null;
if (c.HasChildren)
foreach (Control cc in c.Controls)
if (!visited.ContainsKey(cc))
{
work.Enqueue(cc);
visited[cc] = null;
}
if (c is TextBox && ((TextBox)c).Multiline)
resources.ApplyResources(c, c.Name);
}
}
finally
{
if (resources != null)
resources.ReleaseAllResources();
}
}
/// <summary>
/// Custom implementation of the BeginInvoke method, as Mono does the same for Invoke and BeginInvoke
/// </summary>
/// <param name='method'>The method to invoke</param>
/// <param name='args'>The parameters to call the method with</param>
public static void BeginInvoke(Control owner, Delegate method, params object[] args)
{
new System.Threading.Thread(BeginInvokeHelper).Start (new object[] { owner, method, args });
}
/// <summary>
/// Helper method to do invocations from a thread
/// </summary>
/// <param name='arg'>
/// An object array where the first entry is the control owner,
/// the second is the delegate and the third is the arguments
/// </param>
private static void BeginInvokeHelper(object arg)
{
try
{
System.Threading.Thread.Sleep(500);
object[] args = (object[])arg;
Control owner = (Control)args[0];
Delegate delg = (Delegate)args[1];
object[] input = (object[])args[2];
owner.Invoke(delg, input);
}
catch
{
}
}
}
}
-567
View File
@@ -1,567 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Data.LightDatamodel;
using System.Drawing;
using Duplicati.Datamodel;
using Duplicati.Server;
using Duplicati.Library.Utility;
namespace Duplicati.GUI
{
static class Program
{
/// <summary>
/// The name of the environment variable that holds the path to the data folder used by Duplicati
/// </summary>
public const string DATAFOLDER_ENV_NAME = "DUPLICATI_HOME";
/// <summary>
/// The environment variable that holdes the database key used to encrypt the SQLite database
/// </summary>
public const string DB_KEY_ENV_NAME = "DUPLICATI_DB_KEY";
/// <summary>
/// Gets the folder where Duplicati data is stored
/// </summary>
public static string DATAFOLDER { get { return Library.Utility.Utility.AppendDirSeparator(Environment.ExpandEnvironmentVariables("%" + DATAFOLDER_ENV_NAME + "%").TrimStart('"').TrimEnd('"')); } }
/// <summary>
/// A flag indicating if database encryption is in use
/// </summary>
public static bool UseDatabaseEncryption;
/// <summary>
/// This is the only access to the database
/// </summary>
public static IDataFetcherWithRelations DataConnection;
/// <summary>
/// This is the lock to be used before manipulating the shared resources
/// </summary>
public static object MainLock = new object();
/// <summary>
/// This is the scheduling thread
/// </summary>
public static Scheduler Scheduler;
/// <summary>
/// This is the working thread
/// </summary>
public static WorkerThread<IDuplicityTask> WorkThread;
/// <summary>
/// The path to the file that contains the current database
/// </summary>
public static string DatabasePath;
/// <summary>
/// The actual runner, do not call directly. Only used for events.
/// </summary>
public static DuplicatiRunner Runner;
/// <summary>
/// The controller interface for pause/resume and throttle options
/// </summary>
public static LiveControls LiveControl;
/// <summary>
/// The main form that contains the tray icon
/// </summary>
public static MainForm DisplayHelper;
/// <summary>
/// The single instance keeper
/// </summary>
public static SingleInstance SingleInstance;
/// <summary>
/// A value describing if Duplicati is running without a tray
/// </summary>
public static bool TraylessMode = Library.Utility.Utility.IsClientLinux ? true : false;
/// <summary>
/// A flag indicating if the main message loop is still running,
/// used to force exit when running on OSX
/// </summary>
public static bool IsRunningMainLoop;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//If we are on Windows, append the bundled "win-tools" programs to the search path
//We add it last, to allow the user to override with other versions
if (!Library.Utility.Utility.IsClientLinux)
{
string wintools = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "win-tools");
Environment.SetEnvironmentVariable("PATH",
Environment.GetEnvironmentVariable("PATH") +
System.IO.Path.PathSeparator.ToString() +
wintools +
System.IO.Path.PathSeparator.ToString() +
System.IO.Path.Combine(wintools, "gpg") //GPG needs to be in a subfolder for wrapping reasons
);
}
Library.Utility.UrlUtillity.ErrorHandler = new Duplicati.Library.Utility.UrlUtillity.ErrorHandlerDelegate(DisplayURLOpenError);
//If we are on windows we encrypt the database by default
//We do not encrypt on Linux as most distros use a SQLite library without encryption support,
//Linux users can use an encrypted home folder, or install a SQLite library with encryption support
if (!Library.Utility.Utility.IsClientLinux && string.IsNullOrEmpty(Environment.GetEnvironmentVariable(DB_KEY_ENV_NAME)))
{
//Note that the password here is a default password and public knowledge
//
//The purpose of this is to prevent casual read of the database, as well
// as protect from harddisk string scans, not to protect from determined
// attacks.
//
//If you desire better security, start Duplicati once with the commandline option
// --unencrypted-database to decrypt the database.
//Then set the environment variable DUPLICATI_DB_KEY to the desired key,
// and run Duplicati again without the --unencrypted-database option
// to re-encrypt it with the new key
//
//If you change the key, please note that you need to supply the same
// key when restoring the setup, as the setup being backed up will
// be encrypted as well.
Environment.SetEnvironmentVariable(DB_KEY_ENV_NAME, "Duplicati_Key_42");
}
//Find commandline options here for handling special startup cases
Dictionary<string, string> commandlineOptions = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(new List<string>(args));
foreach (string s in args)
if (
s.Equals("help", StringComparison.InvariantCultureIgnoreCase) ||
s.Equals("/help", StringComparison.InvariantCultureIgnoreCase) ||
s.Equals("usage", StringComparison.InvariantCultureIgnoreCase) ||
s.Equals("/usage", StringComparison.InvariantCultureIgnoreCase))
commandlineOptions["help"] = "";
//If the commandline issues --help, just stop here
if (commandlineOptions.ContainsKey("help"))
{
List<string> lines = new List<string>();
foreach (Library.Interface.ICommandLineArgument arg in SupportedCommands)
lines.Add(string.Format(Strings.Program.HelpDisplayFormat, arg.Name, arg.LongDescription));
MessageBox.Show(string.Format(Strings.Program.HelpDisplayDialog, string.Join(Environment.NewLine, lines.ToArray())), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (commandlineOptions.ContainsKey("trayless"))
Program.TraylessMode = Library.Utility.Utility.ParseBoolOption(commandlineOptions, "trayless");
#if DEBUG
//Log various information in the logfile
if (!commandlineOptions.ContainsKey("log-file"))
{
commandlineOptions["log-file"] = System.IO.Path.Combine(Application.StartupPath, "Duplicati.debug.log");
commandlineOptions["log-level"] = Duplicati.Library.Logging.LogMessageType.Profiling.ToString();
}
#endif
if (commandlineOptions.ContainsKey("log-level"))
foreach (string s in Enum.GetNames(typeof(Duplicati.Library.Logging.LogMessageType)))
if (s.Equals(commandlineOptions["log-level"].Trim(), StringComparison.InvariantCultureIgnoreCase))
Duplicati.Library.Logging.Log.LogLevel = (Duplicati.Library.Logging.LogMessageType)Enum.Parse(typeof(Duplicati.Library.Logging.LogMessageType), s);
if (commandlineOptions.ContainsKey("log-file"))
{
if (System.IO.File.Exists(commandlineOptions["log-file"]))
System.IO.File.Delete(commandlineOptions["log-file"]);
Duplicati.Library.Logging.Log.CurrentLog = new Duplicati.Library.Logging.StreamLog(commandlineOptions["log-file"]);
}
//Set the %DUPLICATI_HOME% env variable, if it is not already set
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(DATAFOLDER_ENV_NAME)))
{
#if DEBUG
//debug mode uses a lock file located in the app folder
Environment.SetEnvironmentVariable(DATAFOLDER_ENV_NAME, System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
#else
bool portableMode = Library.Utility.Utility.ParseBoolOption(commandlineOptions, "portable-mode");
if (portableMode)
{
//Portable mode uses a data folder in the application home dir
Environment.SetEnvironmentVariable(DATAFOLDER_ENV_NAME, System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "data"));
}
else
{
//Normal release mode uses the systems "Application Data" folder
Environment.SetEnvironmentVariable(DATAFOLDER_ENV_NAME, System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Application.ProductName));
}
#endif
}
try
{
try
{
//This will also create Program.DATAFOLDER if it does not exist
SingleInstance = new SingleInstance(Application.ProductName, Program.DATAFOLDER);
}
catch (Exception ex)
{
MessageBox.Show(string.Format(Strings.Program.StartupFailure, ex.ToString()), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (!SingleInstance.IsFirstInstance)
{
//Linux shows this output
Console.WriteLine(Strings.Program.AnotherInstanceDetected);
return;
}
Version sqliteVersion = new Version((string)SQLiteLoader.SQLiteConnectionType.GetProperty("SQLiteVersion").GetValue(null, null));
if (sqliteVersion < new Version(3, 6, 3))
{
//The official Mono SQLite provider is also broken with less than 3.6.3
MessageBox.Show(string.Format(Strings.Program.WrongSQLiteVersion, sqliteVersion, "3.6.3"), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//Create the connection instance
System.Data.IDbConnection con = (System.Data.IDbConnection)Activator.CreateInstance(SQLiteLoader.SQLiteConnectionType);
try
{
#if DEBUG
//Default is to not use encryption for debugging
Program.UseDatabaseEncryption = commandlineOptions.ContainsKey("unencrypted-database") ? !Library.Utility.Utility.ParseBoolOption(commandlineOptions, "unencrypted-database") : false;
#else
//Default is to use encryption for release
Program.UseDatabaseEncryption = !Library.Utility.Utility.ParseBoolOption(commandlineOptions, "unencrypted-database");
#endif
OpenSettingsDatabase(con, Program.DATAFOLDER);
}
catch (Exception ex)
{
//Unwrap the reflection exceptions
if (ex is System.Reflection.TargetInvocationException && ex.InnerException != null)
ex = ex.InnerException;
MessageBox.Show(string.Format(Strings.Program.DatabaseOpenError, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DataConnection = new DataFetcherWithRelations(new SQLiteDataProvider(con));
string displayLanguage = new Datamodel.ApplicationSettings(DataConnection).DisplayLanguage;
if (!string.IsNullOrEmpty(displayLanguage) && displayLanguage != Library.Utility.Utility.DefaultCulture.Name)
{
try
{
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(displayLanguage);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(displayLanguage);
}
catch (Exception ex)
{
MessageBox.Show(string.Format(Strings.Program.LanguageSelectionError, ex.Message), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
//This is non-fatal, just keep running with system default language
}
}
try
{
DataFetcherNested logcon = new DataFetcherNested(DataConnection);
Log[] items = logcon.GetObjects<Log>("Subaction LIKE ?", "InProgress");
if (items != null && items.Length > 0)
{
foreach (Log l in items)
l.SubAction = "Primary";
logcon.CommitAllRecursive();
}
}
catch
{
//Non-fatal but any interrupted backup will not show
}
LiveControl = new LiveControls(new ApplicationSettings(DataConnection));
LiveControl.StateChanged += new EventHandler(LiveControl_StateChanged);
LiveControl.ThreadPriorityChanged += new EventHandler(LiveControl_ThreadPriorityChanged);
LiveControl.ThrottleSpeedChanged += new EventHandler(LiveControl_ThrottleSpeedChanged);
Runner = new DuplicatiRunner();
WorkThread = new WorkerThread<IDuplicityTask>(new WorkerThread<IDuplicityTask>.ProcessItemDelegate(Runner.ExecuteTask), LiveControl.State == LiveControls.LiveControlState.Paused);
Scheduler = new Scheduler(DataConnection, WorkThread, MainLock);
DataConnection.AfterDataConnection += new DataConnectionEventHandler(DataConnection_AfterDataConnection);
DisplayHelper = new MainForm();
DisplayHelper.InitialArguments = args;
//Replicate variables to both entries
Server.Program.DataConnection = Program.DataConnection;
Server.Program.DatabasePath = Program.DatabasePath;
Server.Program.LiveControl = Program.LiveControl;
Server.Program.MainLock = Program.MainLock;
Server.Program.Runner = Program.Runner;
Server.Program.Scheduler = Program.Scheduler;
Server.Program.UseDatabaseEncryption = Program.UseDatabaseEncryption;
Server.Program.WorkThread = Program.WorkThread;
Program.IsRunningMainLoop = true;
Application.Run(DisplayHelper);
Program.IsRunningMainLoop = false;
}
catch (Exception ex)
{
//If the helper thread aborts the main thread, it also sets IsRunningMainLoop to false
// and in that case we accept the abort call
if (ex is System.Threading.ThreadAbortException && !Program.IsRunningMainLoop)
System.Threading.Thread.ResetAbort();
else
MessageBox.Show(string.Format(Strings.Program.SeriousError, ex.ToString()), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
//Find logs that are no longer displayed, and delete them
DataFetcherNested con = new DataFetcherNested(DataConnection);
foreach (Log x in con.GetObjects<Log>("EndTime < ?", Library.Utility.Timeparser.ParseTimeInterval(new ApplicationSettings(con).RecentBackupDuration, DateTime.Now, true)))
{
if (x.Blob != null) //Load the blob part if required
con.DeleteObject(x.Blob);
con.DeleteObject(x);
}
con.CommitAllRecursive();
}
catch
{ }
try
{
//Compact the database
using (System.Data.IDbCommand vaccum_cmd = DataConnection.Provider.Connection.CreateCommand())
{
vaccum_cmd.CommandText = "VACUUM;";
vaccum_cmd.ExecuteNonQuery();
}
}
catch
{ }
if (Scheduler != null)
Scheduler.Terminate(true);
if (WorkThread != null)
WorkThread.Terminate(true);
if (SingleInstance != null)
SingleInstance.Dispose();
#if DEBUG
using(Duplicati.Library.Logging.Log.CurrentLog as Duplicati.Library.Logging.StreamLog)
Duplicati.Library.Logging.Log.CurrentLog = null;
#endif
}
/// <summary>
/// Opens the application settings database, creating a new db if missing
/// </summary>
/// <param name="con">the db connection</param>
/// <param name="datafolder">the database folder path</param>
/// <param name="dbfile">the database file name within the data folder; defaults to "Duplicati.sqlite"</param>
internal static void OpenSettingsDatabase(System.Data.IDbConnection con, string datafolder, string dbfile = "Duplicati.sqlite") {
DatabasePath = System.IO.Path.Combine(datafolder, dbfile);
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(DatabasePath)))
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(DatabasePath));
con.ConnectionString = "Data Source=" + DatabasePath;
//Attempt to open the database, handling any encryption present
OpenDatabase(con);
DatabaseUpgrader.UpgradeDatabase(con, DatabasePath);
}
/// <summary>
/// Handles a change in the LiveControl and updates the Runner
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void LiveControl_ThreadPriorityChanged(object sender, EventArgs e)
{
if (LiveControl.ThreadPriority == null)
Runner.UnsetThreadPriority();
else
Runner.SetThreadPriority(LiveControl.ThreadPriority.Value);
}
/// <summary>
/// Handles a change in the LiveControl and updates the Runner
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void LiveControl_ThrottleSpeedChanged(object sender, EventArgs e)
{
if (LiveControl.DownloadLimit == null)
Runner.SetDownloadLimit(null);
else
Runner.SetDownloadLimit(LiveControl.DownloadLimit.Value.ToString() + "b");
if (LiveControl.UploadLimit == null)
Runner.SetUploadLimit(null);
else
Runner.SetUploadLimit(LiveControl.UploadLimit.Value.ToString() + "b");
}
/// <summary>
/// This event handler updates the trayicon menu with the current state of the runner.
/// </summary>
static void LiveControl_StateChanged(object sender, EventArgs e)
{
switch (LiveControl.State)
{
case LiveControls.LiveControlState.Paused:
WorkThread.Pause();
Runner.Pause();
break;
case LiveControls.LiveControlState.Running:
WorkThread.Resume();
Runner.Resume();
break;
}
}
private static void DataConnection_AfterDataConnection(object sender, DataActions action)
{
if (action == DataActions.Insert || action == DataActions.Update)
Scheduler.Reschedule();
}
/// <summary>
/// Returns a localized name for a task type
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static string LocalizeTaskType(DuplicityTaskType type)
{
return Duplicati.Server.Program.LocalizeTaskType(type);
}
/// <summary>
/// Helper method with logic to handle opening a database in possibly encrypted format
/// </summary>
/// <param name="con">The SQLite connection object</param>
internal static void OpenDatabase(System.Data.IDbConnection con)
{
bool noEncryption = !Program.UseDatabaseEncryption;
string password = Environment.GetEnvironmentVariable(DB_KEY_ENV_NAME);
System.Reflection.MethodInfo setPwdMethod = con.GetType().GetMethod("SetPassword", new Type[] { typeof(string) });
string attemptedPassword;
if (noEncryption || string.IsNullOrEmpty(password))
attemptedPassword = null; //No encryption specified, attempt to open without
else
attemptedPassword = password; //Encryption specified, attempt to open with
setPwdMethod.Invoke(con, new object[] { attemptedPassword });
try
{
//Attempt to open in preferred state
con.Open();
}
catch
{
try
{
//We can't try anything else without a password
if (string.IsNullOrEmpty(password))
throw;
//Open failed, now try the reverse
if (attemptedPassword == null)
attemptedPassword = password;
else
attemptedPassword = null;
setPwdMethod.Invoke(con, new object[] { attemptedPassword });
con.Open();
}
catch
{
}
//If the db is not open now, it won't open
if (con.State != System.Data.ConnectionState.Open)
throw; //Report original error
//The open method succeeded with the non-default method, now change the password
System.Reflection.MethodInfo changePwdMethod = con.GetType().GetMethod("ChangePassword", new Type[] { typeof(string) });
changePwdMethod.Invoke(con, new object[] { noEncryption ? null : password });
}
}
/// <summary>
/// Callback method for dealing with url open errors
/// </summary>
/// <param name="message">The error message to display</param>
private static void DisplayURLOpenError(string message)
{
System.Windows.Forms.MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
/// <summary>
/// Gets a list of all supported commandline options
/// </summary>
private static Library.Interface.ICommandLineArgument[] SupportedCommands
{
get
{
return new Duplicati.Library.Interface.ICommandLineArgument[] {
new Duplicati.Library.Interface.CommandLineArgument("help", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.HelpCommandDescription, Strings.Program.HelpCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("run-backup", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.String, Strings.Program.RunbackupCommandDescription, Strings.Program.RunbackupCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("run-backup-group", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.String, Strings.Program.RunbackupGroupCommandDescription, Strings.Program.RunbackupGroupCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("full", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.String, Strings.Program.FullCommandDescription, Strings.Program.FullCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("resume", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.String, Strings.Program.ResumeCommandDescription, Strings.Program.ResumeCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("pause", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.String, Strings.Program.PauseCommandDescription, Strings.Program.PauseCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("show-status", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.ShowstausCommandDescription, Strings.Program.ShowstausCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("show-wizard", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.ShowwizardCommandDescription, Strings.Program.ShowwizardCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("unencrypted-database", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.UnencrypteddatabaseCommandDescription, Strings.Program.UnencrypteddatabaseCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("portable-mode", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.PortablemodeCommandDescription, Strings.Program.PortablemodeCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("log-file", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Path, Strings.Program.LogfileCommandDescription, Strings.Program.LogfileCommandDescription),
new Duplicati.Library.Interface.CommandLineArgument("log-level", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Enumeration, Strings.Program.LoglevelCommandDescription, Strings.Program.LoglevelCommandDescription, "Warning", null, Enum.GetNames(typeof(Duplicati.Library.Logging.LogMessageType))),
new Duplicati.Library.Interface.CommandLineArgument("trayless", Duplicati.Library.Interface.CommandLineArgument.ArgumentType.Boolean, Strings.Program.TraylessCommandDescription, Strings.Program.TraylessCommandDescription, Library.Utility.Utility.IsClientLinux ? "true" : "false" )
};
}
}
}
}
-57
View File
@@ -1,57 +0,0 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Duplicati")]
[assembly: AssemblyDescription("A GUI interface to Duplicati")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HexaD")]
[assembly: AssemblyProduct("Duplicati")]
[assembly: AssemblyCopyright("LGPL, Copyright © HexaD 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5fa23404-f104-47a3-8e2e-dc9fa89123da")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.1.276")]
[assembly: AssemblyFileVersion("1.0.1.276")]
//
// Make this assembly amenable to testing
//
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Duplicati_Test,PublicKey=0024000004800000940000000602000000240000525341310004000001000100d1ce9cf2ab57d00de3083722ec78ca7b169236c1150350789f131a480c65ad27d3e59ec9c2cca53f84b4f0f6a7f4f59e6d08e8556ccaa54d24894d41813bdf61db969bfaa32c445995afc03e23a137c6328f7dabadeb17b8e5cc351f399334f3f6f2cb1b19f02af0e752116f4bdf808ad51f3340a1a0701a5455cb84a3a5eb9e")]
-406
View File
@@ -1,406 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap AddedFile {
get {
object obj = ResourceManager.GetObject("AddedFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap AddedFolder {
get {
object obj = ResourceManager.GetObject("AddedFolder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap AddedOrModifiedFile {
get {
object obj = ResourceManager.GetObject("AddedOrModifiedFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Clock05 {
get {
object obj = ResourceManager.GetObject("Clock05", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Clock15 {
get {
object obj = ResourceManager.GetObject("Clock15", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Clock30 {
get {
object obj = ResourceManager.GetObject("Clock30", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Clock60 {
get {
object obj = ResourceManager.GetObject("Clock60", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap CloseMenuIcon {
get {
object obj = ResourceManager.GetObject("CloseMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ControlFile {
get {
object obj = ResourceManager.GetObject("ControlFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Delay {
get {
object obj = ResourceManager.GetObject("Delay", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap DeletedFile {
get {
object obj = ResourceManager.GetObject("DeletedFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap DeletedFolder {
get {
object obj = ResourceManager.GetObject("DeletedFolder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap donate_button {
get {
object obj = ResourceManager.GetObject("donate_button", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Duplicati {
get {
object obj = ResourceManager.GetObject("Duplicati", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap EmptyBackupStatusIcon {
get {
object obj = ResourceManager.GetObject("EmptyBackupStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ErrorStatusIcon {
get {
object obj = ResourceManager.GetObject("ErrorStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ExamineMenuIcon {
get {
object obj = ResourceManager.GetObject("ExamineMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap FolderOpen {
get {
object obj = ResourceManager.GetObject("FolderOpen", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap FullBackup {
get {
object obj = ResourceManager.GetObject("FullBackup", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap help {
get {
object obj = ResourceManager.GetObject("help", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap IncompleteFile {
get {
object obj = ResourceManager.GetObject("IncompleteFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap InterruptedStatusIcon {
get {
object obj = ResourceManager.GetObject("InterruptedStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap LogMenuIcon {
get {
object obj = ResourceManager.GetObject("LogMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Icon LogViewer {
get {
object obj = ResourceManager.GetObject("LogViewer", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Bitmap ModifiedFile {
get {
object obj = ResourceManager.GetObject("ModifiedFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap OKStatusIcon {
get {
object obj = ResourceManager.GetObject("OKStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap PartialBackup {
get {
object obj = ResourceManager.GetObject("PartialBackup", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap PartialStatusIcon {
get {
object obj = ResourceManager.GetObject("PartialStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Pause {
get {
object obj = ResourceManager.GetObject("Pause", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Play {
get {
object obj = ResourceManager.GetObject("Play", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap SettingsMenuIcon {
get {
object obj = ResourceManager.GetObject("SettingsMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap SmallLogo {
get {
object obj = ResourceManager.GetObject("SmallLogo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Status_OK {
get {
object obj = ResourceManager.GetObject("Status_OK", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Status_pause {
get {
object obj = ResourceManager.GetObject("Status_pause", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Status_Working {
get {
object obj = ResourceManager.GetObject("Status_Working", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap StatusMenuIcon {
get {
object obj = ResourceManager.GetObject("StatusMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Stop {
get {
object obj = ResourceManager.GetObject("Stop", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Throttle {
get {
object obj = ResourceManager.GetObject("Throttle", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Icon ThrottleIcon {
get {
object obj = ResourceManager.GetObject("ThrottleIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Bitmap Trash {
get {
object obj = ResourceManager.GetObject("Trash", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Icon TrayNormal {
get {
object obj = ResourceManager.GetObject("TrayNormal", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon TrayNormalError {
get {
object obj = ResourceManager.GetObject("TrayNormalError", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon TrayNormalPause {
get {
object obj = ResourceManager.GetObject("TrayNormalPause", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon TrayNormalWarning {
get {
object obj = ResourceManager.GetObject("TrayNormalWarning", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon TrayWorking {
get {
object obj = ResourceManager.GetObject("TrayWorking", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon TrayWorkingPause {
get {
object obj = ResourceManager.GetObject("TrayWorkingPause", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Bitmap WarningStatusIcon {
get {
object obj = ResourceManager.GetObject("WarningStatusIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Wizard {
get {
object obj = ResourceManager.GetObject("Wizard", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap WizardMenuIcon {
get {
object obj = ResourceManager.GetObject("WizardMenuIcon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
-269
View File
@@ -1,269 +0,0 @@
<?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>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="AddedFolder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\AddedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="AddedOrModifiedFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\AddedOrModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="CloseMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\CloseMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ControlFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ControlFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="DeletedFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\DeletedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="DeletedFolder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\DeletedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Duplicati" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Duplicati.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ErrorStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ErrorStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ExamineMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ExamineMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FolderOpen" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\FolderOpen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FullBackup" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\FullBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LogMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LogMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LogViewer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LogViewer.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="OKStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\OKStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="PartialBackup" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PartialBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="PartialStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PartialStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SettingsMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SettingsMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SmallLogo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SmallLogo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Status_OK" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status OK.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Status_Working" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status Working.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="StatusMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\StatusMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayNormal" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayNormal.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayWorking" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayWorking.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="WarningStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WarningStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="WizardMenuIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WizardMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Delay" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Delay.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Pause" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Play" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Status_pause" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Stop" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayNormalPause" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayNormalPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayWorkingPause" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayWorkingPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clock05" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Clock05.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clock15" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Clock15.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clock30" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Clock30.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clock60" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Clock60.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Throttle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Throttle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ThrottleIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Throttle.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="AddedFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\AddedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="IncompleteFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\IncompleteFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ModifiedFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Trash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Trash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="donate_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\donate_button.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Wizard" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayNormalError" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayNormalError.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TrayNormalWarning" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TrayNormalWarning.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="InterruptedStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\InterruptedStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="EmptyBackupStatusIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\EmptyBackupStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
-26
View File
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 705 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 876 B

Some files were not shown because too many files have changed in this diff Show More