Compare commits

..

No commits in common. "master" and "release/0.1.1.005-alpha" have entirely different histories.

100 changed files with 9861 additions and 1631 deletions

5
.gitignore vendored
View File

@ -2,7 +2,4 @@
/bin /bin
/obj /obj
/*.user /*.user
/*/.vs /Properties/PublishProfiles/*.user
/*/bin
/*/obj
/*/*.user

View File

@ -19,7 +19,7 @@ namespace RandomFileRunner {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class AppResource { internal class AppResource {
@ -60,24 +60,6 @@ namespace RandomFileRunner {
} }
} }
/// <summary>
/// Looks up a localized string similar to .
/// </summary>
internal static string AppAuthorURL {
get {
return ResourceManager.GetString("AppAuthorURL", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk.
/// </summary>
internal static string AppCompanyURL {
get {
return ResourceManager.GetString("AppCompanyURL", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk/software-random-file-runner. /// Looks up a localized string similar to https://www.hiimray.co.uk/software-random-file-runner.
/// </summary> /// </summary>
@ -86,24 +68,5 @@ namespace RandomFileRunner {
return ResourceManager.GetString("AppHelpURL", resourceCulture); return ResourceManager.GetString("AppHelpURL", resourceCulture);
} }
} }
/// <summary>
/// Looks up a localized string similar to https://www.hiimray.co.uk/software-random-file-runner.
/// </summary>
internal static string AppProductURL {
get {
return ResourceManager.GetString("AppProductURL", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon_64 {
get {
object obj = ResourceManager.GetObject("icon_64", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
} }
} }

View File

@ -112,25 +112,12 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="AppAuthorURL" xml:space="preserve">
<value />
</data>
<data name="AppCompanyURL" xml:space="preserve">
<value>https://www.hiimray.co.uk</value>
</data>
<data name="AppHelpURL" xml:space="preserve"> <data name="AppHelpURL" xml:space="preserve">
<value>https://www.hiimray.co.uk/software-random-file-runner</value> <value>https://www.hiimray.co.uk/software-random-file-runner</value>
</data> </data>
<data name="AppProductURL" xml:space="preserve">
<value>https://www.hiimray.co.uk/software-random-file-runner</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icon_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icon-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

785
MainForm.Designer.cs generated
View File

@ -29,409 +29,425 @@ namespace RandomFileRunner
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox();
toolTip1 = new System.Windows.Forms.ToolTip(components); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
button2 = new RyzStudio.Windows.ThemedForms.ThButton(); this.button2 = new RyzStudio.Windows.ThemedForms.TButton();
label9 = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label();
menuStrip1 = new System.Windows.Forms.MenuStrip(); this.label2 = new System.Windows.Forms.Label();
fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1 = new System.Windows.Forms.MenuStrip();
newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); this.viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();
label1 = new System.Windows.Forms.Label(); this.aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
textBox1 = new RyzStudio.Windows.ThemedForms.ButtonTextBox.ThClearableTextBox(); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); this.addDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
button5 = new RyzStudio.Windows.ThemedForms.ThButton(); this.addFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
openFileDialog2 = new System.Windows.Forms.OpenFileDialog(); this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
progressBar2 = new RyzStudio.Windows.ThemedForms.ThProgressBar(); this.label1 = new System.Windows.Forms.Label();
progressBar1 = new RyzStudio.Windows.ThemedForms.ThProgressBar(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
label3 = new System.Windows.Forms.Label(); this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
label4 = new System.Windows.Forms.Label(); this.textBox1 = new RyzStudio.Windows.ThemedForms.TClearableTextBox();
tHorizontalSeparator3 = new RyzStudio.Windows.Forms.THorizontalSeparator(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
label2 = new System.Windows.Forms.Label(); this.button4 = new RyzStudio.Windows.ThemedForms.TButton();
textBox2 = new RyzStudio.Windows.ThemedForms.ThHiButtonTextBox(); this.button3 = new RyzStudio.Windows.ThemedForms.TMenuButton();
button4 = new RyzStudio.Windows.ThemedForms.ThButton(); this.memoBox1 = new RyzStudio.Windows.ThemedForms.TMemoBox();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter(); this.button5 = new RyzStudio.Windows.ThemedForms.TButton();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); this.openFileDialog2 = new System.Windows.Forms.OpenFileDialog();
menuStrip1.SuspendLayout(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.menuStrip1.SuspendLayout();
this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout();
// //
// pictureBox1 // pictureBox1
// //
pictureBox1.ErrorImage = null; this.pictureBox1.ErrorImage = null;
pictureBox1.InitialImage = null; this.pictureBox1.InitialImage = null;
pictureBox1.Location = new System.Drawing.Point(289, 121); this.pictureBox1.Location = new System.Drawing.Point(81, 79);
pictureBox1.Name = "pictureBox1"; this.pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new System.Drawing.Size(33, 33); this.pictureBox1.Size = new System.Drawing.Size(33, 33);
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
pictureBox1.TabIndex = 15; this.pictureBox1.TabIndex = 15;
pictureBox1.TabStop = false; this.pictureBox1.TabStop = false;
// //
// button2 // button2
// //
button2.ActiveImage = null; this.button2.BackColor = System.Drawing.Color.Transparent;
button2.BackColor = System.Drawing.Color.Transparent; this.button2.DefaultImage = null;
button2.EnableMenuOnClick = false; this.button2.DownImage = null;
button2.EnableReactiveVisual = true; this.button2.IsSelected = false;
button2.HoverImage = null; this.button2.LabelText = "&Search";
button2.IdleImage = null; this.button2.Location = new System.Drawing.Point(127, 79);
button2.LabelText = "&Search"; this.button2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
button2.Location = new System.Drawing.Point(127, 121); this.button2.Name = "button2";
button2.Name = "button2"; this.button2.OverImage = null;
button2.Size = new System.Drawing.Size(149, 33); this.button2.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
button2.TabIndex = 1; this.button2.Size = new System.Drawing.Size(149, 33);
button2.TabStop = false; this.button2.TabIndex = 43;
button2.MouseClick += button2_MouseClick; this.button2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button2_MouseClick);
// //
// label9 // label9
// //
label9.Location = new System.Drawing.Point(13, 78); this.label9.Location = new System.Drawing.Point(13, 36);
label9.Name = "label9"; this.label9.Name = "label9";
label9.Size = new System.Drawing.Size(101, 33); this.label9.Size = new System.Drawing.Size(101, 33);
label9.TabIndex = 27; this.label9.TabIndex = 27;
label9.Text = "Search Pattern"; this.label9.Text = "Search Filter";
label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// menuStrip1
//
menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, toolsToolStripMenuItem, helpToolStripMenuItem1 });
menuStrip1.Location = new System.Drawing.Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new System.Drawing.Size(464, 24);
menuStrip1.TabIndex = 32;
//
// fileToolStripMenuItem
//
fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, toolStripMenuItem13, saveAsToolStripMenuItem, toolStripMenuItem15, exitToolStripMenuItem2 });
fileToolStripMenuItem.Name = "fileToolStripMenuItem";
fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
fileToolStripMenuItem.Text = "&File";
//
// newToolStripMenuItem
//
newToolStripMenuItem.Name = "newToolStripMenuItem";
newToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N;
newToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
newToolStripMenuItem.Text = "&New";
newToolStripMenuItem.Click += newToolStripMenuItem_Click;
//
// openToolStripMenuItem
//
openToolStripMenuItem.Name = "openToolStripMenuItem";
openToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O;
openToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
openToolStripMenuItem.Text = "&Open";
openToolStripMenuItem.Click += openToolStripMenuItem_Click;
//
// toolStripMenuItem13
//
toolStripMenuItem13.Name = "toolStripMenuItem13";
toolStripMenuItem13.Size = new System.Drawing.Size(143, 6);
//
// saveAsToolStripMenuItem
//
saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
saveAsToolStripMenuItem.Text = "Save &As...";
saveAsToolStripMenuItem.Click += saveAsToolStripMenuItem_Click;
//
// toolStripMenuItem15
//
toolStripMenuItem15.Name = "toolStripMenuItem15";
toolStripMenuItem15.Size = new System.Drawing.Size(143, 6);
//
// exitToolStripMenuItem2
//
exitToolStripMenuItem2.Name = "exitToolStripMenuItem2";
exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22);
exitToolStripMenuItem2.Text = "E&xit";
exitToolStripMenuItem2.Click += exitToolStripMenuItem2_Click;
//
// toolsToolStripMenuItem
//
toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { optionsToolStripMenuItem });
toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
toolsToolStripMenuItem.Text = "&Tools";
//
// optionsToolStripMenuItem
//
optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
optionsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12;
optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
optionsToolStripMenuItem.Text = "&Options";
optionsToolStripMenuItem.Click += optionsToolStripMenuItem_Click;
//
// helpToolStripMenuItem1
//
helpToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { viewHelpToolStripMenuItem1, toolStripMenuItem16, aboutToolStripMenuItem1 });
helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
helpToolStripMenuItem1.Size = new System.Drawing.Size(44, 20);
helpToolStripMenuItem1.Text = "&Help";
//
// viewHelpToolStripMenuItem1
//
viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1";
viewHelpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F1;
viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
viewHelpToolStripMenuItem1.Text = "&View Help";
viewHelpToolStripMenuItem1.Click += viewHelpToolStripMenuItem1_Click;
//
// toolStripMenuItem16
//
toolStripMenuItem16.Name = "toolStripMenuItem16";
toolStripMenuItem16.Size = new System.Drawing.Size(143, 6);
//
// aboutToolStripMenuItem1
//
aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1";
aboutToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
aboutToolStripMenuItem1.Text = "&About";
aboutToolStripMenuItem1.Click += aboutToolStripMenuItem1_Click;
//
// label1
//
label1.Location = new System.Drawing.Point(13, 36);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(101, 33);
label1.TabIndex = 40;
label1.Text = "Search Path";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBox1
//
textBox1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
textBox1.BackColor = System.Drawing.Color.Transparent;
textBox1.ClearedValue = "";
textBox1.EnableReactiveVisual = true;
textBox1.Font = new System.Drawing.Font("Segoe UI", 9F);
textBox1.Icon = "O";
textBox1.IconSize = 13F;
textBox1.Location = new System.Drawing.Point(127, 78);
textBox1.Name = "textBox1";
textBox1.Size = new System.Drawing.Size(318, 32);
textBox1.TabIndex = 0;
textBox1.TabStop = false;
textBox1.UseSystemPasswordChar = false;
//
// tHorizontalSeparator1
//
tHorizontalSeparator1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator1.Location = new System.Drawing.Point(8, 164);
tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(0, 10, 0, 0);
tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(5760, 22);
tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator1.Name = "tHorizontalSeparator1";
tHorizontalSeparator1.Size = new System.Drawing.Size(448, 22);
tHorizontalSeparator1.TabIndex = 45;
tHorizontalSeparator1.TabStop = false;
//
// button5
//
button5.ActiveImage = null;
button5.BackColor = System.Drawing.Color.Transparent;
button5.EnableMenuOnClick = false;
button5.EnableReactiveVisual = true;
button5.HoverImage = null;
button5.IdleImage = null;
button5.LabelText = "&Run Next";
button5.Location = new System.Drawing.Point(127, 309);
button5.Name = "button5";
button5.Size = new System.Drawing.Size(149, 33);
button5.TabIndex = 5;
button5.TabStop = false;
button5.MouseClick += button5_MouseClick;
//
// openFileDialog2
//
openFileDialog2.DefaultExt = "jsonfig";
openFileDialog2.Filter = "Session files (*.jsonfig)|*.jsonfig";
//
// saveFileDialog1
//
saveFileDialog1.DefaultExt = "jsonfig";
saveFileDialog1.Filter = "Session files (*.jsonfig)|*.jsonfig";
//
// progressBar2
//
progressBar2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
progressBar2.BackColor = System.Drawing.Color.Transparent;
progressBar2.BarColour = System.Drawing.Color.FromArgb(79, 193, 203);
progressBar2.BarTextColour = System.Drawing.Color.Black;
progressBar2.EnableReactiveVisual = false;
progressBar2.Font = new System.Drawing.Font("Segoe UI", 9F);
progressBar2.Location = new System.Drawing.Point(127, 215);
progressBar2.Maximum = 100;
progressBar2.Minimum = 0;
progressBar2.Name = "progressBar2";
progressBar2.ProgressText = "50/100";
progressBar2.ShowProgressText = true;
progressBar2.Size = new System.Drawing.Size(318, 20);
progressBar2.TabIndex = 46;
progressBar2.TabStop = false;
progressBar2.Value = 50;
//
// progressBar1
//
progressBar1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
progressBar1.BackColor = System.Drawing.Color.Transparent;
progressBar1.BarColour = System.Drawing.Color.FromArgb(79, 202, 130);
progressBar1.BarTextColour = System.Drawing.Color.Black;
progressBar1.EnableReactiveVisual = false;
progressBar1.Font = new System.Drawing.Font("Segoe UI", 9F);
progressBar1.Location = new System.Drawing.Point(127, 192);
progressBar1.Maximum = 100;
progressBar1.Minimum = 0;
progressBar1.Name = "progressBar1";
progressBar1.ProgressText = "50/100";
progressBar1.ShowProgressText = true;
progressBar1.Size = new System.Drawing.Size(318, 20);
progressBar1.TabIndex = 47;
progressBar1.TabStop = false;
progressBar1.Value = 50;
//
// label3
//
label3.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
label3.AutoEllipsis = true;
label3.Location = new System.Drawing.Point(127, 256);
label3.Margin = new System.Windows.Forms.Padding(0);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(318, 15);
label3.TabIndex = 49;
label3.Text = "label3";
//
// label4
//
label4.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
label4.Location = new System.Drawing.Point(127, 241);
label4.Margin = new System.Windows.Forms.Padding(0);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(318, 15);
label4.TabIndex = 48;
label4.Text = "label4";
//
// tHorizontalSeparator3
//
tHorizontalSeparator3.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator3.Location = new System.Drawing.Point(8, 281);
tHorizontalSeparator3.Margin = new System.Windows.Forms.Padding(0, 10, 0, 0);
tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(5760, 22);
tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator3.Name = "tHorizontalSeparator3";
tHorizontalSeparator3.Size = new System.Drawing.Size(448, 22);
tHorizontalSeparator3.TabIndex = 50;
tHorizontalSeparator3.TabStop = false;
// //
// label2 // label2
// //
label2.Location = new System.Drawing.Point(13, 192); this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
label2.Name = "label2"; | System.Windows.Forms.AnchorStyles.Right)));
label2.Size = new System.Drawing.Size(101, 33); this.label2.Location = new System.Drawing.Point(289, 81);
label2.TabIndex = 51; this.label2.Name = "label2";
label2.Text = "Search Engine"; this.label2.Size = new System.Drawing.Size(156, 31);
label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label2.TabIndex = 30;
this.label2.Text = "0";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// textBox2 // menuStrip1
// //
textBox2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
textBox2.BackColor = System.Drawing.Color.Transparent; this.fileToolStripMenuItem,
textBox2.EnableReactiveVisual = true; this.toolsToolStripMenuItem,
textBox2.Font = new System.Drawing.Font("Segoe UI", 9F); this.helpToolStripMenuItem1});
textBox2.Icon = "M"; this.menuStrip1.Location = new System.Drawing.Point(0, 0);
textBox2.IconSize = 13F; this.menuStrip1.Name = "menuStrip1";
textBox2.Location = new System.Drawing.Point(127, 36); this.menuStrip1.Size = new System.Drawing.Size(464, 24);
textBox2.Name = "textBox2"; this.menuStrip1.TabIndex = 32;
textBox2.Size = new System.Drawing.Size(318, 32); //
textBox2.TabIndex = 52; // fileToolStripMenuItem
textBox2.TabStop = false; //
textBox2.UseSystemPasswordChar = false; this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
textBox2.OnButtonClick += textBox2_OnButtonClick; this.newToolStripMenuItem,
this.openToolStripMenuItem,
this.toolStripMenuItem13,
this.saveAsToolStripMenuItem,
this.toolStripMenuItem15,
this.exitToolStripMenuItem2});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "&File";
//
// newToolStripMenuItem
//
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.newToolStripMenuItem.Text = "&New";
this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.openToolStripMenuItem.Text = "&Open";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
// toolStripMenuItem13
//
this.toolStripMenuItem13.Name = "toolStripMenuItem13";
this.toolStripMenuItem13.Size = new System.Drawing.Size(143, 6);
//
// saveAsToolStripMenuItem
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.saveAsToolStripMenuItem.Text = "Save &As...";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
//
// toolStripMenuItem15
//
this.toolStripMenuItem15.Name = "toolStripMenuItem15";
this.toolStripMenuItem15.Size = new System.Drawing.Size(143, 6);
//
// exitToolStripMenuItem2
//
this.exitToolStripMenuItem2.Name = "exitToolStripMenuItem2";
this.exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22);
this.exitToolStripMenuItem2.Text = "E&xit";
this.exitToolStripMenuItem2.Click += new System.EventHandler(this.exitToolStripMenuItem2_Click);
//
// toolsToolStripMenuItem
//
this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.optionsToolStripMenuItem});
this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
this.toolsToolStripMenuItem.Text = "&Tools";
//
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12)));
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.optionsToolStripMenuItem.Text = "&Options";
this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
//
// helpToolStripMenuItem1
//
this.helpToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.viewHelpToolStripMenuItem1,
this.toolStripMenuItem16,
this.aboutToolStripMenuItem1});
this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
this.helpToolStripMenuItem1.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem1.Text = "&Help";
//
// viewHelpToolStripMenuItem1
//
this.viewHelpToolStripMenuItem1.Name = "viewHelpToolStripMenuItem1";
this.viewHelpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F1;
this.viewHelpToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
this.viewHelpToolStripMenuItem1.Text = "&View Help";
this.viewHelpToolStripMenuItem1.Click += new System.EventHandler(this.viewHelpToolStripMenuItem1_Click);
//
// toolStripMenuItem16
//
this.toolStripMenuItem16.Name = "toolStripMenuItem16";
this.toolStripMenuItem16.Size = new System.Drawing.Size(143, 6);
//
// aboutToolStripMenuItem1
//
this.aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1";
this.aboutToolStripMenuItem1.Size = new System.Drawing.Size(146, 22);
this.aboutToolStripMenuItem1.Text = "&About";
this.aboutToolStripMenuItem1.Click += new System.EventHandler(this.aboutToolStripMenuItem1_Click);
//
// contextMenuStrip1
//
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addDirectoryToolStripMenuItem,
this.addFileToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(148, 48);
//
// addDirectoryToolStripMenuItem
//
this.addDirectoryToolStripMenuItem.Name = "addDirectoryToolStripMenuItem";
this.addDirectoryToolStripMenuItem.Size = new System.Drawing.Size(147, 22);
this.addDirectoryToolStripMenuItem.Text = "&Add Directory";
this.addDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addDirectoryToolStripMenuItem_Click);
//
// addFileToolStripMenuItem
//
this.addFileToolStripMenuItem.Name = "addFileToolStripMenuItem";
this.addFileToolStripMenuItem.Size = new System.Drawing.Size(147, 22);
this.addFileToolStripMenuItem.Text = "Add &File";
this.addFileToolStripMenuItem.Click += new System.EventHandler(this.addFileToolStripMenuItem_Click);
//
// folderBrowserDialog1
//
this.folderBrowserDialog1.ShowNewFolderButton = false;
//
// openFileDialog1
//
this.openFileDialog1.Filter = "All files (*.*)|*.*";
//
// label1
//
this.label1.Location = new System.Drawing.Point(13, 154);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(101, 33);
this.label1.TabIndex = 40;
this.label1.Text = "Search Paths";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.DefaultImage = null;
this.button1.DownImage = null;
this.button1.IsSelected = false;
this.button1.LabelText = "&Close";
this.button1.Location = new System.Drawing.Point(296, 705);
this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
this.button1.Name = "button1";
this.button1.OverImage = null;
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button1.Size = new System.Drawing.Size(149, 37);
this.button1.TabIndex = 41;
this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
//
// tHorizontalSeparator2
//
this.tHorizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator2.Location = new System.Drawing.Point(8, 673);
this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(5760, 22);
this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
this.tHorizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator2.Size = new System.Drawing.Size(448, 22);
this.tHorizontalSeparator2.TabIndex = 42;
//
// textBox1
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.BackColor = System.Drawing.Color.Transparent;
this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox1.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox1.HighlightImage")));
this.textBox1.Location = new System.Drawing.Point(127, 36);
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1";
this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage")));
this.textBox1.Padding = new System.Windows.Forms.Padding(10, 9, 9, 9);
this.textBox1.Size = new System.Drawing.Size(318, 34);
this.textBox1.SubmitButton = null;
this.textBox1.TabIndex = 44;
this.textBox1.UseSystemPasswordChar = false;
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(8, 122);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(5760, 22);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.Size = new System.Drawing.Size(448, 22);
this.tHorizontalSeparator1.TabIndex = 45;
// //
// button4 // button4
// //
button4.ActiveImage = null; this.button4.BackColor = System.Drawing.Color.Transparent;
button4.BackColor = System.Drawing.Color.Transparent; this.button4.DefaultImage = null;
button4.EnableMenuOnClick = false; this.button4.DownImage = null;
button4.EnableReactiveVisual = true; this.button4.IsSelected = false;
button4.HoverImage = null; this.button4.LabelText = "&Clear";
button4.IdleImage = null; this.button4.Location = new System.Drawing.Point(296, 154);
button4.LabelText = "Save File &List"; this.button4.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
button4.Location = new System.Drawing.Point(296, 309); this.button4.Name = "button4";
button4.Name = "button4"; this.button4.OverImage = null;
button4.Size = new System.Drawing.Size(149, 33); this.button4.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
button4.TabIndex = 53; this.button4.Size = new System.Drawing.Size(149, 33);
button4.TabStop = false; this.button4.TabIndex = 46;
button4.MouseClick += button4_MouseClick; this.button4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button4_MouseClick);
// //
// dialogFooter1 // button3
// //
dialogFooter1.BackColor = System.Drawing.Color.FromArgb(240, 240, 240); this.button3.BackColor = System.Drawing.Color.Transparent;
dialogFooter1.Button1Text = "&Close"; this.button3.ContextMenuStrip = this.contextMenuStrip1;
dialogFooter1.Dialog = this; this.button3.DefaultImage = null;
dialogFooter1.Dock = System.Windows.Forms.DockStyle.Bottom; this.button3.DownImage = null;
dialogFooter1.Location = new System.Drawing.Point(0, 517); this.button3.IsSelected = false;
dialogFooter1.Name = "dialogFooter1"; this.button3.LabelText = "&Add";
dialogFooter1.Size = new System.Drawing.Size(464, 84); this.button3.Location = new System.Drawing.Point(127, 154);
this.button3.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
this.button3.Name = "button3";
this.button3.OverImage = null;
this.button3.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button3.Size = new System.Drawing.Size(149, 33);
this.button3.TabIndex = 47;
//
// memoBox1
//
this.memoBox1.AllowDrop = true;
this.memoBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.memoBox1.BackColor = System.Drawing.Color.Transparent;
this.memoBox1.Location = new System.Drawing.Point(13, 203);
this.memoBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6);
this.memoBox1.Name = "memoBox1";
this.memoBox1.Padding = new System.Windows.Forms.Padding(10, 10, 3, 9);
this.memoBox1.Size = new System.Drawing.Size(432, 464);
this.memoBox1.TabIndex = 48;
this.memoBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.memoBox1_DragDrop);
this.memoBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.memoBox1_DragOver);
//
// button5
//
this.button5.BackColor = System.Drawing.Color.Transparent;
this.button5.DefaultImage = null;
this.button5.DownImage = null;
this.button5.IsSelected = false;
this.button5.LabelText = "&Run Next";
this.button5.Location = new System.Drawing.Point(127, 705);
this.button5.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
this.button5.Name = "button5";
this.button5.OverImage = null;
this.button5.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button5.Size = new System.Drawing.Size(149, 37);
this.button5.TabIndex = 49;
this.button5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button5_MouseClick);
//
// openFileDialog2
//
this.openFileDialog2.DefaultExt = "jsonfig";
this.openFileDialog2.Filter = "Session files (*.jsonfig)|*.jsonfig";
//
// saveFileDialog1
//
this.saveFileDialog1.DefaultExt = "jsonfig";
this.saveFileDialog1.Filter = "Session files (*.jsonfig)|*.jsonfig";
// //
// MainForm // MainForm
// //
AllowDrop = true; this.AllowDrop = true;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
BackColor = System.Drawing.Color.FromArgb(250, 250, 250); this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
ClientSize = new System.Drawing.Size(464, 601); this.ClientSize = new System.Drawing.Size(464, 761);
Controls.Add(dialogFooter1); this.Controls.Add(this.button5);
Controls.Add(button4); this.Controls.Add(this.memoBox1);
Controls.Add(textBox2); this.Controls.Add(this.button3);
Controls.Add(label2); this.Controls.Add(this.button4);
Controls.Add(tHorizontalSeparator3); this.Controls.Add(this.tHorizontalSeparator1);
Controls.Add(label3); this.Controls.Add(this.textBox1);
Controls.Add(label4); this.Controls.Add(this.button2);
Controls.Add(progressBar2); this.Controls.Add(this.tHorizontalSeparator2);
Controls.Add(progressBar1); this.Controls.Add(this.button1);
Controls.Add(button5); this.Controls.Add(this.label1);
Controls.Add(tHorizontalSeparator1); this.Controls.Add(this.menuStrip1);
Controls.Add(textBox1); this.Controls.Add(this.label2);
Controls.Add(button2); this.Controls.Add(this.label9);
Controls.Add(label1); this.Controls.Add(this.pictureBox1);
Controls.Add(menuStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
Controls.Add(label9); this.Name = "MainForm";
Controls.Add(pictureBox1); this.Text = "Random File Runner";
Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
MinimumSize = new System.Drawing.Size(480, 480); this.menuStrip1.ResumeLayout(false);
Name = "MainForm"; this.menuStrip1.PerformLayout();
Text = "Random File Runner"; this.contextMenuStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); this.ResumeLayout(false);
menuStrip1.ResumeLayout(false); this.PerformLayout();
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
} }
#endregion #endregion
private RyzStudio.Windows.ThemedForms.TButton button1;
private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.PictureBox pictureBox1;
private RyzStudio.Windows.ThemedForms.ThButton button2; private RyzStudio.Windows.ThemedForms.TButton button2;
private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.Label label9; private System.Windows.Forms.Label label9;
private RyzStudio.Windows.ThemedForms.TButton button4;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
@ -446,21 +462,20 @@ namespace RandomFileRunner
private System.Windows.Forms.ToolStripMenuItem viewHelpToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem viewHelpToolStripMenuItem1;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem16; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem16;
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem1;
private RyzStudio.Windows.ThemedForms.TMemoBox memoBox1;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem addDirectoryToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem addFileToolStripMenuItem;
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label1;
private RyzStudio.Windows.ThemedForms.ButtonTextBox.ThClearableTextBox textBox1; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
private RyzStudio.Windows.ThemedForms.ThButton button5; private RyzStudio.Windows.ThemedForms.TClearableTextBox textBox1;
private RyzStudio.Windows.ThemedForms.TMenuButton button3;
private RyzStudio.Windows.ThemedForms.TButton button5;
private System.Windows.Forms.OpenFileDialog openFileDialog2; private System.Windows.Forms.OpenFileDialog openFileDialog2;
private System.Windows.Forms.SaveFileDialog saveFileDialog1; private System.Windows.Forms.SaveFileDialog saveFileDialog1;
private RyzStudio.Windows.ThemedForms.ThProgressBar progressBar2;
private RyzStudio.Windows.ThemedForms.ThProgressBar progressBar1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator3;
private System.Windows.Forms.Label label2;
private RyzStudio.Windows.ThemedForms.ThHiButtonTextBox textBox2;
private RyzStudio.Windows.ThemedForms.ThButton button4;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
} }
} }

View File

@ -1,71 +1,68 @@
using System; using RyzStudio.IO;
using RyzStudio.Windows.Forms;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Runtime.InteropServices;
using System.Text.Json; using System.Text.Json;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using RyzStudio.IO;
using RyzStudio.Runtime.InteropServices;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
namespace RandomFileRunner namespace RandomFileRunner
{ {
public partial class MainForm : Form public partial class MainForm : Form
{ {
private readonly Random _randy; [DllImport("user32.dll")]
private readonly FileSearcher _fileSearcher; protected static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
private CancellationTokenSource _cancellationToken = new CancellationTokenSource();
private bool _isBusy = false; [DllImport("user32.dll")]
protected static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private List<string> _searchPaths = new List<string>(); //protected const int MOD_NONE = 0x0000;
private List<string> _foundFiles = new List<string>(); //protected const int MOD_ALT = 0x1;
private Process _currentProcess = null; //protected const int MOD_CONTROL = 0x2;
//protected const int MOD_SHIFT = 0x4;
//protected const int MOD_WIN = 0x8;
protected const int WM_HOTKEY = 0x312;
protected const int WM_QUERYENDSESSION = 0x0011;
protected readonly Random randy;
protected OptionsForm optionsForm = null;
protected bool isBusy = false;
protected bool requestCancel = false;
protected List<string> foundFiles = null;
protected Process currentProcess = null;
public MainForm() public MainForm()
{ {
InitializeComponent(); InitializeComponent();
textBox2.TextBox.ReadOnly = true; textBox1.Text = "*.*";
memoBox1.InnerTextBox.WordWrap = false;
_randy = new Random(); randy = new Random();
_fileSearcher = new FileSearcher();
_fileSearcher.OnDirectoryFound += fileSearcher_OnDirectoryFound;
_fileSearcher.OnFileFound += fileSearcher_OnFileFound;
_fileSearcher.OnSearchCompleted += fileSearcher_OnSearchCompleted;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.ClearSession();
} }
protected async override void OnShown(EventArgs e) protected async override void OnShown(EventArgs e)
{ {
base.OnShown(e); base.OnShown(e);
var args = RyzStudio.Windows.Forms.WinApplication.GetCommandLine(); string[] commandLineArgs = Environment.GetCommandLineArgs();
string jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault(); string jsonfigFilename = null;
if (string.IsNullOrWhiteSpace(jsonfigFilename)) if (string.IsNullOrWhiteSpace(jsonfigFilename)) jsonfigFilename = ParseOpenFile_FromCMD(commandLineArgs);
{ if (string.IsNullOrWhiteSpace(jsonfigFilename)) jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
}
if (!string.IsNullOrWhiteSpace(jsonfigFilename) && System.IO.File.Exists(jsonfigFilename)) if (!string.IsNullOrWhiteSpace(jsonfigFilename) && File.Exists(jsonfigFilename))
{ {
await LoadSessionFile(jsonfigFilename); await LoadSessionFile(jsonfigFilename);
} }
textBox2.Focus();
} }
protected override void OnClosing(CancelEventArgs e) protected override void OnClosing(CancelEventArgs e)
@ -78,18 +75,15 @@ namespace RandomFileRunner
return; return;
} }
if (this.CurrentSession.ClosePrevOnNext) if (this.CurrentSession.ClosePrevOnNext) CloseCurrentProcess(currentProcess);
{
CloseCurrentProcess(_currentProcess);
}
if (this.CurrentSession.NextHotKey != null) if (this.CurrentSession.NextHotKey != null)
{ {
if (this.CurrentSession.NextHotKey.KeyCode != Keys.None) if (this.CurrentSession.NextHotKey.KeyCode != Keys.None)
{ {
//#if !DEBUG //#if !DEBUG
User32.UnregisterHotKey((IntPtr)Handle, 1); UnregisterHotKey((IntPtr)Handle, 1);
//#endif //#endif
} }
} }
} }
@ -98,11 +92,8 @@ namespace RandomFileRunner
{ {
switch (m.Msg) switch (m.Msg)
{ {
case User32.WM_HOTKEY: case WM_HOTKEY:
if (m.WParam.ToInt32() == 1) if (m.WParam.ToInt32() == 1) button5_MouseClick(null, null);
{
button5_MouseClick(null, null);
}
break; break;
//case WM_QUERYENDSESSION: //case WM_QUERYENDSESSION:
@ -111,8 +102,7 @@ namespace RandomFileRunner
// Application.Exit(); // Application.Exit();
// break; // break;
default: default: break;
break;
} }
base.WndProc(ref m); base.WndProc(ref m);
@ -121,34 +111,40 @@ namespace RandomFileRunner
public bool IsBusy public bool IsBusy
{ {
get => _isBusy; get => isBusy;
set set
{ {
_isBusy = value; isBusy = value;
UIControl.SetValue(pictureBox1, (_isBusy ? RyzStudio.Windows.ThemedForms.Resource2.loading_block : null)); ThreadControl.SetValue(pictureBox1, (isBusy ? RyzStudio.UIResource.loading_block : null));
UIControl.SetEnable(textBox1, !_isBusy); ThreadControl.SetEnable(textBox1, !isBusy);
button2.LabelText = (_isBusy ? "&Cancel" : "&Search"); //ThreadControl.SetEnable(button2, !isBusy);
UIControl.SetEnable(button5, !_isBusy); button2.LabelText = (isBusy? "&Cancel" : "&Search");
UIControl.SetEnable(button4, !_isBusy); ThreadControl.SetEnable(button3, !isBusy);
ThreadControl.SetEnable(button4, !isBusy);
ThreadControl.SetEnable(memoBox1, !isBusy);
ThreadControl.SetEnable(button5, !isBusy);
//ThreadControl.SetEnable(button1, !isBusy);
} }
} }
public AppSession CurrentSession { get; set; } = new AppSession(); public AppSession CurrentSession { get; set; } = new AppSession();
public List<string> SearchPaths
{
get => _searchPaths;
set
{
_searchPaths = value;
textBox2.Text = string.Join(", ", _searchPaths.ToArray()); protected bool SearchDirecory_OnFound(string file, ulong searchCount, int searchQueue)
{
if (!string.IsNullOrWhiteSpace(file))
{
foundFiles.Add(file);
} }
//ThreadControl.SetText(label2, foundFiles.Count.ToString());
ThreadControl.SetText(label2, foundFiles.Count.ToString("#,#", System.Globalization.CultureInfo.CurrentCulture) + Environment.NewLine + searchQueue.ToString("#,#", System.Globalization.CultureInfo.CurrentCulture));
return true;
} }
#region Main Menu
/// <summary> /// <summary>
/// New /// New
@ -159,15 +155,9 @@ namespace RandomFileRunner
{ {
await Task.Run(() => await Task.Run(() =>
{ {
if (this.IsBusy) if (this.IsBusy) return;
{
return;
}
if (this.CurrentSession.ClosePrevOnNext) if (this.CurrentSession.ClosePrevOnNext) CloseCurrentProcess(currentProcess);
{
CloseCurrentProcess(_currentProcess);
}
ClearSession(); ClearSession();
}); });
@ -180,10 +170,7 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private async void openToolStripMenuItem_Click(object sender, EventArgs e) private async void openToolStripMenuItem_Click(object sender, EventArgs e)
{ {
if (this.IsBusy) if (this.IsBusy) return;
{
return;
}
if (openFileDialog2.ShowDialog() == DialogResult.OK) if (openFileDialog2.ShowDialog() == DialogResult.OK)
{ {
@ -198,14 +185,7 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private async void saveAsToolStripMenuItem_Click(object sender, EventArgs e) private async void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
if (this.IsBusy) if (this.IsBusy) return;
{
return;
}
saveFileDialog1.Title = "Save session";
saveFileDialog1.Filter = "Session files (*.jsonfig)|*.jsonfig";
saveFileDialog1.DefaultExt = "jsonfig";
if (saveFileDialog1.ShowDialog() == DialogResult.OK) if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{ {
@ -230,15 +210,12 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private void optionsToolStripMenuItem_Click(object sender, EventArgs e) private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
if (this.IsBusy) if (this.IsBusy) return;
{
return;
}
var optionsForm = new OptionsForm(this.CurrentSession); if (optionsForm == null) optionsForm = new OptionsForm(this.CurrentSession);
if (optionsForm.ShowDialog() == DialogResult.OK) if (optionsForm.ShowDialog() == DialogResult.OK)
{ {
this.CurrentSession = optionsForm.Result; this.CurrentSession = optionsForm.Session;
InvalidateHotKey(); InvalidateHotKey();
} }
@ -251,7 +228,18 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private void viewHelpToolStripMenuItem1_Click(object sender, EventArgs e) private void viewHelpToolStripMenuItem1_Click(object sender, EventArgs e)
{ {
RyzStudio.Diagnostics.Process.Execute(AppResource.AppHelpURL); try
{
System.Diagnostics.Process.Start(new ProcessStartInfo()
{
FileName = AppResource.AppHelpURL,
UseShellExecute = true
});
}
catch
{
// do nothing
}
} }
/// <summary> /// <summary>
@ -261,72 +249,9 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private void aboutToolStripMenuItem1_Click(object sender, EventArgs e) private void aboutToolStripMenuItem1_Click(object sender, EventArgs e)
{ {
var form = new RyzStudio.Windows.ThemedForms.AboutForm(); MessageBox.Show(Application.ProductName + " v" + Application.ProductVersion, "About", MessageBoxButtons.OK, MessageBoxIcon.Information);
form.ProductURL = AppResource.AppProductURL;
form.AuthorURL = AppResource.AppAuthorURL;
form.CompanyURL = AppResource.AppCompanyURL;
form.ProductCopyrightStartYear = 2021;
form.ProductLogo = AppResource.icon_64;
form.ShowDialog();
} }
#endregion
#region Search Engine
private async Task fileSearcher_OnFileFound(FileSearcher sender, string searchPath, string fileName)
{
await Task.Run(() =>
{
_foundFiles.Add(fileName);
UIControl.SetText(label3, Path.GetFileName(fileName));
progressBar2.Maximum = (sender.FileCount + sender.NoAccessFileCount);
progressBar2.Value = sender.FileCount;
});
}
private async Task fileSearcher_OnDirectoryFound(FileSearcher sender, string searchPath, string directoryName)
{
await Task.Run(() =>
{
UIControl.SetText(label4, Path.GetFileName(directoryName));
progressBar1.Maximum = sender.DirectoryCount;
progressBar1.Value = sender.BufferLevel;
});
}
private async Task fileSearcher_OnSearchCompleted(FileSearcher sender, TimeSpan elapsedTime)
{
await Task.Run(() =>
{
UIControl.SetText(label4, $"Done in {Math.Floor(elapsedTime.TotalMinutes)}m {elapsedTime.Seconds}s");
UIControl.SetText(label3, ((_foundFiles.Count <= 0) ? "0" : _foundFiles.Count.ToString("#,#", System.Globalization.CultureInfo.CurrentCulture)) + " File" + ((_foundFiles.Count == 1) ? "" : "s") + " Found");
progressBar1.Value = sender.BufferLevel;
progressBar2.Value = sender.FileCount;
});
}
#endregion
private void textBox2_OnButtonClick(object sender, EventArgs e)
{
if (this.IsBusy)
{
return;
}
var form = new MemoBoxForm(this.SearchPaths);
if (form.ShowDialog() == DialogResult.OK)
{
this.SearchPaths = form.Result;
}
}
/// <summary> /// <summary>
/// Search /// Search
@ -335,61 +260,136 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private async void button2_MouseClick(object sender, MouseEventArgs e) private async void button2_MouseClick(object sender, MouseEventArgs e)
{ {
if (this.IsBusy)
{
button2.LabelText = "&Cancelling...";
_cancellationToken.Cancel();
return;
}
this.IsBusy = true;
progressBar1.ShowProgressText = true;
progressBar2.ShowProgressText = true;
_foundFiles = new List<string>();
_cancellationToken = new CancellationTokenSource();
_currentProcess = null;
_fileSearcher.FileSearchPattern = textBox1.Text;
_fileSearcher.SearchPath = new List<string>();
await Task.Run(() => await Task.Run(() =>
{ {
foreach (var item in SearchPaths) if (this.IsBusy)
{ {
if (_cancellationToken.IsCancellationRequested) requestCancel = true;
button2.LabelText = "&Cancelling...";
return;
}
this.IsBusy = true;
requestCancel = false;
foundFiles = new List<string>();
currentProcess = null;
if (!string.IsNullOrWhiteSpace(memoBox1.Text))
{
string[] itemList = memoBox1.Text?.Trim().Split('\n');
for (int i = 0; i < itemList.Length; i++)
{ {
break; if (string.IsNullOrWhiteSpace(itemList[i])) continue;
} if (requestCancel) break;
if (System.IO.File.Exists(item)) string item = itemList[i]?.Trim();
{
_foundFiles.Add(item);
continue; if (File.Exists(item))
} {
if (AccessibleDirectory.IsFileAccessible(item))
{
foundFiles.Add(item);
ThreadControl.SetText(label2, foundFiles.Count.ToString());
if (System.IO.Directory.Exists(item)) continue;
{ }
_fileSearcher.SearchPath.Add(item); }
continue; if (Directory.Exists(item))
{
AccessibleDirectory.GetFiles(item, textBox1.Text, this.CurrentSession.SearchTopDirectoryOnly, SearchDirecory_OnFound);
ThreadControl.SetText(label2, foundFiles.Count.ToString());
continue;
}
} }
} }
UIControl.SetText(label3, ((_foundFiles.Count <= 0) ? "0" : _foundFiles.Count.ToString("#,#", System.Globalization.CultureInfo.CurrentCulture)) + " File" + ((_foundFiles.Count == 1) ? "" : "s") + " Found"); ThreadControl.SetText(label2, ((foundFiles.Count <= 0) ? "0" :foundFiles.Count.ToString("#,#", System.Globalization.CultureInfo.CurrentCulture)) + " File" + ((foundFiles.Count == 1) ? "" : "s") + " Found");
});
if (_fileSearcher.SearchPath.Count > 0) this.IsBusy = false;
requestCancel = false;
});
}
/// <summary>
/// Add directory
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.IsBusy) return;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{ {
await _fileSearcher.Search(_cancellationToken.Token); AddSearchItem(folderBrowserDialog1.SelectedPath);
}
}
/// <summary>
/// Add file
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addFileToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.IsBusy) return;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
AddSearchItem(openFileDialog1.FileName);
}
}
/// <summary>
/// Clear
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_MouseClick(object sender, MouseEventArgs e)
{
if (this.IsBusy) return;
memoBox1.Text = string.Empty;
}
private void memoBox1_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
if (this.IsBusy)
{
e.Effect = DragDropEffects.None;
}
else
{
e.Effect = DragDropEffects.Copy;
}
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void memoBox1_DragDrop(object sender, DragEventArgs e)
{
if (this.IsBusy) return;
string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
if (fileList == null)
{
return;
} }
this.IsBusy = false; foreach (string item in fileList)
{
_cancellationToken = new CancellationTokenSource(); AddSearchItem(item);
}
} }
/// <summary> /// <summary>
@ -399,37 +399,23 @@ namespace RandomFileRunner
/// <param name="e"></param> /// <param name="e"></param>
private async void button5_MouseClick(object sender, MouseEventArgs e) private async void button5_MouseClick(object sender, MouseEventArgs e)
{ {
if (this.IsBusy)
{
return;
}
if (_foundFiles.Count <= 0)
{
return;
}
await Task.Run(() => await Task.Run(() =>
{ {
if (this.IsBusy) return;
//this.IsBusy = true; //this.IsBusy = true;
if (this.CurrentSession == null) if (this.CurrentSession == null) this.CurrentSession = new AppSession();
{
this.CurrentSession = new AppSession();
}
if (this.CurrentSession.ClosePrevOnNext) if (this.CurrentSession.ClosePrevOnNext) CloseCurrentProcess(currentProcess);
{
CloseCurrentProcess(_currentProcess);
}
string filename = null; string filename = null;
// retry 8 times // retry 8 times
for (int i = 0; i < this.CurrentSession.RetryOnError; i++) for (int i = 0; i < this.CurrentSession.RetryOnError; i++)
{ {
filename = _foundFiles[_randy.Next(0, (_foundFiles.Count - 1))]; filename = foundFiles[randy.Next(0, (foundFiles.Count - 1))];
if (System.IO.File.Exists(filename)) if (File.Exists(filename))
{ {
continue; continue;
} }
@ -439,47 +425,23 @@ namespace RandomFileRunner
if (!string.IsNullOrWhiteSpace(filename)) if (!string.IsNullOrWhiteSpace(filename))
{ {
_currentProcess = RyzStudio.Diagnostics.Process.Execute(filename); ProcessStartInfo psi = new ProcessStartInfo(filename);
psi.UseShellExecute = true;
try
{
currentProcess = Process.Start(psi);
}
catch (Exception)
{
// do nothing
}
} }
//this.IsBusy = false; //this.IsBusy = false;
}); });
} }
/// <summary>
/// Save File List
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button4_MouseClick(object sender, MouseEventArgs e)
{
if (this.IsBusy)
{
return;
}
if (_foundFiles.Count <= 0)
{
return;
}
saveFileDialog1.Title = "Save File List";
saveFileDialog1.Filter = "Text files (*.txt)|*.txt";
saveFileDialog1.DefaultExt = "txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
await System.IO.File.WriteAllTextAsync(saveFileDialog1.FileName, string.Join(Environment.NewLine, _foundFiles.ToArray()));
}
catch (Exception exc)
{
ThMessageBox.Show(this, exc.Message, "Save File List", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
/// <summary> /// <summary>
/// Close /// Close
/// </summary> /// </summary>
@ -491,16 +453,24 @@ namespace RandomFileRunner
} }
protected void AddSearchItem(string line)
{
memoBox1.Text = memoBox1.Text.Trim();
// above line-break
if (!string.IsNullOrWhiteSpace(memoBox1.Text)) memoBox1.Text += Environment.NewLine;
memoBox1.Text += line + Environment.NewLine;
}
private void CloseCurrentProcess(Process p) private void CloseCurrentProcess(Process p)
{ {
if (p == null) if (p == null) return;
{
return;
}
try try
{ {
p.CloseMainWindow(); p.CloseMainWindow();
//p.Close();
} }
catch (Exception) catch (Exception)
{ {
@ -510,96 +480,191 @@ namespace RandomFileRunner
private void InvalidateHotKey() private void InvalidateHotKey()
{ {
//#if !DEBUG //#if !DEBUG
UIControl.Invoke(this, (x) => if (this.InvokeRequired)
{ {
User32.UnregisterHotKey((IntPtr)Handle, 1); this.Invoke(new MethodInvoker(() =>
}); {
//#endif UnregisterHotKey((IntPtr)Handle, 1);
}));
}
else
{
UnregisterHotKey((IntPtr)Handle, 1);
}
//#endif
if (this.CurrentSession.NextHotKey != null) if (this.CurrentSession.NextHotKey != null)
{ {
if (this.CurrentSession.NextHotKey.KeyCode != Keys.None) if (this.CurrentSession.NextHotKey.KeyCode != Keys.None)
{ {
//#if !DEBUG //#if !DEBUG
UIControl.Invoke(this, (x) => if (this.InvokeRequired)
{ {
User32.RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.NextHotKey.ModifierCode, this.CurrentSession.NextHotKey.Key); this.Invoke(new MethodInvoker(() =>
}); {
//#endif RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.NextHotKey.ModifierCode, this.CurrentSession.NextHotKey.Key);
}));
}
else
{
RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.NextHotKey.ModifierCode, this.CurrentSession.NextHotKey.Key);
}
//#endif
} }
} }
} }
private void ClearSession() private void ClearSession()
{ {
_foundFiles = new List<string>(); foundFiles = new List<string>();
_currentProcess = null; currentProcess = null;
textBox1.Text = "*.*"; textBox1.Text = "*.*";
ThreadControl.SetText(label2, "0");
progressBar1.Clear(0, 0, 0); memoBox1.Text = string.Empty;
progressBar2.Clear(0, 0, 0);
UIControl.SetText(label4, "");
UIControl.SetText(label3, "");
} }
protected async Task LoadSessionFile(string filename) protected async Task LoadSessionFile(string filename)
{ {
await Task.Run(() => await Task.Run(() =>
{ {
this.CurrentSession = RyzStudio.Text.Json.JsonSerialiser.DeserialiseFile<AppSession>(filename) ?? new AppSession(); if (string.IsNullOrWhiteSpace(filename)) return;
if (!File.Exists(filename)) return;
string sourceCode = null;
try
{
sourceCode = File.ReadAllText(filename);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, "Load session");
return;
}
if (string.IsNullOrWhiteSpace(sourceCode))
{
return;
}
// load options
var options = new JsonSerializerOptions();
//options.Converters.Add(new JsonPointConverter());
//options.Converters.Add(new JsonSizeConverter());
try
{
this.CurrentSession = JsonSerializer.Deserialize<AppSession>(sourceCode, options);
}
catch (Exception exc)
{
MessageBox.Show("Unable to read session", "Load session");
return;
}
if (this.CurrentSession == null) this.CurrentSession = new AppSession();
ClearSession(); ClearSession();
textBox1.Text = (string.IsNullOrWhiteSpace(this.CurrentSession.SearchFilePattern) ? "*" : this.CurrentSession.SearchFilePattern?.Trim()); textBox1.Text = (string.IsNullOrWhiteSpace(this.CurrentSession.SearchFilePattern) ? "*" : this.CurrentSession.SearchFilePattern?.Trim());
SearchPaths = this.CurrentSession?.SearchItems ?? new List<string>(); if (this.CurrentSession.SearchItems != null)
{
foreach (string item in this.CurrentSession.SearchItems)
{
AddSearchItem(item);
}
}
// hotkey // hotkey
InvalidateHotKey(); InvalidateHotKey();
}); });
} }
protected string ParseOpenFile_FromCMD(string[] args)
{
if (args.Length <= 1)
{
return null;
}
int i = 1;
while (true)
{
if (i > (args.Length - 1))
{
break;
}
switch (args[i].Trim().ToLower())
{
case "-o":
case "-open":
if ((i + 1) > (args.Length - 1)) break;
string openFilename = args[(i + 1)];
if (string.IsNullOrWhiteSpace(openFilename)) break;
if (!File.Exists(openFilename)) break;
return openFilename;
i++;
break;
}
i++;
}
return null;
}
protected async Task SaveSessionFile(string filename) protected async Task SaveSessionFile(string filename)
{ {
if (string.IsNullOrWhiteSpace(filename))
{
return;
}
if (this.CurrentSession == null)
{
this.CurrentSession = new AppSession();
}
await Task.Run(() => await Task.Run(() =>
{ {
if (string.IsNullOrWhiteSpace(filename)) return;
if (this.CurrentSession == null) this.CurrentSession = new AppSession();
this.CurrentSession.SearchFilePattern = textBox1.Text; this.CurrentSession.SearchFilePattern = textBox1.Text;
this.CurrentSession.SearchItems = new List<string>(); this.CurrentSession.SearchItems = new List<string>();
foreach (var item in SearchPaths) if (!string.IsNullOrWhiteSpace(memoBox1.Text))
{ {
if (string.IsNullOrWhiteSpace(item)) foreach (string item in memoBox1.Text?.Trim().Split('\n'))
{ {
continue; if (string.IsNullOrWhiteSpace(item))
{
continue;
}
this.CurrentSession.SearchItems.Add(item?.Trim());
} }
this.CurrentSession.SearchItems.Add(item.Trim());
} }
var result = RyzStudio.Text.Json.JsonSerialiser.SerialiseFile(filename, this.CurrentSession); string sourceCode = null;
if (result.IsSuccess)
try
{ {
ThMessageBox.Show(this, "Session saved!", "Save session"); sourceCode = JsonSerializer.Serialize(this.CurrentSession);
} }
else catch (Exception)
{ {
ThMessageBox.Show(this, result.Message, "Save session", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Unable to write session", "Save session");
return;
}
try
{
File.WriteAllText(filename, sourceCode);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, "Save session");
return;
} }
}); });
} }
} }
} }

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
@ -112,10 +52,10 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
@ -123,6 +63,35 @@
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>716, 17</value> <value>716, 17</value>
</metadata> </metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>831, 17</value>
</metadata>
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>986, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1155, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="textBox1.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAClSURBVDhP7dI/
DgFBGIbxSVTKjcRx3MLqXYCOjkocQcMF3MAZOIKaE5AthOexf2QnbJQKb/JLJvO9XzLFhCgtbHDBveB5
DWcfM8ANC0wKnr1LUUsbHXSxxBlJxDtnduy6E04on/Utd0IPOxwxxBT9iHfO7Nh155kV9vmxMXbsVvkv
vvIji4f82Bg7tcUxrpih/NyxOeyMUMVPu0WGd39TzuzQDeEB5/ZKvTSyulEAAAAASUVORK5CYII=
</value>
</data>
<data name="textBox1.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADTSURBVDhP7ZI7
CsJQEEUfWFmK4HLchdpnA9ppp5W4BBtdQNyBC0ilRf6VdVyBwUL03JdXxC/YWThwmDcz94YJjKmH7/uN
OI7XaZqekiS5Cr1hpZmTPQemAeILeU4eC/dWr+9kVQRB0MzzvB2GYQfBAsExiqJWHfU0k0ZaeQyNAuxa
X1CYLMu6/MOW4kD2YAK9B9TznGYrj12XVZY0drb4ENJI68q/sR4/YoS9K9+GNHdGLmIEJV+cku1xP4Jh
Ri7JQ2erDp3mBs7w6jaFZht74MaYGwmLbkeRGexGAAAAAElFTkSuQmCC
</value>
</data>
<metadata name="openFileDialog2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="openFileDialog2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1155, 17</value> <value>1155, 17</value>
</metadata> </metadata>
@ -130,304 +99,303 @@
<value>1295, 17</value> <value>1295, 17</value>
</metadata> </metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>52</value> <value>108</value>
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz
AAAAAAAAAAAAAAAAAAoAAABbAAAAzQAAAPsAAAD7AAAAzQAAAFoAAAAJAAAAAAAAAAAAAAAAAAAAAAAA MygzMzPXMzMzszIyMmU1NTUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAMAAAAewAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADuAAAAewAA AAAAAAAAMTExOTQ0NO00NDT/NDU1/zMzM/8zMzP9MzMzyDMzM3k0NDQsAAAAAAAAAAAAAAAAAAAAAAAA
AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAHIAAADqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAOoAAAByAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABmAAAA5AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6QAAAHcAAAAHAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAXwAAAN4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADeAAAAXwAA
AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAE0AAADRAAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/woLC/8+RET/AAAA/wAAAP8AAAD/AAAA/0ZNTv8ODw//AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAANcAAABeAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAzQAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8JCgr/Z3Fx/83i4/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/R5uf/dYGC/wwN
Df8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA1AAAAFUAAAABAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAMEAAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/BQYG/1hhYf/G2tv/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SR
kv/c8vP/3PLz/8vf4P9ncXH/CAkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADJAAAATQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkAAAC8AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wQFBf9QWFn/wNPU/9zy8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAA
AP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8//c8vP/xNfY/19oaf8GBwf/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAMQAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAtgAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DAwP/UVla/7/S0//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8/+/0tP/UVla/wMD
A/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtgAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAQAA
AHoAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/0lRUf+5y8z/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8//D0tP/xdTV/9zy
8//c8vP/3PLz/7nLzP9JUVH/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPoAAAB6AAAAAQAA
AAAAAAAAAAAAfwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9CSEj/s8TF/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy
8/+vubn/kJCQ/73Jyv/c8vP/3PLz/9zy8//c8vP/s8TF/0JISP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAAfQAAAAAAAAA0AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/OkBA/6u8vf/c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SR
kv/c8vP/3PLz/9zy8/+vubn/oaGh/5ucnP+2wMH/3PLz/9zy8//c8vP/3PLz/9zy8/+rvL3/OkBA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAADMAAAClAAAA/wAAAP8AAAD/AAAA/yQoKP+ktLX/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1urr/9Dj5P/X7O3/3PLz/9zy8/+EkZL/AAAA/wAA
AP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/rq+v//T09P+ioqL/sbm5/9vx8v/c8vP/3PLz/9zy
8//c8vP/3PLz/6S0tf8jJyf/AAAA/wAAAP8AAAD/AAAA/wAAAKQAAADeAAAA/wAAAP8AAAD/CQkK/8fb
3P/c8vP/3PLz/8vc3f+zvb3/rbW1/6eurv+hpqb/nJ+f/5aXl/+QkJD/j4+P/4+Pj//H2Nj/3PLz/9zy
8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/rq+v///////4+Pj/qKmp/6iu
r//Z7u//3PLz/9zy8//c8vP/3PLz/9zy8//G2tv/CAkJ/wAAAP8AAAD/AAAA/wAAAN0AAAD8AAAA/wAA
AP8AAAD/Ki4v/9zy8//c8vP/3PLz/5WWlv+Zmpr/paam/6+vr/+3t7f/wMDA/8jIyP/R0dH/pKWl/7K7
u//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/rq+v////
////////+/v7/6+vr/+kqan/2O3u/9zy8//c8vP/3PLz/9zy8//c8vP/Ki4v/wAAAP8AAAD/AAAA/wAA
APwAAAD/AAAA/wAAAP8AAAD/LTEy/9zy8//c8vP/3PLz/4+Pj//d3d3/////////////////////////
///V1tb/o6en/9vw8f/c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy
8/+vubn/rq+v//////////////////7+/v+5urr/oKOj/9Xp6v/c8vP/3PLz/9zy8//c8vP/LTEy/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LTEy/9zy8//c8vP/3PLz/4+Pj//d3d3/////////
/////////////+np6f+eoKD/1urr/9zy8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SR
kv/c8vP/3PLz/9zy8/+vubn/rq+v////////////////////////////wsPD/5udnf/R5OX/3PLz/9zy
8//c8vP/LTEy/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LTEy/9zy8//c8vP/3PLz/4+P
j//d3d3/////////////////9fX1/52env/N39//3PLz/9zy8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAA
AP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/rq+v/////////////////////////////////8jJ
yf+YmZn/zuDh/9zy8//c8vP/LTEy/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LTEy/9zy
8//c8vP/3PLz/4+Pj//d3d3////////////9/f3/qaqq/8LQ0P/c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/rq+v/////////////v7+/+jo
6P/MzMz/r6+v/5WVlf+Pj4//pKmq/9zy8//c8vP/LTEy/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/LTEy/9zy8//c8vP/3PLz/4+Pj//d3d3///////////+7vb3/tL2+/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8/+EkZL/AAAA/wAAAP8AAAD/AAAA/4SRkv/c8vP/3PLz/9zy8/+vubn/paWl/83N
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
AP8AAAD/LTEy/9zy8/+hsbL/LTEy/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8JCgr/Z3Fx/87j
5P/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//S5+j/dYGC/w0O
Dv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Jysr/5Ohov/c8vP/LTEy/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/IyYn/zk/P/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BQYG/1hh
Yf/H29z/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9nu7//S5eb/3PLz/9zy
8//c8vP/3PLz/8zg4f9ncXH/CAkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8yNzf/IiUm/wAA
AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIC
Av9JUVH/wNPU/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/2O3u/8bW1v+1v7//o6en/5KS
kv+RkZH/2e7v/9zy8//c8vP/3PLz/9zy8//c8vP/xNfY/1hhYf8DBAT/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADlAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8CAgL/TFRU/7zP0P/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//V6er/w9LT/7K7u/+go6P/lJWV/6qr
q//Gx8f/4uLi/6SkpP+ip6f/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8/+8z9D/TFRU/wIC
Av8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOQAAADHAAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/0JISP+zxcb/3PLz/9zy8//c8vP/3PLz/9Tn6P/Azs7/rra3/52goP+Wl5f/r7Cw/8zM
zP/n5+f//f39////////////9/f3/5CQkP+3wsP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/7PFxv9CSEj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMYAAAB6AAAA/wAA
AP8AAAD/AAAA/wAAAP8FBgb/S1NT/8jb3P/c8vP/3PLz/9zy8//c8vP/3PLz/6Knp/+Pj4//oKCg/+bm
5v//////////////////////////////////////2NjY/4+Pj//N3t//3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//M4OH/Vl1d/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AHkAAAADAAAA4AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/woLC/9oc3P/zeLj/9zy8//c8vP/3PLz/9zy
8//D0dL/nJ6f/5aXl//Ly8v/+/v7////////////////////////////uLi4/5eZmf/c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/zeLj/2hzc/8KCwv/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA4AAAAAMAAAAAAAAACAAAALUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dg8P/3B7
fP/R5uf/3PLz/9zy8//c8vP/2/Dx/8DOzv+anJz/mpub/87Ozv/8/Pz/////////////////mZmZ/6y0
tP/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Hm5/9we3z/Dg8P/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAC0AAAACAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA3gAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8RExP/eYWF/9Tp6v/c8vP/3PLz/9zy8//a7/D/vcrL/5iZmf+cnZ3/0tLS//7+
/v/p6en/j4+P/8LQ0f/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//U6er/eYWF/xETE/8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA3gAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
AGYAAADkAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xIUFP91gYL/1err/9zy8//c8vP/3PLz/9nu
7/+3wsP/lZWW/6Kjo/+zs7P/kJCQ/9br7P/c8vP/3PLz/9zy8//c8vP/2O3u/4SRkv8XGhr/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAB3AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAGAAAAZgAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Ghwd/4SR
kv/Z7u//3PLz/9zy8//c8vP/1uvs/7O9vf+Sk5P/o6mp/9zy8//c8vP/3PLz/9rw8f+ToaL/HiEh/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAdwAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAB3AAAA7gAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8cHx//hJGS/9nv8P/c8vP/3PLz/9zy8//Y7e7/2u/w/9zy8//b8fL/k6Gi/yIl
Jf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8gAAAIgAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAA
AHcAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUpKf+ToaL/2/Hy/9zy8//c8vP/3PLz/6Gx
sv8rLzD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPQAAACIAAAAEQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAVAAAAjgAAAPYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LjIz/3+M
jP9/jIz/LjIz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD2AAAAjgAAABUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAACIAAAA+AAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAJkAAAAbAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAA
AKAAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPwAAACgAAAAIQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAoAAAAogAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAswAA AAAAAAAAAAAAAAAAAAA0NDRFMzQ09D0+Pv6htbX/xODh/5apqv9ncXL/Ojs7/jMzM/8zMzP/NDQ04DQ0
AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA NJkyMjJNMzMzBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAACKAAAA0gAAAPEAAADxAAAA0gAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzM180NDT7T1BQ/b/R0f/S7/D/0O7v/9Du7//Q7u//y+np/6e9
AIoAAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA vf93hIT/QkVF/jMzM/8zMzP/NDQ08DMzM6o0NDReMzMzDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///AP///xBP//wAP///EE//8AAP//8QT//AAAP//xBP/w AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAP//EE/8AAAAP/8QT/gAAAAP/xBP4AAAAAf/EE+AAAAAAf8QTgAAAAAAfxBIAAAAAAAfEEgAAAAAAB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzdzU1Nf5eYWH+xtna/9nx8v/Q7u//0O7v/9Du
8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA 7//Q7u//0O7v/9Du7//Q7u//zuzt/7DIyf+CkZH/UlhY/jMzM/8zMzP/MzMz/DMzM8QzMzNvNTU1HQAA
AAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAAAAAAAPEEAAAAAAAA8QQAAAAAAADxBAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVQMzMzOVNTU1/2xwcP7O4+P/3PLz/9Xw
AAAAAPEEAAAAAAAA8QQAAAAAAADxBIAAAAAAAfEE4AAAAAAH8QTwAAAAAA/xBPwAAAAAP/EE/wAAAAD/ 8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7zW1/+Ro6P/Ymtr/zY2
8QT/wAAAA//xBP/wAAAP//EE//wAAD//8QT//wAA///xBP//wAP///EE///wD///8QQoAAAAIAAAAEAA Nv4zMzP/MzMz/zMzM9UzMzOIMzMzPAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkBzMzM6k5OTn/eH5+/9Po
6f/c8vP/2/Lz/9Hu7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/8Xh4v+csLD/bHd3/zs9Pf4zMzP/MzMz/zQ0NOI0NDSZMjIyTSQkJAcAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLS0RMzMzwjw8
PP+Ij5D/2O7v/9zy8//c8vP/1/Hy/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8vo6f+jubr/dICA/0NGRv4zMzP/MzMz/zQ0
NPIyMjJrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3
NxwzMzPVQUFB/5Wfn//a8fL/3PLz/9zy8//c8vP/0+/w/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8/t
7v+wyMn/gZCQ/zk6Ov4zMzPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAMTExKjQ0NOJGRkb/oKys/9zy8//c8vP/3PLz/9zy8//b8vP/0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/19naP80NDT5JCQkBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAyMjI4NTU17UhISP6turr/3PLz/9zy8//c8vP/3PLz/9zy8//X8fH/0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/4KRkv8zMzP/MTExOQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NE80NDT3Tk9P/bnJyv/c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8//T7/D/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/6a8vf8zMzP/MzMzcwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyYTQ0NPxUVlb9wtPU/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9vy8//Q7u//0O7v/8fk5f/O7O3/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8nm
5/81NTX+NDQ0rQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzN3MzMz/11gYP3K3d3/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9jx8v/Q7u//i6Cg/wMEBP8hJib/rcbH/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7/9RV1f/MzMz6gAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVAzIyMpgzMzP/Z2tr/tDk
5f/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9bw8f/Q7u//TVlZ/wAAAP8AAAD/CgsL/4ic
nf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/91goL/MzMz/zMzMyMAAAAAAAAAAAAAAABAQEAIMzMzqzMz
M/9yeHj/1uvr/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Pv8P/Q7u//TVhY/wAA
AP8AAAD/AAAA/wAAAP9baGj/zOnq/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+Zra7/MzMz/zQ0NF4AAAAAAAAAAAAA
AAAzMzPCMzMz/3uEhP/a7/D/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/2/Lz/9Du
7//Q7u//TVhY/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDc3/7vW1//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/++2dr/MzMz/zQ0
NJkAAAAAAAAAAAAAAAAzMzPNPD09/tvx8v/d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/2fHy/9Du7//Q7u//TVhY/wAAAP8AAAD/YnBw/wYHB/8AAAD/AAAA/xQWFv+ds7T/0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//REdH/jQ0NNQAAAAAAAAAAAAAAAAyMjKTMzMz/8ve3//d8/T/3fPz/93z8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/1/Hx/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/6e/wP8bHx//AAAA/wAA
AP8DBAT/b39//8/t7v/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//aHJz/zMzM/0tLS0RAAAAAAAAAAA0NDRZMzMz/6u6u//d8/T/3fPz/93z
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1fDx/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du
7//A3N3/OkJD/wAAAP8AAAD/AAAA/0BJSf/E4OH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//jJ2e/zMzM/8yMjJIAAAAAAAAAAAzMzMeMzMz/4aQ
kP/d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1O/w/9Du7//Q7u//TVhY/wAA
AP8AAAD/s8zN/9Du7//Q7u//z+3u/29/f/8CAgL/AAAA/wAAAP8fIyT/rMXG/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//sMfI/zMzM/8zMzOCAAAAAAAA
AAAAAAAAMzMz5FpfX/7d8/T/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0u/w/9Du
7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//Q7u//0O7v/9Du7/+Uqar/DhAQ/wAAAP8AAAD/CgsL/4md
nf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//zuvs/zo7
O/40NDS8AAAAAAAAAAAAAAAAMzMzqTY2N//V6er/3fPz/93z8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/0e7v/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//Q7u//0O7v/9Du7//Q7u//tM7P/yct
Lf8AAAD/AAAA/wAAAP9baWn/zerr/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/1tjY/80NDT1QEBABAAAAAAAAAAAMzMzbzMzM/+4ycn/3fPz/93z8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/0e7v/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/8nm5/9OWlr/AAAA/wAAAP8AAAD/a3p7/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/36Njf8zMzP/MzMzMgAAAAAAAAAAMTExNDMzM/+UoaH/3fPz/93z
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0O7v/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/8nm5/9OWlr/AAAA/wAAAP8AAAD/a3p7/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/6O4uf8zMzP/MzMzbQAAAAAAAAAAQEBABDQ0
NPRrcnL/3fP0/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//b8vP/0O7v/9Du7//Q7u//TVhY/wAA
AP8AAAD/s8zN/9Du7//Q7u//0O7v/9Du7//Q7u//tM7P/yctLf8AAAD/AAAA/wAAAP9baWn/zerr/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8bi4/80NDT/MjIypwAA
AAAAAAAAAAAAADMzM749Pj7+3PHx/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/0O7v/9Du
7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//Q7u//0O7v/9Du7/+Uqar/DxER/wAAAP8AAAD/CgsL/4ic
nf/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7/9NUVL+NDQ04gAAAAAAAAAAAAAAADIyMoQzMzP/w9bW/93z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/0e7v/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//Q7u//z+3u/29/f/8CAgL/AAAA/wAA
AP8fIyT/rMXG/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7/9yfn//MzMz/zU1NR0AAAAAAAAAADQ0NEozMzP/oa+w/93z8//d8/P/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/0u/w/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/9Du7//A3N3/O0ND/wAA
AP8AAAD/AAAA/0BJSf/D3+D/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+WqKn/MzMz/zIyMlcAAAAAAAAAADAwMBAzMzP9eIGB/93z
8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1O/w/9Du7//Q7u//TVhY/wAAAP8AAAD/s8zN/6e/
wP8bHx//AAAA/wAAAP8CAwP/b39//8/t7v/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+50tP/MzMz/zMzM5EAAAAAAAAAAAAA
AAA0NDTUSk1N/t3z8//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/1fDx/9Du7//Q7u//TVhY/wAA
AP8AAAD/YnBw/wYHB/8AAAD/AAAA/xQWFv+ds7T/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//O7O3/Oz09/jMz
M80AAAAAAAAAAAAAAAA0NDSZMzMz/87i4//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/2PHy/9Du
7//Q7u//TVhY/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDc3/7vW1//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8zp
6v9qdHT/MzMz/zMzM8IAAAAAAAAAAAAAAAAyMjJgMzMz/6u8vP/d8/P/3PLz/9zy8//c8vP/3PLz/9zy
8//c8vP/2/Lz/9Du7//Q7u//TVhY/wAAAP8AAAD/AAAA/wAAAP9baGj/zOnq/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//yOXm/19oaP8zMzP/MzMzuTs7Ow0AAAAAAAAAAAAAAAAwMDAlMzMz/4WRkf/d8/P/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9Pv8P/Q7u//TVlZ/wAAAP8AAAD/CgsL/4icnf/Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//B3d7/UVdX/jMzM/8zMzOgMzMzBQAAAAAAAAAAAAAAAAAAAAAAAAAAMzMz6Vlf
X//d8/P/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9fx8v/Q7u//i6Cg/wMEBP8hJib/rcbH/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/7vV1v9KTk79MzMz/zMzM4gAAAABAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAMzMzrzU1Nf7V6+z/3fPz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//R7/D/0O7v/8fk
5f/O7O3/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//sMjI/0FDQ/0zMzP9MzMzaQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAMjIydTMzM/+4ysv/3fPz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy
8//X8fH/0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+nvb3/OTs7/TQ0NPkyMjJWAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0OzMzM/+ToKH/3fPz/9zy8//c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/0+/w/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/5eqq/81Njb+NDU18TEx
MT4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkBzMzM/hpcXH/3fPz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/2vLz/9Hu7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//i5yd/zQ0
NP80NDTnMTExLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMz
M8Q5Ojr+jZqa/8DT1P/b8vL/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9nx8v/R7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/87s
7f91goL/MzMz/zMzM9U3NzccAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADIyMms0NDTyMzMz/zMzM/9KTU3+hY+P/7XHyP/Y7u//3PLz/9zy8//c8vP/3PLz/9zy
8//Z8fL/0e7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//y+jp/2dwcf8zMzP/MzMzwi0tLREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDMzMzPDMzM4g0NDTbMzMz/zMzM/89Pj7+cnp6/6W0
tP/R5ub/3PLz/9zy8//c8vP/2fHy/9Lv8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//I5eb/XWVl/zMzM/8zMzOwOTk5CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTU1KzMz
M3czMzPEMzMz/jMzM/82Njb+ZWtr/5qoqP/I29z/3PLz/9vy8//U8PH/0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/8Hc3f9QVVX+MzMz/zIyMp1AQEAEAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAALi4uFjQ0NF4zMzOzNDQ0+TMzM/8zMzP/T1NT/oeSkv+3ycn/1+/w/9Tv
8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//t9DR/0VJSf4zMzP/MzMziAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzCjIyMk00NDSZMzMz6jMz
M/8zMzP/QEND/niCgv+lt7f/y+bn/9Hu7//Q7u//0O7v/9Du7/+vx8f/P0JC/TMzM/00NDRnAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAVVVVAzMzMzwzMzOIMzQ02DMzM/8zMzP/Nzg4/mBoaf+Nnp//wNvc/6C1tv84OTn+MzMz+DQ0
NFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NCwzMzN5MzMzyDMzM/0zMzP/NDQ0/zQ0
NP8zNTXuMTExOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1
NRgyMjJlMzMzszMzM9czMzMoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4P///8AAP//AH///wAA//4AB///AAD//AAA//8AAP/4
AAAf/wAA/+AAAAH/AAD/wAAAAD8AAP+AAAAAHwAA/wAAAAAfAAD+AAAAAA8AAPwAAAAADwAA+AAAAAAP
AADwAAAAAA8AAOAAAAAADwAAgAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAMAAAAA
AAAAAwAAAAAAAAADAACAAAAAAAMAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAwAAAAAAB
AADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADgAAAAAAAAAOAAAAAAAAAA4AAAAAAAAADgAAAAAAEAAPAA
AAAAAwAA8AAAAAAPAADwAAAAAB8AAPAAAAAAPwAA8AAAAAB/AAD4AAAAAP8AAPgAAAAB/wAA/AAAAAP/
AAD/wAAAB/8AAP/4AAAf/wAA//8AAD//AAD//+AAf/8AAP///gD//wAA////wf//AAAoAAAAIAAAAEAA
AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAACzAAAA+gAAAPoAAACyAAAAPAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAyMjJCOTo65jk7O6oyMjJWNzc3DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAC6AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAugAA AAAAAAAAAAAAAAAAAAAAAAAAMjIyVzg4OPmKmpv+eomJ/kVKSvY1Njb8PD09xDIyMmszMzMeAAAAAAAA
ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAACqAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAALsAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAACoAAAA/QAAAP8AAAD/AAAA/wYHB/8mKSr/AAAA/wAA
AP8mKSr/BgcH/wAAAP8AAAD/AAAA/wAAAP0AAACoAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAACZAAAA+wAAAP8AAAD/AAAA/wICAv9JUVH/v9LT/1hh
Yf8AAAD/AAAA/1hhYf/D1tf/WGFh/wMEBP8AAAD/AAAA/wAAAP8AAAD9AAAAqgAAACQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAACIAAAA+AAAAP8AAAD/AAAA/wICAv9JUVH/u87P/9zy
8//c8vP/WGFh/wAAAP8AAAD/WGFh/9zy8//c8vP/wNTV/1hhYf8DAwP/AAAA/wAAAP8AAAD/AAAA+gAA
AJkAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAkAAACKAAAA9gAAAP8AAAD/AAAA/wEBAf9HTk7/t8nK/9zy
8//c8vP/3PLz/9zy8/9YYWH/AAAA/wAAAP9YYWH/3PLz/9zy8//a7/D/3PLz/7fJyv9HTk7/AQEB/wAA
AP8AAAD/AAAA/wAAAPYAAACJAAAACQAAAAAAAAAMAAAAzAAAAP8AAAD/AAAA/wAAAP8/RUb/sMLC/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/1hhYf8AAAD/AAAA/1hhYf/c8vP/3PLz/6etrf++ycr/3PLz/9zy
8/+wwsL/P0VG/wAAAP8AAAD/AAAA/wAAAP8AAADLAAAACwAAAIsAAAD/AAAA/wAAAP83PT3/qbq7/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/WGFh/wAAAP8AAAD/WGFh/9zy8//c8vP/p6ur/7W2
tv+3wcH/3PLz/9zy8//c8vP/qbq7/zc9Pf8AAAD/AAAA/wAAAP8AAACKAAAA4gAAAP8AAAD/bXh4/9zy
8//U6On/wM7O/7rGxv+1v8D/sLi4/6qwsP+kqan/0OPk/9zy8/9YYWH/AAAA/wAAAP9YYWH/3PLz/9zy
8/+nq6v/7+/v/87Pz/+vtrb/2/Dx/9zy8//c8vP/3PLz/2t2dv8AAAD/AAAA/wAAAOEAAAD+AAAA/wAA
AP+uwMD/3PLz/660tP+2t7f/x8jI/9DQ0P/Z2dn/ysvL/7O7u//c8vP/3PLz/1hhYf8AAAD/AAAA/1hh
Yf/c8vP/3PLz/6erq//v7+///////9ra2v+ssrL/2e7v/9zy8//c8vP/rsDA/wAAAP8AAAD/AAAA/gAA
AP8AAAD/AAAA/6/Bwf/c8vP/rLKy/+jo6P////////////X19f+vs7T/2u/w/9zy8//c8vP/WGFh/wAA
AP8AAAD/WGFh/9zy8//c8vP/p6ur/+/v7////////////+Hi4v+qrq//1+zt/9zy8/+vwcH/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/r8HB/9zy8/+ssrL/6Ojo///////9/f3/srW1/9Xp6v/c8vP/3PLz/9zy
8/9YYWH/AAAA/wAAAP9YYWH/3PLz/9zy8/+nq6v/7+/v////////////+/v7/8rKyv+ho6P/1+zt/6/B
wf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+vwcH/3PLz/6yysv/o6Oj//////7y/v//N3t7/3PLz/9zy
8//c8vP/3PLz/1hhYf8AAAD/AAAA/1hhYf/c8vP/3PLz/6erq//U1NT/xcbG/6eoqP+Zmpr/q7Gx/7zI
yf/Z7u//r8HB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6/Bwf/c8vP/rLKy/+jo6P/T1NT/ws7O/9zy
8//c8vP/3PLz/9zy8//c8vP/V2Bg/wAAAP8AAAD/V2Bg/9zy8//c8vP/uMHC/6qwsP+7yMj/z+Hi/9zy
8//c8vP/3PLz/9zy8/+vwcH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/r8HB/9zy8/+ssrL/z9DQ/7jA
wf/c8vP/3PLz/9zy8//c8vP/3PLz/6Gxsv8QEhL/AAAA/wAAAP8OEBD/k6Gi/9vx8v/c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/6/Bwf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+vwcH/3PLz/6yy
sv+qrq7/2/Hy/9zy8//c8vP/3PLz/6Cxsf8uMjP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/LjIz/6Cx
sf/c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/r8HB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/6/B
wf/c8vP/vMjJ/9br7P/c8vP/3PLz/6u8vf84Pj7/AAAA/wAAAP8AAAD/AAAA/woLC/8KCwv/AAAA/wAA
AP8AAAD/AAAA/zg+Pv+rvL3/3PLz/9zy8//c8vP/3PLz/9zy8/+vwcH/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/r8HB/9zy8//c8vP/3PLz/7fJyv9JUVH/AQEB/wAAAP8AAAD/AAAA/wkKCv9ncXH/zuPk/9Ln
6P91gYL/DQ4O/wAAAP8AAAD/AAAA/wAAAP87QUH/scPD/9zy8//c8vP/3PLz/6/Bwf8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP+vwcH/3PLz/8DU1f9YYWH/AwMD/wAAAP8AAAD/AAAA/wUGBv9YYWH/x9vc/9zy
8//c8vP/3PLz/9zy8//M4OH/Z3Fx/wgJCf8AAAD/AAAA/wAAAP8BAQH/SVFR/7vOz//c8vP/r8HB/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/5ysrP9faGn/BQYG/wAAAP8AAAD/AAAA/wQFBf9QWFn/wNPU/9zy
8//c8vP/3PLz/9zy8//c8vP/3PLz/9zy8//c8vP/xNfY/19oaf8GBwf/AAAA/wAAAP8AAAD/AwQE/1BY
Wf+YqKj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BgcH/wAAAP8AAAD/AAAA/wEBAf9JUVH/vM/Q/9zy
8//c8vP/3PLz/9zy8//c8vP/0OPk/7/MzP+vtbX/tb/A/9zy8//c8vP/3PLz/8HV1f9YYWH/AwMD/wAA
AP8AAAD/AAAA/wQFBf8AAAD/AAAA/wAAAP8AAADtAAAA/wAAAP8AAAD/AAAA/wAAAP9CSUn/tMbH/9zy
8//c8vP/2/Hy/83e3/+8x8j/rrOz/66xsf+/wsL/3d7e/7i5uf+6xcb/3PLz/9zy8//c8vP/3PLz/9zy
8/+0xsf/QklJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7AAAAM4AAAD/AAAA/wAAAP8hJCT/na2t/9zy
8//c8vP/3PLz/7/Nzv+Vlpb/uru7/+Pj4//7+/v/////////////////np+f/87g4f/c8vP/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/na2t/yEkJP8AAAD/AAAA/wAAAP8AAADNAAAALwAAAPUAAAD/AAAA/wAA
AP8EBQX/WmNj/8TX2P/c8vP/3PLz/8fX2P+ipaX/uru7//X19f////////////Hx8f+Zmpr/3PLz/9zy
8//c8vP/3PLz/9zy8//c8vP/xNfY/1pjY/8EBQX/AAAA/wAAAP8AAAD/AAAA9QAAAC4AAAAAAAAAFgAA
AKkAAAD+AAAA/wAAAP8AAAD/BwgI/2FrbP/J3d7/3PLz/9vx8v/D0dL/oKKj/8LDw//4+Pj/0NDQ/6+2
t//c8vP/3PLz/9zy8//c8vP/yd3e/2FrbP8HCAj/AAAA/wAAAP8AAAD/AAAA/gAAAKkAAAAWAAAAAAAA
AAAAAAAAAAAAAAAAACwAAACqAAAA/gAAAP8AAAD/AAAA/wkKCv9ncXH/zeLj/9zy8//a7/D/vcnK/6Ci
ov+en5//w9LT/9zy8//c8vP/0ebn/3WBgv8MDQ3/AAAA/wAAAP8AAAD/AAAA/wAAALsAAAA0AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAvAAAAP8AAAD/AAAA/wAAAP8LDAz/Z3Fx/8/k
5f/c8vP/2e/v/8HP0P/Z7u//0+jp/3WBgv8PEBD/AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAA/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwAAAMYAAAD/AAAA/wAA
AP8AAAD/EhQU/3mFhf/T6en/0+np/3mFhf8SFBT/AAAA/wAAAP8AAAD/AAAA/wAAAMYAAABDAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AEwAAADPAAAA/wAAAP8AAAD/AAAA/wcICP8HCAj/AAAA/wAAAP8AAAD/AAAA/wAAAM8AAABMAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NW5BQkL6tcXG/9Hu7//Q7u//0O7v/7vV1v+LnJ3/WF9f9jQ1
Nf06OzvfNDQ0iTMzMzwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4ODiDTU5O+sDS0v/Y8fL/0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//xODh/5ywsP9pc3P4ODk5+jg5OfA3NzemMjIyTSQkJAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMFOTk5qVdaWvjK3d3/3PLz/9Pv8P/Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//L6en/ore4/3F9ffs+QED4Nzc39zs8PLIyMjJcNzc3DgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrDDo8PMBobGz40eXm/9zy8//b8vP/0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/8/t7v+vx8f/fYyN/kBD
Q/czMzN4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2NhM8Pj7Pdnx8+NXq6//c8vP/3PLz/9fw
8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//i5yc/zs8PLsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYhOzw84YGIiPrY7+//3PLz/9zy
8//c8vP/0+/w/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
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
7//Q7u//0O7v/9Du7/+Xqqv/NjY2+zQ0NGMAAAAAAAAAADQ0NGNiZ2f13fPz/9zy8//c8vP/3PLz/9zy
8//W8PH/xODh/wEBAf8ICQn/hZiZ/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//i5yc/TY3N/c0NDRJAAAAAAAAAAAAAAAAMjIyKTk6Ovva8PD/3PLz/9zy
8//c8vP/3PLz/9vy8//R7u//l62t/7DKyv/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//z+3u/3mIiPw3ODjyMTExOQAAAAAAAAAAAAAAAAAAAAAAAAABODk58sDS
0//c8vP/3PLz/9zy8//c8vP/3PLz/9bw8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/8zp6v9ncXL5Nzk55jY2NiYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA7Pj69nKqr/9zy8//c8vP/3PLz/9zy8//c8vP/3PLz/9Lv8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//I5eb/XGRk+Ds8PNU3NzcXAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADMzM3hCRET3jZqb/r/S0v/b8vL/3PLz/9zy8//c8vP/2/Lz/9Lv8P/Q7u//0O7v/9Du
7//Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//wdzd/0tRUfc5OjrAKysrDAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAANzc3DjIyMlw5OjqwNjc39kZISPeAiov7tMXG/9ju7v/c8vP/2vLz/9Lv
8P/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7//Q7u//0O7v/7jS0v9DRkb4OTs7qjMzMwUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAEMzMzPDc3N5Q4OTnqOjs7+211
dvijsrL/z+Tl/9bw8f/Q7u//0O7v/9Du7//Q7u//0O7v/9Du7/+wyMj/PT4/+Dc3N5UAAAACAAAAAAAA
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
rEEAAKxBAACsQYABrEHgB6xB+B+sQQ== rEGAAKxBgAGsQYADrEHgD6xB/B+sQQ==
</value> </value>
</data> </data>
</root> </root>

View File

@ -1,210 +0,0 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
namespace RandomFileRunner
{
public class MemoBoxForm : Form
{
private ThMemoBox memoBox1;
private ThButton button3;
private ThButton button4;
private ContextMenuStrip contextMenuStrip1;
private System.ComponentModel.IContainer components;
private ToolStripMenuItem addDirectoryToolStripMenuItem;
private ToolStripMenuItem addFileToolStripMenuItem;
private FolderBrowserDialog folderBrowserDialog1;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private OpenFileDialog openFileDialog1;
public MemoBoxForm(List<string> lines)
{
InitializeComponent();
UISetup.Dialog(this);
if (lines != null)
{
memoBox1.TextBox.Lines = lines.ToArray();
}
memoBox1.TextBox.WordWrap = false;
}
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
memoBox1 = new ThMemoBox();
button3 = new ThButton();
contextMenuStrip1 = new ContextMenuStrip(components);
addDirectoryToolStripMenuItem = new ToolStripMenuItem();
addFileToolStripMenuItem = new ToolStripMenuItem();
button4 = new ThButton();
folderBrowserDialog1 = new FolderBrowserDialog();
openFileDialog1 = new OpenFileDialog();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter();
contextMenuStrip1.SuspendLayout();
SuspendLayout();
//
// memoBox1
//
memoBox1.AllowDrop = true;
memoBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
memoBox1.BackColor = System.Drawing.Color.Transparent;
memoBox1.EnableReactiveVisual = true;
memoBox1.Font = new System.Drawing.Font("Segoe UI", 9F);
memoBox1.Location = new System.Drawing.Point(10, 70);
memoBox1.Name = "memoBox1";
memoBox1.ReadOnly = false;
memoBox1.ScrollBars = ScrollBars.Vertical;
memoBox1.Size = new System.Drawing.Size(364, 357);
memoBox1.TabIndex = 191;
memoBox1.TabStop = false;
memoBox1.WordWrap = false;
//
// button3
//
button3.ActiveImage = null;
button3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
button3.BackColor = System.Drawing.Color.Transparent;
button3.ContextMenuStrip = contextMenuStrip1;
button3.EnableMenuOnClick = true;
button3.EnableReactiveVisual = true;
button3.HoverImage = null;
button3.IdleImage = null;
button3.LabelText = "&Add";
button3.Location = new System.Drawing.Point(10, 21);
button3.Name = "button3";
button3.Size = new System.Drawing.Size(177, 33);
button3.TabIndex = 189;
button3.TabStop = false;
//
// contextMenuStrip1
//
contextMenuStrip1.Items.AddRange(new ToolStripItem[] { addDirectoryToolStripMenuItem, addFileToolStripMenuItem });
contextMenuStrip1.Name = "contextMenuStrip1";
contextMenuStrip1.Size = new System.Drawing.Size(148, 48);
//
// addDirectoryToolStripMenuItem
//
addDirectoryToolStripMenuItem.Name = "addDirectoryToolStripMenuItem";
addDirectoryToolStripMenuItem.Size = new System.Drawing.Size(147, 22);
addDirectoryToolStripMenuItem.Text = "&Add Directory";
addDirectoryToolStripMenuItem.Click += addDirectoryToolStripMenuItem_Click;
//
// addFileToolStripMenuItem
//
addFileToolStripMenuItem.Name = "addFileToolStripMenuItem";
addFileToolStripMenuItem.Size = new System.Drawing.Size(147, 22);
addFileToolStripMenuItem.Text = "Add &File";
addFileToolStripMenuItem.Click += addFileToolStripMenuItem_Click;
//
// button4
//
button4.ActiveImage = null;
button4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
button4.BackColor = System.Drawing.Color.Transparent;
button4.EnableMenuOnClick = false;
button4.EnableReactiveVisual = true;
button4.HoverImage = null;
button4.IdleImage = null;
button4.LabelText = "&Clear";
button4.Location = new System.Drawing.Point(197, 21);
button4.Name = "button4";
button4.Size = new System.Drawing.Size(177, 33);
button4.TabIndex = 190;
button4.TabStop = false;
button4.MouseClick += button4_MouseClick;
//
// folderBrowserDialog1
//
folderBrowserDialog1.ShowNewFolderButton = false;
//
// openFileDialog1
//
openFileDialog1.Filter = "All files (*.*)|*.*";
//
// dialogFooter1
//
dialogFooter1.BackColor = System.Drawing.Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&OK";
dialogFooter1.Dialog = this;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.Location = new System.Drawing.Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new System.Drawing.Size(384, 84);
//
// MemoBoxForm
//
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = System.Drawing.Color.White;
ClientSize = new System.Drawing.Size(384, 521);
Controls.Add(dialogFooter1);
Controls.Add(memoBox1);
Controls.Add(button3);
Controls.Add(button4);
MinimumSize = new System.Drawing.Size(400, 560);
Name = "MemoBoxForm";
ShowIcon = false;
ShowInTaskbar = false;
Text = "Manage Search Paths";
contextMenuStrip1.ResumeLayout(false);
ResumeLayout(false);
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
memoBox1.Focus();
}
public List<string> Result
{
get => memoBox1.Lines;
}
/// <summary>
/// Add Directory.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
memoBox1.TextBox.AddLine(folderBrowserDialog1.SelectedPath);
}
}
/// <summary>
/// Add File.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addFileToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
memoBox1.TextBox.AddLine(openFileDialog1.FileName);
}
}
/// <summary>
/// Clear.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_MouseClick(object sender, MouseEventArgs e)
{
memoBox1.Text = string.Empty;
}
}
}

View File

@ -1,280 +1,289 @@
using System; using RyzStudio.Windows.ThemedForms;
using System;
using System.Windows.Forms; using System.Windows.Forms;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms.ButtonTextBox;
using RyzStudio.Windows.ThemedForms.PickerBox;
namespace RandomFileRunner namespace RandomFileRunner
{ {
public class OptionsForm : Form public class OptionsForm : TDialogForm
{ {
private ThYesNoPickerBox pickerBox1; private TButton button1;
private TYesNoPickerBox pickerBox1;
private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label8;
private ThNumericPickerBox pickerBox2; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private ThKeyCodeTextBox textBox1; private TNumericPickerBox pickerBox2;
private ThYesNoPickerBox pickerBox3; private TKeyCodeTextBox textBox1;
private TYesNoPickerBox pickerBox3;
private Label label1; private Label label1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator3; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator3;
private Label label2; private Label label2;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private AppSession _session = null;
public OptionsForm(AppSession session) : base() public OptionsForm(AppSession session) : base()
{ {
InitializeComponent(); InitializeComponent();
UISetup.Dialog(this); this.Session = session;
_session = session;
if (_session != null)
{
pickerBox1.Value = _session.SearchTopDirectoryOnly;
pickerBox2.Value = _session.RetryOnError;
pickerBox3.Value = _session.ClosePrevOnNext;
if (_session.NextHotKey != null)
{
textBox1.UpdateKeyCode(_session.NextHotKey.IsCtrl, _session.NextHotKey.IsAlt, _session.NextHotKey.IsShift, _session.NextHotKey.KeyCode);
}
}
} }
private void InitializeComponent() private void InitializeComponent()
{ {
ThKeyCodeTextBox.Results results1 = new ThKeyCodeTextBox.Results(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm));
pickerBox1 = new ThYesNoPickerBox(); RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results results1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results();
label6 = new Label(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
label8 = new Label(); this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
tHorizontalSeparator2 = new THorizontalSeparator(); this.label6 = new System.Windows.Forms.Label();
pickerBox2 = new ThNumericPickerBox(); this.label8 = new System.Windows.Forms.Label();
textBox1 = new ThKeyCodeTextBox(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
pickerBox3 = new ThYesNoPickerBox(); this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
label1 = new Label(); this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TNumericPickerBox();
tHorizontalSeparator3 = new THorizontalSeparator(); this.textBox1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox();
label2 = new Label(); this.pickerBox3 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter(); this.label1 = new System.Windows.Forms.Label();
SuspendLayout(); this.tHorizontalSeparator3 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.DefaultImage = null;
this.button1.DownImage = null;
this.button1.IsSelected = false;
this.button1.LabelText = "&Save";
this.button1.Location = new System.Drawing.Point(241, 469);
this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
this.button1.Name = "button1";
this.button1.OverImage = null;
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.button1.Size = new System.Drawing.Size(128, 32);
this.button1.TabIndex = 173;
this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.button1_MouseClick);
// //
// pickerBox1 // pickerBox1
// //
pickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
pickerBox1.BackColor = System.Drawing.Color.Transparent; this.pickerBox1.BackColor = System.Drawing.Color.Transparent;
pickerBox1.EnableReactiveVisual = true; this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F); this.pickerBox1.Location = new System.Drawing.Point(285, 21);
pickerBox1.Location = new System.Drawing.Point(285, 20); this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
pickerBox1.Name = "pickerBox1"; this.pickerBox1.Name = "pickerBox1";
pickerBox1.SelectedIndex = 1; this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
pickerBox1.Size = new System.Drawing.Size(84, 35); this.pickerBox1.Size = new System.Drawing.Size(84, 34);
pickerBox1.TabIndex = 0; this.pickerBox1.SubmitButton = null;
pickerBox1.TabStop = false; this.pickerBox1.TabIndex = 183;
pickerBox1.Value = true; this.pickerBox1.Value = true;
// //
// label6 // label6
// //
label6.AutoSize = true; this.label6.AutoSize = true;
label6.BackColor = System.Drawing.Color.Transparent; this.label6.BackColor = System.Drawing.Color.Transparent;
label6.ForeColor = System.Drawing.SystemColors.ControlText; this.label6.ForeColor = System.Drawing.SystemColors.ControlText;
label6.Location = new System.Drawing.Point(10, 95); this.label6.Location = new System.Drawing.Point(10, 85);
label6.Margin = new Padding(0); this.label6.Margin = new System.Windows.Forms.Padding(0);
label6.Name = "label6"; this.label6.Name = "label6";
label6.Padding = new Padding(0, 9, 0, 10); this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label6.Size = new System.Drawing.Size(81, 34); this.label6.Size = new System.Drawing.Size(81, 34);
label6.TabIndex = 182; this.label6.TabIndex = 182;
label6.Text = "Retry On Error"; this.label6.Text = "Retry On Error";
label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// label8 // label8
// //
label8.AutoSize = true; this.label8.AutoSize = true;
label8.BackColor = System.Drawing.Color.Transparent; this.label8.BackColor = System.Drawing.Color.Transparent;
label8.ForeColor = System.Drawing.SystemColors.ControlText; this.label8.ForeColor = System.Drawing.SystemColors.ControlText;
label8.Location = new System.Drawing.Point(10, 20); this.label8.Location = new System.Drawing.Point(10, 21);
label8.Margin = new Padding(0); this.label8.Margin = new System.Windows.Forms.Padding(0);
label8.Name = "label8"; this.label8.Name = "label8";
label8.Padding = new Padding(0, 9, 0, 10); this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label8.Size = new System.Drawing.Size(143, 34); this.label8.Size = new System.Drawing.Size(143, 34);
label8.TabIndex = 186; this.label8.TabIndex = 186;
label8.Text = "Search Top Directory Only"; this.label8.Text = "Search Top Directory Only";
label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tHorizontalSeparator1
//
this.tHorizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
this.tHorizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator1.TabIndex = 188;
// //
// tHorizontalSeparator2 // tHorizontalSeparator2
// //
tHorizontalSeparator2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.tHorizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); | System.Windows.Forms.AnchorStyles.Right)));
tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.tHorizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent; this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator2.Location = new System.Drawing.Point(10, 64); this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator2.Margin = new Padding(0, 10, 0, 0); this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 59);
tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
tHorizontalSeparator2.Name = "tHorizontalSeparator2"; this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator2.Size = new System.Drawing.Size(364, 22); this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
tHorizontalSeparator2.TabIndex = 190; this.tHorizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
tHorizontalSeparator2.TabStop = false; this.tHorizontalSeparator2.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator2.TabIndex = 190;
// //
// pickerBox2 // pickerBox2
// //
pickerBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
pickerBox2.BackColor = System.Drawing.Color.Transparent; this.pickerBox2.BackColor = System.Drawing.Color.Transparent;
pickerBox2.EnableReactiveVisual = true; this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F); this.pickerBox2.Location = new System.Drawing.Point(285, 85);
pickerBox2.Location = new System.Drawing.Point(285, 95); this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
pickerBox2.MaxDropDownItems = 10; this.pickerBox2.Name = "pickerBox2";
pickerBox2.Maximum = 50; this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
pickerBox2.Minimum = 0; this.pickerBox2.Size = new System.Drawing.Size(84, 34);
pickerBox2.Name = "pickerBox2"; this.pickerBox2.SubmitButton = null;
pickerBox2.SelectedIndex = 0; this.pickerBox2.TabIndex = 193;
pickerBox2.Size = new System.Drawing.Size(84, 35); this.pickerBox2.Value = 0;
pickerBox2.TabIndex = 1;
pickerBox2.TabStop = false;
pickerBox2.Value = 0;
// //
// textBox1 // textBox1
// //
textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
textBox1.BackColor = System.Drawing.Color.Transparent; this.textBox1.BackColor = System.Drawing.Color.Transparent;
textBox1.EnableReactiveVisual = true; this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
textBox1.Font = new System.Drawing.Font("Segoe UI", 9F); this.textBox1.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox1.HighlightImage")));
textBox1.Icon = "O";
textBox1.IconSize = 13F;
results1.IsAlt = false; results1.IsAlt = false;
results1.IsCtrl = false; results1.IsCtrl = false;
results1.IsShift = false; results1.IsShift = false;
results1.Key = Keys.None; results1.Key = System.Windows.Forms.Keys.None;
textBox1.KeyCodeResults = results1; this.textBox1.KeyCodeResults = results1;
textBox1.Location = new System.Drawing.Point(241, 216); this.textBox1.Location = new System.Drawing.Point(241, 197);
textBox1.Name = "textBox1"; this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
textBox1.Size = new System.Drawing.Size(128, 32); this.textBox1.Name = "textBox1";
textBox1.TabIndex = 3; this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage")));
textBox1.TabStop = false; this.textBox1.Padding = new System.Windows.Forms.Padding(10, 9, 9, 9);
textBox1.UseSystemPasswordChar = false; this.textBox1.Size = new System.Drawing.Size(128, 34);
this.textBox1.SubmitButton = null;
this.textBox1.TabIndex = 194;
this.textBox1.UseSystemPasswordChar = false;
// //
// pickerBox3 // pickerBox3
// //
pickerBox3.Anchor = AnchorStyles.Top | AnchorStyles.Right; this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
pickerBox3.BackColor = System.Drawing.Color.Transparent; this.pickerBox3.BackColor = System.Drawing.Color.Transparent;
pickerBox3.EnableReactiveVisual = true; this.pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F); this.pickerBox3.Location = new System.Drawing.Point(285, 127);
pickerBox3.Location = new System.Drawing.Point(285, 140); this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
pickerBox3.Name = "pickerBox3"; this.pickerBox3.Name = "pickerBox3";
pickerBox3.SelectedIndex = 1; this.pickerBox3.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
pickerBox3.Size = new System.Drawing.Size(84, 35); this.pickerBox3.Size = new System.Drawing.Size(84, 34);
pickerBox3.TabIndex = 2; this.pickerBox3.SubmitButton = null;
pickerBox3.TabStop = false; this.pickerBox3.TabIndex = 195;
pickerBox3.Value = true; this.pickerBox3.Value = true;
// //
// label1 // label1
// //
label1.AutoSize = true; this.label1.AutoSize = true;
label1.BackColor = System.Drawing.Color.Transparent; this.label1.BackColor = System.Drawing.Color.Transparent;
label1.ForeColor = System.Drawing.SystemColors.ControlText; this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
label1.Location = new System.Drawing.Point(10, 140); this.label1.Location = new System.Drawing.Point(10, 127);
label1.Margin = new Padding(0); this.label1.Margin = new System.Windows.Forms.Padding(0);
label1.Name = "label1"; this.label1.Name = "label1";
label1.Padding = new Padding(0, 9, 0, 10); this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label1.Size = new System.Drawing.Size(169, 34); this.label1.Size = new System.Drawing.Size(169, 34);
label1.TabIndex = 196; this.label1.TabIndex = 196;
label1.Text = "Close Current Process On Next"; this.label1.Text = "Close Current Process On Next";
label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// tHorizontalSeparator3 // tHorizontalSeparator3
// //
tHorizontalSeparator3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; this.tHorizontalSeparator3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0); | System.Windows.Forms.AnchorStyles.Right)));
tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent; this.tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0);
tHorizontalSeparator3.Location = new System.Drawing.Point(10, 184); this.tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent;
tHorizontalSeparator3.Margin = new Padding(0, 10, 0, 0); this.tHorizontalSeparator3.Location = new System.Drawing.Point(10, 165);
tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(4920, 2); this.tHorizontalSeparator3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22); this.tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(4920, 2);
tHorizontalSeparator3.Name = "tHorizontalSeparator3"; this.tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22);
tHorizontalSeparator3.Size = new System.Drawing.Size(364, 22); this.tHorizontalSeparator3.Name = "tHorizontalSeparator3";
tHorizontalSeparator3.TabIndex = 197; this.tHorizontalSeparator3.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
tHorizontalSeparator3.TabStop = false; this.tHorizontalSeparator3.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator3.TabIndex = 197;
// //
// label2 // label2
// //
label2.AutoSize = true; this.label2.AutoSize = true;
label2.BackColor = System.Drawing.Color.Transparent; this.label2.BackColor = System.Drawing.Color.Transparent;
label2.ForeColor = System.Drawing.SystemColors.ControlText; this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
label2.Location = new System.Drawing.Point(10, 216); this.label2.Location = new System.Drawing.Point(10, 197);
label2.Margin = new Padding(0); this.label2.Margin = new System.Windows.Forms.Padding(0);
label2.Name = "label2"; this.label2.Name = "label2";
label2.Padding = new Padding(0, 9, 0, 10); this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
label2.Size = new System.Drawing.Size(123, 34); this.label2.Size = new System.Drawing.Size(81, 34);
label2.TabIndex = 198; this.label2.TabIndex = 198;
label2.Text = "Next File Shortcut Key"; this.label2.Text = "Retry On Error";
label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// dialogFooter1
//
dialogFooter1.BackColor = System.Drawing.Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&Save";
dialogFooter1.Dialog = this;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.Location = new System.Drawing.Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new System.Drawing.Size(384, 84);
// //
// OptionsForm // OptionsForm
// //
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
BackColor = System.Drawing.Color.White; this.ClientSize = new System.Drawing.Size(384, 521);
ClientSize = new System.Drawing.Size(384, 521); this.Controls.Add(this.label2);
Controls.Add(dialogFooter1); this.Controls.Add(this.tHorizontalSeparator3);
Controls.Add(label2); this.Controls.Add(this.label1);
Controls.Add(tHorizontalSeparator3); this.Controls.Add(this.pickerBox3);
Controls.Add(label1); this.Controls.Add(this.textBox1);
Controls.Add(pickerBox3); this.Controls.Add(this.pickerBox2);
Controls.Add(textBox1); this.Controls.Add(this.tHorizontalSeparator2);
Controls.Add(pickerBox2); this.Controls.Add(this.tHorizontalSeparator1);
Controls.Add(tHorizontalSeparator2); this.Controls.Add(this.label8);
Controls.Add(label8); this.Controls.Add(this.pickerBox1);
Controls.Add(pickerBox1); this.Controls.Add(this.label6);
Controls.Add(label6); this.Controls.Add(this.button1);
MinimumSize = new System.Drawing.Size(400, 560); this.MinimumSize = new System.Drawing.Size(400, 560);
Name = "OptionsForm"; this.Name = "OptionsForm";
ShowIcon = false; this.Text = "Options";
ShowInTaskbar = false; this.ResumeLayout(false);
Text = "Options"; this.PerformLayout();
ResumeLayout(false);
PerformLayout();
} }
protected override void OnShown(EventArgs e) protected override void OnShown(EventArgs e)
{ {
base.OnShown(e); base.OnShown(e);
pickerBox1.Focus(); this.DialogResult = System.Windows.Forms.DialogResult.None;
pickerBox1.Value = this.Session.SearchTopDirectoryOnly;
pickerBox2.Clear(0, 20, this.Session.RetryOnError);
pickerBox3.Value = this.Session.ClosePrevOnNext;
if (this.Session.NextHotKey != null) textBox1.UpdateKeyCode(this.Session.NextHotKey.IsCtrl, this.Session.NextHotKey.IsAlt, this.Session.NextHotKey.IsShift, this.Session.NextHotKey.KeyCode);
} }
public AppSession Result public AppSession Session { get; protected set; }
private void button1_MouseClick(object sender, MouseEventArgs e)
{ {
get if (this.Session == null) this.Session = new AppSession();
{
if (_session == null)
{
_session = new AppSession();
}
_session.SearchTopDirectoryOnly = pickerBox1.Value; this.Session.SearchTopDirectoryOnly = pickerBox1.Value;
_session.RetryOnError = pickerBox2.Value; this.Session.RetryOnError = pickerBox2.Value;
_session.ClosePrevOnNext = pickerBox3.Value; this.Session.ClosePrevOnNext = pickerBox3.Value;
_session.NextHotKey.IsCtrl = textBox1.KeyCodeResults.IsCtrl; this.Session.NextHotKey.IsCtrl = textBox1.KeyCodeResults.IsCtrl;
_session.NextHotKey.IsAlt = textBox1.KeyCodeResults.IsAlt; this.Session.NextHotKey.IsAlt = textBox1.KeyCodeResults.IsAlt;
_session.NextHotKey.IsShift = textBox1.KeyCodeResults.IsShift; this.Session.NextHotKey.IsShift = textBox1.KeyCodeResults.IsShift;
_session.NextHotKey.Key = textBox1.KeyCodeResults.KeyCode; this.Session.NextHotKey.Key = textBox1.KeyCodeResults.KeyCode;
return _session; this.DialogResult = DialogResult.OK;
} this.Close();
} }
} }

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
@ -117,4 +57,24 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="textBox1.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAClSURBVDhP7dI/
DgFBGIbxSVTKjcRx3MLqXYCOjkocQcMF3MAZOIKaE5AthOexf2QnbJQKb/JLJvO9XzLFhCgtbHDBveB5
DWcfM8ANC0wKnr1LUUsbHXSxxBlJxDtnduy6E04on/Utd0IPOxwxxBT9iHfO7Nh155kV9vmxMXbsVvkv
vvIji4f82Bg7tcUxrpih/NyxOeyMUMVPu0WGd39TzuzQDeEB5/ZKvTSyulEAAAAASUVORK5CYII=
</value>
</data>
<data name="textBox1.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADTSURBVDhP7ZI7
CsJQEEUfWFmK4HLchdpnA9ppp5W4BBtdQNyBC0ilRf6VdVyBwUL03JdXxC/YWThwmDcz94YJjKmH7/uN
OI7XaZqekiS5Cr1hpZmTPQemAeILeU4eC/dWr+9kVQRB0MzzvB2GYQfBAsExiqJWHfU0k0ZaeQyNAuxa
X1CYLMu6/MOW4kD2YAK9B9TznGYrj12XVZY0drb4ENJI68q/sR4/YoS9K9+GNHdGLmIEJV+cku1xP4Jh
Ri7JQ2erDp3mBs7w6jaFZht74MaYGwmLbkeRGexGAAAAAElFTkSuQmCC
</value>
</data>
</root> </root>

View File

@ -1,5 +1,7 @@
using RyzStudio.IO;
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace RandomFileRunner namespace RandomFileRunner

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\64\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net5.0-windows</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\86\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net5.0-windows</TargetFramework>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows8.0</TargetFramework> <TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<AssemblyName>randomfilerunner</AssemblyName> <AssemblyName>randomfilerunner</AssemblyName>
<Authors>Ray Lam</Authors> <Authors>Ray Lam</Authors>
@ -11,7 +11,7 @@
<Copyright>Ray Lam</Copyright> <Copyright>Ray Lam</Copyright>
<ApplicationIcon>favicon.ico</ApplicationIcon> <ApplicationIcon>favicon.ico</ApplicationIcon>
<NoWin32Manifest>true</NoWin32Manifest> <NoWin32Manifest>true</NoWin32Manifest>
<Version>1.1.1.031</Version> <Version>0.1.1.005</Version>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@ -19,10 +19,6 @@
<DebugSymbols>false</DebugSymbols> <DebugSymbols>false</DebugSymbols>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Remove="RyzStudio\**" /> <Compile Remove="RyzStudio\**" />
<EmbeddedResource Remove="RyzStudio\**" /> <EmbeddedResource Remove="RyzStudio\**" />
@ -30,18 +26,17 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Remove=".gitignore" /> <Compile Remove="UIResource.Designer.cs" />
<None Remove="build.bat" />
<None Remove="MainForm.resx~RF28b83d97.TMP" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="favicon.ico" /> <EmbeddedResource Remove="UIResource.resx" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="RyzStudio" Version="8.1.2.249" /> <Reference Include="RyzStudio3">
<PackageReference Include="RyzStudio.Windows.Forms" Version="8.1.3.614" /> <HintPath>References\RyzStudio3.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -50,9 +45,6 @@
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>AppResource.resx</DependentUpon> <DependentUpon>AppResource.resx</DependentUpon>
</Compile> </Compile>
<Compile Update="MemoBoxForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

Binary file not shown.

BIN
References/RyzStudio3.dll Normal file

Binary file not shown.

BIN
Resources/UI/arrow_down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

BIN
Resources/UI/arrow_up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

BIN
Resources/UI/arrow_up2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

BIN
Resources/UI/cog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

BIN
Resources/UI/cog2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

BIN
Resources/UI/edit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

BIN
Resources/UI/edit2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

BIN
Resources/UI/file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

BIN
Resources/UI/file2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

BIN
Resources/UI/folder.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

BIN
Resources/UI/folder2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

BIN
Resources/UI/plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

BIN
Resources/UI/plus2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

BIN
Resources/UI/refresh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

BIN
Resources/UI/refresh2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

BIN
Resources/UI/trash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

BIN
Resources/UI/trash2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

BIN
Resources/loading-block.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,444 @@
using System;
using System.ComponentModel;
using System.Data;
using System.IO;
namespace RyzStudio.Data.SQLite
{
public class SQLiteDatabase
{
#region static methods
public static string escapeSQL(string query)
{
return query.Replace("'", "''").Trim();
}
public static string escapeValue(string text)
{
return text.Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\r", " \\r").Replace("\n", "\\n");
}
public static string PrepareQuery(string query, params string[] arguments)
{
string rv = query;
if (string.IsNullOrEmpty(rv))
{
return string.Empty;
}
for (int i = 0; i < arguments.Length; i++)
{
rv = rv.Replace("[^" + (i + 1).ToString() + "]", escapeSQL(arguments[i]));
}
return rv;
}
#endregion
protected SQLiteWrapper.SQLiteBase database = null;
protected string databaseLocation = ":memory:";
protected string lastError = "";
protected string[] requiredTableList = new string[0];
protected const string tableNameConfig = "ryz_app_xxxx_config";
#region public properties
[Browsable(false)]
public SQLiteWrapper.SQLiteBase Database
{
get { return database; }
set { database = value; }
}
[Browsable(false)]
public string DatabaseLocation
{
get { return databaseLocation; }
set { databaseLocation = value; }
}
[Browsable(false)]
public string LastError
{
get { return lastError; }
}
[Browsable(false)]
public int LastInsertID
{
get
{
if (database == null)
{
return 0;
}
DataTable dt = this.DoQuery("SELECT last_insert_rowid() AS ccc;");
if (dt == null)
{
return 0;
}
if (dt.Rows.Count <= 0)
{
return 0;
}
return int.Parse(dt.Rows[0]["ccc"].ToString());
}
}
#endregion
#region public methods
public bool Create(bool use_memory = true)
{
lastError = string.Empty;
if (string.IsNullOrEmpty(databaseLocation))
{
return false;
}
try
{
if (database != null)
{
database.CloseDatabase();
}
database = new SQLiteWrapper.SQLiteBase(((use_memory) ? ":memory:" : databaseLocation));
}
catch (Exception exc)
{
lastError = exc.Message;
return false;
}
bool rv = Prepare();
if (!rv)
{
return false;
}
return CheckRequiredTables();
}
public bool Create(string filename, bool override_file = false)
{
lastError = string.Empty;
databaseLocation = filename;
if (string.IsNullOrEmpty(databaseLocation))
{
return false;
}
if (File.Exists(databaseLocation) && override_file)
{
try
{
File.Delete(databaseLocation);
}
catch (Exception xc)
{
lastError = xc.Message;
return false;
}
}
try
{
if (database != null)
{
database.CloseDatabase();
}
database = new SQLiteWrapper.SQLiteBase(databaseLocation);
}
catch (Exception exc)
{
lastError = exc.Message;
return false;
}
bool rv = CheckRequiredTables();
if (!rv)
{
Prepare();
}
return CheckRequiredTables();
}
public bool Load(string filename)
{
if (!File.Exists(filename))
{
return false;
}
lastError = string.Empty;
databaseLocation = filename;
try
{
if (database != null)
{
database.CloseDatabase();
}
database = new SQLiteWrapper.SQLiteBase(databaseLocation);
}
catch (Exception exc)
{
lastError = exc.Message;
return false;
}
return CheckRequiredTables();
}
public void Close()
{
if (database != null)
{
database.CloseDatabase();
}
}
public DataTable DoQuery(string query)
{
lastError = string.Empty;
if (database == null)
{
return null;
}
try
{
return database.ExecuteQuery(query);
}
catch (Exception exc)
{
lastError = exc.Message;
return null;
}
}
public DataTable DoQuery(string query, params string[] args)
{
string sql = SQLiteDatabase.PrepareQuery(query, args);
return DoQuery(sql);
}
public bool DoNonQuery(string query)
{
lastError = string.Empty;
if (database == null)
{
return false;
}
try
{
database.ExecuteNonQuery(query);
return true;
}
catch (Exception exc)
{
lastError = exc.Message;
return false;
}
}
public bool DoNonQuery(string query, params string[] args)
{
string sql = SQLiteDatabase.PrepareQuery(query, args);
return DoNonQuery(sql);
}
public string DoQuerySingle(string query)
{
lastError = string.Empty;
if (database == null)
{
return string.Empty;
}
DataTable tbl = DoQuery(query);
if (tbl == null)
{
return string.Empty;
}
if (tbl.Columns.Count <= 0)
{
return string.Empty;
}
if (tbl.Rows.Count <= 0)
{
return string.Empty;
}
return tbl.Rows[0][0].ToString();
}
public string DoQuerySingle(string query, params string[] args)
{
string sql = SQLiteDatabase.PrepareQuery(query, args);
return DoQuerySingle(sql);
}
public int DoQueryCount(string query)
{
if (database == null)
{
return -1;
}
DataTable tbl = DoQuery(query);
if (tbl == null)
{
return -1;
}
if (tbl.Rows.Count <= 0)
{
return 0;
}
return tbl.Rows.Count;
}
public int DoQueryCount(string query, params string[] args)
{
string sql = SQLiteDatabase.PrepareQuery(query, args);
return DoQueryCount(sql);
}
public bool DoQueryExist(string query)
{
int rv = DoQueryCount(query);
return (rv > 0);
}
public bool DoQueryExist(string query, params string[] args)
{
string sql = SQLiteDatabase.PrepareQuery(query, args);
return DoQueryExist(sql);
}
public bool HasTable(string table_name)
{
lastError = string.Empty;
if (database == null)
{
return false;
}
int rv = this.DoQueryCount("SELECT 1 FROM sqlite_master WHERE type='table' AND name='" + escapeSQL(table_name) + "'");
return (rv > 0);
}
public bool CheckRequiredTables()
{
bool rv = true;
foreach (string tbl in requiredTableList)
{
if (string.IsNullOrEmpty(tbl))
{
continue;
}
if (!this.HasTable(tbl))
{
rv = false;
break;
}
}
return rv;
}
protected bool PrepareConfig()
{
if (HasTable(tableNameConfig))
{
return true;
}
bool rv = this.DoNonQuery(@"
BEGIN TRANSACTION;
CREATE TABLE " + tableNameConfig + @" (cfg_name TEXT, cfg_value TEXT);
COMMIT;
");
return rv;
}
public bool SetConfig(string name, string value)
{
if (!PrepareConfig())
{
return false;
}
string sql = string.Empty;
int rv = this.DoQueryCount("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
if (rv <= 0)
{
sql = "INSERT INTO " + tableNameConfig + " (cfg_name, cfg_value) VALUES ('[^1]', '[^2]');";
}
else
{
sql = "UPDATE " + tableNameConfig + " SET cfg_value='[^2]' WHERE cfg_name='[^1]';";
}
sql = PrepareQuery(sql, new string[] { name, value });
return this.DoNonQuery(sql);
}
public string GetConfig(string name, string default_value = "")
{
if (!PrepareConfig())
{
return default_value;
}
bool rv = this.DoQueryExist("SELECT 1 FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
if (!rv)
{
return default_value;
}
return this.DoQuerySingle("SELECT cfg_value FROM " + tableNameConfig + " WHERE cfg_name='" + escapeSQL(name) + "'");
}
#endregion
protected virtual bool Prepare()
{
return true;
}
}
}

View File

@ -0,0 +1,124 @@
using System.Drawing;
using System.Drawing.Drawing2D;
namespace RyzStudio.Drawing
{
public struct Rectangoid
{
private int X;
private int Y;
private int Width;
private int Height;
private int Radius;
public Rectangoid(Rectangle rect, int radius)
{
X = rect.X;
Y = rect.Y;
Width = rect.Width;
Height = rect.Height;
Radius = radius;
}
public Rectangoid(Rectangle rect, int radius, int borderWidth)
{
rect.Inflate((-1 * borderWidth), (-1 * borderWidth));
X = rect.X;
Y = rect.Y;
Width = rect.Width;
Height = rect.Height;
Radius = radius;
}
public Rectangoid(int x, int y, int width, int height, int radius)
{
X = x;
Y = y;
Width = width;
Height = height;
Radius = radius;
}
public Rectangoid(int x, int y, int width, int height)
{
X = x;
Y = y;
Width = width;
Height = height;
Radius = 0;
}
public Rectangoid(int width, int height, int radius)
{
X = 0;
Y = 0;
Width = width;
Height = height;
Radius = radius;
}
public Rectangoid(int width, int height)
{
X = 0;
Y = 0;
Width = width;
Height = height;
Radius = 0;
}
public Rectangoid(int width)
{
X = 0;
Y = 0;
Width = width;
Height = width;
Radius = 0;
}
public GraphicsPath ToGraphicsPath()
{
GraphicsPath rv = new GraphicsPath();
rv.AddLine(X + this.Radius, Y, X + Width - (this.Radius * 2), Y);
if (this.Radius > 0)
{
rv.AddArc(X + Width - (this.Radius * 2), Y, this.Radius * 2, this.Radius * 2, 270, 90);
}
rv.AddLine(X + Width, Y + this.Radius, X + Width, Y + Height - (this.Radius * 2));
if (this.Radius > 0)
{
rv.AddArc(X + Width - (this.Radius * 2), Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 0, 90);
}
rv.AddLine(X + Width - (this.Radius * 2), Y + Height, X + this.Radius, Y + Height);
if (this.Radius > 0)
{
rv.AddArc(X, Y + Height - (this.Radius * 2), this.Radius * 2, this.Radius * 2, 90, 90);
}
rv.AddLine(X, Y + Height - (this.Radius * 2), X, Y + this.Radius);
if (this.Radius > 0)
{
rv.AddArc(X, Y, this.Radius * 2, this.Radius * 2, 180, 90);
}
rv.CloseFigure();
return rv;
}
public PointF GetOrigin()
{
PointF rv = new PointF();
rv.X = ((float)Width / 2) + X;
rv.Y = ((float)Height / 2) + Y;
return rv;
}
}
}

View File

@ -0,0 +1,359 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace RyzStudio.IO
{
public class AccessibleDirectory
{
public static List<string> GetFiles(string path, string pattern, bool searchTopOnly)
{
List<string> fileList = new List<string>();
List<string> directoryList = new List<string>();
if (string.IsNullOrWhiteSpace(pattern)) pattern = "*";
directoryList.Add(path);
while (true)
{
if (directoryList.Count <= 0)
{
break;
}
string directory = directoryList.First();
directoryList.RemoveAt(0);
if (IsDirectoryAccessible(directory))
{
IEnumerable<string> searchDirList = new List<string>();
try
{
searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
}
catch (Exception)
{
continue;
}
if (!searchTopOnly)
{
foreach (string item in searchDirList)
{
if (!IsDirectoryAccessible(item))
{
continue;
}
directoryList.Add(item);
}
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
if (!MatchFileSearchPattern(pattern, Path.GetFileName(item)))
{
continue;
}
if (!IsFileAccessible(item))
{
continue;
}
fileList.Add(item);
}
}
}
return fileList;
}
public static IEnumerable<string> EnumerateFiles(string path, string pattern, bool searchTopOnly)
{
List<string> directoryList = new List<string>();
if (string.IsNullOrWhiteSpace(pattern)) pattern = "*";
directoryList.Add(path);
while (true)
{
if (directoryList.Count <= 0)
{
yield break;
}
string directory = directoryList.First();
directoryList.RemoveAt(0);
if (IsDirectoryAccessible(directory))
{
IEnumerable<string> searchDirList = new List<string>();
try
{
searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
}
catch (Exception)
{
continue;
}
if (!searchTopOnly)
{
foreach (string item in searchDirList)
{
if (!IsDirectoryAccessible(item))
{
continue;
}
directoryList.Add(item);
}
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
if (!MatchFileSearchPattern(pattern, Path.GetFileName(item)))
{
continue;
}
if (!IsFileAccessible(item))
{
continue;
}
yield return item;
}
}
}
}
public static void GetFiles(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback)
{
List<string> directoryList = new List<string>();
ulong searchCount = 0;
if (string.IsNullOrWhiteSpace(pattern)) pattern = "*";
directoryList.Add(path);
searchCount++;
while (true)
{
if (directoryList.Count <= 0)
{
break;
}
string directory = directoryList.First();
directoryList.RemoveAt(0);
callback(null, searchCount, directoryList.Count);
if (IsDirectoryAccessible(directory))
{
IEnumerable<string> searchDirList = new List<string>();
try
{
searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
}
catch (Exception)
{
continue;
}
if (!searchTopOnly)
{
foreach (string item in searchDirList)
{
if (!IsDirectoryAccessible(item))
{
continue;
}
directoryList.Add(item);
searchCount++;
callback(null, searchCount, directoryList.Count);
}
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
if (!MatchFileSearchPattern(pattern, Path.GetFileName(item)))
{
continue;
}
if (!IsFileAccessible(item))
{
continue;
}
callback(item, searchCount, directoryList.Count);
}
}
}
}
public static bool IsAccessible(string path)
{
if (string.IsNullOrWhiteSpace(path)) return false;
if (File.Exists(path)) return IsFileAccessible(path);
if (Directory.Exists(path)) return IsDirectoryAccessible(path);
return false;
}
public static bool IsFileAccessible(string filename)
{
if (string.IsNullOrWhiteSpace(filename)) return false;
if (!File.Exists(filename)) return false;
try
{
FileInfo fi = new FileInfo(filename);
fi.GetAccessControl();
}
catch
{
return false;
}
return true;
}
public static bool IsDirectoryAccessible(string path)
{
if (string.IsNullOrWhiteSpace(path)) return false;
if (!Directory.Exists(path)) return false;
try
{
DirectoryInfo di = new DirectoryInfo(path);
di.GetAccessControl();
}
catch
{
return false;
}
return true;
}
public static bool MatchFileSearchPattern(string pattern, string subject)
{
if (string.IsNullOrWhiteSpace(pattern))
{
return false;
}
Func<string, string, bool> matchPattern = (pattern, subject) =>
{
string[] parts = pattern.Split('*');
if (parts.Length <= 1)
{
return subject.Equals(pattern, StringComparison.CurrentCultureIgnoreCase);
}
int pos = 0;
for (int i = 0; i < parts.Length; i++)
{
if (i <= 0)
{
// first
pos = subject.IndexOf(parts[i], pos, StringComparison.CurrentCultureIgnoreCase);
if (pos != 0)
{
return false;
}
}
else if (i >= (parts.Length - 1))
{
// last
if (!subject.EndsWith(parts[i], StringComparison.CurrentCultureIgnoreCase))
{
return false;
}
}
else
{
pos = subject.IndexOf(parts[i], pos, StringComparison.CurrentCultureIgnoreCase);
if (pos < 0)
{
return false;
}
pos += parts[i].Length;
}
}
return true;
};
Func<string, string, bool> matchAllPattern = (pattern, subject) =>
{
int wildcardCount = pattern.Count(x => x.Equals('*'));
if (wildcardCount <= 0)
{
return subject.Equals(pattern, StringComparison.CurrentCultureIgnoreCase);
}
else if (wildcardCount == 1)
{
string newWildcardPattern = pattern.Replace("*", "");
if (pattern.StartsWith("*"))
{
return subject.EndsWith(newWildcardPattern, StringComparison.CurrentCultureIgnoreCase);
}
else if (pattern.EndsWith("*"))
{
return subject.StartsWith(newWildcardPattern, StringComparison.CurrentCultureIgnoreCase);
}
else
{
return matchPattern(pattern, subject);
}
}
else
{
return matchPattern(pattern, subject);
}
};
if (pattern.Contains(';'))
{
string[] parts = pattern.Split(';');
for (int i=0; i<parts.Length; i++)
{
if (string.IsNullOrWhiteSpace(parts[i]))
{
continue;
}
if (matchAllPattern(parts[i].Trim(), subject))
{
return true;
}
}
return false;
}
else
{
return matchAllPattern(pattern, subject);
}
}
}
}

56
RyzStudio/IO/FileType.cs Normal file
View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RyzStudio.IO
{
public class FileType
{
protected static readonly byte[] BMP = { 66, 77 };
protected static readonly byte[] GIF = { 71, 73, 70, 56 };
protected static readonly byte[] ICO = { 0, 0, 1, 0 };
protected static readonly byte[] JPG = { 255, 216, 255 };
protected static readonly byte[] PNG = { 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82 };
public static bool IsImage(byte[] byteArray)
{
if (byteArray == null)
{
return false;
}
if (byteArray.Length <= 0)
{
return false;
}
if (byteArray.Take(2).SequenceEqual(BMP))
{
return true;
}
if (byteArray.Take(4).SequenceEqual(GIF))
{
return true;
}
if (byteArray.Take(4).SequenceEqual(ICO))
{
return true;
}
if (byteArray.Take(3).SequenceEqual(JPG))
{
return true;
}
if (byteArray.Take(16).SequenceEqual(PNG))
{
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,290 @@
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Windows.Forms;
using ICSharpCode.SharpZipLib.Zip;
namespace RyzStudio.IO
{
public abstract class SessionFileFormatBase
{
protected string CONST_KEYPASS = "";
protected string CONST_PRODUCT = "";
protected string CONST_STREAM_FILE_NAME = "";
protected bool enableErrorReporting = false;
protected string lastUsedFileName = "";
#region public properties
public string passkey
{
get { return CONST_KEYPASS; }
set { CONST_KEYPASS = value; }
}
/*public string LastFilename
{
get { return lastUsedFileName; }
set { lastUsedFileName = value; }
}*/
#endregion
#region public methods
/* public bool loadFromRyz()
{
return loadFromRyz(lastUsedFileName);
}*/
public bool loadFromRyz(string file_name)
{
lastUsedFileName = file_name;
if (!File.Exists(file_name))
{
return false;
}
bool rv = false;
try
{
ZipInputStream zipIn = new ZipInputStream(File.OpenRead(file_name));
zipIn.Password = CONST_KEYPASS;
ZipEntry theEntry = null;
while ((theEntry = zipIn.GetNextEntry()) != null)
{
string streamFileName = Path.GetFileName(theEntry.Name);
if (streamFileName.Equals(CONST_STREAM_FILE_NAME))
{
MemoryStream oxStream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(oxStream);
int size = 2048;
byte[] data = new byte[size];
while (true)
{
size = zipIn.Read(data, 0, data.Length);
if (size <= 0) break;
streamWriter.BaseStream.Write(data, 0, size);
}
oxStream.Position = 0;
StreamReader sr2 = new StreamReader(oxStream, Encoding.UTF8);
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(sr2.ReadToEnd());
loadFromXmlDocument(ref xDoc);
}
}
zipIn.Close();
rv = true;
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
return rv;
}
public bool loadFromXml()
{
return loadFromXml(lastUsedFileName);
}
public bool loadFromXml(string file_name)
{
lastUsedFileName = file_name;
if (!File.Exists(file_name))
{
return false;
}
bool rv = false;
try
{
StreamReader sr2 = new StreamReader(file_name, Encoding.UTF8);
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(sr2.ReadToEnd());
loadFromXmlDocument(ref xDoc);
sr2.Close();
rv = true;
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
return rv;
}
/* public bool saveToRyz()
{
return saveToRyz(lastUsedFileName);
}
*/
public bool saveToRyz(string file_name)
{
bool rv = false;
lastUsedFileName = file_name;
byte[] buffer = new byte[4096];
try
{
File.Delete(file_name);
FileInfo fileinfo1 = new FileInfo(file_name);
if (!Directory.Exists(fileinfo1.DirectoryName))
{
Directory.CreateDirectory(fileinfo1.DirectoryName);
}
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
try
{
ZipOutputStream zipOutStream1 = new ZipOutputStream(File.Create(file_name));
zipOutStream1.SetLevel(9);
zipOutStream1.Password = CONST_KEYPASS;
MemoryStream oxIndexStream = new MemoryStream();
XmlTextWriter oxTW = new XmlTextWriter(oxIndexStream, Encoding.UTF8);
saveToXmlTextWriter(ref oxTW);
oxTW.Flush();
// write to file
zipOutStream1.PutNextEntry(new ZipEntry(CONST_STREAM_FILE_NAME));
oxIndexStream.Position = 0;
StreamReader sr2 = new StreamReader(oxIndexStream, Encoding.UTF8);
int sourceBytes;
do
{
sourceBytes = sr2.BaseStream.Read(buffer, 0, buffer.Length);
zipOutStream1.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
sr2.Close();
oxTW.Close();
zipOutStream1.Finish();
zipOutStream1.Close();
rv = true;
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
return rv;
}
public bool saveToXml()
{
return saveToXml(lastUsedFileName);
}
public bool saveToXml(string file_name)
{
bool rv = false;
lastUsedFileName = file_name;
try
{
File.Delete(file_name);
FileInfo fileinfo1 = new FileInfo(file_name);
if (!Directory.Exists(fileinfo1.DirectoryName))
{
Directory.CreateDirectory(fileinfo1.DirectoryName);
}
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
try
{
XmlTextWriter oxTW = new XmlTextWriter(file_name, Encoding.UTF8);
saveToXmlTextWriter(ref oxTW);
oxTW.Flush();
oxTW.Close();
rv = true;
}
catch (Exception exc)
{
if (enableErrorReporting)
{
MessageBox.Show(exc.Message);
}
}
return rv;
}
#endregion
protected virtual void loadFromXmlDocument(ref XmlDocument xml_doc) { }
protected virtual void saveToXmlTextWriter(ref XmlTextWriter writer) { }
#region public methods (conversions)
public int[] convIntArrayString(string s1, char c)
{
string[] sarr = s1.Split(c);
int[] iarr = new int[sarr.Length];
for (int i = 0; i < sarr.Length; i++)
{
iarr[i] = Int32.Parse(sarr[i]);
}
return iarr;
}
public string convStringIntArray(int[] r, char s)
{
string t = null;
for (int i = 0; i < r.Length; i++)
{
if (i != 0)
{
t += s.ToString();
}
t += r[i].ToString();
}
return t;
}
#endregion
}
}

241
RyzStudio/IO/SharpZipLib.cs Normal file
View File

@ -0,0 +1,241 @@
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
namespace RyzStudio.IO
{
public class SharpZipLib
{
public static bool IsZipEncrypted(string filename)
{
bool rv = false;
try
{
ZipInputStream readStream = new ZipInputStream(System.IO.File.OpenRead(filename));
ZipEntry theEntry = null;
while ((theEntry = readStream.GetNextEntry()) != null)
{
if (theEntry.IsCrypted)
{
rv = true;
}
break;
}
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch
{
// do nothing
}
return rv;
}
//public static void AddFile(ZipOutputStream zipStream, string filename, string prefixPath = null)
//{
// byte[] buffer = new byte[4096];
// string f1 = "";
// if (prefixPath != null)
// {
// f1 = Path.GetDirectoryName(filename).TrimEnd('\\') + "\\";
// f1 = f1.Replace(prefixPath, "").TrimEnd('\\') + "\\";
// f1 = f1 + Path.GetFileName(filename);
// f1 = f1.TrimStart('\\');
// }
// ZipEntry entry = new ZipEntry(f1);
// entry.DateTime = DateTime.Now;
// zipStream.PutNextEntry(entry);
// FileStream fs = File.OpenRead(filename);
// int sourceBytes;
// do
// {
// sourceBytes = fs.Read(buffer, 0, buffer.Length);
// zipStream.Write(buffer, 0, sourceBytes);
// }
// while (sourceBytes > 0);
//}
//public static void AddFolder(ZipOutputStream zipstream, string folderpath, string prefixpath = null)
//{
// foreach (string fn in Directory.GetFiles(folderpath, "*.*", System.IO.SearchOption.AllDirectories))
// {
// AddFile(zipstream, fn, prefixpath);
// }
//}
public static string ReadSingle(string filename, string password, string entryFilename)
{
string rv = null;
int size = 2048;
byte[] buffer = new byte[size];
int bufferSize = 0;
ZipEntry readEntry = null;
try
{
ZipInputStream readStream = new ZipInputStream(File.OpenRead(filename));
readStream.Password = password;
while (true)
{
readEntry = readStream.GetNextEntry();
if (readEntry == null)
{
break;
}
if (string.IsNullOrWhiteSpace(readEntry.Name))
{
continue;
}
if (!readEntry.IsFile)
{
continue;
}
if (!readEntry.Name.Equals(entryFilename))
{
continue;
}
MemoryStream ms = new MemoryStream();
buffer = new byte[size];
bufferSize = 0;
do
{
bufferSize = readStream.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, bufferSize);
}
while (bufferSize > 0);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
rv = sr.ReadToEnd();
break;
}
readStream.Flush();
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch (Exception)
{
return rv;
}
return rv;
}
public static bool TestArchive(string filename, string password = null)
{
if (string.IsNullOrWhiteSpace(filename))
{
return false;
}
if (!File.Exists(filename))
{
return false;
}
ZipEntry readEntry = null;
try
{
ZipInputStream readStream = new ZipInputStream(System.IO.File.OpenRead(filename));
readStream.Password = password;
while (true)
{
readEntry = readStream.GetNextEntry();
if (readEntry == null)
{
break;
}
//break;
}
readStream.Close();
readStream.Dispose();
readStream = null;
}
catch (Exception)
{
return false;
}
return true;
}
public static bool CreateSingle(string filename, string password, string entryFilename, string content)
{
int size = 2048;
byte[] buffer = new byte[size];
int bufferSize = 0;
try
{
ZipOutputStream zipStream = new ZipOutputStream(File.Create(filename));
zipStream.SetLevel(9);
zipStream.Password = password;
// stream
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content));
ms.Position = 0;
// write file entry
zipStream.PutNextEntry(new ZipEntry(entryFilename));
buffer = new byte[size];
bufferSize = 0;
do
{
bufferSize = ms.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, bufferSize);
}
while (bufferSize > 0);
ms.Flush();
ms.Close();
ms.Dispose();
ms = null;
zipStream.Finish();
zipStream.Flush();
zipStream.Close();
zipStream.Dispose();
zipStream = null;
}
catch (Exception)
{
return false;
}
return true;
}
}
}

View File

@ -0,0 +1,281 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace RyzStudio.IO
{
public class SmarterFileSystem
{
public static List<string> GetFiles(string path, string pattern, System.IO.SearchOption searchOption)
{
List<string> fileList = new List<string>();
List<string> directoryList = new List<string>();
directoryList.Add(path);
while (true)
{
if (directoryList.Count <= 0)
{
break;
}
string directory = directoryList.First();
directoryList.RemoveAt(0);
if (!IsDirectoryAccessible(directory))
{
continue;
}
IEnumerable<string> dirList = Enumerable.Empty<string>();
try
{
dirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
}
catch
{
continue;
}
foreach (string item in dirList)
{
//if (!IsDirectoryAccessible(item))
//{
// continue;
//}
directoryList.Add(item);
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
if (!IsFileAccessible(item))
{
continue;
}
fileList.Add(item);
}
}
return fileList;
}
//public static List<string> GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption)
//{
// List<string> rs = new List<string>();
// if (string.IsNullOrWhiteSpace(path)) return rs;
// if (!System.IO.Directory.Exists(path)) return rs;
// IEnumerable<string> fileList = Enumerable.Empty<string>();
// //if (!IsDirectoryAccessible(path))
// //{
// // return rs;
// //}
// try
// {
// fileList = Directory.EnumerateFiles(path, "*", SearchOption.TopDirectoryOnly);
// }
// catch
// {
// return rs;
// }
// foreach (string item in fileList)
// {
// if (!IsFileAccessible(item))
// {
// continue;
// }
// rs.Add(item);
// }
// if (searchOption == SearchOption.AllDirectories)
// {
// foreach (string item in Directory.EnumerateDirectories(path, "*", SearchOption.TopDirectoryOnly))
// {
// //if (!IsDirectoryAccessible(item))
// //{
// // continue;
// //}
// rs.AddRange(GetFiles(item, searchPattern, searchOption));
// }
// }
// return rs;
//}
//public static string CleanFilename(string value, string defaultValue = "")
//{
// if (string.IsNullOrWhiteSpace(value))
// {
// return defaultValue;
// }
// else
// {
// return string.Join("-", value.Replace(".", "-").Split(Path.GetInvalidFileNameChars()));
// }
//}
//public static List<string> GetFiles(string path, string pattern)
//{
// List<string> fileList = new List<string>();
// List<string> directoryList = new List<string>();
// directoryList.Add(path);
// while (true)
// {
// if (directoryList.Count <= 0)
// {
// break;
// }
// string directory = directoryList.First();
// directoryList.RemoveAt(0);
// if (!IsDirectoryAccessible(directory))
// {
// continue;
// }
// foreach (string item in Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly))
// {
// if (!IsDirectoryAccessible(item))
// {
// continue;
// }
// directoryList.Add(item);
// }
// foreach (string item in Directory.EnumerateFiles(directory, pattern, SearchOption.TopDirectoryOnly))
// {
// if (!IsFileAccessible(item))
// {
// continue;
// }
// fileList.Add(item);
// }
// }
// return fileList;
//}
public static bool IsFileAccessible(string filename)
{
if (string.IsNullOrWhiteSpace(filename)) return false;
if (!System.IO.File.Exists(filename)) return false;
try
{
System.IO.File.GetAttributes(filename);
}
catch
{
return false;
}
return true;
}
public static bool IsDirectoryAccessible(string path)
{
if (string.IsNullOrWhiteSpace(path)) return false;
if (!System.IO.Directory.Exists(path)) return false;
//try
//{
// System.IO.Directory.GetCreationTime(path);
//}
//catch
//{
// return false;
//}
return true;
}
//public static string ResolvePath(string value)
//{
// string rv = Environment.ExpandEnvironmentVariables(value);
// rv = resolveFirstPath(rv);
// rv = resolveLastPath(rv);
// return rv;
//}
//protected static string resolveFirstPath(string value)
//{
// const string last = "%FIRST%";
// if (!value.Contains(last))
// {
// return value;
// }
// string head = value.Substring(0, value.IndexOf(last));
// string tail = value.Substring(value.IndexOf(last) + last.Length);
// string[] dirList = new string[0];
// try
// {
// dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
// }
// catch
// {
// // do nothing
// }
// if (dirList.Length <= 0)
// {
// return value;
// }
// return dirList[0] + tail;
//}
//protected static string resolveLastPath(string value)
//{
// const string last = "%LAST%";
// if (!value.Contains(last))
// {
// return value;
// }
// string head = value.Substring(0, value.IndexOf(last));
// string tail = value.Substring(value.IndexOf(last) + last.Length);
// string[] dirList = new string[0];
// try
// {
// dirList = System.IO.Directory.GetDirectories(head, "*", System.IO.SearchOption.TopDirectoryOnly);
// }
// catch
// {
// // do nothing
// }
// if (dirList.Length <= 0)
// {
// return value;
// }
// return dirList[(dirList.Length - 1)] + tail;
//}
}
}

168
RyzStudio/Net/HttpWeb.cs Normal file
View File

@ -0,0 +1,168 @@
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms;
namespace RyzStudio.Net
{
public class HttpWeb
{
public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")";
public int defaultTimeout = 6000;
public int defaultMaxRedirect = 8;
public bool defaultAllowRedirect = true;
public CookieContainer defaultCookierContainer = null;
public HttpWeb()
{
}
public HttpWebRequest CreateRequest(string url)
{
return this.CreateRequest(url, url);
}
public HttpWebRequest CreateRequest(string url, string referrerURL)
{
if (defaultCookierContainer == null)
{
defaultCookierContainer = new CookieContainer();
}
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
webRequest.MaximumAutomaticRedirections = defaultMaxRedirect;
webRequest.CookieContainer = defaultCookierContainer;
webRequest.UserAgent = defaultUserAgent;
webRequest.AllowAutoRedirect = defaultAllowRedirect;
webRequest.Timeout = defaultTimeout;
return webRequest;
}
public int GetResponse(out string sourceCode, string url, string referrerURL = "")
{
HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
return GetResponse(out sourceCode, webRequest);
}
public int GetResponse(out string sourceCode, HttpWebRequest webRequest)
{
sourceCode = string.Empty;
int rv = 0;
try
{
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
rv = (int)webResponse.StatusCode;
StreamReader readContent = new StreamReader(webResponse.GetResponseStream());
sourceCode = readContent.ReadToEnd();
webResponse.Close();
webResponse = null;
}
catch (WebException xc)
{
if (xc.Response is HttpWebResponse)
{
HttpWebResponse rs = xc.Response as HttpWebResponse;
StreamReader readContent = new StreamReader(rs.GetResponseStream());
if (readContent != null)
{
sourceCode = readContent.ReadToEnd();
}
rv = (int)rs.StatusCode;
}
else
{
rv = (int)xc.Status;
sourceCode = xc.Message;
}
}
catch (Exception xc)
{
sourceCode = xc.Message;
}
return rv;
}
public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password)
{
webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password)));
webRequest.PreAuthenticate = true;
return webRequest;
}
public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData)
{
sourceCode = "";
int rv = 0;
byte[] buffer = Encoding.UTF8.GetBytes(postData);
webRequest.ContentLength = buffer.Length;
try
{
Stream dataStream = webRequest.GetRequestStream();
dataStream.Write(buffer, 0, buffer.Length);
dataStream.Close();
}
catch (Exception xc)
{
sourceCode = xc.Message;
return rv;
}
return this.GetResponse(out sourceCode, webRequest);
}
public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "")
{
headerCollection = null;
int rv = 0;
HttpWebRequest webRequest = this.CreateRequest(url, referrerURL);
webRequest.Method = "HEAD";
try
{
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
headerCollection = webResponse.Headers;
rv = (int)webResponse.StatusCode;
webResponse.Close();
webResponse = null;
}
catch (WebException xc)
{
if (xc.Response is HttpWebResponse)
{
HttpWebResponse rs = xc.Response as HttpWebResponse;
rv = (int)rs.StatusCode;
}
else
{
rv = (int)xc.Status;
}
}
catch
{
// do nothing
}
return rv;
}
}
}

View File

@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public class StackLayoutPanel : FlowLayoutPanel
{
public StackLayoutPanel() : base()
{
this.AutoScroll = true;
this.FlowDirection = FlowDirection.TopDown;
this.WrapContents = false;
}
protected override void OnResize(EventArgs eventargs)
{
base.OnResize(eventargs);
//int w = this.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth;
int w = this.ClientRectangle.Width - 1;
foreach (Control item in this.Controls)
{
if (item.Width != w)
{
item.Width = w;
}
}
}
protected override void OnControlAdded(ControlEventArgs e)
{
base.OnControlAdded(e);
OnResize(null);
}
protected override void OnControlRemoved(ControlEventArgs e)
{
base.OnControlRemoved(e);
OnResize(null);
}
public void AddControl(Control value)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() =>
{
value.Margin = new Padding(0, 3, 0, 3);
this.Controls.Add(value);
}));
}
else
{
value.Margin = new Padding(0, 3, 0, 3);
this.Controls.Add(value);
}
}
}
}

View File

@ -0,0 +1,63 @@
namespace RyzStudio.Windows.Forms
{
partial class TCustomProgressBar
{
/// <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.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label3
//
this.label3.BackColor = System.Drawing.Color.Transparent;
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("Segoe UI", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.Location = new System.Drawing.Point(4, 4);
this.label3.Margin = new System.Windows.Forms.Padding(0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(803, 47);
this.label3.TabIndex = 144;
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ProgressBarInner
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.label3);
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "ProgressBarInner";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(810, 54);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label label3;
}
}

View File

@ -0,0 +1,158 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public partial class TCustomProgressBar : TUserControl
{
protected int minimum = 0;
protected int maximum = 100;
protected int value = 50;
public TCustomProgressBar() : base()
{
InitializeComponent();
this.Padding = new Padding(0);
}
[Category("Data"), Browsable(true)]
public int Minimum
{
get => minimum;
set
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => {
SetMinimum(value);
}));
}
else
{
SetMinimum(value);
}
}
}
[Category("Data"), Browsable(true)]
public int Maximum
{
get => maximum;
set
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => {
SetMaximum(value);
}));
}
else
{
SetMaximum(value);
}
}
}
[Category("Data"), Browsable(true)]
public int Value
{
get => value;
set
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => {
SetValue(value);
}));
}
else
{
SetValue(value);
}
}
}
[Category("Appearance"), Browsable(true)]
public Color BarColour { get; set; } = Color.FromArgb(158, 225, 249);
[Category("Appearance"), Browsable(true)]
public Color BarTextColour { get => label3.ForeColor; set => label3.ForeColor = value; }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle canvas = this.DisplayRectangle;
Graphics g = e.Graphics;
if (this.Value > 0)
{
decimal result = decimal.Divide(canvas.Width, this.Maximum) * this.Value;
canvas.Width = (int)Math.Round(result);
g.FillRectangle(new SolidBrush(this.BarColour), canvas);
}
}
public void Reset(int value)
{
this.Minimum = 0;
this.Value = 0;
this.Maximum = value;
}
protected void UpdateText() => RyzStudio.Windows.Forms.ThreadControl.SetText(label3, string.Format("{0}/{1}", this.Value.ToString(), this.Maximum.ToString()));
protected void SetMinimum(int value)
{
int m = value;
if (m < 0) m = 0;
if (m > this.Maximum) m = this.Maximum;
if (this.Value < m) this.Value = m;
if (this.value > this.Maximum) this.value = this.Maximum;
minimum = m;
UpdateText();
this.Invalidate();
}
protected void SetMaximum(int value)
{
int m = value;
if (m < 0) m = 0;
if (m < this.Minimum) m = this.Minimum;
if (this.Value > m) this.Value = m;
if (this.value < this.Minimum) this.value = this.Minimum;
maximum = m;
UpdateText();
this.Invalidate();
}
protected void SetValue(int value)
{
int m = value;
if (m < this.Minimum) m = this.Minimum;
if (m > this.Maximum) m = this.Maximum;
this.value = m;
UpdateText();
this.Invalidate();
}
}
}

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
@ -117,13 +117,4 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>831, 17</value>
</metadata>
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>986, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1155, 17</value>
</metadata>
</root> </root>

View File

@ -0,0 +1,115 @@
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public class TFlatButton : Label
{
public class ButtonStyle
{
public Color BackColour { get; set; } = Color.Transparent;
public Color PenColour { get; set; } = Color.Transparent;
}
public enum FlatButtonState
{
Idle = 0,
Hover,
Down
}
protected FlatButtonState controlState = FlatButtonState.Idle;
public TFlatButton() : base()
{
this.AutoSize = false;
this.ImageAlign = ContentAlignment.MiddleCenter;
this.TextAlign = ContentAlignment.MiddleCenter;
// customise
this.StyleOver = new ButtonStyle()
{
BackColour = Color.FromArgb(51, 51, 51),
PenColour = Color.White
};
this.StyleDown = new ButtonStyle()
{
BackColour = Color.FromArgb(179, 179, 179),
PenColour = Color.Black
};
this.StyleDefault = new ButtonStyle()
{
BackColour = Color.White,
PenColour = Color.Black
};
this.VisualState = FlatButtonState.Idle;
this.Click += delegate { this.OnClick(null); };
this.MouseEnter += delegate { this.VisualState = FlatButtonState.Hover; };
this.MouseLeave += delegate { this.VisualState = FlatButtonState.Idle; };
this.MouseDown += delegate { this.VisualState = FlatButtonState.Down; };
this.MouseUp += delegate { this.VisualState = FlatButtonState.Idle; };
}
protected FlatButtonState VisualState
{
get { return controlState; }
set
{
switch (value)
{
case FlatButtonState.Idle:
if (this.VisualState == FlatButtonState.Down)
{
updateButton(StyleOver);
}
else
{
updateButton(StyleDefault);
}
break;
case FlatButtonState.Hover:
updateButton(StyleOver);
break;
case FlatButtonState.Down:
updateButton(StyleDown);
break;
default:
updateButton(StyleDefault);
break;
}
controlState = value;
}
}
protected void updateButton(ButtonStyle style)
{
this.ForeColor = style.PenColour;
this.BackColor = style.BackColour;
}
protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
public void PerformClick()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => {
this.OnClick(null);
}));
}
else
{
this.OnClick(null);
}
}
}
}

View File

@ -0,0 +1,434 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
//using Resources = AppLauncher.Properties.Resources;
namespace RyzStudio.Windows.Forms
{
public class TForm : Form
{
//protected readonly Color borderColour = Color.FromArgb(200, 200, 200);
//protected readonly int borderWidth = 1;
//protected readonly int resizeBorderWidth = 4;
protected readonly Color backColour = Color.FromArgb(250, 250, 250);
//protected readonly Color titleBackColour = Color.FromArgb(235, 234, 233);
//protected readonly Color titleBorderColour = Color.FromArgb(200, 198, 196);
//protected readonly Color titleColour = Color.FromArgb(102, 102, 102);
//protected readonly int titleBarHeight = 33;
//protected readonly bool showTitleBarLine = true;
//protected Font titleFont = null;
//protected int titleFontTop = 0;
//protected readonly Size titleBarIconSize = new Size(48, 32);
//protected readonly int titleBarIconMargin = 0;
//protected readonly int titleBarIconMarginRight = 0;
//protected Image appIcon = null;
//protected const int appIconLeft = 12;
//protected const int appIconRight = 6;
//protected int appIconTop = 0;
protected bool isDragging = false;
protected Point startPosition = new Point();
//protected Point startWindowSize = new Point();
//protected bool enableMinimise { get; set; } = true;
//protected bool enableMaximise { get; set; } = true;
//protected bool enableClose { get; set; } = true;
//protected bool closeOnMinimise { get; set; } = false;
protected bool isBusy = false;
private IContainer components;
public TForm() : base()
{
InitializeComponent();
//if (!this.DesignMode)
//{
// this.FormBorderStyle = FormBorderStyle.None;
// this.StartPosition = FormStartPosition.Manual;
//}
this.AutoScaleMode = AutoScaleMode.Font;
this.BackColor = backColour;
this.FormBorderStyle = FormBorderStyle.Sizable;
this.Padding = new Padding(0);
this.DoubleBuffered = true;
this.MouseDown += new MouseEventHandler(form_MouseDown);
this.MouseMove += new MouseEventHandler(form_MouseMove);
this.MouseUp += new MouseEventHandler(form_MouseUp);
this.PreviewKeyDown += new PreviewKeyDownEventHandler(form_PreviewKeyDown);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Text = Application.ProductName;
//initialiseLoadComponent();
//if (appIcon != null) appIconTop = (int)Math.Floor((decimal)(titleBarHeight - appIcon.Height) / 2) + borderWidth;
//titleFont = new Font(this.Font.FontFamily, 10F);
//titleFontTop = (int)Math.Floor((decimal)(titleBarHeight - TextRenderer.MeasureText("#", titleFont).Height) / 2) + borderWidth;
}
//protected override void OnMouseClick(MouseEventArgs e)
//{
// base.OnMouseClick(e);
// bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= titleBarHeight));
// if (e.Button == MouseButtons.Left)
// {
// if (isLabel)
// {
// // do nothing
// }
// else
// {
// // do nothing
// }
// }
// else if (e.Button == MouseButtons.Right)
// {
// if (isLabel)
// {
// if (this.TitleContextMenuStrip != null)
// {
// this.TitleContextMenuStrip.Show(this, e.Location);
// }
// }
// else
// {
// // do nothing
// }
// }
//}
//protected override void OnPaint(PaintEventArgs e)
//{
// base.OnPaint(e);
// Graphics g = e.Graphics;
// Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth));
// // border
// g.DrawRectangle(new Pen(borderColour, borderWidth), area);
// area.Inflate((-1 * borderWidth), (-1 * borderWidth));
//g.FillRectangle(new SolidBrush(titleBackColour), area.X, area.Y, (area.Width + area.X), titleBarHeight);
//if (showTitleBarLine) g.DrawLine(new Pen(titleBorderColour, 1), area.X, titleBarHeight, (area.Width + area.X), titleBarHeight);
//if (!DesignMode)
//{
// if (appIcon != null) g.DrawImageUnscaled(appIcon, appIconLeft, appIconTop);
// int iconPosX = borderWidth + appIconLeft + appIconRight + ((appIcon == null) ? 0 : appIcon.Width);
// TextRenderer.DrawText(g, this.Text, titleFont, new Point(iconPosX, titleFontTop), titleColour);
//}
//}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.Invalidate();
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Color BackColor { get => base.BackColor; set => base.BackColor = backColour; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
[Category("Appearance")]
public ContextMenuStrip TitleContextMenuStrip { get; set; } = null;
//[Browsable(false)]
//public Image AppIcon { get; set; } = null;
//[Browsable(false)]
//public bool IsMaximiseEnabled { get; set; } = false;
//protected Point DefaultLocation
//{
// get
// {
// Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y);
// newPosition.X -= (this.Width / 2);
// newPosition.Y -= (this.Height / 2);
// newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left);
// newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top);
// return newPosition;
// }
//}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TForm));
this.SuspendLayout();
//
// AForm
//
this.Name = "AForm";
this.ResumeLayout(false);
}
private void form_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isDragging = true;
startPosition = e.Location;
//startWindowSize = new Point(this.Width, this.Height);
}
}
private void form_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
int x = (this.Location.X + (e.Location.X - startPosition.X));
int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
//this.Location = validateFormLocation(x, y);
this.Location = new Point(x, y);
}
}
private void form_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
}
private void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
Application.Exit();
}
}
//protected virtual void initialiseLoadComponent()
//{
// if (DesignMode) return;
// // close
// TImageBox closeBox = generateToolbarImageBox();
// closeBox.Image = closeBox.ImageNormal = (enableClose) ? Resources.titlebar_close : Resources.titlebar_blank;
// closeBox.ImageHover = (enableClose) ? Resources.titlebar_close3 : Resources.titlebar_blank;
// closeBox.ImageSelected = Resources.titlebar_close3;
// closeBox.MouseClick += delegate (object sender, MouseEventArgs e)
// {
// if (e.Button == MouseButtons.Left)
// {
// if (enableClose)
// {
// this.Close();
// }
// }
// };
// closeBox.Left = this.DisplayRectangle.Width - closeBox.Width - (titleBarIconMarginRight + borderWidth);
// this.Controls.Add(closeBox);
// // maximise
// TImageBox maximiseBox = generateToolbarImageBox();
// maximiseBox.Image = maximiseBox.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
// maximiseBox.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
// maximiseBox.ImageSelected = Resources.titlebar_maximise3;
// maximiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
// {
// if (!(sender is TImageBox)) return;
// TImageBox imageBox2 = (sender as TImageBox);
// if (imageBox2 == null) return;
// if (e.Button == MouseButtons.Left)
// {
// if (enableMaximise)
// {
// if (this.WindowState == FormWindowState.Maximized)
// {
// this.WindowState = FormWindowState.Normal;
// imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise;
// }
// else
// {
// this.WindowState = FormWindowState.Maximized;
// imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise5;
// }
// }
// }
// else if (e.Button == MouseButtons.Right)
// {
// this.TopMost = !this.TopMost;
// if (this.TopMost)
// {
// imageBox2.Image = imageBox2.ImageNormal = Resources.titlebar_maximise3;
// imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_maximise3;
// }
// else
// {
// imageBox2.Image = imageBox2.ImageNormal = (enableMaximise) ? Resources.titlebar_maximise : Resources.titlebar_blank;
// imageBox2.ImageHover = (enableMaximise) ? Resources.titlebar_maximise5 : Resources.titlebar_blank;
// }
// }
// };
// maximiseBox.Left = closeBox.Left - maximiseBox.Width - titleBarIconMargin;
// this.Controls.Add(maximiseBox);
// // minimise
// TImageBox minimiseBox = generateToolbarImageBox();
// minimiseBox.Image = minimiseBox.ImageNormal = (enableMinimise) ? Resources.titlebar_minimise : Resources.titlebar_blank;
// minimiseBox.ImageHover = (enableMinimise) ? Resources.titlebar_minimise5 : Resources.titlebar_blank;
// //minimiseBox.ImageSelected = null;
// minimiseBox.MouseClick += delegate (object sender, MouseEventArgs e)
// {
// if (!enableMinimise) return;
// if (e.Button != MouseButtons.Left) return;
// if (closeOnMinimise)
// {
// this.Close();
// }
// else
// {
// this.WindowState = FormWindowState.Minimized;
// }
// };
// minimiseBox.Left = maximiseBox.Left - minimiseBox.Width - titleBarIconMargin;
// this.Controls.Add(minimiseBox);
// // resize
// UserControl uc1 = new UserControl()
// {
// Anchor = (AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right),
// Height = resizeBorderWidth,
// Width = this.DisplayRectangle.Width - resizeBorderWidth,
// Left = 0,
// Top = this.DisplayRectangle.Height - resizeBorderWidth,
// BackColor = Color.Transparent,
// Cursor = Cursors.SizeNS
// };
// uc1.MouseDown += form_MouseDown;
// uc1.MouseUp += form_MouseUp;
// uc1.MouseMove += delegate (object sender, MouseEventArgs e)
// {
// if (isDragging)
// {
// this.Size = new Size(startWindowSize.X, e.Y - startPosition.Y + this.Height);
// }
// };
// uc1.BringToFront();
// this.Controls.Add(uc1);
// UserControl uc2 = new UserControl()
// {
// Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom),
// Height = this.DisplayRectangle.Height - resizeBorderWidth,
// Width = resizeBorderWidth,
// Left = this.DisplayRectangle.Width - resizeBorderWidth,
// Top = 0,
// BackColor = Color.Transparent,
// Cursor = Cursors.SizeWE
// };
// uc2.MouseDown += form_MouseDown;
// uc2.MouseUp += form_MouseUp;
// uc2.MouseMove += delegate (object sender, MouseEventArgs e)
// {
// if (isDragging)
// {
// this.Size = new Size(e.X - startPosition.X + this.Width, startWindowSize.Y);
// }
// };
// uc2.BringToFront();
// this.Controls.Add(uc2);
// UserControl uc3 = new UserControl()
// {
// Anchor = (AnchorStyles.Bottom | AnchorStyles.Right),
// Height = resizeBorderWidth,
// Width = resizeBorderWidth,
// Left = this.DisplayRectangle.Width - resizeBorderWidth,
// Top = this.DisplayRectangle.Height - resizeBorderWidth,
// BackColor = Color.Transparent,
// Cursor = Cursors.SizeNWSE
// };
// uc3.MouseDown += form_MouseDown;
// uc3.MouseUp += form_MouseUp;
// uc3.MouseMove += delegate (object sender, MouseEventArgs e)
// {
// if (isDragging)
// {
// this.Size = new Size((e.X - startPosition.X + this.Width), (e.Y - startPosition.Y + this.Height));
// }
// };
// uc3.BringToFront();
// this.Controls.Add(uc3);
//}
//protected TImageBox generateToolbarImageBox()
//{
// TImageBox imageBox = new TImageBox();
// //imageBox.BackColor = Color.Transparent;
// imageBox.BackColorHover = imageBox.BackColorSelected = Color.FromArgb(220, 220, 220);
// imageBox.BackgroundImageLayout = ImageLayout.Center;
// imageBox.ErrorImage = null;
// //imageBox.Image = Resources.close;
// //imageBox.ImageHover = Resources.close2;
// //imageBox.ImageNormal = Resources.close;
// imageBox.ImageSelected = null;
// imageBox.IsSelected = false;
// //closeBox.Location = new System.Drawing.Point(169, 12);
// imageBox.Size = titleBarIconSize;
// imageBox.SizeMode = PictureBoxSizeMode.CenterImage;
// //imageBox.MouseClick += new MouseEventHandler(closeBox_MouseClick);
// //imageBox.Left = this.DisplayRectangle.Width - imageBox.Width - 17;
// imageBox.Top = (int)Math.Floor((decimal) (titleBarHeight - titleBarIconSize.Height) / 2) + borderWidth;
// imageBox.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
// imageBox.Padding = new Padding(0);
// return imageBox;
//}
//private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close();
//private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
//{
// if (e.Button == MouseButtons.Left)
// {
// this.Visible = !this.Visible;
// }
// //notifyIcon1.Visible = !this.Visible;
//}
}
}

View File

@ -0,0 +1,424 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>130, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAMDAAAAEAIACoJQAARgAAACAgAAABACAAqBAAAO4lAAAYGAAAAQAgAIgJAACWNgAAEBAAAAEA
IABoBAAAHkAAACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxc
VU5rW1Tna1tU22paU5BsXVVCgEBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAaltTZWtbVPxrW1T/a1tU/2tbVP9rW1T/a1tU7mtbU6VrXFNWbVtbDgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABqWlR/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU+Wta
VLprW1Nrb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2tbVJhrW1T/a1tU/2tbVP+NgXz/2NPR/6+mov+Bc23/a1tU/2tb
VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVc1sXFSAa1xSMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtSUkHa1xUqmtbVP9rW1T/a1tU/5iNiP/6+fn/////////
////////6+no/7+4tf+Sh4L/bV5X/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVOFrXFOZallTTW1J
SQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlaWhFqW1TCa1tU/2tbVP9rW1T/o5mV//38
/P//////////////////////////////////////9PPy/8jDwP+cko3/c2Nd/2tbVP9rW1T/a1tU/2tb
VP9rW1T/a1tU/2tbVPVrW1SzalxUXmlaWhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalhYHWtbVNRrW1T/a1tU/2tb
VP+1rar/////////////////////////////////////////////////////////////////+vn5/9LN
y/+lm5f/eGpj/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVPtrWlS9bFxVb2xdVSEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrWVMra1tU42tb
VP9rW1T/bV1W/8S9u///////////////////////////////////////////////////////////////
/////////////////////////v7+/97a2f+xqKT/g3Zw/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tb
VP5qW1V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpZ
VTxrW1Tua1tU/2tbVP9wYVr/0czK////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////+ro5/+8tbL/j4N+/21d
Vv9rW1T/a1tU/2tbVP9rW1TpAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAbFxTUGtbVPZrW1T/a1tU/3VnYP/d2df/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////Tz8v/Iw8D/dmdh/2tbVP9rW1T/blpTJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABsXFRha1tU+2tbVP9rW1T/emxl/+Th4P//////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////m5CL/2tbVP9rW1T/a1tTXwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtaVHdrW1T/a1tU/2tbVP+DdnD/7uzs/////////////Pvw//z6
7v/8+u7//Pru//z67v/8+u7//Pru//z67v/9/PT///////////////////////z4+f/79fX/+/X1//v1
9f/79fX/+/X1//v19f/79fX//Pb2////////////////////////////vLWy/2tbVP9rW1T/a1xTmQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDa1tUmGtbVP9rW1T/a1tU/4t/ev/08/L/////////
///cyT7/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/6Nt+////////////4bG1/8Rl
bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/9KKkP//////////////////////3tvZ/2tb
VP9rW1T/a1tU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Sra1tU/2tbVP9rW1T/mY6J//r5
+f////////////389f/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28Y1////
////////0IWL/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/xGVs/8RlbP/9+fn/////////
/////////Pz8/3BhWv9rW1T/a1tU/nFVVRIAAAAAAAAAAAAAAAAAAAAAaVpaEWtcVMNrW1T/a1tU/2tb
VP+kmpb//fz8//////////////////389P/RtwD/0bcA/+TVbP/w56r/8Oeq//Dnqv/w56r/8Oeq/93K
Qv/RtwD/28Y1////////////0IWL/8RlbP/TjZL/68zO/+vMzv/rzM7/68zO/+vMzv/dpqr/xGVs/8Rl
bP/8+Pn//////////////////////46CfP9rW1T/a1tU/2xbVEkAAAAAAAAAAAAAAABsWFgaa1xU0Wtb
VP9rW1T/a1tU/7CopP////////////////////////////389P/RtwD/0bcA/+7lov//////////////
/////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////////////////////
///px8n/xGVs/8RlbP/8+Pn//////////////////////7CopP9rW1T/a1tU/2tbVIMAAAAAAAAAAAAA
AABqXFTOa1tU/2tbVP9tXlf/xr+9//////////////////////////////////389P/RtwD/0bcA/+7l
ov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8RlbP/boaX/////////
///////////////////px8n/xGVs/8RlbP/8+Pn//////////////////////9LNy/9rW1T/a1tU/2tb
VL8AAAAAAAAAAAAAAABrW1Tva1tU/2tbVP/KxML///////////////////////////////////////38
9P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////////////0IWL/8Rl
bP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn///////////////////////Py
8v9sXFX/a1tU/2tbVPRmZmYFAAAAAAAAAABrW1W4a1tU/2tbVP/Oycf/////////////////////////
//////////////389P/RtwD/0bcA/+7lov///////////////////////////+PTY//RtwD/28Y1////
////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8RlbP/8+Pn/////////
//////////////////+CdG7/a1tU/2tbVP9sXVM0AAAAAAAAAABqWlR/a1tU/2tbVP+tpKD/////////
//////////////////////////////389P/RtwD/0bcA/+7lov///////////////////////////+PT
Y//RtwD/28Y1////////////0IWL/8RlbP/boaX////////////////////////////px8n/xGVs/8Rl
bP/8+Pn///////////////////////////+jmZX/a1tU/2tbVP9rWlNuAAAAAAAAAABtWlNEa1tU/2tb
VP+Lfnn///////////////////////////////////////389P/RtwD/0bcA/93JQf/j1Gb/49Rm/+PU
Zv/j1Gb/49Rm/9jCJ//RtwD/28Y1////////////0IWL/8RlbP/NfYL/3KOn/9yjp//co6f/3KOn/9yj
p//TjJH/xGVs/8RlbP/8+Pn////////////////////////////Fv7z/a1tU/2tbVP9qW1OoAAAAAAAA
AABqVVUMa1tU+2tbVP9uXlf/+fn4//////////////////////////////////389P/RtwD/0bcA/9G3
AP/RtwD/0bcA/9G3AP/RtwD/0bcA/9G3AP/RtwD/28c5////////////0IWL/8RlbP/EZWz/xGVs/8Rl
bP/EZWz/xGVs/8RlbP/EZWz/xGVs/8Rmbf/9+vr////////////////////////////n5eT/a1tU/2tb
VP9rW1TkAAAAAAAAAAAAAAAAa1tUz2tbVP9rW1T/3NjW//////////////////////////////////38
9v/axTP/2sUz/9rFM//axTP/2sUz/9rFM//axTP/2sUz/9rFM//bxzj/8Ois////////////2p2i/9CE
if/QhIn/0ISJ/9CEif/QhIn/0ISJ/9CEif/QhIn/0ISJ/+GwtP//////////////////////////////
///+/v7/dWdg/2tbVP9rW1T/alhYHQAAAAAAAAAAa1tUlGtbVP9rW1T/ubKv////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////l4uG/2tbVP9rW1T/a1pUWAAAAAAAAAAAbFtVWmtbVP9rW1T/mI2I////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////uLGt/2tbVP9rW1T/a1tUkgAAAAAAAAAAa1pSH2tb
VP9rW1T/dmdh//7+/v////////////////////////////////+rnPH/fGTp/3xk6f98ZOn/fGTp/3xk
6f98ZOn/fGTp/3xk6f9/aOr/ysD2////////////rOH9/zi4+v8ztvr/M7b6/zO2+v8ztvr/M7b6/zO2
+v8ztvr/M7b6/33R/P//////////////////////////////////////2tbV/2tbVP9rW1T/a1tVzQAA
AAAAAAAAAAAAAGtbVONrW1T/a1tU/+jm5f////////////////////////////r5/v9cPuT/Wz3k/1s9
5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/gGjq////////////Obj6/wCk+f8ApPn/AKT5/wCk
+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wGk+f/3/P//////////////////////////////////+vn5/25f
WP9rW1T/a1tU/GpVVQwAAAAAAAAAAGtcVKprW1T/a1tU/8bAvf////////////////////////////j3
/v9bPeT/Wz3k/4Vu6/+di+//nYvv/52L7/+di+//nYvv/3Rb6P9bPeT/fWXq////////////Nbf6/wCk
+f8nsvr/Zsj7/2bI+/9myPv/Zsj7/2bI+/9Bu/v/AKT5/wCk+f/0+///////////////////////////
/////////////4p9eP9rW1T/a1tU/2xdVUIAAAAAAAAAAGtbVHBrW1T/a1tU/6Sblv//////////////
//////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////
////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////
/////////////////////////////6yjn/9rW1T/a1tU/2pcVH0AAAAAAAAAAGxdUzRrW1T/a1tU/4J0
bv////////////////////////////j3/v9bPeT/Wz3k/8O49f///////////////////////////5uI
7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v///////////////////////////+i3v3/AKT5/wCk
+f/0+////////////////////////////////////////87Jx/9rW1T/a1tU/2tbVbgAAAAAAAAAAGZm
ZgVrW1T0a1tU/2xcVf/z8vL///////////////////////j3/v9bPeT/Wz3k/8O49f//////////////
/////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////////////////////
//+i3v3/AKT5/wCk+f/0+////////////////////////////////////////8rEwv9rW1T/a1tU/2tb
VO8AAAAAAAAAAAAAAABrW1S/a1tU/2tbVP/Szcv///////////////////////j3/v9bPeT/Wz3k/8O4
9f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk+f9jx/v/////////
//////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////////////xr+9/21e
V/9rW1T/a1tU/2pcVM4AAAAAAAAAAAAAAABrWlSFa1tU/2tbVP+xqaX///////////////////////j3
/v9bPeT/Wz3k/8O49f///////////////////////////5uI7v9bPeT/fWXq////////////Nbf6/wCk
+f9jx/v///////////////////////////+i3v3/AKT5/wCk+f/0+///////////////////////////
//+6sq//bFxV/2tbVP9rW1T/a1tT1m9eVR4AAAAAAAAAAAAAAABpXFVLa1tU/2tbVP+Pg37/////////
//////////////j3/v9bPeT/Wz3k/6CP7//Ivvb/yL72/8i+9v/Ivvb/yL72/4Vv6/9bPeT/fWXq////
////////Nbf6/wCk+f9CvPv/quH9/6rh/f+q4f3/quH9/6rh/f9sy/z/AKT5/wCk+f/0+///////////
/////////f39/6ifmv9rW1T/a1tU/2tbVP9rW1TIZllZFAAAAAAAAAAAAAAAAAAAAABpWloRa1tU/Wtb
VP9wYVr//Pv7//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
5P9bPeT/fWXq////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+f/1+//////////////7+vr/nZKO/2tbVP9rW1T/a1tU/2tcVbJmZk0KAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAa1tT1mtbVP9rW1T/4Nzb//////////////////j3/v9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s9
5P9bPeT/Wz3k/1s95P9bPeT/rJ3x////////////Nbf6/wCk+f8ApPn/AKT5/wCk+f8ApPn/AKT5/wCk
+f8ApPn/AKT5/z66+v////////////b19P+Pg37/a1tU/2tbVP9rW1T/a1tTn4BAQAQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAa1pUm2tbVP9rW1T/vbaz//////////////////7+///08v3/9PL9//Ty
/f/08v3/9PL9//Ty/f/08v3/9PL9//Ty/f/49/7/////////////////8vr//+75///u+f//7vn//+75
///u+f//7vn//+75///u+f//8Pr/////////////8O/u/4Z5dP9rW1T/a1tU/2tbVP9rXFSIAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFxUYWtbVP9rW1T/nJGM////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////n5eT/fG5o/2tbVP9rW1T/a1tU/Gta
VWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAblpTJWtbVP9rW1T/dmdh/8jD
wP/08/L/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////93Z1/91Z2D/a1tU/2tb
VP9rW1T2bFxTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWtb
VOlrW1T/a1tU/2tbVP9tXVb/j4N+/7y1sv/q6Of/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////0czK/3Bh
Wv9rW1T/a1tU/2tbVO5qWVU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGpbVXhrW1T+a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/g3Zw/7GopP/e2tn//v7+////
////////////////////////////////////////////////////////////////////////////////
///Evbv/bV1W/2tbVP9rW1T/a1tU42tZUysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsXVUhbFxVb2taVL1rW1T7a1tU/2tbVP9rW1T/a1tU/2tb
VP9rW1T/eGpj/6Wbl//Szcv/+vn5////////////////////////////////////////////////////
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
AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAVVVVA2xbVJVrW1T/bV5X/8K7uf/RzMr/pJqW/3hpY/9rW1T/a1tU/2tb
VP9rW1TpalxTnGxcVU5mZk0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1JSQdrW1Spa1tU/29fWf/Oycf//////////////////v7+/+He
3f+1ran/iXx2/2tbVP9rW1T/a1tU/2tbVPZqW1W7bFxVb2xYWBoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYFAQbFxUwGtbVP91ZmD+3trZ////////////////////
////////////////////////6efm/7y0sf+Ogn3/bV1W/2tbVP9rW1T/a1tU/WtbVMZrWlR3ZlVVDwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2tbVNJrW1T/fW9p/+fl5P//////////////
///////////////////////////////////////////////////z8vL/x8G//5uQi/9xYlv/a1tU/2tb
VP9rW1SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpdVylrW1Tha1tU/4V4cv/w7u7/////////
//////////////////////////////////////////////////////////////////////////////r6
+v/Evbv/a1tU/2xbVMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrXVM3a1tU62tbVP+MgHr/9PPy////
////////////////////////////////////////////////////////////////////////////////
//////////////v6+v9vX1n/a1tU+2pVVQwAAAAAAAAAAAAAAAAAAAAAallTTWtbVPVrW1T/mY6K//r5
+f///v3/1r8d/9G3AP/RtwD/0bcA/9G3AP/RtwD/07oL//r34//57u//x2xy/8RlbP/EZWz/xGVs/8Rl
bP/EZWz/y3d9///+/v///////////4yAev9rW1T/alpSQQAAAAAAAAAAAAAAAGpaVWBrW1T7a1tU/6mg
nP/+/v7///////799//RtwD/2cMr/+PUZv/j1Gb/49Rm/9zIPP/RtwD/9vHM//Pg4v/EZWz/0omP/9yj
p//co6f/3KOn/85/hf/EZWz//fr6////////////rqai/2tbVP9sW1V7AAAAAAAAAABrW1R5a1tU/2xc
Vf+4sa3//////////////////v33/9G3AP/k1Wz/////////////////7OGW/9G3AP/28cz/8+Di/8Rl
bP/nwML/////////////////3aaq/8RlbP/9+vr////////////RzMn/a1tU/2pbVLYAAAAAAAAAAGtb
VO5rW1T/w726///////////////////////+/ff/0bcA/+TVbP/////////////////s4Zb/0bcA//bx
zP/z4OL/xGVs/+fAwv/////////////////dpqr/xGVs//36+v////////////Lw8P9rW1T/a1tU74CA
gAIAAAAAa1tUxWtbVP/Z1dP///////////////////////799//RtwD/5NVs/////////////////+zh
lv/RtwD/9vHM//Pg4v/EZWz/58DC/////////////////92mqv/EZWz//fr6/////////////////4By
bP9rW1T/aF1RLAAAAABqXFSLa1tU/7iwrf///////////////////////v33/9G3AP/dyUH/7eKZ/+3i
mf/t4pn/4dBa/9G3AP/28cz/8+Di/8RlbP/Zm6D/58HE/+fBxP/nwcT/04yR/8RlbP/9+vr/////////
////////opeT/2tbVP9qW1NlAAAAAGtbVVFrW1T/louG///////////////////////+/ff/0bcA/9G3
AP/RtwD/0bcA/9G3AP/RtwD/0bcB//n12//z4OL/xGVs/8RlbP/EZWz/xGVs/8RlbP/EZWz/x2xy//79
/f/////////////////Dvbr/a1tU/2tbU58AAAAAaF1RFmtbVP90ZV///v7+///////////////////+
/f/28cz/9vHM//bxzP/28cz/9vHM//bxzP/49dr///////35+f/z4OL/8+Di//Pg4v/z4OL/8+Di//Pg
4v/47e7//////////////////////+Xi4f9rW1T/altU2gAAAAAAAAAAa1xT3GtbVP/m4+L/////////
/////////////+zp/P/e2Pr/3tj6/97Y+v/e2Pr/3tj6/+fj+////////////9ry/v/M7f7/zO3+/8zt
/v/M7f7/zO3+/+L1/v///////////////////////v7+/3VmX/9rW1T+aF1RFgAAAABsWlSha1tU/8S+
u//////////////////8/P//YkXl/1s95P9bPeT/Wz3k/1s95P9bPeT/XD7k/+jk+//b8v7/AaT5/wCk
+f8ApPn/AKT5/wCk+f8ApPn/C6j5//v+////////////////////////lYmE/2tbVP9rWlRPAAAAAGpc
VGdrW1T/o5mU//////////////////r5/v9bPeT/hW7r/72x9P+9sfT/vbH0/5WB7v9bPeT/3tj6/8zt
/v8ApPn/WsT7/5nb/f+Z2/3/mdv9/0G7+/8ApPn/9/z///////////////////////+2r6v/a1tU/2pb
VIkAAAAAaF1RLGtbVP+Acmz/////////////////+vn+/1s95P+gj+//////////////////u6/0/1s9
5P/e2Pr/zO3+/wCk+f+W2v3/////////////////bMv8/wCk+f/3/P///////////////////////9nV
0/9rW1T/a1tUxQAAAACAgIACa1tU72tbVP/y8PD////////////6+f7/Wz3k/6CP7///////////////
//+7r/T/Wz3k/97Y+v/M7f7/AKT5/5ba/f////////////////9sy/z/AKT5//f8////////////////
////////w726/2tbVP9rW1TuAAAAAAAAAABqW1S2a1tU/9HMyf////////////r5/v9bPeT/oI/v////
/////////////7uv9P9bPeT/3tj6/8zt/v8ApPn/ltr9/////////////////2zL/P8ApPn/9/z/////
/////////////7ixrf9sXFX/a1tU/2tbVHkAAAAAAAAAAGpcVH1rW1T/r6ej////////////+vn+/1s9
5P93Xun/nYvv/52L7/+di+//gmvq/1s95P/e2Pr/zO3+/wCk+f88ufr/Zsj7/2bI+/9myPv/K7P6/wCk
+f/3/P////////7+/v+upaH/a1tU/2tbVPxqXFRnAAAAAAAAAAAAAAAAa1tUQ2tbVP+NgXz/////////
///6+f7/Wz3k/1s95P9bPeT/Wz3k/1s95P9bPeT/YkXl/+3q/P/M7f7/AKT5/wCk+f8ApPn/AKT5/wCk
+f8ApPn/Ha76//3+///7+vr/nZOO/2tbVP9rWlT4altVVAAAAAAAAAAAAAAAAAAAAAB0XV0La1tU+29f
Wf/7+vr/////////////////////////////////////////////////////////////////////////
////////////////////////9vX0/5CEfv9rW1T/bFxU72pZVTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABsW1TMa1tU/8S9u//6+vr/////////////////////////////////////////////////////////
//////////////////////////////Du7v+FeHL/a1tU/2tbVOFqXVcpAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGtbVI9rW1T/a1tU/3FiW/+bkIv/x8G///Py8v//////////////////////////////
///////////////////////////////////n5eT/fW9p/2tbVP9rW1TSaF5VGwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAZlVVD2taVHdrW1TGa1tU/WtbVP9rW1T/bV1W/46Cff+8tLH/6efm////
////////////////////////////////////////3trZ/3ZnYf9rW1T/bFxUwHBgUBAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWVkUalxUXmtcVKprW1Tya1tU/2tb
VP9rW1T/f3Fr/6uinv/Y09H//fz8/////////////////9LNy/9xYVv/a1tU/2paVa9xVVUJAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm
TQpsXFVOalxTnGtbVOlrW1T/a1tU/2tbVP94aWP/pJqW/9HMyv/Cu7n/bV5X/2tbVP9sW1SVVVVVAwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc
VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A
AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA
AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA
AAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAa1tTa2xcVfBsXFW1bFpVZmZcUhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrWlSFa1tU/4+Dfv+AcWv8a1tU/2tb
VP5tXlbMa1xUemxbVS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAVVVVA2xbVJprW1T/qqCc//7+/v//////6+no/7+4tf+RhoH9bF1W/mtbVP9tXlbia1xTmWpZ
U02AVVUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0XV0LbFxVtWxcVf+5sq//////////
////////////////////////8/Hx/8bAvf+Zjor/cGBa/WtbVP9tXVbxaltUo2heVRsAAAAAAAAAAAAA
AAAAAAAAAAAAAGZZWRRtXFbKbV1W/sjCv///////////////////////////////////////////////
////////+vn5/9LNy/+mnJj/bV1W/WtbVIMAAAAAAAAAAAAAAAAAAAAAaFhYIG1eV9pvYFn808/N////
////////////////////////////////////////////////////////////////////////in55/W1d
Vr4AAAAAAAAAAAAAAABoXVEsbV5X53NlXvzd2tj//v78/9S8EP/RtwD/0bcA/9G3AP/RtwD/8Oit/+zN
0P/EZWz/xGVs/8RlbP/EZWz/yG91//79/f//////raSg/2xcVfaAQEAEAAAAAGxcVEBtXVbzfG5n++jm
5f///////v35/9G3AP/v5qf/9vHM//bxzP/Ywij/7eKZ/+fBxP/NfYP/8+Di//Pg4v/rysz/xGVs//77
/P//////z8rH/2tbVP9rXFIyAAAAAG1dVe2CdW/98O/u/////////////v35/9G3AP/38tH/////////
///axTL/7eKZ/+fBxP/Qg4n////////////04+T/xGVs//77/P//////8fDv/2tbVP9sW1RtAAAAAG5e
Vs+ViYT+/////////////////v35/9G3AP/38tH////////////axTL/7eKZ/+fBxP/Qg4n/////////
///04+T/xGVs//77/P///////////31waftqW1OoAAAAAGxaU5NyY138/v7+/////////////v35/9G3
AP/Zwyr/2sUz/9rFM//Tugr/7eOb/+fBxP/Ga3L/0ISJ/9CEif/OfoT/xGVs//78/P///////////6CW
kv9tXlflAAAAAGpcU1lrW1T/5ePh//////////////79/+3imf/t4pn/7eKZ/+3imf/t4pr/+/nr//bm
5//nwcT/58HE/+fBxP/nwcT/7M3P/////////////////8K7uf9rW1T/alhYHW9eVR5rW1T/w726////
/////////////8rA9v+9sfT/vbH0/72x9P++svT/8vD9/+v4//+a2/3/mdv9/5nb/f+Z2/3/rOH9////
/////////////+Th4P9rW1T/bFtVVwAAAABtXlfnopeT/////////////Pv+/1s95P92Xej/fGTp/3xk
6f9hReX/v7P0/5vb/f8KqPn/M7b6/zO2+v8qs/r/AKT5//r9//////////////7+/v9yY1z8a1tUkQAA
AABqW1OofXBp+///////////+/r+/1s95P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr/////////
///R7/7/AKT5//n9//////////////////+ViYT+bl5WzwAAAABsW1Rta1tU//Hw7///////+/r+/1s9
5P/h3Pr///////////97Y+n/vbH0/5nb/f8ytvr////////////R7/7/AKT5//n9//////////////Dv
7v+CdW/9bV1V7QAAAABsXVM0a1tU/9DLyf//////+/r+/1s95P/GvPb/3tj6/97Y+v91W+j/vbH0/5nb
/f8osvr/zO3+/8zt/v+n4P3/AKT5//n9////////6+no/35wavxsXVX1altURgAAAACAQEAEbV1W9q6m
ov//////+/r+/1s95P9bPeT/Wz3k/1s95P9bPeT/ysH2/5nb/f8ApPn/AKT5/wCk+f8ApPn/EKr5//z+
///g3dv/dmdh/G1dVuptWFMxAAAAAAAAAAAAAAAAbFxVv4x/ev3/////////////////////////////
/////////////////////////////////////////////9jT0f9xYVv8bV5W32pcVSQAAAAAAAAAAAAA
AAAAAAAAa1tUg21dVv2mnJj/0s3L//r5+f//////////////////////////////////////////////
////////yMK//21dVv5tXFbKZllZFAAAAAAAAAAAAAAAAAAAAAAAAAAAaF5VG2pbVKNsXFXwa1tU/3Bg
Wv2Zjor+xsC9//Px8f////////////////////////////////+5sq//bFxV/2xcVbV0XV0LAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUDallVPGtcVIhtXVbba1tU/2tbVP6Ie3X9ta2p/+He
3f///////v7+/66mov9rW1T/bFpUoWZmZgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAbFtVLWtcVHpsXVXLa1tU/mtbVP9/cWv7j4N+/2tbVP9rWlSFAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAZlxSGWxaVWZsXFW1bFxV8GtbU2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8H
/0H8AP9B+AAPQfAAA0HgAANBwAADQYAAAUEAAAFBAAABQQAAAUEAAAFBAAAAQQAAAEGAAABBgAAAQYAA
AEGAAABBgAABQcAAA0HAAAdBwAAPQfAAH0H/AD9B/+D/QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJhW3tvYFn0dWZgsmxbVVdmVVUPAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAnFiW5eCdG705OHg/8a/vf+UiYT0cWFa+Xdo
YcptXFVsb15VHgAAAAAAAAAAAAAAAAAAAAAAAAAAbUlJB3NkXbKMgHr09/b2//////////////////r5
+f/Szcv/oJeS9XNlXfZzZV7baVxVJwAAAAAAAAAAbVtbDnNjXciZj4n1+/r6////////////////////
///////////////////+/v7/pJqW+WxdVnYAAAAAamBVGHJkXdmnnpn2/f37/9S8E//axTP/2MIo/+XX
cP/eqa3/zX2D/9CEif/IcHf//v39/83Ixf92Z2C8AAAAAHJjXOC5sK36//////7++//bxjb///////Xw
yv/k1Gf/3KOn//Pf4P//////0IaL//79/f/w7u7/cWFb8gAAAAF0Zl/i4+Df///////+/vv/2cMr//bx
zP/u5aL/5NRn/9yjp//px8n/8+Di/85/hf/+/f3//////3hpYvNuWlMldGReo8K7uf////////79/+PU
Zv/j1Gb/49Rm//Dorv/qyMv/3KOn/9yjp//eqKz///7+//////+ajoryalxUXmpaVWCbkYzz//////7+
//+ikfD/nYvv/52L7//Lwfb/ruL9/2bI+/9myPv/b8z8//7/////////wbq3/3RlXqJuWlMleGli8///
///8/P//d17p/97Y+v/DuPX/nYvv/2fJ+/+i3v3/zO3+/yuz+v/7/v///////+Pg3/90Zl/iAAAAAXFh
W/Lw7u7//Pz//35m6v//////3df5/52L7/9nyfv/yuz+//////82t/r/+/7///////+5sK36cmNc4AAA
AAB2Z2G+zsnH//z8//9iReX/fGTp/3Vb6P+jkvD/Z8n7/yiy+v8ztvr/E6v5//v9/v+to5/4c2Nd3m1b
UhwAAAAAbF1WdqSalvn+/v7///////////////////////////////////////v6+v+Zj4r2c2ReyW1b
Ww4AAAAAAAAAAGlcVSdzZV7bc2Vd9qCXkvXSzcv/+vn5//////////////////f29v+MgHr0c2Rdsm1J
SQcAAAAAAAAAAAAAAAAAAAAAAAAAAG9eVR5rW1NrdGRexnBhWfiShoHvxr+9/uTh4P+CdG70c2RdmYCA
gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVVUPbFtVV3VmYLJvYFn0cmFbewAA
AAAAAAAAAAAAAAAAAAAAAAAA+D+sQeAHrEHAAaxBgAGsQQABrEEAAKxBAACsQQAArEEAAKxBAACsQQAA
rEGAAKxBgAGsQYADrEHgB6xB/B+sQQ==
</value>
</data>
</root>

View File

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

View File

@ -0,0 +1,114 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public partial class THorizontalSeparator : System.Windows.Forms.UserControl
{
protected readonly Padding defaultMargin = new Padding(5, 0, 5, 10);
protected readonly Padding defaultPadding = new Padding(0, 10, 0, 10);
public THorizontalSeparator()
{
InitializeComponent();
this.BackColor = Color.Transparent;
this.Margin = defaultMargin;
this.MaximumSize = new Size(SystemInformation.VirtualScreen.Width, 22);
this.MinimumSize = new Size(0, 22);
this.Padding = defaultPadding;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Margin = defaultMargin;
this.Padding = defaultPadding;
}
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
Graphics g = e.Graphics;
g.FillRectangle(new SolidBrush(Color.FromArgb(213, 223, 229)), new Rectangle(this.DisplayRectangle.Left, 11, this.DisplayRectangle.Width, 1));
g.FillRectangle(new SolidBrush(Color.FromArgb(249, 251, 253)), new Rectangle(this.DisplayRectangle.Left, 12, this.DisplayRectangle.Width, 1));
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Font Font { get => base.Font; set => base.Font = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override AutoValidate AutoValidate { get => base.AutoValidate; set => base.AutoValidate = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override ContextMenuStrip ContextMenuStrip { get => base.ContextMenuStrip; set => base.ContextMenuStrip = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = defaultMargin; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = defaultPadding; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new DockStyle Dock { get => base.Dock; set => base.Dock = value; }
}
}

View File

@ -0,0 +1,120 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,84 @@
using System;
using System.ComponentModel;
using System.Drawing;
namespace RyzStudio.Windows.Forms
{
public class TImageBox : System.Windows.Forms.PictureBox
{
public TImageBox() : base()
{
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.ErrorImage = null;
this.InitialImage = null;
this.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
}
protected override void OnCreateControl()
{
OnMouseLeave(null);
base.OnCreateControl();
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Color BackColor { get => base.BackColor; set => base.BackColor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image Image { get => base.Image; set => base.Image = value; }
[Category("Appearance"), Browsable(true)]
public Color BackColorNormal { get; set; } = Color.Transparent;
[Category("Appearance"), Browsable(true)]
public Color BackColorHover { get; set; } = Color.Transparent;
[Category("Appearance"), Browsable(true)]
public Color BackColorSelected { get; set; } = Color.Transparent;
[Category("Appearance"), Browsable(true)]
public Image ImageNormal { get; set; }
[Category("Appearance"), Browsable(true)]
public Image ImageHover { get; set; }
[Category("Appearance"), Browsable(true)]
public Image ImageSelected { get; set; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public Image NormalImage { get => this.ImageNormal; set => this.ImageNormal = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public Image HoverImage { get => this.ImageHover; set => this.ImageHover = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public Image SelectedImage { get => this.ImageSelected; set => this.ImageSelected = value; }
public bool IsSelected { get; set; } = false;
protected override void OnMouseEnter(EventArgs e)
{
this.Image = this.ImageHover;
this.BackColor = this.BackColorHover;
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
base.OnMouseLeave(e);
}
protected override void OnLostFocus(EventArgs e)
{
this.Image = (this.IsSelected ? this.ImageSelected : this.ImageNormal);
this.BackColor = (this.IsSelected ? this.BackColorSelected : this.BackColorNormal);
base.OnLostFocus(e);
}
}
}

View File

@ -0,0 +1,258 @@
namespace RyzStudio.Windows.Forms
{
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
[ToolboxItem(true)]
public class TPanelBook : UserControl
{
public class PanelCollection : CollectionBase
{
protected TPanelBook panelBook = null;
public PanelCollection(TPanelBook parentPanelBook) : base()
{
panelBook = parentPanelBook;
}
public TPanelBook Parent => panelBook;
public Panel this[int index] { get => (Panel)List[index]; set => List[index] = value; }
public int Add(Panel value) => List.Add(value);
public void AddRange(Panel[] pages) => Array.ForEach(pages, x => this.Add(x));
public bool Contains(Panel value) => List.Contains(value);
public int IndexOf(Panel value) => List.IndexOf(value);
public void Insert(int index, Panel value) => List.Insert(index, value);
public void Remove(Panel value) => List.Remove(value);
protected override void OnInsertComplete(int index, object value)
{
base.OnInsertComplete(index, value);
if (panelBook != null)
{
panelBook.PageIndex = index;
}
}
protected override void OnRemoveComplete(int index, object value)
{
base.OnRemoveComplete(index, value);
if (panelBook != null)
{
if (panelBook.PageIndex == index)
{
if (index < InnerList.Count)
{
panelBook.PageIndex = index;
}
else
{
panelBook.PageIndex = InnerList.Count - 1;
}
}
}
}
}
private System.ComponentModel.IContainer components = null;
protected PanelCollection panelCollection = null;
public TPanelBook()
{
InitializeComponent();
panelCollection = new PanelCollection(this);
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
protected void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public Panel ActivePanel { get; protected set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
[Category("Collection")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public PanelCollection Pages => panelCollection;
[Category("Collection")]
public int SelectedIndex
{
get => (panelCollection.Count <= 0) ? -1 : panelCollection.IndexOf(this.ActivePanel);
set
{
if (panelCollection.Count <= 0) return;
if (value < 0) return;
if (value > (panelCollection.Count - 1)) return;
if (value == this.SelectedIndex) return;
ActivatePage(value);
}
}
protected internal int PageIndex
{
get => panelCollection.IndexOf(this.ActivePanel);
set
{
if (panelCollection.Count <= 0)
{
ActivatePage(-1);
return;
}
if ((value < -1) || (value >= panelCollection.Count))
{
throw new ArgumentOutOfRangeException("PageIndex", value, "The page index must be between 0 and " + Convert.ToString(panelCollection.Count - 1));
}
ActivatePage(value);
}
}
protected internal void ActivatePage(int index)
{
if ((panelCollection.Count == 0) && (index >= panelCollection.Count) && (index <= 0))
{
return;
}
Panel p = (Panel)panelCollection[index];
ActivatePage(p);
}
protected internal void ActivatePage(Panel page)
{
if (this.ActivePanel != null)
{
if (this.ActivePanel.InvokeRequired)
{
this.ActivePanel.Invoke(new MethodInvoker(() => {
this.ActivePanel.Visible = false;
}));
}
else
{
this.ActivePanel.Visible = false;
}
}
this.ActivePanel = page;
if (this.ActivePanel != null)
{
this.ActivePanel.Parent = this;
if (!this.Contains(this.ActivePanel))
{
this.Container.Add(this.ActivePanel);
}
if (this.ActivePanel.InvokeRequired)
{
this.ActivePanel.Invoke(new MethodInvoker(() => {
this.ActivePanel.Dock = DockStyle.Fill;
this.ActivePanel.Visible = true;
this.ActivePanel.BringToFront();
}));
}
else
{
this.ActivePanel.Dock = DockStyle.Fill;
this.ActivePanel.Visible = true;
this.ActivePanel.BringToFront();
}
}
if (this.ActivePanel != null)
{
if (this.ActivePanel.InvokeRequired)
{
this.ActivePanel.Invoke(new MethodInvoker(() => {
this.ActivePanel.Invalidate();
}));
}
else
{
this.ActivePanel.Invalidate();
}
}
else
{
this.Invalidate();
}
}
#if DEBUG
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
if (this.DesignMode)
{
this.Invalidate();
}
}
#endif
protected override void DestroyHandle()
{
base.DestroyHandle();
foreach (Panel p in panelCollection)
{
p.Dispose();
}
}
}
}

View File

@ -0,0 +1,73 @@
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public class TUserControl : UserControl
{
public TUserControl() : base()
{
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Font Font { get => base.Font; set => base.Font = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override AutoValidate AutoValidate { get => base.AutoValidate; set => base.AutoValidate = value; }
//[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
//public override ContextMenuStrip ContextMenuStrip { get => base.ContextMenuStrip; set => base.ContextMenuStrip = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
}
}

View File

@ -0,0 +1,815 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RyzStudio.Windows.Forms
{
public class ThreadControl
{
public static void Add(Control control, Control value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Controls.Add(value);
}));
}
else
{
control.Controls.Add(value);
}
}
public static void Add(ListBox control, string value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Items.Add(value);
}));
}
else
{
control.Items.Add(value);
}
}
public static void Add(ComboBox control, string value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Items.Add(value);
}));
}
else
{
control.Items.Add(value);
}
}
//public static void Add(FlowLayoutPanel control, Control value)
//{
// if (control.InvokeRequired)
// {
// control.Invoke(new MethodInvoker(() => {
// control.Controls.Add(value);
// }));
// }
// else
// {
// control.Controls.Add(value);
// }
//}
public static int Add(TreeView control, TreeNode value)
{
int n = -1;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
n = control.Nodes.Add(value);
}));
}
else
{
n = control.Nodes.Add(value);
}
return n;
}
public static int Add(TreeNode control, TreeNode value)
{
int n = -1;
if (control.TreeView.InvokeRequired)
{
control.TreeView.Invoke(new MethodInvoker(() => {
n = control.Nodes.Add(value);
}));
}
else
{
n = control.Nodes.Add(value);
}
return n;
}
public static int Add(DataGridView control, object[] value)
{
int n = -1;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
n = control.Rows.Add(value);
}));
}
else
{
n = control.Rows.Add(value);
}
return n;
}
public static int Add(DataGridView control, object[] value, object tag)
{
int n = -1;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
n = control.Rows.Add(value);
control.Rows[n].Tag = tag;
}));
}
else
{
n = control.Rows.Add(value);
control.Rows[n].Tag = tag;
}
return n;
}
public static TreeNode Add(TreeView control, string key, string text)
{
TreeNode rv = null;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
rv = control.Nodes.Add(key, text);
}));
}
else
{
rv = control.Nodes.Add(key, text);
}
return rv;
}
public static TreeNode Add(TreeNode control, string key, string text)
{
TreeNode rv = null;
if (control.TreeView.InvokeRequired)
{
control.TreeView.Invoke(new MethodInvoker(() => {
rv = control.Nodes.Add(key, text);
}));
}
else
{
rv = control.Nodes.Add(key, text);
}
return rv;
}
public static TreeNode Add(TreeView parentControl, TreeNodeCollection control, string key, string text, int imageIndex, int selectedImageIndex)
{
TreeNode rv = null;
if (parentControl.InvokeRequired)
{
parentControl.Invoke(new MethodInvoker(() => {
rv = control.Add(key, text, imageIndex, selectedImageIndex);
}));
}
else
{
rv = control.Add(key, text, imageIndex, selectedImageIndex);
}
return rv;
}
public static TreeNode Add(TreeNode control, string key, string text, int imageIndex, int selectedImageIndex)
{
TreeNode rv = null;
if (control.TreeView.InvokeRequired)
{
control.TreeView.Invoke(new MethodInvoker(() => {
rv = control.Nodes.Add(key, text, imageIndex, selectedImageIndex);
}));
}
else
{
rv = control.Nodes.Add(key, text, imageIndex, selectedImageIndex);
}
return rv;
}
public static TreeNode Add(TreeView control, string key, string text, int imageIndex, int selectedImageIndex)
{
TreeNode rv = null;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
rv = control.Nodes.Add(key, text, imageIndex, selectedImageIndex);
}));
}
else
{
rv = control.Nodes.Add(key, text, imageIndex, selectedImageIndex);
}
return rv;
}
public static void Add(TreeView parentControl, ImageList control, Image value)
{
if (parentControl.InvokeRequired)
{
parentControl.Invoke(new MethodInvoker(() => {
control.Images.Add(value);
}));
}
else
{
control.Images.Add(value);
}
}
public static void Add(Control parentControl, ImageList control, string key, Image value)
{
if (parentControl.InvokeRequired)
{
parentControl.Invoke(new MethodInvoker(() => {
control.Images.Add(key, value);
}));
}
else
{
control.Images.Add(key, value);
}
}
public static void AddLine(RichTextBox control, string text)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Text += text + Environment.NewLine;
}));
}
else
{
control.Text += text + Environment.NewLine;
}
}
public static void Clear(ListBox control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Items.Clear();
}));
}
else
{
control.Items.Clear();
}
}
public static void Clear(ComboBox control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Items.Clear();
}));
}
else
{
control.Items.Clear();
}
}
public static void Clear(TreeView parentControl, ImageList control)
{
if (parentControl.InvokeRequired)
{
parentControl.Invoke(new MethodInvoker(() => {
control.Images.Clear();
}));
}
else
{
control.Images.Clear();
}
}
public static void Clear(FlowLayoutPanel control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Controls.Clear();
}));
}
else
{
control.Controls.Clear();
}
}
public static void Clear(TreeView control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Nodes.Clear();
}));
}
else
{
control.Nodes.Clear();
}
}
public static void Clear(Label control) => SetText(control, string.Empty);
public static void Clear(PictureBox control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Image = null;
}));
}
else
{
control.Image = null;
}
}
public static void Clear(DataGridView control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Rows.Clear();
}));
}
else
{
control.Rows.Clear();
}
}
public static void Expand(TreeNode control)
{
if (control.TreeView.InvokeRequired)
{
control.TreeView.Invoke(new MethodInvoker(() => {
control.Expand();
}));
}
else
{
control.Expand();
}
}
public static List<T> FindChildControl<T>(Control control) where T : Control
{
List<T> rs = new List<T>();
foreach (Control item in control.Controls)
{
var ctr = item as T;
if (ctr == null)
{
rs.AddRange(FindChildControl<T>(item));
}
else
{
rs.Add(ctr);
}
}
return rs;
}
public static string GetSelectedValue(ListBox sender)
{
string rv = string.Empty;
if (sender.InvokeRequired)
{
sender.Invoke(new MethodInvoker(() => {
rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
}));
}
else
{
rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
}
return rv;
}
public static string GetText(Control control, bool doTrim = true)
{
string rv = string.Empty;
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
rv = (doTrim ? control.Text?.Trim() : control.Text);
}));
}
else
{
rv = (doTrim ? control.Text?.Trim() : control.Text);
}
return rv;
}
public static int GetValue(NumericUpDown sender)
{
int rv = 0;
if (sender.InvokeRequired)
{
sender.Invoke(new MethodInvoker(() => {
rv = (int)sender.Value;
}));
}
else
{
rv = (int)sender.Value;
}
return rv;
}
public static bool IsChild(TreeNode dragNode, TreeNode dropNode)
{
TreeNode tn = dropNode;
while (true)
{
if (tn.Parent == null)
{
break;
}
if (tn.Equals(dragNode))
{
return true;
}
tn = tn.Parent;
}
return false;
}
public static void SetChecked(ToolStripMenuItem control, bool value)
{
if (control.GetCurrentParent().InvokeRequired)
{
control.GetCurrentParent().Invoke(new MethodInvoker(() =>
{
control.Checked = value;
}));
}
else
{
control.Checked = value;
}
}
public static void SetClientHeight(Control control, int value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.ClientSize = new Size(control.ClientSize.Width, value);
}));
}
else
{
control.ClientSize = new Size(control.ClientSize.Width, value);
}
}
public static void SetClientSize(Control control, int width, int height) => SetClientSize(control, new Size(width, height));
public static void SetClientSize(Control control, Size value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.ClientSize = value;
}));
}
else
{
control.ClientSize = value;
}
}
public static void SetClientWidth(Control control, int value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.ClientSize = new Size(value, control.ClientSize.Height);
}));
}
else
{
control.ClientSize = new Size(value, control.ClientSize.Height);
}
}
public static void SetEnable(Control control, bool value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Enabled = value;
}));
}
else
{
control.Enabled = value;
}
}
public static void SetEnable(ToolStripMenuItem control, bool value)
{
if (control.GetCurrentParent() == null)
{
control.Enabled = value;
return;
}
if (control.GetCurrentParent().InvokeRequired)
{
control.GetCurrentParent().Invoke(new MethodInvoker(() =>
{
control.Enabled = value;
}));
}
else
{
control.Enabled = value;
}
}
public static void SetFocus(Control control)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Focus();
}));
}
else
{
control.Focus();
}
}
public static void SetHeight(Control control, int value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Height = value;
}));
}
else
{
control.Height = value;
}
}
public static void SetLocation(Control control, Point value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Location = value;
}));
}
else
{
control.Location = value;
}
}
public static void SetSize(Control control, int width, int height) => SetSize(control, new Size(width, height));
public static void SetSize(Control control, Size value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Size = value;
}));
}
else
{
control.Size = value;
}
}
public static void SetText(Control control, string text)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Text = text;
}));
}
else
{
control.Text = text;
}
}
public static void SetTopMost(Form control, bool value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.TopMost = value;
}));
}
else
{
control.TopMost = value;
}
}
public static void SetValue(Control control, string value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Text = value;
}));
}
else
{
control.Text = value;
}
}
public static void SetValue(ComboBox control, int value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.SelectedIndex = value;
}));
}
else
{
control.SelectedIndex = value;
}
}
public static void SetValue(PictureBox control, Image value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() =>
{
control.Image = value;
}));
}
else
{
control.Image = value;
}
}
public static string GetValue(ListBox sender)
{
string rv = string.Empty;
if (sender.InvokeRequired)
{
sender.Invoke(new MethodInvoker(() => {
rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
}));
}
else
{
rv = (sender.SelectedItem == null) ? string.Empty : sender.SelectedItem.ToString();
}
return rv;
}
public static int GetValue(ComboBox sender)
{
int rv = -1;
if (sender.InvokeRequired)
{
sender.Invoke(new MethodInvoker(() => {
rv = sender.SelectedIndex;
}));
}
else
{
rv = sender.SelectedIndex;
}
return rv;
}
public static void SetVisible(Control control, bool value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Visible = value;
}));
}
else
{
control.Visible = value;
}
}
public static void SetVisible(Form control, bool value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
if (value)
{
//control.ShowInTaskbar = value;
//control.Opacity = 100;
control.Visible = value;
}
else
{
control.Visible = value;
//control.ShowInTaskbar = value;
//control.Opacity = 0;
}
}));
}
else
{
if (value)
{
//control.ShowInTaskbar = value;
//control.Opacity = 100;
control.Visible = value;
}
else
{
control.Visible = value;
//control.ShowInTaskbar = value;
//control.Opacity = 0;
}
}
}
public static void SetWidth(Control control, int value)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(() => {
control.Width = value;
}));
}
else
{
control.Width = value;
}
}
}
}

View File

@ -0,0 +1,186 @@
namespace RyzStudio.Windows.ThemedForms
{
using RyzStudio.Windows.Forms;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class TButton : RyzStudio.Windows.ThemedForms.TUserControl
{
public class ButtonStyle
{
public Color BackColour { get; set; } = Color.Transparent;
public Color PenColour { get; set; } = Color.Transparent;
public Image ForeImage { get; set; } = null;
}
public enum ButtonState
{
Idle = 0,
Hover,
Down
}
protected ButtonState controlState = ButtonState.Idle;
protected bool isSelected = false;
public TButton()
{
InitializeComponent();
this.Margin = new Padding(10, 0, 0, 10);
this.Name = "Button";
label1.ImageAlign = ContentAlignment.MiddleCenter;
label1.Click += label1_Click;
label1.MouseClick += label1_MouseClick;
label1.MouseEnter += delegate { this.VisualState = ButtonState.Hover; };
label1.MouseLeave += delegate { this.VisualState = ButtonState.Idle; };
label1.MouseDown += delegate { this.VisualState = ButtonState.Down; };
label1.MouseUp += delegate { this.VisualState = ButtonState.Idle; };
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Margin = new Padding(10, 0, 10, 10);
this.StyleDefault = new ButtonStyle()
{
BackColour = Color.White,
PenColour = Color.Black,
ForeImage = this.DefaultImage
};
this.StyleDown = new ButtonStyle()
{
BackColour = Color.FromArgb(60, 53, 148),
PenColour = Color.White,
ForeImage = this.DownImage
};
this.StyleOver = new ButtonStyle()
{
BackColour = Color.FromArgb(108, 101, 196),
PenColour = Color.White,
ForeImage = this.OverImage
};
this.StyleSelected = new ButtonStyle()
{
BackColour = Color.FromArgb(51, 51, 51),
PenColour = Color.White,
ForeImage = this.OverImage
};
this.VisualState = ButtonState.Idle;
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
protected ButtonState VisualState
{
get { return controlState; }
set
{
switch (value)
{
case ButtonState.Idle:
if (this.VisualState == ButtonState.Down)
{
updateButton(StyleOver);
}
else
{
if (this.IsSelected)
{
updateButton(StyleSelected);
}
else
{
updateButton(StyleDefault);
}
}
break;
case ButtonState.Hover:
updateButton(StyleOver);
break;
case ButtonState.Down:
updateButton(StyleDown);
break;
default:
if (this.IsSelected)
{
updateButton(StyleSelected);
}
else
{
updateButton(StyleDefault);
}
break;
}
controlState = value;
}
}
protected void updateButton(ButtonStyle style)
{
label1.ForeColor = style.PenColour;
label1.BackColor = style.BackColour;
label1.Image = style.ForeImage;
}
[Browsable(true)]
[Category("Appearance")]
public string LabelText { get => ThreadControl.GetText(label1); set => ThreadControl.SetText(label1, value); }
[Browsable(true)]
[Category("Appearance")]
public Image OverImage { get; set; } = null;
[Browsable(true)]
[Category("Appearance")]
public Image DownImage { get; set; } = null;
[Browsable(true)]
[Category("Appearance")]
public Image DefaultImage { get; set; } = null;
public bool IsSelected
{
get => isSelected;
set
{
isSelected = value;
this.VisualState = this.VisualState;
}
}
protected ButtonStyle StyleOver { get; set; } = new ButtonStyle();
protected ButtonStyle StyleDown { get; set; } = new ButtonStyle();
protected ButtonStyle StyleDefault { get; set; } = new ButtonStyle();
protected ButtonStyle StyleSelected { get; set; } = new ButtonStyle();
private void label1_MouseClick(object sender, MouseEventArgs e) => this.OnMouseClick(e);
private void label1_Click(object sender, EventArgs e) => this.OnClick(e);
public void PerformClick() => this.OnClick(null);
}
}

View File

@ -0,0 +1,62 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TButton
{
/// <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.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Location = new System.Drawing.Point(4, 4);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(142, 30);
this.label1.TabIndex = 0;
this.label1.Text = "label1";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// TButton
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.label1);
this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.Name = "TButton";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(149, 37);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label label1;
}
}

View File

@ -0,0 +1,60 @@
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,28 @@
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public class TMenuButton : TButton
{
public TMenuButton()
{
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
if (e.Button == MouseButtons.Left)
{
if (this.ContextMenuStrip != null)
{
this.ContextMenuStrip.Show(this, e.Location);
}
}
}
}
}

View File

@ -0,0 +1,52 @@
using RyzStudio.Windows.Forms;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public class TNumericPickerBox : TPickerBox
{
protected int minimumValue = 0;
protected int maximumValue = 50;
public TNumericPickerBox() : base()
{
this.ComboBox.MaxDropDownItems = 10;
this.Clear();
}
public ComboBox InnerControl { get => this.ComboBox; }
public int Value
{
get => (ThreadControl.GetValue(this.ComboBox) + minimumValue);
set => ThreadControl.SetValue(this.ComboBox, (value - minimumValue));
}
public void Clear()
{
ThreadControl.Clear(this.ComboBox);
ThreadControl.Add(this.ComboBox, "0");
ThreadControl.SetValue(this.ComboBox, 0);
}
public void Clear(int min, int max, int value)
{
minimumValue = min;
maximumValue = max;
ThreadControl.Clear(this.ComboBox);
for (int i=min; i< max; i++)
{
ThreadControl.Add(this.ComboBox, i.ToString());
}
this.Value = value;
}
}
}

View File

@ -0,0 +1,98 @@
namespace RyzStudio.Windows.ThemedForms
{
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class TPickerBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
public TPickerBox() : base()
{
InitializeComponent();
this.Font = new Font(this.Font, FontStyle.Regular);
this.Margin = new Padding(10, 4, 10, 4);
comboBox1.Font = this.Font;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.PreviewKeyDown += textBox_PreviewKeyDown;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
comboBox1.Focus();
}
protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
if (this.SubmitButton != null)
{
this.SubmitButton.PerformClick();
}
break;
case Keys.Escape:
close();
break;
default: break;
}
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.ComboBox ComboBox { get => comboBox1; set => comboBox1 = value; }
//[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
//[Category("Appearance")]
//public new string Text
//{
// get => textBox1.Text;
// set
// {
// textBox1.Text = value;
// textBox1.SelectionStart = textBox1.Text.Length;
// }
//}
//[Browsable(true)]
//[Category("Appearance")]
//public ComboBox.ObjectCollection Items { get => comboBox1.Items; set => comboBox1.Items = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public TButton SubmitButton { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = value; }
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,59 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TPickerBox
{
/// <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.comboBox1 = new System.Windows.Forms.ComboBox();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(4, 4);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 21);
this.comboBox1.TabIndex = 0;
//
// PickerBox
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.comboBox1);
this.Name = "PickerBox";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ComboBox comboBox1;
}
}

View File

@ -0,0 +1,120 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,27 @@
using RyzStudio.Windows.Forms;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public class TYesNoPickerBox : TPickerBox
{
public TYesNoPickerBox() : base()
{
this.ComboBox.Items.Clear();
this.ComboBox.Items.AddRange(new string[] { "No", "Yes" });
if (this.ComboBox.Items.Count > 0) this.ComboBox.SelectedIndex = 0;
}
public ComboBox InnerControl { get => this.ComboBox; }
public bool Value
{
get => (ThreadControl.GetValue(this.ComboBox) == 1);
set => ThreadControl.SetValue(this.ComboBox, (value ? 1 : 0));
}
}
}

View File

@ -0,0 +1,47 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TDialogForm
{
/// <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.SuspendLayout();
//
// TDialogForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(249)))), ((int)(((byte)(250)))));
this.ClientSize = new System.Drawing.Size(340, 600);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MinimumSize = new System.Drawing.Size(40, 0);
this.Name = "TDialogForm";
this.ResumeLayout(false);
}
#endregion
}
}

View File

@ -0,0 +1,117 @@
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TDialogForm : Form
{
public TDialogForm()
{
this.InitializeComponent();
this.BackColor = Color.FromArgb(254, 254, 254);
this.FormBorderStyle = FormBorderStyle.Sizable;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Padding = new Padding(5, 10, 5, 10);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.WindowsDefaultLocation;
this.TopMost = true;
this.SizeGripStyle = SizeGripStyle.Hide;
this.AutoScaleMode = AutoScaleMode.None;
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
[Browsable(false)]
public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; }
[Browsable(false)]
public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
//[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
//public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; }
//[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
//public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool ShowIcon { get => base.ShowIcon; set => base.ShowIcon = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool ShowInTaskbar { get => base.ShowInTaskbar; set => base.ShowInTaskbar = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new FormStartPosition StartPosition { get => base.StartPosition; set => base.StartPosition = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool TopMost { get => base.TopMost; set => base.TopMost = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool RightToLeftLayout { get => base.RightToLeftLayout; set => base.RightToLeftLayout = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new AutoSizeMode AutoSizeMode { get => base.AutoSizeMode; set => base.AutoSizeMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool MinimizeBox { get => base.MinimizeBox; set => base.MinimizeBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool MaximizeBox { get => base.MaximizeBox; set => base.MaximizeBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool ControlBox { get => base.ControlBox; set => base.ControlBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool HelpButton { get => base.HelpButton; set => base.HelpButton = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new MenuStrip MainMenuStrip { get => base.MainMenuStrip; set => base.MainMenuStrip = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new SizeGripStyle SizeGripStyle { get => base.SizeGripStyle; set => base.SizeGripStyle = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new AutoScaleMode AutoScaleMode { get => base.AutoScaleMode; set => base.AutoScaleMode = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Point AutoScrollOffset { get => base.AutoScrollOffset; set => base.AutoScrollOffset = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new FormWindowState WindowState { get => base.WindowState; set => base.WindowState = value; }
}
}

View File

@ -0,0 +1,60 @@
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,385 @@
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using UIResource = RandomFileRunner.UIResource;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TListBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(6, 2, 4, 2);
public TListBox() : base()
{
InitializeComponent();
this.Font = new Font(this.Font, FontStyle.Regular);
this.Margin = new Padding(10, 4, 10, 4);
listBox1.Font = this.Font;
listBox1.BorderStyle = BorderStyle.None;
}
//protected override void OnResize(EventArgs e)
//{
// base.OnResize(e);
// //int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
// //this.Height = comboBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
//}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
listBox1.Focus();
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.ListBox ListBox { get => listBox1; set => listBox1 = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public TButton SubmitButton { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = value; }
[Browsable(false)]
public event EventHandler OnAdd;
[Browsable(false)]
public event EventHandler OnEdit;
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
/// <summary>
/// Add
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
this.OnAdd?.Invoke(sender, e);
}
/// <summary>
/// Edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tImageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
editToolStripMenuItem_Click(sender, e);
}
/// <summary>
/// Menu
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imageBox5_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
contextMenuStrip1.Show(Cursor.Position);
}
/// <summary>
/// Move up
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imageBox3_MouseClick(object sender, MouseEventArgs e)
{
if (e != null)
{
if (e.Button != MouseButtons.Left)
{
return;
}
}
moveUpToolStripMenuItem_Click(sender, e);
}
/// <summary>
/// Move down
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imageBox4_MouseClick(object sender, MouseEventArgs e)
{
if (e != null)
{
if (e.Button != MouseButtons.Left)
{
return;
}
}
moveDownToolStripMenuItem_Click(sender, e);
}
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
editToolStripMenuItem_Click(sender, e);
}
private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
if (this.SubmitButton != null)
{
this.SubmitButton.PerformClick();
}
break;
case Keys.Escape:
close();
break;
case Keys.Up:
if (e.Alt)
{
imageBox3_MouseClick(sender, null);
}
break;
case Keys.Down:
if (e.Alt)
{
imageBox4_MouseClick(sender, null);
}
break;
default: break;
}
}
#region context menu
/// <summary>
/// Add
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addItemToolStripMenuItem_Click(object sender, EventArgs e)
{
this.OnAdd?.Invoke(sender, e);
}
/// <summary>
/// Copy
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex <= 0)
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
object item = listBox1.SelectedItem;
listBox1.Items.Add(item);
listBox1.SelectedIndex = (listBox1.Items.Count- 1);
}
/// <summary>
/// Edit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < 0)
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
this.OnEdit?.Invoke(sender, e);
}
/// <summary>
/// Remove
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void removeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex < 0)
{
return;
}
int pos = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(pos);
if (pos > (listBox1.Items.Count - 1))
{
pos = (listBox1.Items.Count - 1);
}
listBox1.SelectedIndex = pos;
}
/// <summary>
/// Remove all
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
/// <summary>
/// Move to top
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void moveToTopToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex <= 0)
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
object item = listBox1.SelectedItem;
int pos = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(pos);
listBox1.Items.Insert(0, item);
listBox1.SelectedIndex = 0;
}
/// <summary>
/// Move up
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex <= 0)
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
object item = listBox1.SelectedItem;
int pos = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(pos);
listBox1.Items.Insert((pos - 1), item);
listBox1.SelectedIndex = (pos - 1);
}
/// <summary>
/// Move down
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void moveDownToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex >= (listBox1.Items.Count - 1))
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
object item = listBox1.SelectedItem;
int pos = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(pos);
listBox1.Items.Insert((pos + 1), item);
listBox1.SelectedIndex = (pos + 1);
}
/// <summary>
/// Move to bottom
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void moveToBottomToolStripMenuItem_Click(object sender, EventArgs e)
{
int n = (listBox1.Items.Count - 1);
if (listBox1.SelectedIndex >= (listBox1.Items.Count - 1))
{
return;
}
if (listBox1.SelectedItem == null)
{
return;
}
object item = listBox1.SelectedItem;
int pos = listBox1.SelectedIndex;
listBox1.Items.RemoveAt(pos);
listBox1.Items.Insert(n, item);
listBox1.SelectedIndex = n;
}
#endregion
}
}

View File

@ -0,0 +1,358 @@
using System.Drawing;
namespace RyzStudio.Windows.ThemedForms
{
partial class TListBox
{
/// <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();
this.listBox1 = new System.Windows.Forms.ListBox();
this.imageBox5 = new RyzStudio.Windows.Forms.TImageBox();
this.imageBox4 = new RyzStudio.Windows.Forms.TImageBox();
this.imageBox3 = new RyzStudio.Windows.Forms.TImageBox();
this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.addItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.moveToTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveToBottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tImageBox1 = new RyzStudio.Windows.Forms.TImageBox();
((System.ComponentModel.ISupportInitialize)(this.imageBox5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
this.contextMenuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.tImageBox1)).BeginInit();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.listBox1.BackColor = System.Drawing.SystemColors.Window;
this.listBox1.FormattingEnabled = true;
this.listBox1.ItemHeight = 15;
this.listBox1.Location = new System.Drawing.Point(4, 4);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(98, 214);
this.listBox1.TabIndex = 0;
this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick);
this.listBox1.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.listBox1_PreviewKeyDown);
//
// imageBox5
//
this.imageBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.imageBox5.BackColor = System.Drawing.Color.Transparent;
this.imageBox5.BackColorHover = System.Drawing.Color.Transparent;
this.imageBox5.BackColorNormal = System.Drawing.Color.Transparent;
this.imageBox5.BackColorSelected = System.Drawing.Color.Transparent;
this.imageBox5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.imageBox5.ErrorImage = null;
this.imageBox5.HoverImage = global::RandomFileRunner.UIResource.circle_menu2;
this.imageBox5.Image = global::RandomFileRunner.UIResource.circle_menu;
this.imageBox5.ImageHover = global::RandomFileRunner.UIResource.circle_menu2;
this.imageBox5.ImageNormal = global::RandomFileRunner.UIResource.circle_menu;
this.imageBox5.ImageSelected = null;
this.imageBox5.InitialImage = null;
this.imageBox5.IsSelected = false;
this.imageBox5.Location = new System.Drawing.Point(106, 48);
this.imageBox5.Name = "imageBox5";
this.imageBox5.NormalImage = global::RandomFileRunner.UIResource.circle_menu;
this.imageBox5.SelectedImage = null;
this.imageBox5.Size = new System.Drawing.Size(18, 18);
this.imageBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.imageBox5.TabIndex = 6;
this.imageBox5.TabStop = false;
this.toolTip1.SetToolTip(this.imageBox5, "Menu");
this.imageBox5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
this.imageBox5.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox5_MouseClick);
//
// imageBox4
//
this.imageBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.imageBox4.BackColor = System.Drawing.Color.Transparent;
this.imageBox4.BackColorHover = System.Drawing.Color.Transparent;
this.imageBox4.BackColorNormal = System.Drawing.Color.Transparent;
this.imageBox4.BackColorSelected = System.Drawing.Color.Transparent;
this.imageBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.imageBox4.ErrorImage = null;
this.imageBox4.HoverImage = global::RandomFileRunner.UIResource.arrow_down2;
this.imageBox4.Image = global::RandomFileRunner.UIResource.arrow_down;
this.imageBox4.ImageHover = global::RandomFileRunner.UIResource.arrow_down2;
this.imageBox4.ImageNormal = global::RandomFileRunner.UIResource.arrow_down;
this.imageBox4.ImageSelected = null;
this.imageBox4.InitialImage = null;
this.imageBox4.IsSelected = false;
this.imageBox4.Location = new System.Drawing.Point(106, 92);
this.imageBox4.Name = "imageBox4";
this.imageBox4.NormalImage = global::RandomFileRunner.UIResource.arrow_down;
this.imageBox4.SelectedImage = null;
this.imageBox4.Size = new System.Drawing.Size(18, 18);
this.imageBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.imageBox4.TabIndex = 5;
this.imageBox4.TabStop = false;
this.toolTip1.SetToolTip(this.imageBox4, "Move Down");
this.imageBox4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
this.imageBox4.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox4_MouseClick);
//
// imageBox3
//
this.imageBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.imageBox3.BackColor = System.Drawing.Color.Transparent;
this.imageBox3.BackColorHover = System.Drawing.Color.Transparent;
this.imageBox3.BackColorNormal = System.Drawing.Color.Transparent;
this.imageBox3.BackColorSelected = System.Drawing.Color.Transparent;
this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.imageBox3.ErrorImage = null;
this.imageBox3.HoverImage = global::RandomFileRunner.UIResource.arrow_up2;
this.imageBox3.Image = global::RandomFileRunner.UIResource.arrow_up;
this.imageBox3.ImageHover = global::RandomFileRunner.UIResource.arrow_up2;
this.imageBox3.ImageNormal = global::RandomFileRunner.UIResource.arrow_up;
this.imageBox3.ImageSelected = null;
this.imageBox3.InitialImage = null;
this.imageBox3.IsSelected = false;
this.imageBox3.Location = new System.Drawing.Point(106, 72);
this.imageBox3.Name = "imageBox3";
this.imageBox3.NormalImage = global::RandomFileRunner.UIResource.arrow_up;
this.imageBox3.SelectedImage = null;
this.imageBox3.Size = new System.Drawing.Size(18, 18);
this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.imageBox3.TabIndex = 4;
this.imageBox3.TabStop = false;
this.toolTip1.SetToolTip(this.imageBox3, "Move Up");
this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
this.imageBox3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
//
// imageBox1
//
this.imageBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.imageBox1.BackColor = System.Drawing.Color.Transparent;
this.imageBox1.BackColorHover = System.Drawing.Color.Transparent;
this.imageBox1.BackColorNormal = System.Drawing.Color.Transparent;
this.imageBox1.BackColorSelected = System.Drawing.Color.Transparent;
this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.imageBox1.ErrorImage = null;
this.imageBox1.HoverImage = global::RandomFileRunner.UIResource.plus2;
this.imageBox1.Image = global::RandomFileRunner.UIResource.plus;
this.imageBox1.ImageHover = global::RandomFileRunner.UIResource.plus2;
this.imageBox1.ImageNormal = global::RandomFileRunner.UIResource.plus;
this.imageBox1.ImageSelected = null;
this.imageBox1.InitialImage = null;
this.imageBox1.IsSelected = false;
this.imageBox1.Location = new System.Drawing.Point(106, 4);
this.imageBox1.Name = "imageBox1";
this.imageBox1.NormalImage = global::RandomFileRunner.UIResource.plus;
this.imageBox1.SelectedImage = null;
this.imageBox1.Size = new System.Drawing.Size(18, 18);
this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.imageBox1.TabIndex = 2;
this.imageBox1.TabStop = false;
this.toolTip1.SetToolTip(this.imageBox1, "Add");
this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
this.imageBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
//
// contextMenuStrip1
//
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addItemToolStripMenuItem,
this.toolStripMenuItem2,
this.toolStripSeparator3,
this.editToolStripMenuItem,
this.toolStripSeparator2,
this.removeToolStripMenuItem,
this.toolStripMenuItem1,
this.toolStripSeparator1,
this.moveToTopToolStripMenuItem,
this.moveUpToolStripMenuItem,
this.moveDownToolStripMenuItem,
this.moveToBottomToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(163, 220);
//
// addItemToolStripMenuItem
//
this.addItemToolStripMenuItem.Name = "addItemToolStripMenuItem";
this.addItemToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.addItemToolStripMenuItem.Text = "&Add";
this.addItemToolStripMenuItem.Click += new System.EventHandler(this.addItemToolStripMenuItem_Click);
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(162, 22);
this.toolStripMenuItem2.Text = "&Copy";
this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(159, 6);
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.editToolStripMenuItem.Text = "&Edit";
this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(159, 6);
//
// removeToolStripMenuItem
//
this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
this.removeToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.removeToolStripMenuItem.Text = "&Remove";
this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(162, 22);
this.toolStripMenuItem1.Text = "Remove A&ll";
this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(159, 6);
//
// moveToTopToolStripMenuItem
//
this.moveToTopToolStripMenuItem.Name = "moveToTopToolStripMenuItem";
this.moveToTopToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.moveToTopToolStripMenuItem.Text = "Move To &Top";
this.moveToTopToolStripMenuItem.Click += new System.EventHandler(this.moveToTopToolStripMenuItem_Click);
//
// moveUpToolStripMenuItem
//
this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem";
this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.moveUpToolStripMenuItem.Text = "Move &Up";
this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click);
//
// moveDownToolStripMenuItem
//
this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem";
this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.moveDownToolStripMenuItem.Text = "Move &Down";
this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click);
//
// moveToBottomToolStripMenuItem
//
this.moveToBottomToolStripMenuItem.Name = "moveToBottomToolStripMenuItem";
this.moveToBottomToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.moveToBottomToolStripMenuItem.Text = "Move To &Bottom";
this.moveToBottomToolStripMenuItem.Click += new System.EventHandler(this.moveToBottomToolStripMenuItem_Click);
//
// tImageBox1
//
this.tImageBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.tImageBox1.BackColor = System.Drawing.Color.Transparent;
this.tImageBox1.BackColorHover = System.Drawing.Color.Transparent;
this.tImageBox1.BackColorNormal = System.Drawing.Color.Transparent;
this.tImageBox1.BackColorSelected = System.Drawing.Color.Transparent;
this.tImageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.tImageBox1.ErrorImage = null;
this.tImageBox1.HoverImage = global::RandomFileRunner.UIResource.edit2;
this.tImageBox1.Image = global::RandomFileRunner.UIResource.edit;
this.tImageBox1.ImageHover = global::RandomFileRunner.UIResource.edit2;
this.tImageBox1.ImageNormal = global::RandomFileRunner.UIResource.edit;
this.tImageBox1.ImageSelected = null;
this.tImageBox1.InitialImage = null;
this.tImageBox1.IsSelected = false;
this.tImageBox1.Location = new System.Drawing.Point(106, 24);
this.tImageBox1.Name = "tImageBox1";
this.tImageBox1.NormalImage = global::RandomFileRunner.UIResource.edit;
this.tImageBox1.SelectedImage = null;
this.tImageBox1.Size = new System.Drawing.Size(18, 18);
this.tImageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.tImageBox1.TabIndex = 7;
this.tImageBox1.TabStop = false;
this.toolTip1.SetToolTip(this.tImageBox1, "Edit");
this.tImageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tImageBox1_MouseClick);
this.tImageBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.tImageBox1_MouseClick);
//
// TListBox
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.tImageBox1);
this.Controls.Add(this.imageBox5);
this.Controls.Add(this.imageBox4);
this.Controls.Add(this.imageBox3);
this.Controls.Add(this.imageBox1);
this.Controls.Add(this.listBox1);
this.Name = "TListBox";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 225);
((System.ComponentModel.ISupportInitialize)(this.imageBox5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
this.contextMenuStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.tImageBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListBox listBox1;
private Forms.TImageBox imageBox1;
private Forms.TImageBox imageBox3;
private Forms.TImageBox imageBox4;
private Forms.TImageBox imageBox5;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem addItemToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem moveToTopToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveUpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveDownToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveToBottomToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
private Forms.TImageBox tImageBox1;
}
}

View File

@ -0,0 +1,69 @@
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>114, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,60 @@
namespace RyzStudio.Windows.ThemedForms
{
using RyzStudio.Drawing;
using RyzStudio.Windows.Forms;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class TMemoBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(6, 6, 0, 6);
public TMemoBox() : base()
{
InitializeComponent();
this.Margin = new Padding(10, 6, 10, 6);
}
//protected override void OnResize(EventArgs e)
//{
// base.OnResize(e);
// int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
// this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
//}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
textBox1.Focus();
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public new string Text { get => ThreadControl.GetText(textBox1); set => ThreadControl.SetText(textBox1, value); }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get { return base.Margin; } set { base.Margin = value; } }
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,63 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TMemoBox
{
/// <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.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.AcceptsReturn = true;
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox1.HideSelection = false;
this.textBox1.Location = new System.Drawing.Point(4, 4);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Size = new System.Drawing.Size(121, 25);
this.textBox1.TabIndex = 0;
//
// MemoBox
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.textBox1);
this.Name = "MemoBox";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox1;
}
}

View File

@ -0,0 +1,99 @@
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TNumericBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(4, 4, 4, 4);
public TNumericBox() : base()
{
InitializeComponent();
this.Margin = new Padding(10, 6, 10, 6);
this.Font = new Font(this.Font, FontStyle.Regular);
numericUpDown1.Font = this.Font;
numericUpDown1.PreviewKeyDown += textBox_PreviewKeyDown;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Height = numericUpDown1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
this.Invalidate();
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
numericUpDown1.Focus();
}
protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
if (this.SubmitButton != null)
{
this.SubmitButton.PerformClick();
}
break;
case Keys.Escape:
close();
break;
default: break;
}
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.NumericUpDown InnerControl { get => numericUpDown1; set => numericUpDown1 = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public int Value
{
get => (int)numericUpDown1.Value;
set
{
numericUpDown1.Value = value;
}
}
//[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
//[Category("Appearance")]
//public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public TButton SubmitButton { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get { return base.Margin; } set { base.Margin = value; } }
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,60 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TNumericBox
{
/// <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.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
this.SuspendLayout();
//
// numericUpDown1
//
this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.numericUpDown1.Dock = System.Windows.Forms.DockStyle.Fill;
this.numericUpDown1.Location = new System.Drawing.Point(4, 4);
this.numericUpDown1.Name = "numericUpDown1";
this.numericUpDown1.Size = new System.Drawing.Size(121, 19);
this.numericUpDown1.TabIndex = 0;
//
// TNumericBox
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.numericUpDown1);
this.Name = "TNumericBox";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.NumericUpDown numericUpDown1;
}
}

View File

@ -0,0 +1,60 @@
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,50 @@
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TProgressBar : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(2, 2, 2, 2);
public TProgressBar() : base()
{
InitializeComponent();
this.Margin = new Padding(10, 6, 10, 6);
this.Font = new Font(this.Font, FontStyle.Regular);
customProgressBar1.Font = this.Font;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.Invalidate();
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public RyzStudio.Windows.Forms.TCustomProgressBar InnerControl { get => customProgressBar1; set => customProgressBar1 = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = value; }
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,65 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TProgressBar
{
/// <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.customProgressBar1 = new RyzStudio.Windows.Forms.TCustomProgressBar();
this.SuspendLayout();
//
// customProgressBar1
//
this.customProgressBar1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.customProgressBar1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.customProgressBar1.BarColour = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(225)))), ((int)(((byte)(249)))));
this.customProgressBar1.BarTextColour = System.Drawing.SystemColors.ControlText;
this.customProgressBar1.Dock = System.Windows.Forms.DockStyle.Fill;
this.customProgressBar1.Location = new System.Drawing.Point(4, 4);
this.customProgressBar1.Margin = new System.Windows.Forms.Padding(0);
this.customProgressBar1.Maximum = 100;
this.customProgressBar1.Minimum = 0;
this.customProgressBar1.Name = "customProgressBar1";
this.customProgressBar1.Size = new System.Drawing.Size(121, 25);
this.customProgressBar1.TabIndex = 0;
this.customProgressBar1.Value = 50;
//
// TProgressBar
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.customProgressBar1);
this.Name = "TProgressBar";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
this.ResumeLayout(false);
}
#endregion
private Forms.TCustomProgressBar customProgressBar1;
}
}

View File

@ -0,0 +1,60 @@
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,106 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using RyzStudio.Drawing;
using System.ComponentModel;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TUserControl : System.Windows.Forms.UserControl
{
public class ThemeStyle
{
public int BorderWidth;
public int BorderRadius;
public int BorderPadding;
public Color BorderColour;
public Color BackColour;
public Color ForeColour;
public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour)
{
this.BorderWidth = borderWidth;
this.BorderRadius = borderRadius;
this.BorderPadding = borderPadding;
this.BorderColour = borderColour;
this.BackColour = backColour;
this.ForeColour = Color.Black;
}
public ThemeStyle(int borderWidth, int borderRadius, int borderPadding, Color borderColour, Color backColour, Color foreColour)
{
this.BorderWidth = borderWidth;
this.BorderRadius = borderRadius;
this.BorderPadding = borderPadding;
this.BorderColour = borderColour;
this.BackColour = backColour;
this.ForeColour = foreColour;
}
}
protected ThemeStyle styleActive = new ThemeStyle(1, 3, 2, Color.FromArgb(212, 212, 212), Color.White);
public TUserControl()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.BackColor = Color.Transparent;
}
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
Graphics g = e.Graphics;
//g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
//g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
updateBackground(g, styleActive);
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
protected virtual void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding(b, b, (b - 1), (b - 1));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
protected virtual void close()
{
if (this.Parent == null)
{
return;
}
if (this.Parent is Form)
{
(this.Parent as Form).Close();
return;
}
if (this.Parent.GetType().IsSubclassOf(typeof(System.Windows.Forms.Form)))
{
System.Windows.Forms.Form parentForm = (System.Windows.Forms.Form)this.Parent;
if (parentForm != null)
{
parentForm.Close();
}
}
}
}
}

View File

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

View File

@ -0,0 +1,120 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,161 @@
namespace RyzStudio.Windows.ThemedForms
{
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class TButtonTextBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding defaultPadding = new Padding(6, 5, 6, 6);
protected readonly Padding defaultMargin = new Padding(10, 0, 0, 10);
public TButtonTextBox() : base()
{
InitializeComponent();
//this.Margin = new Padding(10, 6, 10, 6);
this.Margin = defaultMargin;
this.Font = new Font(this.Font, FontStyle.Regular);
textBox1.Font = this.Font;
textBox1.Left = this.Margin.Left;
textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
imageBox1.MouseClick += imageBox1_MouseClick;
OnResize(null);
}
protected virtual void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
OnButtonClick?.Invoke(sender, e);
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Margin = defaultMargin;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Height = textBox1.Height + (b + defaultPadding.Top) + ((b - 1) + defaultPadding.Bottom);
imageBox1.Width = 18;
imageBox1.Height = textBox1.Height + defaultPadding.Top + defaultPadding.Bottom;
imageBox1.Left = this.Width - (this.Margin.Right + b + imageBox1.Width);
textBox1.Left = this.Margin.Left;
textBox1.Width = imageBox1.Left - textBox1.Left - 3;
textBox1.Top = (int)Math.Ceiling(decimal.Divide((this.Height - textBox1.Height), 2));
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
textBox1.Focus();
}
protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
if (this.SubmitButton != null)
{
this.SubmitButton.PerformClick();
}
break;
case Keys.Escape:
close();
break;
default: break;
}
}
[Category("Action")]
[Browsable(true)]
public event EventHandler OnButtonClick;
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public Forms.TImageBox InnerImageBox { get => imageBox1; set => imageBox1 = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
[Category("Appearance"), Browsable(true)]
public Image NormalImage { get => imageBox1.ImageNormal; set => imageBox1.ImageNormal = value; }
[Category("Appearance"), Browsable(true)]
public Image HighlightImage { get => imageBox1.ImageHover; set => imageBox1.ImageHover = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public new string Text
{
get => textBox1.Text;
set
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new MethodInvoker(() => {
textBox1.Text = value;
textBox1.SelectionStart = textBox1.Text.Length;
}));
}
else
{
textBox1.Text = value;
textBox1.SelectionStart = textBox1.Text.Length;
}
}
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public TButton SubmitButton { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = defaultMargin; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
public void SetTooltipText(ToolTip toolTip, string text)
{
toolTip.SetToolTip(imageBox1, text);
}
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + defaultPadding.Left), (b + defaultPadding.Top), ((b - 1) + defaultPadding.Right), ((b - 1) + defaultPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,81 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TButtonTextBox
{
/// <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.textBox1 = new System.Windows.Forms.TextBox();
this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.BackColor = System.Drawing.SystemColors.Window;
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox1.HideSelection = false;
this.textBox1.Location = new System.Drawing.Point(7, 7);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(68, 13);
this.textBox1.TabIndex = 0;
//
// imageBox1
//
this.imageBox1.BackColor = System.Drawing.Color.Transparent;
this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.imageBox1.ErrorImage = null;
this.imageBox1.ImageHover = null;
this.imageBox1.Image = null;
this.imageBox1.InitialImage = null;
this.imageBox1.Location = new System.Drawing.Point(107, 4);
this.imageBox1.Name = "imageBox1";
this.imageBox1.ImageNormal = null;
this.imageBox1.Size = new System.Drawing.Size(18, 25);
this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.imageBox1.TabIndex = 1;
this.imageBox1.TabStop = false;
//
// TextBox2
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.imageBox1);
this.Controls.Add(this.textBox1);
this.Name = "TextBox2";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox1;
private Forms.TImageBox imageBox1;
}
}

View File

@ -0,0 +1,42 @@
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using UIResources = RandomFileRunner.UIResource;
namespace RyzStudio.Windows.ThemedForms
{
public class TClearableTextBox : TButtonTextBox
{
public TClearableTextBox()
{
this.NormalImage = UIResources.trash;
this.HighlightImage = UIResources.trash2;
this.Text = string.Empty;
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image NormalImage { get => base.NormalImage; set => base.NormalImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image HighlightImage { get => base.HighlightImage; set => base.HighlightImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Forms.TImageBox InnerImageBox { get => base.InnerImageBox; set => base.InnerImageBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new TextBox InnerTextBox { get => base.InnerTextBox; set => base.InnerTextBox = value; }
protected override void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
this.Text = string.Empty;
}
}
}

View File

@ -0,0 +1,62 @@
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using UIResources = RandomFileRunner.UIResource;
namespace RyzStudio.Windows.ThemedForms
{
public class TFolderTextBox : TButtonTextBox
{
public TFolderTextBox() : base()
{
this.NormalImage = UIResources.folder;
this.HighlightImage = UIResources.folder2;
this.Text = string.Empty;
}
public FolderBrowserDialog FolderDialog { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image NormalImage { get => base.NormalImage; set => base.NormalImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image HighlightImage { get => base.HighlightImage; set => base.HighlightImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Forms.TImageBox InnerImageBox { get => base.InnerImageBox; set => base.InnerImageBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new TextBox InnerTextBox { get => base.InnerTextBox; set => base.InnerTextBox = value; }
protected override void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
if (this.FolderDialog == null)
{
this.FolderDialog = new FolderBrowserDialog();
this.FolderDialog.Description = "Choose a directory";
}
if (!string.IsNullOrWhiteSpace(this.Text))
{
if (Directory.Exists(this.Text))
{
this.FolderDialog.SelectedPath = this.Text;
}
}
if (this.FolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.Text = this.FolderDialog.SelectedPath;
}
}
}
}

View File

@ -0,0 +1,96 @@
using System.Text;
using System.Windows.Forms;
using UIResources = RandomFileRunner.UIResource;
namespace RyzStudio.Windows.ThemedForms
{
public class TKeyCodeTextBox : TButtonTextBox
{
public class Results
{
public bool IsCtrl { get; set; } = false;
public bool IsAlt { get; set; } = false;
public bool IsShift { get; set; } = false;
public Keys Key { get; set; } = Keys.None;
public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0));
public int KeyCode => (int)this.Key;
public string DisplayText
{
get
{
StringBuilder sb = new StringBuilder();
if (this.IsCtrl) sb.Append("Ctrl+");
if (this.IsShift) sb.Append("Shift+");
if (this.IsAlt) sb.Append("Alt+");
sb.Append(this.Key.ToString());
return sb.ToString();
}
}
public void Clear()
{
this.IsCtrl = false;
this.IsAlt = false;
this.IsShift = false;
this.Key = Keys.None;
}
}
public Results KeyCodeResults { get; set; } = new Results();
public TKeyCodeTextBox() : base()
{
this.NormalImage = UIResources.trash;
this.HighlightImage = UIResources.trash2;
this.Text = string.Empty;
this.InnerTextBox.ReadOnly = true;
this.InnerTextBox.PreviewKeyDown += textBox1_PreviewKeyDown;
}
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.ControlKey) return;
if (e.KeyCode == Keys.ShiftKey) return;
if (e.KeyCode == Keys.Menu) return;
this.KeyCodeResults.IsCtrl = e.Control;
this.KeyCodeResults.IsAlt = e.Alt;
this.KeyCodeResults.IsShift = e.Shift;
this.KeyCodeResults.Key = e.KeyCode;
this.Text = this.KeyCodeResults.DisplayText;
}
protected override void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
this.KeyCodeResults.Clear();
this.Text = this.KeyCodeResults.DisplayText;
}
public void UpdateKeyCode(bool isCtrl, bool isAlt, bool isShift, Keys key)
{
this.KeyCodeResults.IsCtrl = isCtrl;
this.KeyCodeResults.IsAlt = isAlt;
this.KeyCodeResults.IsShift = isShift;
this.KeyCodeResults.Key = key;
this.Text = this.KeyCodeResults.DisplayText;
}
}
}

View File

@ -0,0 +1,64 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using UIResources = RandomFileRunner.UIResource;
namespace RyzStudio.Windows.ThemedForms
{
public class TOpenFileTextBox : TButtonTextBox
{
public TOpenFileTextBox() : base()
{
this.NormalImage = UIResources.file;
this.HighlightImage = UIResources.file2;
this.Text = string.Empty;
}
public OpenFileDialog FileDialog { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image NormalImage { get => base.NormalImage; set => base.NormalImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Image HighlightImage { get => base.HighlightImage; set => base.HighlightImage = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Forms.TImageBox InnerImageBox { get => base.InnerImageBox; set => base.InnerImageBox = value; }
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new TextBox InnerTextBox { get => base.InnerTextBox; set => base.InnerTextBox = value; }
protected override void imageBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
if (this.FileDialog == null)
{
this.FileDialog = new OpenFileDialog();
this.FileDialog.Title = "Choose a file";
this.FileDialog.Filter = "All files|*";
}
if (!string.IsNullOrWhiteSpace(this.Text))
{
if (File.Exists(this.Text))
{
this.FileDialog.InitialDirectory = Path.GetDirectoryName(this.Text);
}
}
if (this.FileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.Text = this.FileDialog.FileName;
}
}
}
}

View File

@ -0,0 +1,109 @@
using RyzStudio.Drawing;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace RyzStudio.Windows.ThemedForms
{
public partial class TTextBox : RyzStudio.Windows.ThemedForms.TUserControl
{
protected readonly Padding textboxPadding = new Padding(6, 6, 6, 6);
protected readonly Padding defaultMargin = new Padding(10, 0, 0, 10);
public TTextBox()
{
InitializeComponent();
this.Margin = defaultMargin;
this.Font = new Font(this.Font, FontStyle.Regular);
this.Name = "TextBox";
textBox1.Font = this.Font;
textBox1.PreviewKeyDown += textBox_PreviewKeyDown;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Margin = defaultMargin;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Height = textBox1.Height + (b + textboxPadding.Top) + ((b - 1) + textboxPadding.Bottom);
this.Invalidate();
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
textBox1.Focus();
}
protected void textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
if (this.SubmitButton != null)
{
this.SubmitButton.PerformClick();
}
break;
case Keys.Escape:
close();
break;
default: break;
}
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public System.Windows.Forms.TextBox InnerTextBox { get => textBox1; set => textBox1 = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public new string Text
{
get => textBox1.Text;
set
{
textBox1.Text = value;
textBox1.SelectionStart = textBox1.Text.Length;
}
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public bool UseSystemPasswordChar { get => textBox1.UseSystemPasswordChar; set => textBox1.UseSystemPasswordChar = value; }
[Browsable(true), EditorBrowsable(EditorBrowsableState.Advanced)]
[Category("Appearance")]
public TButton SubmitButton { get; set; } = null;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Margin { get => base.Margin; set => base.Margin = defaultMargin; }
protected override void updateBackground(Graphics g, ThemeStyle style)
{
int b = (styleActive.BorderWidth + 1) + styleActive.BorderPadding;
this.Padding = new Padding((b + textboxPadding.Left), (b + textboxPadding.Top), ((b - 1) + textboxPadding.Right), ((b - 1) + textboxPadding.Bottom));
Rectangoid area = new Rectangoid(this.ClientRectangle, style.BorderRadius, style.BorderWidth);
g.FillPath(new SolidBrush(style.BackColour), area.ToGraphicsPath());
g.DrawPath(new Pen(new SolidBrush(style.BorderColour), style.BorderWidth), area.ToGraphicsPath());
}
}
}

View File

@ -0,0 +1,60 @@
namespace RyzStudio.Windows.ThemedForms
{
partial class TTextBox
{
/// <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.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox1.HideSelection = false;
this.textBox1.Location = new System.Drawing.Point(4, 4);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(121, 13);
this.textBox1.TabIndex = 0;
//
// TextBox
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.textBox1);
this.Name = "TextBox";
this.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
this.Size = new System.Drawing.Size(128, 32);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox1;
}
}

View File

@ -0,0 +1,120 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

263
UIResource.Designer.cs generated Normal file
View File

@ -0,0 +1,263 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace RandomFileRunner {
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", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class UIResource {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal UIResource() {
}
/// <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("RandomFileRunner.UIResource", typeof(UIResource).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 resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_down {
get {
object obj = ResourceManager.GetObject("arrow_down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_down2 {
get {
object obj = ResourceManager.GetObject("arrow_down2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_up {
get {
object obj = ResourceManager.GetObject("arrow_up", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap arrow_up2 {
get {
object obj = ResourceManager.GetObject("arrow_up2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap circle_menu {
get {
object obj = ResourceManager.GetObject("circle_menu", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap circle_menu2 {
get {
object obj = ResourceManager.GetObject("circle_menu2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap cog {
get {
object obj = ResourceManager.GetObject("cog", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap cog2 {
get {
object obj = ResourceManager.GetObject("cog2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap edit {
get {
object obj = ResourceManager.GetObject("edit", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap edit2 {
get {
object obj = ResourceManager.GetObject("edit2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap file {
get {
object obj = ResourceManager.GetObject("file", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap file2 {
get {
object obj = ResourceManager.GetObject("file2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap folder {
get {
object obj = ResourceManager.GetObject("folder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap folder2 {
get {
object obj = ResourceManager.GetObject("folder2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap plus {
get {
object obj = ResourceManager.GetObject("plus", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap plus2 {
get {
object obj = ResourceManager.GetObject("plus2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap refresh {
get {
object obj = ResourceManager.GetObject("refresh", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap refresh2 {
get {
object obj = ResourceManager.GetObject("refresh2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap trash {
get {
object obj = ResourceManager.GetObject("trash", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap trash2 {
get {
object obj = ResourceManager.GetObject("trash2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

181
UIResource.resx Normal file
View File

@ -0,0 +1,181 @@
<?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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="arrow_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_down2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\arrow_down2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\arrow_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="arrow_up2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\arrow_up2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="circle_menu" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\circle_menu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="circle_menu2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\circle_menu2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cog" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\cog.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="cog2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\cog2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\edit2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="file" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="file2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\file2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\folder2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="plus2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\plus2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="refresh2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\refresh2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="trash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\trash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="trash2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UI\trash2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -1,17 +0,0 @@
RMDIR /s /q "bin\"
RMDIR /s /q "obj\"
MKDIR bin
dotnet restore skye.sln
dotnet publish skye.sln -r win-x64 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="bin\"
REM "C:\B\Portable Files (dev)\Inno Setup\v6.0.4-2\app\ISCC.exe" "build-installer.iss"
"C:\B\Portable Files\7-Zip (Portable)\23.01\App\7-Zip64\7z.exe" a -t7z "bin\randomfilerunner.7z" ".\bin\randomfilerunner.exe" -mx9
RMDIR /s /q "bin\debug"
RMDIR /s /q "bin\release"
RMDIR /s /q "obj\"
PAUSE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 16
VisualStudioVersion = 17.10.35004.147 VisualStudioVersion = 16.0.31702.278
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RandomFileRunner", "RandomFileRunner.csproj", "{5F301DDB-6E01-4492-BABC-E134722EF0AC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RandomFileRunner", "RandomFileRunner.csproj", "{5F301DDB-6E01-4492-BABC-E134722EF0AC}"
EndProject EndProject