diff --git a/AppResource.Designer.cs b/AppResource.Designer.cs index 6619817..7e137ef 100644 --- a/AppResource.Designer.cs +++ b/AppResource.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace FizzyLauncher { +namespace RokettoLaunch { using System; @@ -39,7 +39,7 @@ namespace FizzyLauncher { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FizzyLauncher.AppResource", typeof(AppResource).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RokettoLaunch.AppResource", typeof(AppResource).Assembly); resourceMan = temp; } return resourceMan; @@ -60,6 +60,24 @@ namespace FizzyLauncher { } } + /// + /// Looks up a localized string similar to . + /// + internal static string AppAuthorURL { + get { + return ResourceManager.GetString("AppAuthorURL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to https://www.hiimray.co.uk. + /// + internal static string AppCompanyURL { + get { + return ResourceManager.GetString("AppCompanyURL", resourceCulture); + } + } + /// /// Looks up a localized string similar to https://www.hiimray.co.uk/software-fizzy-launcher. /// @@ -69,6 +87,15 @@ namespace FizzyLauncher { } } + /// + /// Looks up a localized string similar to https://www.hiimray.co.uk/software-fizzy-launcher. + /// + internal static string AppProductURL { + get { + return ResourceManager.GetString("AppProductURL", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -132,19 +159,9 @@ namespace FizzyLauncher { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap toggle_left_ea_16 { + internal static System.Drawing.Bitmap icon_64 { get { - object obj = ResourceManager.GetObject("toggle_left_ea_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap toggle_right_ea_16 { - get { - object obj = ResourceManager.GetObject("toggle_right_ea_16", resourceCulture); + object obj = ResourceManager.GetObject("icon_64", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/AppResource.resx b/AppResource.resx index dd727d7..cd59975 100644 --- a/AppResource.resx +++ b/AppResource.resx @@ -117,9 +117,18 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + https://www.hiimray.co.uk + https://www.hiimray.co.uk/software-fizzy-launcher + + https://www.hiimray.co.uk/software-fizzy-launcher + Resources\cog2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -139,10 +148,7 @@ Resources\help2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - Resources\toggle-left-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Resources\toggle-right-ea-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Resources\icon-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/EditGroupForm.cs b/EditGroupForm.cs new file mode 100644 index 0000000..6f02d45 --- /dev/null +++ b/EditGroupForm.cs @@ -0,0 +1,186 @@ +using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; +using RyzStudio.Windows.ThemedForms; +using RyzStudio.Windows.ThemedForms.ButtonTextBox; +using RyzStudio.Windows.ThemedForms.PickerBox; + +namespace RokettoLaunch +{ + public class EditGroupForm : TDialog + { + private Label label2; + private Label label1; + private ThButton button1; + private ThYesNoPickerBox pickerBox1; + private THorizontalSeparator horizontalSeparator2; + private ThClearableTextBox textBox1; + + private TileGroupModel result = null; + + + public EditGroupForm(TileGroupModel model = null) + { + InitializeComponent(); + + result = model; + + StartPosition = FormStartPosition.WindowsDefaultLocation; + Text = result == null ? "Add Group" : "Edit Group"; + OkButton = button1; + + pickerBox1.ComboBox.Items.Clear(); + pickerBox1.ComboBox.Items.AddRange(new string[] { "No", "Yes" }); + if (pickerBox1.ComboBox.Items.Count > 0) + { + pickerBox1.ComboBox.SelectedIndex = 0; + } + + if (result != null) + { + textBox1.Text = result.Title?.Trim() ?? string.Empty; + pickerBox1.Value = result.IsExpanded; + } + } + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditGroupForm)); + textBox1 = new ThClearableTextBox(); + label2 = new Label(); + label1 = new Label(); + button1 = new ThButton(); + pickerBox1 = new ThYesNoPickerBox(); + horizontalSeparator2 = new THorizontalSeparator(); + SuspendLayout(); + // + // textBox1 + // + textBox1.AcceptButton = null; + textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox1.BackColor = System.Drawing.Color.Transparent; + textBox1.ClearedValue = ""; + textBox1.EnableReactiveVisual = true; + textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + textBox1.HighlightImage = (System.Drawing.Image)resources.GetObject("textBox1.HighlightImage"); + textBox1.Location = new System.Drawing.Point(192, 20); + textBox1.Margin = new Padding(10, 10, 10, 0); + textBox1.Name = "textBox1"; + textBox1.NormalImage = (System.Drawing.Image)resources.GetObject("textBox1.NormalImage"); + textBox1.Padding = new Padding(4, 4, 3, 3); + textBox1.Size = new System.Drawing.Size(177, 32); + textBox1.TabIndex = 152; + textBox1.TabStop = false; + textBox1.UseSystemPasswordChar = false; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = System.Drawing.Color.Transparent; + label2.ForeColor = System.Drawing.SystemColors.ControlText; + label2.Location = new System.Drawing.Point(10, 62); + label2.Name = "label2"; + label2.Padding = new Padding(0, 9, 0, 10); + label2.Size = new System.Drawing.Size(91, 34); + label2.TabIndex = 155; + label2.Text = "Show Expanded"; + label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.Transparent; + label1.ForeColor = System.Drawing.SystemColors.ControlText; + label1.Location = new System.Drawing.Point(10, 21); + label1.Margin = new Padding(0); + label1.Name = "label1"; + label1.Padding = new Padding(0, 9, 0, 10); + label1.Size = new System.Drawing.Size(29, 34); + label1.TabIndex = 153; + label1.Text = "Title"; + label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // button1 + // + button1.AcceptButton = null; + button1.ActiveImage = null; + button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + button1.BackColor = System.Drawing.Color.Transparent; + button1.EnableMenuOnClick = false; + button1.EnableReactiveVisual = true; + button1.HoverImage = null; + button1.IdleImage = null; + button1.LabelText = "&Save"; + button1.Location = new System.Drawing.Point(241, 469); + button1.Margin = new Padding(10, 10, 10, 0); + button1.Name = "button1"; + button1.Padding = new Padding(4, 4, 3, 3); + button1.Size = new System.Drawing.Size(128, 32); + button1.TabIndex = 173; + button1.TabStop = false; + // + // pickerBox1 + // + pickerBox1.AcceptButton = null; + pickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; + pickerBox1.BackColor = System.Drawing.Color.Transparent; + pickerBox1.EnableReactiveVisual = true; + pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + pickerBox1.Location = new System.Drawing.Point(285, 62); + pickerBox1.Name = "pickerBox1"; + pickerBox1.Padding = new Padding(4, 4, 3, 3); + pickerBox1.SelectedIndex = 0; + pickerBox1.Size = new System.Drawing.Size(84, 34); + pickerBox1.TabIndex = 174; + pickerBox1.TabStop = false; + pickerBox1.Value = false; + // + // horizontalSeparator2 + // + horizontalSeparator2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); + horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); + horizontalSeparator2.BackColor = System.Drawing.Color.Transparent; + horizontalSeparator2.Location = new System.Drawing.Point(10, 437); + horizontalSeparator2.Margin = new Padding(0, 10, 0, 0); + horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); + horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); + horizontalSeparator2.Name = "horizontalSeparator2"; + horizontalSeparator2.Size = new System.Drawing.Size(364, 22); + horizontalSeparator2.TabIndex = 182; + horizontalSeparator2.TabStop = false; + // + // EditGroupForm + // + ClientSize = new System.Drawing.Size(384, 521); + Controls.Add(horizontalSeparator2); + Controls.Add(pickerBox1); + Controls.Add(button1); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(textBox1); + MinimumSize = new System.Drawing.Size(400, 560); + Name = "EditGroupForm"; + Text = "Edit Group"; + ResumeLayout(false); + PerformLayout(); + } + + public TileGroupModel Result + { + get + { + if (result == null) + { + result = new TileGroupModel(); + } + + result.Title = textBox1.Text?.Trim() ?? string.Empty; + result.IsExpanded = pickerBox1.Value; + + return result; + } + } + + } +} \ No newline at end of file diff --git a/EditGroupForm.resx b/EditGroupForm.resx new file mode 100644 index 0000000..0386da6 --- /dev/null +++ b/EditGroupForm.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAN5JREFUOE/tUzsKwkAUXLCyFMHjeIvdB4Gk8ALamU4rsbLaTWz0AOYGOYMewTqe + QLEQnZc8WRMSsBYHhrzPzJBin2pC60PPGLs3xl3Bp5DrHe9E1g2tHUH8QMjKmGReketyZkRWh9abfhTZ + YRimI4jWRPYSBMngkzzjHWtYyx6xK4X0Anz/7rcsxM4BdoxBTuTOqCdEaUyU6DrTuNqxxuXsEXsFDLfg + UdpOsIa10nr8A34p4CRtJ1jTGoC3PsPiBi78ETXplqzBwU3F5sHHgWWGJ3rHt+3tg+Uu84ek1AsYYd8q + EsfwCwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAANFJREFUOE/tkzEKAjEURANWliJ4HG+h9l5AO7fTSjyCxWpCIBB2b+AZ9AjW6wlc + LGSdWb9Elw1YiwOP/Pw/E1Ikqqksyzpa670x5goqgfWOM7HFhfAE5jvWNdYFkZq9sdg+laZp13vfBwOY + NjBfnHO9d9jjjB56mZG4UhgW4HXdbykkXl97iMYBnFFPrbUJGDVIOKOHXmYk/hSaW3CUbVT00CvboP8B + v3TASbZR0RM7YA5KsAT1J2phBUq8wpnEgvg5MMwxvGFte/uVzPLwkZR6AInAKK6aICfTAAAAAElFTkSu + QmCC + + + \ No newline at end of file diff --git a/EditTileFolderForm.cs b/EditTileFolderForm.cs new file mode 100644 index 0000000..a79e0e6 --- /dev/null +++ b/EditTileFolderForm.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; +using RyzStudio.Windows.ThemedForms; +using RyzStudio.Windows.ThemedForms.ButtonTextBox; + +namespace RokettoLaunch +{ + public class EditTileFolderForm : TDialog + { + private Label label1; + private ThButton button1; + private THorizontalSeparator horizontalSeparator2; + private ThClearableTextBox textBox1; + private ThListBox listBox1; + private THorizontalSeparator tHorizontalSeparator1; + private Label label2; + + private TileModel result = null; + + + public EditTileFolderForm(TileModel model = null) + { + InitializeComponent(); + + StartPosition = FormStartPosition.WindowsDefaultLocation; + OkButton = button1; + + result = model; + + if (result != null) + { + Text = "Edit Folder"; + + textBox1.Text = result?.Title ?? string.Empty; + + foreach (TileModel item in result.Items ?? new List()) + { + if (item.IsGroup) + { + continue; + } + + listBox1.ListBox.Items.Add(item); + } + } + else + { + Text = "Add Folder"; + } + } + + private void InitializeComponent() + { + textBox1 = new ThClearableTextBox(); + label1 = new Label(); + button1 = new ThButton(); + horizontalSeparator2 = new THorizontalSeparator(); + listBox1 = new ThListBox(); + label2 = new Label(); + tHorizontalSeparator1 = new THorizontalSeparator(); + SuspendLayout(); + // + // textBox1 + // + textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox1.BackColor = Color.Transparent; + textBox1.EnableReactiveVisual = true; + textBox1.Font = new Font("Microsoft Sans Serif", 8.25F); + textBox1.Location = new Point(109, 20); + textBox1.Name = "textBox1"; + textBox1.Size = new Size(260, 35); + textBox1.TabIndex = 152; + textBox1.TabStop = false; + textBox1.UseSystemPasswordChar = false; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = Color.Transparent; + label1.ForeColor = SystemColors.ControlText; + label1.Location = new Point(10, 21); + label1.Margin = new Padding(0); + label1.Name = "label1"; + label1.Padding = new Padding(0, 9, 0, 10); + label1.Size = new Size(29, 34); + label1.TabIndex = 153; + label1.Text = "Title"; + label1.TextAlign = ContentAlignment.MiddleLeft; + // + // button1 + // + button1.AcceptButton = null; + button1.ActiveImage = null; + button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + button1.BackColor = Color.Transparent; + button1.EnableMenuOnClick = false; + button1.EnableReactiveVisual = true; + button1.HoverImage = null; + button1.IdleImage = null; + button1.LabelText = "&Save"; + button1.Location = new Point(241, 469); + button1.Margin = new Padding(10, 10, 10, 0); + button1.Name = "button1"; + button1.Padding = new Padding(4, 4, 3, 3); + button1.Size = new Size(128, 32); + button1.TabIndex = 173; + button1.TabStop = false; + // + // horizontalSeparator2 + // + horizontalSeparator2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + horizontalSeparator2.AutoScrollMargin = new Size(0, 0); + horizontalSeparator2.AutoScrollMinSize = new Size(0, 0); + horizontalSeparator2.BackColor = Color.Transparent; + horizontalSeparator2.Location = new Point(10, 61); + horizontalSeparator2.Margin = new Padding(0, 10, 0, 0); + horizontalSeparator2.MaximumSize = new Size(4920, 2); + horizontalSeparator2.MinimumSize = new Size(0, 22); + horizontalSeparator2.Name = "horizontalSeparator2"; + horizontalSeparator2.Size = new Size(364, 22); + horizontalSeparator2.TabIndex = 177; + horizontalSeparator2.TabStop = false; + // + // listBox1 + // + listBox1.AcceptButton = null; + listBox1.AllowDrop = true; + listBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + listBox1.BackColor = Color.Transparent; + listBox1.EnableReactiveVisual = true; + listBox1.Font = new Font("Microsoft Sans Serif", 8.25F); + listBox1.Location = new Point(109, 87); + listBox1.Margin = new Padding(10, 10, 10, 0); + listBox1.Name = "listBox1"; + listBox1.Padding = new Padding(4, 4, 3, 3); + listBox1.Size = new Size(260, 346); + listBox1.TabIndex = 180; + listBox1.OnAdd += listBox1_OnAdd; + listBox1.OnEdit += listBox1_OnEdit; + listBox1.DragDrop += listBox1_DragDrop; + listBox1.DragOver += listBox1_DragOver; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = Color.Transparent; + label2.ForeColor = SystemColors.ControlText; + label2.Location = new Point(8, 87); + label2.Name = "label2"; + label2.Padding = new Padding(0, 9, 0, 10); + label2.Size = new Size(30, 34); + label2.TabIndex = 181; + label2.Text = "Tiles"; + label2.TextAlign = ContentAlignment.MiddleLeft; + // + // tHorizontalSeparator1 + // + tHorizontalSeparator1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + tHorizontalSeparator1.AutoScrollMargin = new Size(0, 0); + tHorizontalSeparator1.AutoScrollMinSize = new Size(0, 0); + tHorizontalSeparator1.BackColor = Color.Transparent; + tHorizontalSeparator1.Location = new Point(10, 437); + tHorizontalSeparator1.Margin = new Padding(0, 10, 0, 0); + tHorizontalSeparator1.MaximumSize = new Size(4920, 2); + tHorizontalSeparator1.MinimumSize = new Size(0, 22); + tHorizontalSeparator1.Name = "tHorizontalSeparator1"; + tHorizontalSeparator1.Size = new Size(364, 22); + tHorizontalSeparator1.TabIndex = 182; + tHorizontalSeparator1.TabStop = false; + // + // EditTileFolderForm + // + ClientSize = new Size(384, 521); + Controls.Add(tHorizontalSeparator1); + Controls.Add(label2); + Controls.Add(listBox1); + Controls.Add(horizontalSeparator2); + Controls.Add(button1); + Controls.Add(label1); + Controls.Add(textBox1); + MinimumSize = new Size(400, 560); + Name = "EditTileFolderForm"; + Text = "Add List Tile"; + ResumeLayout(false); + PerformLayout(); + } + + + public TileModel Result + { + get + { + if (result == null) + { + result = new TileModel(); + } + + result.Title = textBox1.Text?.Trim() ?? string.Empty; + result.IsGroup = true; + result.Items = new List(); + + foreach (TileModel item in listBox1.ListBox.Items.OfType()) + { + if (item.IsGroup) + { + continue; + } + + result.Items.Add(item); + } + + return result; + } + } + + + private void listBox1_OnAdd(object sender, EventArgs e) + { + var form = new EditTileForm(); + if (form.ShowDialog() == DialogResult.OK) + { + listBox1.ListBox.Items.Add(form.Result); + }; + } + + private void listBox1_OnEdit(object sender, EventArgs e) + { + if (listBox1.ListBox.Items.Count <= 0) + { + return; + } + + var n = listBox1.ListBox.SelectedIndex; + if (n < 0) + { + return; + } + + if (listBox1.ListBox.SelectedItem == null) + { + return; + } + + var form = new EditTileForm((TileModel)listBox1.ListBox.SelectedItem); + if (form.ShowDialog() == DialogResult.OK) + { + listBox1.ListBox.Items.RemoveAt(n); + listBox1.ListBox.Items.Insert(n, form.Result); + }; + } + + private void listBox1_DragOver(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + e.Effect = DragDropEffects.Link; + } + else + { + e.Effect = DragDropEffects.None; + } + } + + private void listBox1_DragDrop(object sender, DragEventArgs e) + { + var fileList = e.Data.GetData(DataFormats.FileDrop) as string[]; + if (fileList == null) + { + return; + } + + if (fileList.Length <= 0) + { + return; + } + + if (string.IsNullOrWhiteSpace(fileList[0])) + { + return; + } + + var model = new TileModel() + { + ProcessFilename = fileList[0], + Title = Path.GetFileName(fileList[0]) + }; + + // exe + if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase)) + { + if (File.Exists(fileList[0])) + { + try + { + FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]); + if (fvi != null) + { + model.Title = fvi.ProductName; + } + } + catch + { + // do nothing + } + } + + + if (string.IsNullOrWhiteSpace(model.Title)) + { + model.Title = Path.GetFileNameWithoutExtension(fileList[0]); + } + } + + listBox1.ListBox.Items.Add(model); + } + + } +} \ No newline at end of file diff --git a/Windows/Forms/TileContainer.resx b/EditTileFolderForm.resx similarity index 93% rename from Windows/Forms/TileContainer.resx rename to EditTileFolderForm.resx index 1af7de1..af32865 100644 --- a/Windows/Forms/TileContainer.resx +++ b/EditTileFolderForm.resx @@ -1,17 +1,17 @@  - diff --git a/EditTileForm.cs b/EditTileForm.cs new file mode 100644 index 0000000..9df9579 --- /dev/null +++ b/EditTileForm.cs @@ -0,0 +1,341 @@ +using System.Drawing; +using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; +using RyzStudio.Windows.ThemedForms; +using RyzStudio.Windows.ThemedForms.ButtonTextBox; +using RyzStudio.Windows.ThemedForms.PickerBox; + +namespace RokettoLaunch +{ + public class EditTileForm : TDialog + { + private Label label6; + private Label label7; + private Label label4; + private Label label3; + private Label label2; + private Label label1; + private ThPathDialogTextBox textBox2; + private ThClearableTextBox textBox3; + private ThPathDialogTextBox textBox4; + private ThButton button1; + private ThPickerBox pickerBox1; + private ThYesNoPickerBox pickerBox2; + private THorizontalSeparator horizontalSeparator1; + private THorizontalSeparator horizontalSeparator2; + private ThClearableTextBox textBox1; + + private TileModel result = null; + + + public EditTileForm(TileModel model = null) + { + InitializeComponent(); + + StartPosition = FormStartPosition.WindowsDefaultLocation; + OkButton = button1; + + result = model; + + pickerBox1.ComboBox.Items.Clear(); + pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" }); + if (pickerBox1.ComboBox.Items.Count > 0) + { + pickerBox1.ComboBox.SelectedIndex = 0; + } + + if (result != null) + { + Text = "Edit Tile"; + + textBox1.Text = result?.Title ?? string.Empty; + textBox2.Text = result?.ProcessFilename ?? string.Empty; + textBox3.Text = result?.ProcessArgument ?? string.Empty; + textBox4.Text = result?.ProcessWorkingDirectory ?? string.Empty; + pickerBox1.ComboBox.SelectedIndex = (int)result.ProcessWindowStyle; + pickerBox2.Value = result.ProcessAsAdmin; + } + else + { + Text = "Add Tile"; + } + } + + private void InitializeComponent() + { + textBox1 = new ThClearableTextBox(); + label6 = new Label(); + label7 = new Label(); + label4 = new Label(); + label3 = new Label(); + label2 = new Label(); + label1 = new Label(); + textBox2 = new ThPathDialogTextBox(); + textBox3 = new ThClearableTextBox(); + textBox4 = new ThPathDialogTextBox(); + button1 = new ThButton(); + pickerBox1 = new ThPickerBox(); + pickerBox2 = new ThYesNoPickerBox(); + horizontalSeparator1 = new THorizontalSeparator(); + horizontalSeparator2 = new THorizontalSeparator(); + SuspendLayout(); + // + // textBox1 + // + textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox1.BackColor = Color.Transparent; + textBox1.EnableReactiveVisual = true; + textBox1.Font = new Font("Segoe UI", 9F); + textBox1.Location = new Point(126, 20); + textBox1.Name = "textBox1"; + textBox1.Size = new Size(243, 35); + textBox1.TabIndex = 152; + textBox1.TabStop = false; + textBox1.UseSystemPasswordChar = false; + // + // label6 + // + label6.AutoSize = true; + label6.BackColor = Color.Transparent; + label6.ForeColor = SystemColors.ControlText; + label6.Location = new Point(10, 250); + label6.Name = "label6"; + label6.Padding = new Padding(0, 9, 0, 10); + label6.Size = new Size(83, 34); + label6.TabIndex = 163; + label6.Text = "Run As Admin"; + label6.TextAlign = ContentAlignment.MiddleLeft; + // + // label7 + // + label7.AutoSize = true; + label7.BackColor = Color.Transparent; + label7.ForeColor = SystemColors.ControlText; + label7.Location = new Point(10, 209); + label7.Name = "label7"; + label7.Padding = new Padding(0, 9, 0, 10); + label7.Size = new Size(79, 34); + label7.TabIndex = 161; + label7.Text = "Window Style"; + label7.TextAlign = ContentAlignment.MiddleLeft; + // + // label4 + // + label4.AutoSize = true; + label4.BackColor = Color.Transparent; + label4.ForeColor = SystemColors.ControlText; + label4.Location = new Point(10, 144); + label4.Name = "label4"; + label4.Padding = new Padding(0, 9, 0, 10); + label4.Size = new Size(103, 34); + label4.TabIndex = 159; + label4.Text = "Working Directory"; + label4.TextAlign = ContentAlignment.MiddleLeft; + // + // label3 + // + label3.AutoSize = true; + label3.BackColor = Color.Transparent; + label3.ForeColor = SystemColors.ControlText; + label3.Location = new Point(10, 103); + label3.Name = "label3"; + label3.Padding = new Padding(0, 9, 0, 10); + label3.Size = new Size(61, 34); + label3.TabIndex = 157; + label3.Text = "Argument"; + label3.TextAlign = ContentAlignment.MiddleLeft; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = Color.Transparent; + label2.ForeColor = SystemColors.ControlText; + label2.Location = new Point(10, 62); + label2.Name = "label2"; + label2.Padding = new Padding(0, 9, 0, 10); + label2.Size = new Size(55, 34); + label2.TabIndex = 155; + label2.Text = "Filename"; + label2.TextAlign = ContentAlignment.MiddleLeft; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = Color.Transparent; + label1.ForeColor = SystemColors.ControlText; + label1.Location = new Point(10, 21); + label1.Margin = new Padding(0); + label1.Name = "label1"; + label1.Padding = new Padding(0, 9, 0, 10); + label1.Size = new Size(29, 34); + label1.TabIndex = 153; + label1.Text = "Title"; + label1.TextAlign = ContentAlignment.MiddleLeft; + // + // textBox2 + // + textBox2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox2.BackColor = Color.Transparent; + textBox2.DialogMode = ThPathDialogTextBox.DialogType.OpenFile; + textBox2.EnableReactiveVisual = true; + textBox2.Font = new Font("Segoe UI", 9F); + textBox2.Location = new Point(126, 61); + textBox2.Margin = new Padding(10, 10, 10, 0); + textBox2.Name = "textBox2"; + textBox2.Size = new Size(243, 32); + textBox2.TabIndex = 170; + textBox2.TabStop = false; + textBox2.UseSystemPasswordChar = false; + // + // textBox3 + // + textBox3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox3.BackColor = Color.Transparent; + textBox3.EnableReactiveVisual = true; + textBox3.Font = new Font("Segoe UI", 9F); + textBox3.Location = new Point(147, 102); + textBox3.Name = "textBox3"; + textBox3.Size = new Size(222, 35); + textBox3.TabIndex = 171; + textBox3.TabStop = false; + // + // textBox4 + // + textBox4.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox4.BackColor = Color.Transparent; + textBox4.DialogMode = ThPathDialogTextBox.DialogType.FolderBrowser; + textBox4.EnableReactiveVisual = true; + textBox4.Font = new Font("Segoe UI", 9F); + textBox4.Location = new Point(147, 143); + textBox4.Name = "textBox4"; + textBox4.Size = new Size(222, 32); + textBox4.TabIndex = 172; + textBox4.TabStop = false; + textBox4.UseSystemPasswordChar = false; + // + // button1 + // + button1.AcceptButton = null; + button1.ActiveImage = null; + button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + button1.BackColor = Color.Transparent; + button1.EnableMenuOnClick = false; + button1.EnableReactiveVisual = true; + button1.HoverImage = null; + button1.IdleImage = null; + button1.LabelText = "&Save"; + button1.Location = new Point(241, 469); + button1.Margin = new Padding(10, 10, 10, 0); + button1.Name = "button1"; + button1.Padding = new Padding(4, 4, 3, 3); + button1.Size = new Size(128, 32); + button1.TabIndex = 173; + button1.TabStop = false; + // + // pickerBox1 + // + pickerBox1.AcceptButton = null; + pickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; + pickerBox1.BackColor = Color.Transparent; + pickerBox1.EnableReactiveVisual = true; + pickerBox1.Font = new Font("Segoe UI", 9F); + pickerBox1.Location = new Point(241, 209); + pickerBox1.Margin = new Padding(10, 10, 10, 0); + pickerBox1.Name = "pickerBox1"; + pickerBox1.Padding = new Padding(4, 4, 3, 3); + pickerBox1.SelectedIndex = -1; + pickerBox1.Size = new Size(128, 34); + pickerBox1.TabIndex = 174; + pickerBox1.TabStop = false; + // + // pickerBox2 + // + pickerBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right; + pickerBox2.BackColor = Color.Transparent; + pickerBox2.EnableReactiveVisual = true; + pickerBox2.Font = new Font("Segoe UI", 9F); + pickerBox2.Location = new Point(285, 250); + pickerBox2.Name = "pickerBox2"; + pickerBox2.Size = new Size(84, 34); + pickerBox2.TabIndex = 175; + pickerBox2.TabStop = false; + // + // horizontalSeparator1 + // + horizontalSeparator1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + horizontalSeparator1.AutoScrollMargin = new Size(0, 0); + horizontalSeparator1.AutoScrollMinSize = new Size(0, 0); + horizontalSeparator1.BackColor = Color.Transparent; + horizontalSeparator1.Location = new Point(10, 181); + horizontalSeparator1.Margin = new Padding(0, 10, 0, 0); + horizontalSeparator1.MaximumSize = new Size(4920, 2); + horizontalSeparator1.MinimumSize = new Size(0, 22); + horizontalSeparator1.Name = "horizontalSeparator1"; + horizontalSeparator1.Size = new Size(364, 22); + horizontalSeparator1.TabIndex = 176; + horizontalSeparator1.TabStop = false; + // + // horizontalSeparator2 + // + horizontalSeparator2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + horizontalSeparator2.AutoScrollMargin = new Size(0, 0); + horizontalSeparator2.AutoScrollMinSize = new Size(0, 0); + horizontalSeparator2.BackColor = Color.Transparent; + horizontalSeparator2.Location = new Point(10, 437); + horizontalSeparator2.Margin = new Padding(0, 10, 0, 0); + horizontalSeparator2.MaximumSize = new Size(4920, 2); + horizontalSeparator2.MinimumSize = new Size(0, 22); + horizontalSeparator2.Name = "horizontalSeparator2"; + horizontalSeparator2.Size = new Size(364, 22); + horizontalSeparator2.TabIndex = 177; + horizontalSeparator2.TabStop = false; + // + // EditTileForm + // + ClientSize = new Size(384, 521); + Controls.Add(horizontalSeparator2); + Controls.Add(horizontalSeparator1); + Controls.Add(pickerBox2); + Controls.Add(pickerBox1); + Controls.Add(button1); + Controls.Add(textBox4); + Controls.Add(textBox3); + Controls.Add(textBox2); + Controls.Add(label6); + Controls.Add(label7); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(textBox1); + MinimumSize = new Size(400, 560); + Name = "EditTileForm"; + Text = "Add Tile"; + ResumeLayout(false); + PerformLayout(); + } + + + public TileModel Result + { + get + { + if (result == null) + { + result = new TileModel(); + } + + result.Title = textBox1.Text?.Trim() ?? string.Empty; + result.ProcessFilename = textBox2.Text?.Trim() ?? string.Empty; + result.ProcessArgument = textBox3.Text?.Trim() ?? string.Empty; + result.ProcessWorkingDirectory = textBox4.Text?.Trim(); + result.ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex; + result.ProcessAsAdmin = pickerBox2.Value; + + return result; + } + } + + } +} \ No newline at end of file diff --git a/EditTileForm.resx b/EditTileForm.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/EditTileForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 2ae6153..de900d0 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -1,6 +1,6 @@ -using FizzyLauncher.Windows.Forms; +using RokettoLaunch.Windows.Forms; -namespace FizzyLauncher +namespace RokettoLaunch { partial class MainForm { @@ -30,296 +30,409 @@ namespace FizzyLauncher /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); - this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); - this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); - this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); - this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator(); - this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); - this.exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addGroupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.showBigIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.enableAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.alwaysOnTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); - this.aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.tileContainer1 = new FizzyLauncher.Windows.Forms.TileContainer(); - this.contextMenuStrip2.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); + saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + notifyIcon1 = new System.Windows.Forms.NotifyIcon(components); + contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(components); + exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + menuStrip1 = new System.Windows.Forms.MenuStrip(); + fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); + closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator(); + saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); + exitToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + addGroupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + showBigIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + alwaysOnTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + viewHelpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); + aboutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + tileContainerMenu1 = new System.Windows.Forms.ContextMenuStrip(components); + addGroupToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); + editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); + toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + addRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + upToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + downToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + bottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + panel1 = new System.Windows.Forms.Panel(); + contextMenuStrip2.SuspendLayout(); + menuStrip1.SuspendLayout(); + tileContainerMenu1.SuspendLayout(); + panel1.SuspendLayout(); + SuspendLayout(); // // saveFileDialog1 // - this.saveFileDialog1.Filter = "Session files|*.jsonfig"; - this.saveFileDialog1.Title = "Choose file to save the session"; + saveFileDialog1.Filter = "Session files|*.jsonfig"; + saveFileDialog1.Title = "Choose file to save the session"; // // openFileDialog1 // - this.openFileDialog1.Filter = "Session files|*.jsonfig"; - this.openFileDialog1.Title = "Choose session file"; + openFileDialog1.Filter = "Session files|*.jsonfig"; + openFileDialog1.Title = "Choose session file"; // // notifyIcon1 // - this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip2; - this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); - this.notifyIcon1.Text = "notifyIcon1"; - this.notifyIcon1.Visible = true; - this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick); + notifyIcon1.ContextMenuStrip = contextMenuStrip2; + notifyIcon1.Icon = (System.Drawing.Icon)resources.GetObject("notifyIcon1.Icon"); + notifyIcon1.Text = "notifyIcon1"; + notifyIcon1.Visible = true; + notifyIcon1.MouseClick += notifyIcon1_MouseClick; // // contextMenuStrip2 // - this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exitToolStripMenuItem1}); - this.contextMenuStrip2.Name = "contextMenuStrip2"; - this.contextMenuStrip2.Size = new System.Drawing.Size(94, 26); + contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { exitToolStripMenuItem1 }); + contextMenuStrip2.Name = "contextMenuStrip2"; + contextMenuStrip2.Size = new System.Drawing.Size(94, 26); // // exitToolStripMenuItem1 // - this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; - this.exitToolStripMenuItem1.Size = new System.Drawing.Size(93, 22); - this.exitToolStripMenuItem1.Text = "E&xit"; - this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem1_Click); + exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; + exitToolStripMenuItem1.Size = new System.Drawing.Size(93, 22); + exitToolStripMenuItem1.Text = "E&xit"; + exitToolStripMenuItem1.Click += exitToolStripMenuItem1_Click; // // menuStrip1 // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.toolStripMenuItem1, - this.viewToolStripMenuItem, - this.toolsToolStripMenuItem, - this.helpToolStripMenuItem1}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(633, 24); - this.menuStrip1.TabIndex = 2; - this.menuStrip1.MenuActivate += new System.EventHandler(this.menuStrip1_MenuActivate); + menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, toolStripMenuItem1, viewToolStripMenuItem, toolsToolStripMenuItem, helpToolStripMenuItem1 }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new System.Drawing.Size(404, 24); + menuStrip1.TabIndex = 2; + menuStrip1.MenuActivate += menuStrip1_MenuActivate; // // fileToolStripMenuItem // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newToolStripMenuItem, - this.openToolStripMenuItem, - this.toolStripMenuItem13, - this.closeToolStripMenuItem, - this.toolStripMenuItem14, - this.saveToolStripMenuItem, - this.saveAsToolStripMenuItem, - this.toolStripMenuItem15, - this.exitToolStripMenuItem2}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "&File"; + fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, toolStripMenuItem13, closeToolStripMenuItem, toolStripMenuItem14, saveToolStripMenuItem, saveAsToolStripMenuItem, toolStripMenuItem15, exitToolStripMenuItem2 }); + fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + fileToolStripMenuItem.Text = "&File"; // // newToolStripMenuItem // - this.newToolStripMenuItem.Image = AppResource.file; - 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); + newToolStripMenuItem.Image = AppResource.file; + 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 // - this.openToolStripMenuItem.Image = AppResource.folder; - 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); + openToolStripMenuItem.Image = AppResource.folder; + 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 // - this.toolStripMenuItem13.Name = "toolStripMenuItem13"; - this.toolStripMenuItem13.Size = new System.Drawing.Size(143, 6); + toolStripMenuItem13.Name = "toolStripMenuItem13"; + toolStripMenuItem13.Size = new System.Drawing.Size(143, 6); // // closeToolStripMenuItem // - this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; - this.closeToolStripMenuItem.Size = new System.Drawing.Size(146, 22); - this.closeToolStripMenuItem.Text = "&Close"; - this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); + closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + closeToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + closeToolStripMenuItem.Text = "&Close"; + closeToolStripMenuItem.Click += closeToolStripMenuItem_Click; // // toolStripMenuItem14 // - this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(143, 6); + toolStripMenuItem14.Name = "toolStripMenuItem14"; + toolStripMenuItem14.Size = new System.Drawing.Size(143, 6); // // saveToolStripMenuItem // - this.saveToolStripMenuItem.Image = AppResource.disk2; - this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); - this.saveToolStripMenuItem.Text = "&Save"; - this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + saveToolStripMenuItem.Image = AppResource.disk2; + saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + saveToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S; + saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + saveToolStripMenuItem.Text = "&Save"; + saveToolStripMenuItem.Click += saveToolStripMenuItem_Click; // // 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); + saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; + saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + saveAsToolStripMenuItem.Text = "Save &As..."; + saveAsToolStripMenuItem.Click += saveAsToolStripMenuItem_Click; // // toolStripMenuItem15 // - this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(143, 6); + toolStripMenuItem15.Name = "toolStripMenuItem15"; + 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); + exitToolStripMenuItem2.Name = "exitToolStripMenuItem2"; + exitToolStripMenuItem2.Size = new System.Drawing.Size(146, 22); + exitToolStripMenuItem2.Text = "E&xit"; + exitToolStripMenuItem2.Click += exitToolStripMenuItem2_Click; // // toolStripMenuItem1 // - this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.addGroupToolStripMenuItem}); - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(39, 20); - this.toolStripMenuItem1.Text = "&Edit"; + toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { addGroupToolStripMenuItem }); + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(39, 20); + toolStripMenuItem1.Text = "&Edit"; // // addGroupToolStripMenuItem // - this.addGroupToolStripMenuItem.Name = "addGroupToolStripMenuItem"; - this.addGroupToolStripMenuItem.Size = new System.Drawing.Size(132, 22); - this.addGroupToolStripMenuItem.Text = "&Add Group"; - this.addGroupToolStripMenuItem.Click += new System.EventHandler(this.addGroupToolStripMenuItem_Click); + addGroupToolStripMenuItem.Name = "addGroupToolStripMenuItem"; + addGroupToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + addGroupToolStripMenuItem.Text = "&Add Group"; + addGroupToolStripMenuItem.Click += addGroupToolStripMenuItem_Click; // // viewToolStripMenuItem // - this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.showBigIconsToolStripMenuItem, - this.enableAnimationsToolStripMenuItem, - this.alwaysOnTopToolStripMenuItem}); - this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; - this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.viewToolStripMenuItem.Text = "&View"; + viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { showBigIconsToolStripMenuItem, alwaysOnTopToolStripMenuItem }); + viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + viewToolStripMenuItem.Text = "&View"; // // showBigIconsToolStripMenuItem // - this.showBigIconsToolStripMenuItem.Name = "showBigIconsToolStripMenuItem"; - this.showBigIconsToolStripMenuItem.Size = new System.Drawing.Size(173, 22); - this.showBigIconsToolStripMenuItem.Text = "Show &Big Icons"; - this.showBigIconsToolStripMenuItem.Click += new System.EventHandler(this.showBigIconsToolStripMenuItem_Click); - // - // enableAnimationsToolStripMenuItem - // - this.enableAnimationsToolStripMenuItem.Name = "enableAnimationsToolStripMenuItem"; - this.enableAnimationsToolStripMenuItem.Size = new System.Drawing.Size(173, 22); - this.enableAnimationsToolStripMenuItem.Text = "Enable &Animations"; - this.enableAnimationsToolStripMenuItem.Click += new System.EventHandler(this.enableAnimationsToolStripMenuItem_Click); + showBigIconsToolStripMenuItem.Name = "showBigIconsToolStripMenuItem"; + showBigIconsToolStripMenuItem.Size = new System.Drawing.Size(154, 22); + showBigIconsToolStripMenuItem.Text = "Show &Big Icons"; + showBigIconsToolStripMenuItem.Click += showBigIconsToolStripMenuItem_Click; // // alwaysOnTopToolStripMenuItem // - this.alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem"; - this.alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(173, 22); - this.alwaysOnTopToolStripMenuItem.Text = "Always On &Top"; - this.alwaysOnTopToolStripMenuItem.Click += new System.EventHandler(this.alwaysOnTopToolStripMenuItem_Click); + alwaysOnTopToolStripMenuItem.Name = "alwaysOnTopToolStripMenuItem"; + alwaysOnTopToolStripMenuItem.Size = new System.Drawing.Size(154, 22); + alwaysOnTopToolStripMenuItem.Text = "Always On &Top"; + alwaysOnTopToolStripMenuItem.Click += alwaysOnTopToolStripMenuItem_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"; + toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { optionsToolStripMenuItem }); + toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); + toolsToolStripMenuItem.Text = "&Tools"; // // optionsToolStripMenuItem // - this.optionsToolStripMenuItem.Image = AppResource.cog2; - 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); + optionsToolStripMenuItem.Image = AppResource.cog2; + 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 // - 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"; + 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 // - this.viewHelpToolStripMenuItem1.Image = AppResource.help2; - 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); + viewHelpToolStripMenuItem1.Image = AppResource.help2; + 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 // - this.toolStripMenuItem16.Name = "toolStripMenuItem16"; - this.toolStripMenuItem16.Size = new System.Drawing.Size(143, 6); + toolStripMenuItem16.Name = "toolStripMenuItem16"; + 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); + aboutToolStripMenuItem1.Name = "aboutToolStripMenuItem1"; + aboutToolStripMenuItem1.Size = new System.Drawing.Size(146, 22); + aboutToolStripMenuItem1.Text = "&About"; + aboutToolStripMenuItem1.Click += aboutToolStripMenuItem1_Click; // - // tileContainer1 + // tileContainerMenu1 // - this.tileContainer1.AutoScroll = true; - this.tileContainer1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tileContainer1.BackColor = System.Drawing.Color.Transparent; - this.tileContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tileContainer1.Location = new System.Drawing.Point(0, 24); - this.tileContainer1.Margin = new System.Windows.Forms.Padding(0); - this.tileContainer1.Name = "tileContainer1"; - this.tileContainer1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 20); - this.tileContainer1.Size = new System.Drawing.Size(633, 376); - this.tileContainer1.TabIndex = 3; + tileContainerMenu1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { addGroupToolStripMenuItem1, toolStripMenuItem4, editToolStripMenuItem, toolStripMenuItem5, toolStripSeparator1, toolStripMenuItem2, toolStripSeparator2, toolStripMenuItem3, toolStripSeparator3, removeToolStripMenuItem }); + tileContainerMenu1.Name = "tileContainerMenu1"; + tileContainerMenu1.Size = new System.Drawing.Size(133, 176); + // + // addGroupToolStripMenuItem1 + // + addGroupToolStripMenuItem1.Name = "addGroupToolStripMenuItem1"; + addGroupToolStripMenuItem1.Size = new System.Drawing.Size(132, 22); + addGroupToolStripMenuItem1.Text = "&Add Tile"; + addGroupToolStripMenuItem1.Click += addGroupToolStripMenuItem1_Click; + // + // toolStripMenuItem4 + // + toolStripMenuItem4.Name = "toolStripMenuItem4"; + toolStripMenuItem4.Size = new System.Drawing.Size(132, 22); + toolStripMenuItem4.Text = "Add &Group"; + toolStripMenuItem4.Click += toolStripMenuItem4_Click; + // + // editToolStripMenuItem + // + editToolStripMenuItem.Name = "editToolStripMenuItem"; + editToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + editToolStripMenuItem.Text = "&Edit"; + editToolStripMenuItem.Click += editToolStripMenuItem_Click; + // + // toolStripMenuItem5 + // + toolStripMenuItem5.Name = "toolStripMenuItem5"; + toolStripMenuItem5.Size = new System.Drawing.Size(132, 22); + toolStripMenuItem5.Text = "&Duplicate"; + toolStripMenuItem5.Click += toolStripMenuItem5_Click; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new System.Drawing.Size(129, 6); + // + // toolStripMenuItem2 + // + toolStripMenuItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { addRowToolStripMenuItem, removeRowToolStripMenuItem }); + toolStripMenuItem2.Name = "toolStripMenuItem2"; + toolStripMenuItem2.Size = new System.Drawing.Size(132, 22); + toolStripMenuItem2.Text = "Ro&w"; + // + // addRowToolStripMenuItem + // + addRowToolStripMenuItem.Name = "addRowToolStripMenuItem"; + addRowToolStripMenuItem.Size = new System.Drawing.Size(143, 22); + addRowToolStripMenuItem.Text = "A&dd Row"; + addRowToolStripMenuItem.Click += addRowToolStripMenuItem_Click; + // + // removeRowToolStripMenuItem + // + removeRowToolStripMenuItem.Name = "removeRowToolStripMenuItem"; + removeRowToolStripMenuItem.Size = new System.Drawing.Size(143, 22); + removeRowToolStripMenuItem.Text = "Remo&ve Row"; + removeRowToolStripMenuItem.Click += removeRowToolStripMenuItem_Click; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new System.Drawing.Size(129, 6); + // + // toolStripMenuItem3 + // + toolStripMenuItem3.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { topToolStripMenuItem, upToolStripMenuItem, downToolStripMenuItem, bottomToolStripMenuItem }); + toolStripMenuItem3.Name = "toolStripMenuItem3"; + toolStripMenuItem3.Size = new System.Drawing.Size(132, 22); + toolStripMenuItem3.Text = "&Move"; + // + // topToolStripMenuItem + // + topToolStripMenuItem.Name = "topToolStripMenuItem"; + topToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + topToolStripMenuItem.Text = "&Top"; + topToolStripMenuItem.Click += topToolStripMenuItem_Click; + // + // upToolStripMenuItem + // + upToolStripMenuItem.Name = "upToolStripMenuItem"; + upToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + upToolStripMenuItem.Text = "&Up"; + upToolStripMenuItem.Click += upToolStripMenuItem_Click; + // + // downToolStripMenuItem + // + downToolStripMenuItem.Name = "downToolStripMenuItem"; + downToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + downToolStripMenuItem.Text = "&Down"; + downToolStripMenuItem.Click += downToolStripMenuItem_Click; + // + // bottomToolStripMenuItem + // + bottomToolStripMenuItem.Name = "bottomToolStripMenuItem"; + bottomToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + bottomToolStripMenuItem.Text = "&Bottom"; + bottomToolStripMenuItem.Click += bottomToolStripMenuItem_Click; + // + // toolStripSeparator3 + // + toolStripSeparator3.Name = "toolStripSeparator3"; + toolStripSeparator3.Size = new System.Drawing.Size(129, 6); + // + // removeToolStripMenuItem + // + removeToolStripMenuItem.Name = "removeToolStripMenuItem"; + removeToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + removeToolStripMenuItem.Text = "&Remove"; + removeToolStripMenuItem.Click += removeToolStripMenuItem_Click; + // + // flowLayoutPanel1 + // + flowLayoutPanel1.AutoScroll = true; + flowLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + flowLayoutPanel1.Location = new System.Drawing.Point(6, 0); + flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new System.Drawing.Size(398, 417); + flowLayoutPanel1.TabIndex = 8; + flowLayoutPanel1.WrapContents = false; + // + // panel1 + // + panel1.BackColor = System.Drawing.Color.Transparent; + panel1.Controls.Add(flowLayoutPanel1); + panel1.Dock = System.Windows.Forms.DockStyle.Fill; + panel1.Location = new System.Drawing.Point(0, 24); + panel1.Margin = new System.Windows.Forms.Padding(0); + panel1.Name = "panel1"; + panel1.Padding = new System.Windows.Forms.Padding(6, 0, 0, 0); + panel1.Size = new System.Drawing.Size(404, 417); + panel1.TabIndex = 9; // // MainForm // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); - this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; - this.ClientSize = new System.Drawing.Size(633, 400); - this.Controls.Add(this.tileContainer1); - this.Controls.Add(this.menuStrip1); - this.DoubleBuffered = true; - this.ForeColor = System.Drawing.SystemColors.ControlText; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.menuStrip1; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(420, 280); - this.Name = "MainForm"; - this.Text = "Fizzy Launcher"; - this.contextMenuStrip2.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + BackColor = System.Drawing.Color.FromArgb(250, 250, 250); + BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + ClientSize = new System.Drawing.Size(404, 441); + Controls.Add(panel1); + Controls.Add(menuStrip1); + DoubleBuffered = true; + ForeColor = System.Drawing.SystemColors.ControlText; + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; + MaximizeBox = false; + MinimizeBox = false; + MinimumSize = new System.Drawing.Size(300, 320); + Name = "MainForm"; + contextMenuStrip2.ResumeLayout(false); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + tileContainerMenu1.ResumeLayout(false); + panel1.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -333,7 +446,6 @@ namespace FizzyLauncher private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem1; - private TileContainer tileContainer1; private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem13; @@ -344,7 +456,6 @@ namespace FizzyLauncher private System.Windows.Forms.ToolStripSeparator toolStripMenuItem15; private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem showBigIconsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem enableAnimationsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem alwaysOnTopToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem viewHelpToolStripMenuItem1; @@ -352,6 +463,25 @@ namespace FizzyLauncher private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem addGroupToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip tileContainerMenu1; + private System.Windows.Forms.ToolStripMenuItem addGroupToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem addRowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeRowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem upToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bottomToolStripMenuItem; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5; } } diff --git a/MainForm.cs b/MainForm.cs index e5dcc0a..a1620ef 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -1,483 +1,177 @@ -using FizzyLauncher.Models; -using RyzStudio.Drawing; -using RyzStudio.Text.Json; -using RyzStudio.Windows.Forms; -using System; +using System; using System.Collections.Generic; using System.ComponentModel; -using System.Diagnostics; using System.IO; using System.Linq; -using System.Runtime.InteropServices; -using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; +using RyzStudio.Windows.ThemedForms.ButtonTextBox; +using RyzStudio.Windows.TileForms; -namespace FizzyLauncher +namespace RokettoLaunch { public partial class MainForm : Form { - [DllImport("user32.dll")] - protected static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk); + private readonly FileSessionManager _fileSessionManager; - [DllImport("user32.dll")] - protected static extern bool UnregisterHotKey(IntPtr hWnd, int id); - - //protected const int MOD_ALT = 0x1; - //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 OptionsForm optionsForm = null; - protected string sessionFilename = null; - protected bool isBusy = false; - protected bool requestExit = false; + private bool _isBusy = false; + private bool _requestExit = false; - public MainForm() : base() + public MainForm() { InitializeComponent(); - tileContainer1.OnColumnSizeChanged += tileContainer1_OnSizeChanged; - notifyIcon1.Text = Application.ProductName; + this.Text = System.Windows.Forms.Application.ProductName; + + _fileSessionManager = new FileSessionManager(); + _fileSessionManager.OpenFileDialog = openFileDialog1; + _fileSessionManager.SaveFileDialog = saveFileDialog1; + _fileSessionManager.OnNewing += fileSessionManager_OnNewSession; + _fileSessionManager.OnLoading += fileSessionManager_OnLoadSession; + _fileSessionManager.OnSaving += fileSessionManager_OnSaveSession; + _fileSessionManager.OnClearing += fileSessionManager_OnClearSession; + _fileSessionManager.OnFilenameChanged += fileSessionManager_OnFilenameChanged; + + //tileContainer1.OnColumnSizeChanged += tileContainer1_OnSizeChanged; + notifyIcon1.Text = System.Windows.Forms.Application.ProductName; this.AutoScaleMode = AutoScaleMode.None; - this.StartPosition = FormStartPosition.WindowsDefaultBounds; - this.Visible = false; - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - this.AutoScaleMode = AutoScaleMode.None; - - UIControl.SetVisible(this, false); - UIControl.SetSize(this, this.MinimumSize); } protected async override void OnShown(EventArgs e) { base.OnShown(e); - UIControl.SetVisible(this, false); + var args = RyzStudio.Windows.Forms.Application.GetCommandLine(); - string[] commandLineArgs = Environment.GetCommandLineArgs(); - - string jsonfigFilename = null; - if (string.IsNullOrWhiteSpace(jsonfigFilename)) jsonfigFilename = parseOpenFile_FromCMD(commandLineArgs); - if (string.IsNullOrWhiteSpace(jsonfigFilename)) jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig"); + string jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(jsonfigFilename)) + { + jsonfigFilename = Path.ChangeExtension(System.Windows.Forms.Application.ExecutablePath, "jsonfig"); + } if (!string.IsNullOrWhiteSpace(jsonfigFilename) && File.Exists(jsonfigFilename)) { - await loadFile(jsonfigFilename); + await _fileSessionManager.OpenSession(jsonfigFilename); } else { - this.CurrentSession = new LauncherSession(); + this.CurrentSession = new AppOptions(); - UIControl.SetVisible(this, true); + InvalidateOptions(); } } - protected override void OnClosing(CancelEventArgs e) + protected async override void OnClosing(CancelEventArgs e) { base.OnClosing(e); - if (this.CurrentSession == null) this.CurrentSession = new LauncherSession(); + if (this.CurrentSession == null) + { + this.CurrentSession = new AppOptions(); + } - if (this.CurrentSession.HideOnClose && !requestExit) + if (this.CurrentSession.HideOnClose && !_requestExit) { this.Visible = !this.Visible; e.Cancel = true; return; } - requestExit = false; + _requestExit = false; - if (string.IsNullOrWhiteSpace(sessionFilename)) - { - // do nothing - } - else - { - if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Prompt) - { - DialogResult dr = MessageBox.Show("Save existing session?", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dr == DialogResult.Yes) - { - bool rv = saveFile(sessionFilename, false); - if (!rv) - { - e.Cancel = true; - } - } - else if (dr == DialogResult.No) - { - // do nothing - } - else if (dr == DialogResult.Cancel) - { - e.Cancel = true; - } - } - else if (this.CurrentSession.AutoSave == LauncherSession.AutoSaveOption.Yes) - { - saveFile(sessionFilename, false); - } - } + await _fileSessionManager.CloseSession(); - if (this.CurrentSession.HotKey != null) + if ((this.CurrentSession?.ShowToggleHotkey ?? new ThKeyCodeTextBox.Results()).Key != Keys.None) { - if (this.CurrentSession.HotKey.KeyCode != Keys.None) - { #if !DEBUG - UnregisterHotKey((IntPtr)Handle, 1); + RyzStudio.Runtime.InteropServices.User32.UnregisterHotKey((IntPtr)Handle, 1); #endif - } } - } protected override void WndProc(ref Message m) { switch (m.Msg) { - case WM_HOTKEY: + case RyzStudio.Runtime.InteropServices.User32.WM_HOTKEY: if (m.WParam.ToInt32() == 1) { this.Visible = !this.Visible; } break; - case WM_QUERYENDSESSION: - requestExit = true; - //this.Close(); - Application.Exit(); + case RyzStudio.Runtime.InteropServices.User32.WM_QUERYENDSESSION: + _requestExit = true; + + System.Windows.Forms.Application.Exit(); break; - default: break; - + default: + break; } base.WndProc(ref m); } - public LauncherSession CurrentSession { get; set; } = null; + public AppOptions CurrentSession { get; set; } = null; - public void Clear(int columnCount) + private void InvalidateOptions() { - tileContainer1.Clear(); - tileContainer1.Add(columnCount); + /// todo: big icons - sessionFilename = null; - } - - - protected async Task collapseWindow(int width, int increment = 6) - { - await Task.Run(() => - { - while (this.Width > width) - { - UIControl.SetWidth(this, (this.Width - increment)); - - Application.DoEvents(); - } - - UIControl.SetWidth(this, width); - }); - } - - protected async Task expandWindow(int width, int increment = 8) - { - await Task.Run(() => - { - while (this.Width < width) - { - UIControl.SetWidth(this, (this.Width + increment)); - - Application.DoEvents(); - } - - UIControl.SetWidth(this, width); - }); - } - - protected void invalidateHotKey() - { #if !DEBUG - if (this.InvokeRequired) + UIControl.Invoke(this, (x) => { - this.Invoke(new MethodInvoker(() => + RyzStudio.Runtime.InteropServices.User32.UnregisterHotKey((IntPtr)Handle, 1); + }); + + if ((this.CurrentSession?.ShowToggleHotkey ?? new ThKeyCodeTextBox.Results()).Key != Keys.None) + { + UIControl.Invoke(this, (x) => { - UnregisterHotKey((IntPtr)Handle, 1); - })); - } - else - { - UnregisterHotKey((IntPtr)Handle, 1); + RyzStudio.Runtime.InteropServices.User32.RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.ShowToggleHotkey.ModifierCode, this.CurrentSession.ShowToggleHotkey.KeyCode); + }); } #endif - if (this.CurrentSession.HotKey != null) - { - if (this.CurrentSession.HotKey.KeyCode != Keys.None) - { -#if !DEBUG - if (this.InvokeRequired) - { - this.Invoke(new MethodInvoker(() => - { - RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key); - })); - } - else - { - RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.HotKey.ModifierCode, this.CurrentSession.HotKey.Key); - } -#endif - } - } + UIControl.SetTopMost(this, this.CurrentSession.AlwaysOnTop); } - protected string parseOpenFile_FromCMD(string[] args) + private void menuStrip1_MenuActivate(object sender, EventArgs e) { - if (args.Length <= 1) - { - return null; - } + closeToolStripMenuItem.Enabled = (_fileSessionManager.SessionState != FileSessionManager.SessionStateEnum.Close); - int i = 1; - while (true) - { - if (i > (args.Length - 1)) - { - break; - } + saveToolStripMenuItem.Enabled = (_fileSessionManager.SessionState == FileSessionManager.SessionStateEnum.Open); + saveAsToolStripMenuItem.Enabled = (_fileSessionManager.SessionState != FileSessionManager.SessionStateEnum.Close); - switch (args[i].Trim().ToLower()) - { - case "-o": - case "-open": - if ((i + 1) > (args.Length - 1)) break; + addGroupToolStripMenuItem.Enabled = (_fileSessionManager.SessionState != FileSessionManager.SessionStateEnum.Close); - string openFilename = args[(i + 1)]; - if (string.IsNullOrWhiteSpace(openFilename)) break; - if (!File.Exists(openFilename)) break; - - return openFilename; - - //i++; - //break; - } - - i++; - } - - return null; + showBigIconsToolStripMenuItem.Checked = this.CurrentSession?.ShowBigIcons ?? true; + alwaysOnTopToolStripMenuItem.Checked = this.CurrentSession?.AlwaysOnTop ?? false; } - protected void newSession() - { - NewForm form = new NewForm(this); - form.ShowDialog(); - } - protected async Task loadFile(string filename) - { - await Task.Run(() => - { - if (isBusy) - { - return; - } - - if (string.IsNullOrWhiteSpace(filename)) - { - return; - } - - if (!File.Exists(filename)) - { - return; - } - - string sourceCode = null; - - try - { - sessionFilename = filename; - - sourceCode = File.ReadAllText(sessionFilename); - } - 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()); - options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; - - try - { - this.CurrentSession = JsonSerializer.Deserialize(sourceCode, options); - } - catch (Exception) - { - MessageBox.Show("Unable to read session", "Load session"); - return; - } - - if (this.CurrentSession == null) - { - this.CurrentSession = new LauncherSession(); - } - - // load tiles - tileContainer1.Load(this.CurrentSession.Groups); - - // reposition - if (!this.CurrentSession.StartPosition.IsEmpty) UIControl.SetLocation(this, this.CurrentSession.StartPosition); - - // - UIControl.SetTopMost(this, this.CurrentSession.AlwaysOnTop); - UIControl.SetVisible(this, true); - UIControl.SetChecked(enableAnimationsToolStripMenuItem, this.CurrentSession.EnableAnimation); - UIControl.SetChecked(showBigIconsToolStripMenuItem, this.CurrentSession.EnableBigIconInFolder); - UIControl.SetClientHeight(this, this.CurrentSession.DefaultHeight); - - UIControl.SetFocus(this); - - // hotkey - invalidateHotKey(); - - }); - } - - protected bool saveFile(string filename, bool showNotices = true) - { - if (isBusy) - { - return false; - } - - if (string.IsNullOrWhiteSpace(filename)) - { - return false; - } - - if (tileContainer1.GroupCount <= 0) - { - return true; - } - - isBusy = true; - - // update session - if (this.CurrentSession == null) - { - this.CurrentSession = new LauncherSession(); - } - - this.CurrentSession.DefaultHeight = this.Height; - this.CurrentSession.AlwaysOnTop = this.TopMost; - this.CurrentSession.StartPosition = this.Location; - this.CurrentSession.Groups = tileContainer1.GroupModels?.ToList() ?? new List(); - - var options = new JsonSerializerOptions(); - options.Converters.Add(new JsonPointConverter()); - options.Converters.Add(new JsonSizeConverter()); - options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; - - try - { - File.WriteAllText(filename, JsonSerializer.Serialize(this.CurrentSession, options)); - - if (showNotices) - { - MessageBox.Show("Session saved!", "Save session", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - catch (Exception exc) - { - MessageBox.Show(exc.Message, "Save session"); - - return false; - } - - isBusy = false; - - return true; - } - - protected bool saveAsFile() - { - if (isBusy) - { - return false; - } - - if (saveFileDialog1.ShowDialog() == DialogResult.OK) - { - bool rv = saveFile(saveFileDialog1.FileName); - if (rv) - { - sessionFilename = saveFileDialog1.FileName; - } - - return rv; - } - - return false; - } - -#region main menu + #region Main Menu /// /// New /// /// /// - private void newToolStripMenuItem_Click(object sender, EventArgs e) + private async void newToolStripMenuItem_Click(object sender, EventArgs e) { - if (string.IsNullOrWhiteSpace(sessionFilename)) + if (_isBusy) { - newSession(); - } - else - { - DialogResult dr = MessageBox.Show("Save existing session?", "New session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dr == DialogResult.Yes) - { - bool rv = saveFile(sessionFilename, false); - if (rv) - { - newSession(); - } - } - else if (dr == DialogResult.No) - { - newSession(); - } - else if (dr == DialogResult.Cancel) - { - return; - } + return; } + + await _fileSessionManager.NewSession(); } /// @@ -487,39 +181,12 @@ namespace FizzyLauncher /// private async void openToolStripMenuItem_Click(object sender, EventArgs e) { - if (string.IsNullOrWhiteSpace(sessionFilename)) + if (_isBusy) { - if (openFileDialog1.ShowDialog() == DialogResult.OK) - { - await loadFile(openFileDialog1.FileName); - } - } - else - { - DialogResult dr = MessageBox.Show("Save existing session?", "Open session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dr == DialogResult.Yes) - { - bool rv = saveFile(sessionFilename, false); - if (rv) - { - if (openFileDialog1.ShowDialog() == DialogResult.OK) - { - await loadFile(openFileDialog1.FileName); - } - } - } - else if (dr == DialogResult.No) - { - if (openFileDialog1.ShowDialog() == DialogResult.OK) - { - await loadFile(openFileDialog1.FileName); - } - } - else if (dr == DialogResult.Cancel) - { - return; - } + return; } + + await _fileSessionManager.OpenSession(); } /// @@ -527,36 +194,14 @@ namespace FizzyLauncher /// /// /// - private void closeToolStripMenuItem_Click(object sender, EventArgs e) + private async void closeToolStripMenuItem_Click(object sender, EventArgs e) { - if (string.IsNullOrWhiteSpace(sessionFilename)) + if (_isBusy) { - tileContainer1.Clear(); + return; } - else - { - DialogResult dr = MessageBox.Show("Save existing session?", "Close session", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dr == DialogResult.Yes) - { - bool rv = saveFile(sessionFilename, false); - if (rv) - { - tileContainer1.Clear(); - sessionFilename = null; - } - } - else if (dr == DialogResult.No) - { - tileContainer1.Clear(); - - sessionFilename = null; - } - else if (dr == DialogResult.Cancel) - { - return; - } - } + await _fileSessionManager.CloseSession(); } /// @@ -564,16 +209,14 @@ namespace FizzyLauncher /// /// /// - private void saveToolStripMenuItem_Click(object sender, EventArgs e) + private async void saveToolStripMenuItem_Click(object sender, EventArgs e) { - if (string.IsNullOrWhiteSpace(sessionFilename)) + if (_isBusy) { - saveAsFile(); - } - else - { - saveFile(sessionFilename, true); + return; } + + await _fileSessionManager.SaveSession(); } /// @@ -581,9 +224,14 @@ namespace FizzyLauncher /// /// /// - private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) + private async void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { - saveAsFile(); + if (_isBusy) + { + return; + } + + await _fileSessionManager.SaveAsSession(); } /// @@ -593,7 +241,12 @@ namespace FizzyLauncher /// private void exitToolStripMenuItem2_Click(object sender, EventArgs e) { - requestExit = true; + if (_isBusy) + { + return; + } + + _requestExit = true; this.Close(); } @@ -604,9 +257,9 @@ namespace FizzyLauncher /// /// /// - private void addGroupToolStripMenuItem_Click(object sender, EventArgs e) + private async void addGroupToolStripMenuItem_Click(object sender, EventArgs e) { - tileContainer1.Add(); + await AddNewTileGroup(); } @@ -622,26 +275,7 @@ namespace FizzyLauncher return; } - this.CurrentSession.EnableBigIconInFolder = !this.CurrentSession.EnableBigIconInFolder; - - showBigIconsToolStripMenuItem.Checked = this.CurrentSession.EnableBigIconInFolder; - } - - /// - /// Enable animations - /// - /// - /// - private void enableAnimationsToolStripMenuItem_Click(object sender, EventArgs e) - { - if (this.CurrentSession == null) - { - return; - } - - this.CurrentSession.EnableAnimation = !this.CurrentSession.EnableAnimation; - - enableAnimationsToolStripMenuItem.Checked = this.CurrentSession.EnableAnimation; + this.CurrentSession.ShowBigIcons = !this.CurrentSession.ShowBigIcons; } /// @@ -651,7 +285,14 @@ namespace FizzyLauncher /// private void alwaysOnTopToolStripMenuItem_Click(object sender, EventArgs e) { - this.TopMost = !this.TopMost; + if (this.CurrentSession == null) + { + return; + } + + this.CurrentSession.AlwaysOnTop = !this.CurrentSession.AlwaysOnTop; + + this.TopMost = this.CurrentSession.AlwaysOnTop; } @@ -662,10 +303,13 @@ namespace FizzyLauncher /// private void optionsToolStripMenuItem_Click(object sender, EventArgs e) { - if (optionsForm == null) optionsForm = new OptionsForm(this); - optionsForm.ShowDialog(); + var form = new OptionsForm(this.CurrentSession); + if (form.ShowDialog() == DialogResult.OK) + { + this.CurrentSession = form.Result; - invalidateHotKey(); + InvalidateOptions(); + } } @@ -676,18 +320,7 @@ namespace FizzyLauncher /// private void viewHelpToolStripMenuItem1_Click(object sender, EventArgs e) { - try - { - System.Diagnostics.Process.Start(new ProcessStartInfo() - { - FileName = AppResource.AppHelpURL, - UseShellExecute = true - }); - } - catch - { - // do nothing - } + RyzStudio.Diagnostics.Process.Execute(AppResource.AppHelpURL); } /// @@ -697,19 +330,19 @@ namespace FizzyLauncher /// private void aboutToolStripMenuItem1_Click(object sender, EventArgs e) { - MessageBox.Show(Application.ProductName + " v" + Application.ProductVersion, "About", MessageBoxButtons.OK, MessageBoxIcon.Information); + var form = new RyzStudio.Windows.ThemedForms.AboutForm(); + form.ProductURL = AppResource.AppProductURL; + form.AuthorURL = AppResource.AppAuthorURL; + form.CompanyURL = AppResource.AppCompanyURL; + form.ProductCopyrightStartYear = 2020; + form.ProductLogo = AppResource.icon_64; + + form.ShowDialog(); } + #endregion - private void menuStrip1_MenuActivate(object sender, EventArgs e) - { - alwaysOnTopToolStripMenuItem.Checked = this.TopMost; - saveAsToolStripMenuItem.Enabled = !string.IsNullOrWhiteSpace(sessionFilename); - } - -#endregion - -#region notification icon + #region Notification Icon private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { @@ -721,18 +354,474 @@ namespace FizzyLauncher private void exitToolStripMenuItem1_Click(object sender, EventArgs e) { - requestExit = true; + _requestExit = true; this.Close(); } -#endregion + #endregion - private void tileContainer1_OnSizeChanged(object sender, EventArgs e) + + #region File Session Manager + + private async Task fileSessionManager_OnNewSession(FileSessionManager sender) { - int newWidth = this.Padding.Horizontal + SystemInformation.VerticalScrollBarWidth + tileContainer1.CalcWidth; + return await Task.Run(async () => + { + var form = new NewForm(); + if (form.ShowDialog() == DialogResult.OK) + { + var result = form.Result; - UIControl.SetClientWidth(this, newWidth); + UIControl.Clear(flowLayoutPanel1); + + this.CurrentSession.TilesPerRow = result.ColumnCount; + + for (var i = 0; i < result.GroupCount; i++) + { + await AddNewTileGroup(); + } + } + + AutoResize(); + + return true; + }); + } + + private async Task fileSessionManager_OnLoadSession(FileSessionManager sender, string filename) + { + return await Task.Run(async () => + { + this.CurrentSession = RyzStudio.Text.Json.JsonSerialiser.DeserialiseFile(filename); + if (this.CurrentSession == null) + { + MessageBox.Show("Unable to read session", "Load session"); + + return false; + } + + if (this.CurrentSession == null) + { + this.CurrentSession = new AppOptions(); + } + + // Reposition + resize + if (!this.CurrentSession.StartPosition.IsEmpty) + { + UIControl.SetLocation(this, this.CurrentSession.StartPosition); + } + + if (this.CurrentSession.Height > 0) + { + UIControl.SetClientHeight(this, this.CurrentSession.Height); + } + + InvalidateOptions(); + + // Load tiles + await LoadTileGroups(this.CurrentSession.Groups); + + AutoResize(); + + UIControl.SetFocus(this); + + return true; + }); + } + + private async Task fileSessionManager_OnSaveSession(FileSessionManager sender, string filename, bool showNotices) + { + if (string.IsNullOrWhiteSpace(filename)) + { + return false; + } + + if (!flowLayoutPanel1.Controls.OfType().Any()) + { + return true; + } + + return await Task.Run(() => + { + if (_isBusy) + { + return false; + } + + _isBusy = true; + + // update session + if (this.CurrentSession == null) + { + this.CurrentSession = new AppOptions(); + } + + this.CurrentSession.StartPosition = this.Location; + this.CurrentSession.Height = this.Height; + + this.CurrentSession.Groups = new List(); + foreach (var container in flowLayoutPanel1.Controls.OfType()) + { + this.CurrentSession.Groups.Add((TileGroupModel)container.Tag); + } + + var result = RyzStudio.Text.Json.JsonSerialiser.SerialiseFile(filename, this.CurrentSession); + if (result.IsSuccess) + { + if (showNotices) + { + MessageBox.Show("Session saved!", "Save session", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + else + { + MessageBox.Show(result.Message, "Save session"); + + _isBusy = false; + + return false; + } + + _isBusy = false; + + return true; + }); + } + + private async Task fileSessionManager_OnClearSession(FileSessionManager sender) + { + await Task.Run(() => + { + UIControl.Clear(flowLayoutPanel1); + }); + + return true; + } + + private async Task fileSessionManager_OnFilenameChanged(FileSessionManager sender, string filename) + { + await Task.Run(() => + { + switch (sender.SessionState) + { + case FileSessionManager.SessionStateEnum.New: + UIControl.SetText(this, "New Session - " + System.Windows.Forms.Application.ProductName); + break; + case FileSessionManager.SessionStateEnum.Open: + UIControl.SetText(this, Path.GetFileNameWithoutExtension(filename) + " - " + System.Windows.Forms.Application.ProductName); + break; + case FileSessionManager.SessionStateEnum.Close: + UIControl.SetText(this, System.Windows.Forms.Application.ProductName); + break; + default: + break; + } + }); + } + + #endregion + + #region Tile Container + + /// + /// Add Tile + /// + /// + /// + private void addGroupToolStripMenuItem1_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripMenuItem)sender); + if (container == null) + { + return; + } + + var form = new EditTileForm(); + if (form.ShowDialog() == DialogResult.OK) + { + var result = form.Result; + var newCoord = container.GetNextCoord(); + + var newTile = new RokettoLaunch.Windows.Forms.TilePanel(); + newTile.LoadInfo(result); + + container.Add(newTile, newCoord.X, newCoord.Y); + + _fileSessionManager.HasChanged = true; + }; + } + + /// + /// Add Tile Group + /// + /// + /// + private void toolStripMenuItem4_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripMenuItem)sender); + if (container == null) + { + return; + } + + var form = new EditTileFolderForm(); + if (form.ShowDialog() == DialogResult.OK) + { + var result = form.Result; + var newCoord = container.GetNextCoord(); + + var newTile = new RokettoLaunch.Windows.Forms.TilePanel(); + newTile.LoadInfo(result); + + container.Add(newTile, newCoord.X, newCoord.Y); + + _fileSessionManager.HasChanged = true; + }; + } + + /// + /// Edit + /// + /// + /// + private void editToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripMenuItem)sender); + if (container == null) + { + return; + } + + var model = UIControl.GetTag(container); + + var form = new EditGroupForm(model); + if (form.ShowDialog() == DialogResult.OK) + { + var result = form.Result; + + container.Title = result.Title; + container.Tag = result; + + container.Invalidate(); + + _fileSessionManager.HasChanged = true; + }; + } + + /// + /// Duplicate + /// + /// + /// + private async void toolStripMenuItem5_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripMenuItem)sender); + if (container == null) + { + return; + } + + var model = UIControl.GetTag(container); + model.IsExpanded = true; + + await AddTileGroups(model); + + _fileSessionManager.HasChanged = true; + } + + + /// + /// Row - Add Row + /// + /// + /// + private void addRowToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + container.AddRow(); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Row - Remove Row + /// + /// + /// + private void removeRowToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + container.RemoveRow(); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Move Top + /// + /// + /// + private void topToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + UIControl.MoveTop(flowLayoutPanel1, container); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Move Up + /// + /// + /// + private void upToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + UIControl.MoveUp(flowLayoutPanel1, container); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Move Down + /// + /// + /// + private void downToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + UIControl.MoveDown(flowLayoutPanel1, container); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Move Bottom + /// + /// + /// + private void bottomToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripDropDownItem)sender); + if (container == null) + { + return; + } + + UIControl.MoveBottom(flowLayoutPanel1, container); + + _fileSessionManager.HasChanged = true; + } + + /// + /// Remove + /// + /// + /// + private void removeToolStripMenuItem_Click(object sender, EventArgs e) + { + var container = UIControl.GetOwner((ToolStripMenuItem)sender); + if (container == null) + { + return; + } + + flowLayoutPanel1.Controls.Remove(container); + + _fileSessionManager.HasChanged = true; + } + + #endregion + + + private async Task AddNewTileGroup() + { + var group = new TileGroupModel(); + group.Title = "New Group"; + group.IsExpanded = true; + group.GridSize = new System.Drawing.Size(this.CurrentSession.TilesPerRow, 1); + + await AddTileGroups(group); + + _fileSessionManager.HasChanged = true; + } + + private async Task AddTileGroups(TileGroupModel model) + { + await Task.Run(() => + { + var panel = new RyzStudio.Windows.TileForms.TileContainer(); + panel.Title = model.Title; + panel.IsOpen = model.IsExpanded; + panel.TitleContextMenuStrip = tileContainerMenu1; + panel.AutoSizeHeight = true; + panel.Tag = model; + + panel.AutoSize(model.GridSize.Width, model.GridSize.Height); + + UIControl.Add(flowLayoutPanel1, panel); + + // Load tiles + foreach (var item2 in model.Items ?? new List()) + { + var tile = new RokettoLaunch.Windows.Forms.TilePanel(); + tile.LoadInfo(item2); + + panel.Add(tile, item2.Position.X, item2.Position.Y); + } + }); + } + + private void AutoResize() + { + if (flowLayoutPanel1.Controls.Count <= 0) + { + return; + } + + var width = 0; + foreach (var item in flowLayoutPanel1.Controls.OfType()) + { + width = Math.Max(width, item.Width); + } + + UIControl.SetClientWidth(this, width + panel1.Padding.Horizontal + this.Padding.Horizontal + SystemInformation.VerticalScrollBarWidth); + } + + private async Task LoadTileGroups(List groupList) + { + UIControl.Clear(flowLayoutPanel1); + + foreach (var item in groupList ?? new List()) + { + await AddTileGroups(item); + } } } diff --git a/MainForm.resx b/MainForm.resx index 04386e6..233c278 100644 --- a/MainForm.resx +++ b/MainForm.resx @@ -1,4 +1,64 @@ - + + + @@ -74,597 +134,600 @@ 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///////////////////////////////////////// + AAD///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kqyjn1BtXVbuc2Rex5uOiWP///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KpaMh2Z6a2TYa1tU/2xcVftzZFzKkISAbvn5+Sz///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KpaJhGhrW1T9d2hh/722s/x5amT1b19Z73Nk + XcWLfnh57+npL////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KqKalFhrW1T/cGBZ//// + ///8/Pz/yMPA/n5xa/RwYFrvc2NdyIZ5c4fZ1dU2////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KrWu + qkhrW1T/a1tU//n5+P////////////7+/v/Szcv/jIF78nRmX+l1Z2C9joF8dc/Kxjr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KtXRzDdrW1T/a1tU/+7s6////////////////////////////93Z1/+Th4Lzd2li6nhq + Y7SShoJuwr66P////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kvn5+StrXFX8a1tU/+Pf3v////////////////////////////// + ////////5uPi/5KFgPdzY1zwhHdyif///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yptXVfxa1tU/8vFw/////////////// + /////////////////////////////8jDwP9rW1T/cWFb1f///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kvn5+SttW1X5a1tU/2xc + Vf+aj4r/6+jo/////////////////////////////////87Jx/9rW1T/b2Ba3v///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KpKG + gm5rW1T/a1tU/2tbVP9rW1T/cGFa/7avq//7+vr//////////////////////9TPzf9rW1T/bl5Y5v// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q2dnUNW5fV+drW1T/o5mV/7Oppv9uX1j/a1tU/2tbVP+Bc23/2dXT/////////////////9rW + 1P9rW1T/bV1W7v///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qd2ljsmtbVP92Z2H/8/Hx///////49/f/l4yH/2xbVf9rW1T/bFxV/6ad + mP/5+Pj//////9/c2v9rW1T/bFxV9v///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yqFeHKGa1tU/2tbVP/Nx8X//////////////////////9vX + 1f92Z2D/a1tU/2tbVP+CdW//4d7c/+Xi4f9rW1T/a1tU/fn5+Sv///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KpCEgG5rW1T8a1tU/6yjn/////////////// + ///////////////////+/v7/oJaR/2tcVP9rW1T/bl5X/6mgnP9rW1T/a1tU/+bg4DL///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8ql4uGZWxbVflrW1T/lYmE//z8 + /P///////////////////////////////////////////9jT0v9xYlz/a1tU/2tbVP9rW1T/a1tU/8/K + xjr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yqTh4JqbFxU+Gtb + VP+Lfnn/+Pf3///////////////////////////////////////////////////////4+Pj/iHx2/2tb + VP9rW1T/a1tU/6yiok3///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KoR3 + colrW1T8a1tU/42BfP/29fT///////////////////////////////////////////////////////// + /////////////6CXkv9rW1T/a1tU/29gWt3AuLRB////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yrLx8c7dmhhtmtbVP9rW1T/lImE//n4+P////////////////////////////////////////////// + ///////////////////////////////////CvLn/cWJa/2tbVP9vX1njvrezQ////yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///ypzZFzKdWZfu25fWOhxYlvSdWZfvnts + ZaaAcm2ThXhxiHlpYrFtXVbua1tU/2tbVP+tpKD//fz8//////////////////////////////////// + ////////////////////////////////////////////////////////4d7d/3ZnYf9rW1T/bl5Y47y0 + sET///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///ypuXljma1tU/2tb + VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/e2xm/9LNy/////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Th + 3/93aGH/a1tU/25eWOPCvro/////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yqCdG+Ra1tU/7SsqP/Bu7j/tKyo/6Salv+Wi4b/f3Jr/2tbVP9sXFX/9PPy//////////////////// //////////////////////////////////////////////////////////////////////////////// - //////////////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//////////////////////////////////////////////////// - /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb - U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u//////////////////// - ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8 - dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb - VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA + ///////////////////k4eD/d2hh/2tbVP9wYlvW2dnUNf///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yrMxMQ8bFxU+JySjfX/////////////////////7Orq/2xcVf9rW1T/sqmm//// + ////////////////////////////////////////////////////////+Ozt/+W7vv/jt7r/47e6/+O3 + uv/jt7r/6MLF//z39///////////////////////39za/3FhW/9rW1T/dGVfxO7u7i7///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8qeWpjr2xdVvzx8O///////////////////////5mO + iv9rW1T/c2Nd///////////////////////////////////////////////////////9+vr/yXF4/8Rl + bP/EZWz/xGVs/8RlbP/EZWz/xGVs/9WSl////////////////////////////9PPzf9tXlf/a1tU/31v + aJ////8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qp56YVGtbVP+0q6j6//////// + /////////////+Dc2/9sXFX/a1tU/7Oqp/////////////////////////////////////////////// + ///25uf/xGVs/+/V1///////////////////////4bG1/8hwdv////////////////////////////// + //+/uLX/a1tU/2tbVP6QhIBu////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KnNj + XM92ZmD3/Pv7//////////////////////+flZD/a1tU/25fWP/39/f///////////////////////// + ///////////////////25uf/xGVs/+/U1v///////////+f2/v/M7f7/yKi1/8Rvdv/M7f7/zO3+/+35 + ////////////////////////nZOO/2tbVP9sXFXztq+rRv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KpCDfnNrW1T/ysTC/v/////////////////////u7Oz/cWFb/2tbVP+Wi4b///////// + ///////////////////////////////////25uf/xGVs/+/U1v//////s+T9/wOl+f8ApPn/Y4Sy/7Zq + dv8ApPn/AKT5/wuo+f/W8P7/////////////////9/f2/4J1b/9rW1T/c2Rcyvn5+Sz///8q////Kv// + /yr///8q////Kv///yr///8q////Ku7u7i5uXVfohXdy8v//////////////////////////ta2p/2tb + VP9rW1T/2dTT///////////////////////////////////////25uf/xGVs/+/U1v//////ZMj7/yWx + +v/M7f7/yKi1/8Rvdv/M7f7/zO3+/wem+f+K1fz//////////////////////+Dd2/9tXlf/a1tU/4Z5 + c4f///8q////Kv///yr///8q////Kv///yr///8q////Kv///yqAc2ySa1tU/+Dc2/////////////// + ////////+/r6/4V4cv9rW1T/cmNc//r6+v/////////////////////////////////25uf/xGVs/+/U + 1v//////Ysf7/y60+v//////4bG1/8hwdv///////////wmn+f+G1Pz///////////////////////// + //+yqqb/a1tU/2xcVfbAuLRB////Kv///yr///8q////Kv///yr///8q////Kv///yrIxL88bFxU+JyR + jfT//////////////////////////+Pf3v9uX1j/a1tU/4+Dfv////////////////////////////// + ///79PT/xWdu/8+DiP/UjpP/qn+S/5x6kv/UjpP/y3mA/79ugv+Hcev/h3Hr/wWi+P9HifH/h3Hr/6CP + 7//08v3////////////8+/v/gXNt/2tbVP94aWKz////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qeGhjsGxdVvzx8O////////////////////////////+3r6z/a1tU/2tbVP+zq6f///////// + ////////////////////////6sfK/9WRlv/UjpP/qn+S/5x6kv/UjpP/wX2Y/3ZJyv+Hcev/h3Hr/wWi + +P9HifH/h3Hr/2FF5f+ypPL/////////////////08/N/2tbVP9rW1T+oJiSWf///yr///8q////Kv// + /yr///8q////Kv///yr///8qpZyZVWtbVP9+cGr9kYWA/5WKhf+cko3/pJuW/6mgnP+upqL/cWFb/2tb + VP9rW1T/ycTB////////////////////////////////////////////Ysf7/y60+v//////rJ3x/2dL + 5v///////////wmn+f+G1Pz//////3NZ6P+gju///////////////////////5WJhP9rW1T/c2Rdxf// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KnJjXcxrW1T/a1tU/2tbVP9rW1T/a1tU/2tb + VP9rW1T/a1tU/2tbVP9rW1T/bl5X/+fk4///////////////////////////////////////cMz8/xas + +v93zvz/UKD1/zB68P93zvz/d878/wSl+f+U2fz//////3NZ6P+gju///////////////////////+He + 3P9sXFX/a1tU/6CVj1v///8q////Kv///yr///8q////Kv///yr///8q////KsK+uj+KfXd8hHdyiYJ0 + b5F+cWqce2xlpnlqZK12aGG4dGVew3NkXM9sXFX4a1tU/3hqY//j397///////////////////////// + ////////1fD+/zO2+v8Rqvn/C6P4/wee9/8Rqvn/Ear5/0G7+//r+P///////3NZ6P+gju////////// + //////////////////+YjYj/a1tU/3VmYMD///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yq2r6tGbl9Y5WtbVP9zZF3/2tbU//// + ////////////////////////////////////////rJ3x/2dL5v///////////////////////////3NZ + 6P+gju/////////////////////////////d2df/a1tU/2tbVP21rqpI////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qwLi0QW9g + WdxrW1T/cGBZ/8W/vP//////////////////////////////////////rJ3x/2dL5v////////////// + /////////////3NZ6P+gju//////////////////////////////////h3t1/2tbVP98bmig////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KtLJyTlxYlzQa1tU/2tbVP+hl5L/+fj4////////////////////////////zcT3/1s9 + 5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P/Ct/X/////////////////////////////////xL27/2tb + VP9uXVfr9O7uLf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yrl5eUxeWxmqGtbVP9rW1T/gnRu/9vX1f////////////// + /////////////9TM+P+ypPL/sqTy/7Kk8v+ypPL/sqTy/8/H9//+/f////////////////////////// + ////////9vX0/3BgWf9rW1T/l4uGZf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Ko2Ce3RsXVX1a1tU/2xc + Vf+km5b/9fPz//////////////////////////////////////////////////////////////////// + /////////////////////////////5mOiv9rW1T/fGxmpf///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yq6s69GdGVfwmtbVP9rW1T/cmNc/7CopP/39vb///////////////////////////////////////// + /////////////////////////////////////////////8K7uf9rW1T/cGFa2////yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Ko+CfXRuXlfqa1tU/2tbVP94aWP/uLGt//Py8v////////////// + /////////////////////////////////////////////////////////////+nn5v9rW1T/a1tU/sK+ + uj////8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrg4NsyhHZwjWxeVvBrW1T/a1tU/3Bh + Wv+lm5f/3drY//7+/v////////////////////////////////////////////////////////////// + //97bWf/a1tU/46BfHX///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KtXR + 0TeBdW+Obl9Y6GtbVP9rW1T/a1tU/39xa/+yqab/3tvZ//7+/v////////////////////////////// + //////////////////+glpH/a1tU/3xuZ6P///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q7u7uLo+CfXRzY13Ia1tU/WtbVP9rW1T/a1tU/3doYf+dko7/wLm2/+He + 3f/6+vr///////////////////////////+2r6v/a1tU/3VnYL////8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qwLy4QYR1cItyY13Oa1tU/Gtb + VP9rW1T/a1tU/2tbVP9sXFX/f3Fr/5WKhf+upaH/wbu4/8vFw/+rop7/a1tU/3BgWtr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qz8rGOo2Ce3R6bGWncGBZ2WtbVP1rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2xd + VfX///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KuDg2zKpnZpTj4J9dIBxbJd2aGG4cWNbz29g + Wt5tXlbsbFtV+XRlX8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa - VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb - VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd - VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w - AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP - rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA - AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA - rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA - AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/ - rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////yBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIE////////8gQoAAAAIAAAAEAA AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kry0sERvX1nse21npravq0b///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8qp56YVHJiXPeUiITzdWdg7X1vaaGuqKRM////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yq5sbFFa1tU/8/Kx//5+Pj/wbq484N1 + cOSAc22pubGxRf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KtnZ1DVrW1T/w726//// + /////////v7+/9HLyfePhH7fin13oc/Kxjr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Km1c + Vvu4sK3////////////////////////////DvLr8cGJa87avq0b///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr09PQtbV1X/HdoYv+6sq//+vr6/////////////////97a2f9rW1T/n5aRWv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kol6dn9rW1T/fG9p/2tcVf99cGj/087M////////////5OHf/2tbVP+bjolj////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yqto6BObl5X9pyRjP7/////ysTC/3NkXv5rW1T/m5GM//Py8v/q5+b/a1tU/5SI + g2v///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qw7u7QHBgWumAcWv89PPy/////////////f39/56Tj/9tXVb/d2dh/8S+ + u/9rW1T/j4J9dP///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KsjEvzxyY1zZdWdg/Ovo6P///////////////////////////9vW + 1v9zZF3+a1tU/2tbVP+KfXd8////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yqto6BOcWFZ53RlX/zg3Nv///////////////////////// + //////////////r5+f+HenX/a1tU/3FjXM/v6ekv////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qta6qSKWcllXAvLhB7u7uLv///yr5+fkri4F6eW5fV/V+cWv86ufm//////////////////// + //////////////////////////////////+vpqL/bF1W/nZnYcPl5eUx////Kv///yr///8q////Kv// + /yr///8q////Kv///ypvX1nsc2Nc92tbVP9rW1T+cGBZ8G5eWPprW1T/l4yH/fTz8v////////////// + ///////////////////////////////////////////////////Pysj/bV5X/XVlX8fl5eUx////Kv// + /yr///8q////Kv///yr///8q////KnprZamWi4Xxz8rH/8C5tv+yqab/dmdh/3lpZP////////////// + ///////////////////////////////////////////////////////////////////Szcv/bV1W/Xdo + Yrv09PQt////Kv///yr///8q////Kv///yr///8qsKaiTXFiW/L6+vr///////////+1rar/bFxV/97a + 2f/////////////////////////////////z4OL/y3d9/8hvdv/Ib3b/yG92/9qfo/////////////// + ///KxMH/bFxV/3xvaZ7///8q////Kv///yr///8q////Kv///yr///8qdGZgxcS+u/L///////////Lw + 8P9xYVv/f3Fr/////////////////////////////////+W7vv/hsLP//////////////v7/x21z//// + //////////////////+0rKj/a1tU/pSKhmn///8q////Kv///yr///8q////Kv///yqWjIdmfG5p7P// + /////////////7uzsP9sXFX/wbu4////////////////////////////5bu+/+Gws///////WcT7/yOv + +f+8aXP/IrD6/zu5+v/q+P////////7+/v+QhH/9bl9X8r63s0P///8q////Kv///yr///8q////Kvn5 + +StyYlvg2NTS+v///////////Pv7/4FzbP9wYVr/8/Lx///////////////////////lu77/4bCz/+z4 + //8crvr/3fL9/8Vsc//d8/7/UMH7/7Dj/f///////////+/u7f91Zl/8dGVfzPn5+Sv///8q////Kv// + /yr///8q////Koh7dYGNgXzn////////////////4d7d/21eV/+CdW7//////////////////////+nG + yf/RiI3/16qx/3iIr//frLD/xXB8/6iY8f89oPb/c5vz/7Ch8v/39v7//////8/KyP9rW1T/kIN+c/// + /yr///8q////Kv///yr///8q4ODbMm9gWfHMxsT/2NTS/+He3f/n5OP/qaCc/2tbVP+dk47///////// + /////////vv8/+vKzf/bvcT/YZHB/+bAxP92TdH/vbH0/0Sp9/+CrPX/hnDr/8W79f///////////4+D + ff1xYlvm6uTkMP///yr///8q////Kv///yr///8qf3Fql2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tc + Vf+/uLX///////////////////////P7//8Vq/n/h9T8/zVz7v+I1fz/MbX6/7vn/f+ikfD/v7T1//// + ////////4N3b/2xcVf+Ed3KJ////Kv///yr///8q////Kv///yr5+fksubGxRaifm1KgmJJZm46JY5KG + gm6NgXx3cmJc02xcVf7Bu7j//////////////////////7Lk/f+H1Pz/NXPu/4jV/P+a2/3/+/7//6KR + 8P+/tPX/////////////////nZKO/nBhWe307u4t////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr07u4teGpkrmtbVP+tpKD//Pz8//////////////////7+//9jRuX/3tj6/97Y + +v/e2Pr/lIDt/8G19f/////////////////c2Nb/a1tU/5KGgm7///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr5+fkrgHNskmxcVf2JfHb86Obl/////////////////6uc + 8f+Hcev/h3Hr/4dx6/+Oeuz/7uv8//////////////////////+CdG78dmZgxf///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qnJGMX3BhWutuXlj9tKuo//j3 + 9////////////////////////////////////////////////////////////7y0sf9sXFX90snJOf// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q2dnUNXxt + Z6FrXFX8dWdg/LuzsP/08/L/////////////////////////////////////////////////5ePh/2tb + VP+QhIBu////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KrOsqUp4amO1bFxV/W5eWP2elI/+2NTS//7+/v////////////////////////////// + ///+/v7/d2hi/HtsZab///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yrAuLRBgHNsknFiWuhrW1T/eGlj/KCWkf/GwL3/7Orp//// + //////////////////+YjYj/dGVez////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q+fn5LJuOiWN7bWekcmNc3mtb + VP9rW1T/cWJb/Il7dvyglpL/r6ai/4p9eP9wYVnt////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qycDAPY+EgHCAcm2UdmhhtXJkXdlxYlrrbV5X93BgWeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc - VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A - AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA - AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////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== + AAAAAAAAAAAAAP///yr///8q////Kv///yr///8q////Kv///yr///8qwLi0QXNjXeeEdnCZxcG9Pv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qvrezQ2xdVvzVz832lIeC3Yl8eKDCvro/////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q4ODbMmtb + VP/39/b//////+Xj4fuonprclYmEptXRzDf///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Km5eWPzg3dv/////////////////3drY/3Vl + X+r///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qrqikTHBhWv1xYlv/pJuX/PTz8v//////6efm/29gWff///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrh3Nwzd2hh3bSsqPzc2df/fG5o/HJi + XP7KxMH+7+7t/2xcVfz///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Ku7u7i55a2XKlouG+P39/f///////////7u0sP9xY1v+joF7/GtbVP/u7u4u////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q1dHMN3lqZM2MgHr3+vn5//// + ///////////////////u7Oz/fG1n/GtbVP+pn5xQ////Kv///yr///8q////Kv///yr///8q////KpuR + i2GTiIFtn5aRWrmxrkWTjIdodWVf6KCUkPn7+vr//////////////////////////////////v7+/6Wb + mPxxYlvzq6WeT////yr///8q////Kv///yr///8q////KnNkXeiIe3b1fXBq9HJjW/txYVr/xr+9/v// + ///////////////////////////////////////////////////Aubb9cWJb8rCmok3///8q////Kv// + /yr///8q////Kod6dIa/uLXq//////z7+/90ZV7+vLSx/////////////////////////v7/3aaq/9iY + nf/YmJ3/4bG1////////////vre0/XJiXPK5sbFF////Kv///yr///8q////Kt3Y2DR+cGri/v7+//// + //+8s7D+dWdg/fz8/P/////////////////68vP/2p2i///////j9f7/y42W/93z/v/3/P///////6+n + o/t2aGHa7+npL////yr///8q////Kv///yqAc22f0szK8v/////8/Pz/fXBp/pyTjv7///////////// + ///68vP/2p2i/8Lp/v9Gvfv/r4KV/3fO/P9Yw/v///////38/P+Kfnn3gHJsqP///yr///8q////Kv// + /yrAvLhBh3l04f//////////4d7c/29fWP/OyMb////////////89/j/0IaL/7mouf+ro7n/yX6L/7Kk + 8v8ypPf/uKvz//n4/v/w7u7/cWFb+aCYkln///8q////Kv///yr///8qfW9ouKqhnfy1ran/urKv/42B + e/9xYlv+4N3b////////////9+rr/7TK4P+fwuD/kHTe/97Y+v8/s/r/ppbw/9HI9///////u7Ow/Xdp + Ytj5+fkr////Kv///yr///8qubGxRYBya5Z+cWuefnFqsH9xart1Z2Did2hi+ero5////////////+H0 + /v9Uwvv/LpT1/1XC+/+Y2v3/uazz/8/G9///////+/r6/3prZfeSh4Js////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qhHZxk3RlX/jY09H/////////////////inXs/9PL+P/Ty/j/oI7v/9LK + +P///////////7+4tf56a2XP////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KpCE + gG5wYVv1p52Z+vPx8f//////4Nr6/72x9P+9sfT/wbb1//r6/v////////////b19P9vX1j7ta6qSP// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrAvLhBfW9otXFhW/m3sKz89/b2//// + //////////////////////////////////+Wiob3hnlzh////yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KqqhmlF7bGXJcGFZ+5+UkPjZ1dP//fz8//////////////////// + ///Bu7j/e21nyf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qvrezQ4N1cJZ0Zl/pcGFZ+5CEfvS2r6v+zsjG/+Th3//Pysj/dGVf7f///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qvba2QoyA + e3h+cWuqe21m0XRlX+1vYFn3b2BZ8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /0EAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABB////QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8q////Kv///yr///8q////KsvHxzt6a2bfk4eDgO/p6S////8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrZ1dU2koaB6eTi4Paso5/Npp2Zc/T0 + 9C3///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KoN0b/L9/f3//////9zY + 1vePg36m////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kp2TjmOEdnD4hXZx/NrW + 1f3y8PD/hnlzxv///yr///8q////Kv///yr///8q////Kv///yr///8q////KsjEvzyBc23n8/Hx/+nn + 5v+BdG77rKSg+oR2cc////8q////Kv///yr///8q////Kv///yr///8q////KsXBvT5/cWvf4d7c/v// + /////////f39/5aKhfl5a2Xu6uTkMP///yr///8q////Kv///yqDdG+/hnhyxIJ1cMKCdW7q4+Df/v// + ////////////////////////ysTC+YF0bcb5+fks////Kv///yr///8qkIR+uurn5v+6s7D9mI6J+v// + //////////////Ha3P/jt7r/6sfK//////+/ubX2hnlzsf///yr///8q////KqCVkF7Tz8zo+/r6/35w + a/zy8fD////////////jtbn/5fb+/66iuP+m3/3//////6KXk/CXi4Zu////Kv///yr5+fkro5iUxP// + ///Oycf8iXx2+v//////////4rO2/43E6P/PprH/icv7/8rf+//5+Pj/gnNu6NnV1Tb///8q////KpmP + iX2zq6jzvbaz+H5wav2rop76//////bp6v+ar8z/sZrV/3+19/+PnfL/5+P7/83HxfuLfnmg////Kv// + /yrv6ekvmo+KYpCDfnGJenR/e21m3tDLyPr/////3PP+/16j9f+V2f3/zsb3/9/a+v/+/v7/hHdx6OXl + 5TH///8q////Kv///yr///8q////Kubg4DKBdG7It6+s9v38/P/b1Pn/sqTy/6+h8v/29P7//////721 + svaUh4N3////Kv///yr///8q////Kv///yr///8q+fn5LIyAepKDdnDp19PR/f7+/v////////////// + ///u7Oz/h3hzxf///yr///8q////Kv///yr///8q////Kv///yr///8qwr66P4h6da+CdW7qtq6r9eHe + 3P/8/Pz//////4R2ceL///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q4ODbMpSJ + gm6HenS2f3Fr34N2cOhzY13xAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQ== 716, 17 + + 831, 17 + 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///////////////////////////////////////// + AAD///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kqyjn1BtXVbuc2Rex5uOiWP///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KpaMh2Z6a2TYa1tU/2xcVftzZFzKkISAbvn5+Sz///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KpaJhGhrW1T9d2hh/722s/x5amT1b19Z73Nk + XcWLfnh57+npL////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KqKalFhrW1T/cGBZ//// + ///8/Pz/yMPA/n5xa/RwYFrvc2NdyIZ5c4fZ1dU2////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KrWu + qkhrW1T/a1tU//n5+P////////////7+/v/Szcv/jIF78nRmX+l1Z2C9joF8dc/Kxjr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KtXRzDdrW1T/a1tU/+7s6////////////////////////////93Z1/+Th4Lzd2li6nhq + Y7SShoJuwr66P////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kvn5+StrXFX8a1tU/+Pf3v////////////////////////////// + ////////5uPi/5KFgPdzY1zwhHdyif///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yptXVfxa1tU/8vFw/////////////// + /////////////////////////////8jDwP9rW1T/cWFb1f///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kvn5+SttW1X5a1tU/2xc + Vf+aj4r/6+jo/////////////////////////////////87Jx/9rW1T/b2Ba3v///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KpKG + gm5rW1T/a1tU/2tbVP9rW1T/cGFa/7avq//7+vr//////////////////////9TPzf9rW1T/bl5Y5v// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q2dnUNW5fV+drW1T/o5mV/7Oppv9uX1j/a1tU/2tbVP+Bc23/2dXT/////////////////9rW + 1P9rW1T/bV1W7v///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qd2ljsmtbVP92Z2H/8/Hx///////49/f/l4yH/2xbVf9rW1T/bFxV/6ad + mP/5+Pj//////9/c2v9rW1T/bFxV9v///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yqFeHKGa1tU/2tbVP/Nx8X//////////////////////9vX + 1f92Z2D/a1tU/2tbVP+CdW//4d7c/+Xi4f9rW1T/a1tU/fn5+Sv///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KpCEgG5rW1T8a1tU/6yjn/////////////// + ///////////////////+/v7/oJaR/2tcVP9rW1T/bl5X/6mgnP9rW1T/a1tU/+bg4DL///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8ql4uGZWxbVflrW1T/lYmE//z8 + /P///////////////////////////////////////////9jT0v9xYlz/a1tU/2tbVP9rW1T/a1tU/8/K + xjr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yqTh4JqbFxU+Gtb + VP+Lfnn/+Pf3///////////////////////////////////////////////////////4+Pj/iHx2/2tb + VP9rW1T/a1tU/6yiok3///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KoR3 + colrW1T8a1tU/42BfP/29fT///////////////////////////////////////////////////////// + /////////////6CXkv9rW1T/a1tU/29gWt3AuLRB////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yrLx8c7dmhhtmtbVP9rW1T/lImE//n4+P////////////////////////////////////////////// + ///////////////////////////////////CvLn/cWJa/2tbVP9vX1njvrezQ////yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///ypzZFzKdWZfu25fWOhxYlvSdWZfvnts + ZaaAcm2ThXhxiHlpYrFtXVbua1tU/2tbVP+tpKD//fz8//////////////////////////////////// + ////////////////////////////////////////////////////////4d7d/3ZnYf9rW1T/bl5Y47y0 + sET///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///ypuXljma1tU/2tb + VP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/e2xm/9LNy/////////////////////////////// + /////////////////////////////////////////////////////////////////////////////+Th + 3/93aGH/a1tU/25eWOPCvro/////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yqCdG+Ra1tU/7SsqP/Bu7j/tKyo/6Salv+Wi4b/f3Jr/2tbVP9sXFX/9PPy//////////////////// //////////////////////////////////////////////////////////////////////////////// - //////////////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//////////////////////////////////////////////////// - /////////////7Wtqv9rW1T/a1tU/2tbVP9rW1TUalhYHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpWloRbFpUVWtb - U6JrW1Twa1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/cGFa/5KHgv+/uLX/8O/u//////////////////// - ///////////////////9/f3/p56a/2tbVP9rW1T/a1tU/2pbVcdmWVkUAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABVVVUDallVPGtbVJFrW1Pia1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/bFxV/4l8 - dv+1ran/4d7d//////////////////v6+v+cko3/a1tU/2tbVP9rW1T/a1tUsXFVVQkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa1xSMmxcVIBrW1XNa1tU/2tb - VP9rW1T/a1tU/2tbVP9rW1T/a1tU/4Fzbf+vpqL/2NPR/42BfP9rW1T/a1tU/2tbVP9rW1SYVVVVAwAA + ///////////////////k4eD/d2hh/2tbVP9wYlvW2dnUNf///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yrMxMQ8bFxU+JySjfX/////////////////////7Orq/2xcVf9rW1T/sqmm//// + ////////////////////////////////////////////////////////+Ozt/+W7vv/jt7r/47e6/+O3 + uv/jt7r/6MLF//z39///////////////////////39za/3FhW/9rW1T/dGVfxO7u7i7///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8qeWpjr2xdVvzx8O///////////////////////5mO + iv9rW1T/c2Nd///////////////////////////////////////////////////////9+vr/yXF4/8Rl + bP/EZWz/xGVs/8RlbP/EZWz/xGVs/9WSl////////////////////////////9PPzf9tXlf/a1tU/31v + aJ////8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qp56YVGtbVP+0q6j6//////// + /////////////+Dc2/9sXFX/a1tU/7Oqp/////////////////////////////////////////////// + ///25uf/xGVs/+/V1///////////////////////4bG1/8hwdv////////////////////////////// + //+/uLX/a1tU/2tbVP6QhIBu////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KnNj + XM92ZmD3/Pv7//////////////////////+flZD/a1tU/25fWP/39/f///////////////////////// + ///////////////////25uf/xGVs/+/U1v///////////+f2/v/M7f7/yKi1/8Rvdv/M7f7/zO3+/+35 + ////////////////////////nZOO/2tbVP9sXFXztq+rRv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KpCDfnNrW1T/ysTC/v/////////////////////u7Oz/cWFb/2tbVP+Wi4b///////// + ///////////////////////////////////25uf/xGVs/+/U1v//////s+T9/wOl+f8ApPn/Y4Sy/7Zq + dv8ApPn/AKT5/wuo+f/W8P7/////////////////9/f2/4J1b/9rW1T/c2Rcyvn5+Sz///8q////Kv// + /yr///8q////Kv///yr///8q////Ku7u7i5uXVfohXdy8v//////////////////////////ta2p/2tb + VP9rW1T/2dTT///////////////////////////////////////25uf/xGVs/+/U1v//////ZMj7/yWx + +v/M7f7/yKi1/8Rvdv/M7f7/zO3+/wem+f+K1fz//////////////////////+Dd2/9tXlf/a1tU/4Z5 + c4f///8q////Kv///yr///8q////Kv///yr///8q////Kv///yqAc2ySa1tU/+Dc2/////////////// + ////////+/r6/4V4cv9rW1T/cmNc//r6+v/////////////////////////////////25uf/xGVs/+/U + 1v//////Ysf7/y60+v//////4bG1/8hwdv///////////wmn+f+G1Pz///////////////////////// + //+yqqb/a1tU/2xcVfbAuLRB////Kv///yr///8q////Kv///yr///8q////Kv///yrIxL88bFxU+JyR + jfT//////////////////////////+Pf3v9uX1j/a1tU/4+Dfv////////////////////////////// + ///79PT/xWdu/8+DiP/UjpP/qn+S/5x6kv/UjpP/y3mA/79ugv+Hcev/h3Hr/wWi+P9HifH/h3Hr/6CP + 7//08v3////////////8+/v/gXNt/2tbVP94aWKz////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qeGhjsGxdVvzx8O////////////////////////////+3r6z/a1tU/2tbVP+zq6f///////// + ////////////////////////6sfK/9WRlv/UjpP/qn+S/5x6kv/UjpP/wX2Y/3ZJyv+Hcev/h3Hr/wWi + +P9HifH/h3Hr/2FF5f+ypPL/////////////////08/N/2tbVP9rW1T+oJiSWf///yr///8q////Kv// + /yr///8q////Kv///yr///8qpZyZVWtbVP9+cGr9kYWA/5WKhf+cko3/pJuW/6mgnP+upqL/cWFb/2tb + VP9rW1T/ycTB////////////////////////////////////////////Ysf7/y60+v//////rJ3x/2dL + 5v///////////wmn+f+G1Pz//////3NZ6P+gju///////////////////////5WJhP9rW1T/c2Rdxf// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KnJjXcxrW1T/a1tU/2tbVP9rW1T/a1tU/2tb + VP9rW1T/a1tU/2tbVP9rW1T/bl5X/+fk4///////////////////////////////////////cMz8/xas + +v93zvz/UKD1/zB68P93zvz/d878/wSl+f+U2fz//////3NZ6P+gju///////////////////////+He + 3P9sXFX/a1tU/6CVj1v///8q////Kv///yr///8q////Kv///yr///8q////KsK+uj+KfXd8hHdyiYJ0 + b5F+cWqce2xlpnlqZK12aGG4dGVew3NkXM9sXFX4a1tU/3hqY//j397///////////////////////// + ////////1fD+/zO2+v8Rqvn/C6P4/wee9/8Rqvn/Ear5/0G7+//r+P///////3NZ6P+gju////////// + //////////////////+YjYj/a1tU/3VmYMD///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yq2r6tGbl9Y5WtbVP9zZF3/2tbU//// + ////////////////////////////////////////rJ3x/2dL5v///////////////////////////3NZ + 6P+gju/////////////////////////////d2df/a1tU/2tbVP21rqpI////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qwLi0QW9g + WdxrW1T/cGBZ/8W/vP//////////////////////////////////////rJ3x/2dL5v////////////// + /////////////3NZ6P+gju//////////////////////////////////h3t1/2tbVP98bmig////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KtLJyTlxYlzQa1tU/2tbVP+hl5L/+fj4////////////////////////////zcT3/1s9 + 5P9bPeT/Wz3k/1s95P9bPeT/Wz3k/1s95P/Ct/X/////////////////////////////////xL27/2tb + VP9uXVfr9O7uLf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yrl5eUxeWxmqGtbVP9rW1T/gnRu/9vX1f////////////// + /////////////9TM+P+ypPL/sqTy/7Kk8v+ypPL/sqTy/8/H9//+/f////////////////////////// + ////////9vX0/3BgWf9rW1T/l4uGZf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Ko2Ce3RsXVX1a1tU/2xc + Vf+km5b/9fPz//////////////////////////////////////////////////////////////////// + /////////////////////////////5mOiv9rW1T/fGxmpf///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yq6s69GdGVfwmtbVP9rW1T/cmNc/7CopP/39vb///////////////////////////////////////// + /////////////////////////////////////////////8K7uf9rW1T/cGFa2////yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Ko+CfXRuXlfqa1tU/2tbVP94aWP/uLGt//Py8v////////////// + /////////////////////////////////////////////////////////////+nn5v9rW1T/a1tU/sK+ + uj////8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrg4NsyhHZwjWxeVvBrW1T/a1tU/3Bh + Wv+lm5f/3drY//7+/v////////////////////////////////////////////////////////////// + //97bWf/a1tU/46BfHX///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KtXR + 0TeBdW+Obl9Y6GtbVP9rW1T/a1tU/39xa/+yqab/3tvZ//7+/v////////////////////////////// + //////////////////+glpH/a1tU/3xuZ6P///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q7u7uLo+CfXRzY13Ia1tU/WtbVP9rW1T/a1tU/3doYf+dko7/wLm2/+He + 3f/6+vr///////////////////////////+2r6v/a1tU/3VnYL////8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qwLy4QYR1cItyY13Oa1tU/Gtb + VP9rW1T/a1tU/2tbVP9sXFX/f3Fr/5WKhf+upaH/wbu4/8vFw/+rop7/a1tU/3BgWtr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qz8rGOo2Ce3R6bGWncGBZ2WtbVP1rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2xd + VfX///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////KuDg2zKpnZpTj4J9dIBxbJd2aGG4cWNbz29g + Wt5tXlbsbFtV+XRlX8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAb15VHmtbU2trWlS6a1tU+WtbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2pa - VH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVtbDmtcU1ZrW1Ola1tU7mtbVP9rW1T/a1tU/2tb - VP9rW1T8altTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBABGxd - VUJqWlOQa1tU22tbVOdsXFVOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4H///+sEP//AD///6wQ//4AB///rBD/+AAA//+sEP/w - AAAP/6wQ/+AAAAH/rBD/wAAAAD+sEP+AAAAAH6wQ/wAAAAAPrBD+AAAAAA+sEPwAAAAAD6wQ+AAAAAAP - rBDgAAAAAA+sEMAAAAAAB6wQgAAAAAAHrBAAAAAAAAesEAAAAAAAB6wQAAAAAAADrBAAAAAAAAOsEAAA - AAAAA6wQAAAAAAADrBAAAAAAAAOsEIAAAAAAAawQgAAAAAABrBCAAAAAAAGsEIAAAAAAAawQwAAAAAAA - rBDAAAAAAACsEMAAAAAAAKwQwAAAAAAArBDAAAAAAACsEOAAAAAAAKwQ4AAAAAAArBDgAAAAAAGsEOAA - AAAAA6wQ8AAAAAAHrBDwAAAAAA+sEPAAAAAAP6wQ8AAAAAB/rBDwAAAAAP+sEPgAAAAB/6wQ/AAAAAP/ - rBD/gAAAB/+sEP/wAAAP/6wQ//8AAB//rBD//+AAf/+sEP///AD//6wQ////gf//rBAoAAAAIAAAAEAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////yBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAA + AAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA + 8gQAAAAAAADyBAAAAAAAAPIEAAAAAAAA8gQAAAAAAADyBAAAAAAAAPIE////////8gQoAAAAIAAAAEAA AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABsXFRha1tU7GtbVcFqW1RzalxVJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbFtVe2tbVP5rW1T/a1tU/2tbVP9rW1T/a1tT1mtcVIhrWVU5gICAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kry0sERvX1nse21npravq0b///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8qp56YVHJiXPeUiITzdWdg7X1vaaGuqKRM////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yq5sbFFa1tU/8/Kx//5+Pj/wbq484N1 + cOSAc22pubGxRf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KtnZ1DVrW1T/w726//// + /////////v7+/9HLyfePhH7fin13oc/Kxjr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Km1c + Vvu4sK3////////////////////////////DvLr8cGJa87avq0b///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr09PQtbV1X/HdoYv+6sq//+vr6/////////////////97a2f9rW1T/n5aRWv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kol6dn9rW1T/fG9p/2tcVf99cGj/087M////////////5OHf/2tbVP+bjolj////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yqto6BObl5X9pyRjP7/////ysTC/3NkXv5rW1T/m5GM//Py8v/q5+b/a1tU/5SI + g2v///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qw7u7QHBgWumAcWv89PPy/////////////f39/56Tj/9tXVb/d2dh/8S+ + u/9rW1T/j4J9dP///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KsjEvzxyY1zZdWdg/Ovo6P///////////////////////////9vW + 1v9zZF3+a1tU/2tbVP+KfXd8////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yqto6BOcWFZ53RlX/zg3Nv///////////////////////// + //////////////r5+f+HenX/a1tU/3FjXM/v6ekv////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qta6qSKWcllXAvLhB7u7uLv///yr5+fkri4F6eW5fV/V+cWv86ufm//////////////////// + //////////////////////////////////+vpqL/bF1W/nZnYcPl5eUx////Kv///yr///8q////Kv// + /yr///8q////Kv///ypvX1nsc2Nc92tbVP9rW1T+cGBZ8G5eWPprW1T/l4yH/fTz8v////////////// + ///////////////////////////////////////////////////Pysj/bV5X/XVlX8fl5eUx////Kv// + /yr///8q////Kv///yr///8q////KnprZamWi4Xxz8rH/8C5tv+yqab/dmdh/3lpZP////////////// + ///////////////////////////////////////////////////////////////////Szcv/bV1W/Xdo + Yrv09PQt////Kv///yr///8q////Kv///yr///8qsKaiTXFiW/L6+vr///////////+1rar/bFxV/97a + 2f/////////////////////////////////z4OL/y3d9/8hvdv/Ib3b/yG92/9qfo/////////////// + ///KxMH/bFxV/3xvaZ7///8q////Kv///yr///8q////Kv///yr///8qdGZgxcS+u/L///////////Lw + 8P9xYVv/f3Fr/////////////////////////////////+W7vv/hsLP//////////////v7/x21z//// + //////////////////+0rKj/a1tU/pSKhmn///8q////Kv///yr///8q////Kv///yqWjIdmfG5p7P// + /////////////7uzsP9sXFX/wbu4////////////////////////////5bu+/+Gws///////WcT7/yOv + +f+8aXP/IrD6/zu5+v/q+P////////7+/v+QhH/9bl9X8r63s0P///8q////Kv///yr///8q////Kvn5 + +StyYlvg2NTS+v///////////Pv7/4FzbP9wYVr/8/Lx///////////////////////lu77/4bCz/+z4 + //8crvr/3fL9/8Vsc//d8/7/UMH7/7Dj/f///////////+/u7f91Zl/8dGVfzPn5+Sv///8q////Kv// + /yr///8q////Koh7dYGNgXzn////////////////4d7d/21eV/+CdW7//////////////////////+nG + yf/RiI3/16qx/3iIr//frLD/xXB8/6iY8f89oPb/c5vz/7Ch8v/39v7//////8/KyP9rW1T/kIN+c/// + /yr///8q////Kv///yr///8q4ODbMm9gWfHMxsT/2NTS/+He3f/n5OP/qaCc/2tbVP+dk47///////// + /////////vv8/+vKzf/bvcT/YZHB/+bAxP92TdH/vbH0/0Sp9/+CrPX/hnDr/8W79f///////////4+D + ff1xYlvm6uTkMP///yr///8q////Kv///yr///8qf3Fql2tbVP9rW1T/a1tU/2tbVP9rW1T/a1tU/2tc + Vf+/uLX///////////////////////P7//8Vq/n/h9T8/zVz7v+I1fz/MbX6/7vn/f+ikfD/v7T1//// + ////////4N3b/2xcVf+Ed3KJ////Kv///yr///8q////Kv///yr5+fksubGxRaifm1KgmJJZm46JY5KG + gm6NgXx3cmJc02xcVf7Bu7j//////////////////////7Lk/f+H1Pz/NXPu/4jV/P+a2/3/+/7//6KR + 8P+/tPX/////////////////nZKO/nBhWe307u4t////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr07u4teGpkrmtbVP+tpKD//Pz8//////////////////7+//9jRuX/3tj6/97Y + +v/e2Pr/lIDt/8G19f/////////////////c2Nb/a1tU/5KGgm7///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr5+fkrgHNskmxcVf2JfHb86Obl/////////////////6uc + 8f+Hcev/h3Hr/4dx6/+Oeuz/7uv8//////////////////////+CdG78dmZgxf///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qnJGMX3BhWutuXlj9tKuo//j3 + 9////////////////////////////////////////////////////////////7y0sf9sXFX90snJOf// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q2dnUNXxt + Z6FrXFX8dWdg/LuzsP/08/L/////////////////////////////////////////////////5ePh/2tb + VP+QhIBu////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////KrOsqUp4amO1bFxV/W5eWP2elI/+2NTS//7+/v////////////////////////////// + ///+/v7/d2hi/HtsZab///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yrAuLRBgHNsknFiWuhrW1T/eGlj/KCWkf/GwL3/7Orp//// + //////////////////+YjYj/dGVez////yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q+fn5LJuOiWN7bWekcmNc3mtb + VP9rW1T/cWJb/Il7dvyglpL/r6ai/4p9eP9wYVnt////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qycDAPY+EgHCAcm2UdmhhtXJkXdlxYlrrbV5X93BgWeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgICAAmtZVTlrXFSIa1tT1mtbVP9rW1T/a1tU/2tbVP9rW1T+bFtVewAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalxVJGpbVHNrW1XBa1tU7Gxc - VGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/g////wA///wAB//4A - AD/8AAAH+AAAB/AAAAfgAAADwAAAA4AAAAMAAAADAAAAAQAAAAEAAAABAAAAAQAAAAGAAAAAgAAAAIAA - AACAAAAAgAAAAMAAAADAAAABwAAAA8AAAAfgAAAP4AAAH+AAAD/8AAB//4AA///wA////wf/KAAAABgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////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== + AAAAAAAAAAAAAP///yr///8q////Kv///yr///8q////Kv///yr///8qwLi0QXNjXeeEdnCZxcG9Pv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qvrezQ2xdVvzVz832lIeC3Yl8eKDCvro/////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q4ODbMmtb + VP/39/b//////+Xj4fuonprclYmEptXRzDf///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Km5eWPzg3dv/////////////////3drY/3Vl + X+r///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qrqikTHBhWv1xYlv/pJuX/PTz8v//////6efm/29gWff///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrh3Nwzd2hh3bSsqPzc2df/fG5o/HJi + XP7KxMH+7+7t/2xcVfz///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8q////Ku7u7i55a2XKlouG+P39/f///////////7u0sP9xY1v+joF7/GtbVP/u7u4u////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q1dHMN3lqZM2MgHr3+vn5//// + ///////////////////u7Oz/fG1n/GtbVP+pn5xQ////Kv///yr///8q////Kv///yr///8q////KpuR + i2GTiIFtn5aRWrmxrkWTjIdodWVf6KCUkPn7+vr//////////////////////////////////v7+/6Wb + mPxxYlvzq6WeT////yr///8q////Kv///yr///8q////KnNkXeiIe3b1fXBq9HJjW/txYVr/xr+9/v// + ///////////////////////////////////////////////////Aubb9cWJb8rCmok3///8q////Kv// + /yr///8q////Kod6dIa/uLXq//////z7+/90ZV7+vLSx/////////////////////////v7/3aaq/9iY + nf/YmJ3/4bG1////////////vre0/XJiXPK5sbFF////Kv///yr///8q////Kt3Y2DR+cGri/v7+//// + //+8s7D+dWdg/fz8/P/////////////////68vP/2p2i///////j9f7/y42W/93z/v/3/P///////6+n + o/t2aGHa7+npL////yr///8q////Kv///yqAc22f0szK8v/////8/Pz/fXBp/pyTjv7///////////// + ///68vP/2p2i/8Lp/v9Gvfv/r4KV/3fO/P9Yw/v///////38/P+Kfnn3gHJsqP///yr///8q////Kv// + /yrAvLhBh3l04f//////////4d7c/29fWP/OyMb////////////89/j/0IaL/7mouf+ro7n/yX6L/7Kk + 8v8ypPf/uKvz//n4/v/w7u7/cWFb+aCYkln///8q////Kv///yr///8qfW9ouKqhnfy1ran/urKv/42B + e/9xYlv+4N3b////////////9+rr/7TK4P+fwuD/kHTe/97Y+v8/s/r/ppbw/9HI9///////u7Ow/Xdp + Ytj5+fkr////Kv///yr///8qubGxRYBya5Z+cWuefnFqsH9xart1Z2Did2hi+ero5////////////+H0 + /v9Uwvv/LpT1/1XC+/+Y2v3/uazz/8/G9///////+/r6/3prZfeSh4Js////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8qhHZxk3RlX/jY09H/////////////////inXs/9PL+P/Ty/j/oI7v/9LK + +P///////////7+4tf56a2XP////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KpCE + gG5wYVv1p52Z+vPx8f//////4Nr6/72x9P+9sfT/wbb1//r6/v////////////b19P9vX1j7ta6qSP// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrAvLhBfW9otXFhW/m3sKz89/b2//// + //////////////////////////////////+Wiob3hnlzh////yr///8q////Kv///yr///8q////Kv// + /yr///8q////Kv///yr///8q////KqqhmlF7bGXJcGFZ+5+UkPjZ1dP//fz8//////////////////// + ///Bu7j/e21nyf///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv// + /yr///8qvrezQ4N1cJZ0Zl/pcGFZ+5CEfvS2r6v+zsjG/+Th3//Pysj/dGVf7f///yr///8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8qvba2QoyA + e3h+cWuqe21m0XRlX+1vYFn3b2BZ8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /0EAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABB////QSgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8q////Kv///yr///8q////KsvHxzt6a2bfk4eDgO/p6S////8q////Kv// + /yr///8q////Kv///yr///8q////Kv///yr///8q////Kv///yrZ1dU2koaB6eTi4Paso5/Npp2Zc/T0 + 9C3///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////KoN0b/L9/f3//////9zY + 1vePg36m////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q////Kp2TjmOEdnD4hXZx/NrW + 1f3y8PD/hnlzxv///yr///8q////Kv///yr///8q////Kv///yr///8q////KsjEvzyBc23n8/Hx/+nn + 5v+BdG77rKSg+oR2cc////8q////Kv///yr///8q////Kv///yr///8q////KsXBvT5/cWvf4d7c/v// + /////////f39/5aKhfl5a2Xu6uTkMP///yr///8q////Kv///yqDdG+/hnhyxIJ1cMKCdW7q4+Df/v// + ////////////////////////ysTC+YF0bcb5+fks////Kv///yr///8qkIR+uurn5v+6s7D9mI6J+v// + //////////////Ha3P/jt7r/6sfK//////+/ubX2hnlzsf///yr///8q////KqCVkF7Tz8zo+/r6/35w + a/zy8fD////////////jtbn/5fb+/66iuP+m3/3//////6KXk/CXi4Zu////Kv///yr5+fkro5iUxP// + ///Oycf8iXx2+v//////////4rO2/43E6P/PprH/icv7/8rf+//5+Pj/gnNu6NnV1Tb///8q////KpmP + iX2zq6jzvbaz+H5wav2rop76//////bp6v+ar8z/sZrV/3+19/+PnfL/5+P7/83HxfuLfnmg////Kv// + /yrv6ekvmo+KYpCDfnGJenR/e21m3tDLyPr/////3PP+/16j9f+V2f3/zsb3/9/a+v/+/v7/hHdx6OXl + 5TH///8q////Kv///yr///8q////Kubg4DKBdG7It6+s9v38/P/b1Pn/sqTy/6+h8v/29P7//////721 + svaUh4N3////Kv///yr///8q////Kv///yr///8q+fn5LIyAepKDdnDp19PR/f7+/v////////////// + ///u7Oz/h3hzxf///yr///8q////Kv///yr///8q////Kv///yr///8qwr66P4h6da+CdW7qtq6r9eHe + 3P/8/Pz//////4R2ceL///8q////Kv///yr///8q////Kv///yr///8q////Kv///yr///8q4ODbMpSJ + gm6HenS2f3Fr34N2cOhzY13xAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQ== \ No newline at end of file diff --git a/Models/AppOptions.cs b/Models/AppOptions.cs new file mode 100644 index 0000000..afd46e7 --- /dev/null +++ b/Models/AppOptions.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace RokettoLaunch.Models +{ + public class AppOptions + { + public int TilesPerRow { get; set; } = 8; + + public bool ShowBigIcons { get; set; } = true; + + public RyzStudio.Windows.ThemedForms.ButtonTextBox.ThKeyCodeTextBox.Results ShowToggleHotkey { get; set; } = null; + + public bool HideOnClose { get; set; } = true; + + public bool HideOnExecute { get; set; } = true; + + public bool AlwaysOnTop { get; set; } = false; + + public List Groups { get; set; } = new List(); + + public Point StartPosition { get; set; } = Point.Empty; + + public int Height { get; set; } = 280; + + } +} \ No newline at end of file diff --git a/Models/LauncherSession.cs b/Models/LauncherSession.cs deleted file mode 100644 index 784b2d8..0000000 --- a/Models/LauncherSession.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; - -namespace FizzyLauncher.Models -{ - public class LauncherSession - { - public class HotKeyOptions - { - public bool IsCtrl { get; set; } = false; - public bool IsAlt { get; set; } = false; - public bool IsShift { get; set; } = false; - public int Key { get; set; } = (int)System.Windows.Forms.Keys.None; - - public int ModifierCode => ((this.IsAlt ? 1 : 0) + (this.IsCtrl ? 2 : 0) + (this.IsShift ? 4 : 0)); - - public System.Windows.Forms.Keys KeyCode => (System.Windows.Forms.Keys)this.Key; - } - - public enum AutoSaveOption - { - Prompt = 0, - Yes, - No - } - - public int DefaultHeight { get; set; } = 280; - public HotKeyOptions HotKey { get; set; } = null; - - public bool AlwaysOnTop { get; set; } = false; - public bool EnableAnimation { get; set; } = false; - public bool EnableBigIconInFolder { get; set; } = false; - - public bool HideOnClose { get; set; } = false; - public bool HideOnClick { get; set; } = false; - public AutoSaveOption AutoSave { get; set; } = AutoSaveOption.Prompt; - public List Groups { get; set; } = new List(); - - public Point StartPosition { get; set; } = Point.Empty; - - } -} \ No newline at end of file diff --git a/Models/NewFormModel.cs b/Models/NewFormModel.cs new file mode 100644 index 0000000..7756338 --- /dev/null +++ b/Models/NewFormModel.cs @@ -0,0 +1,10 @@ +namespace RokettoLaunch.Models +{ + public class NewFormModel + { + public int ColumnCount { get; set; } = 8; + + public int GroupCount { get; set; } = 1; + + } +} \ No newline at end of file diff --git a/Models/TileGroupModel.cs b/Models/TileGroupModel.cs index 5ce4fd1..d5e25ef 100644 --- a/Models/TileGroupModel.cs +++ b/Models/TileGroupModel.cs @@ -2,7 +2,7 @@ using System.Drawing; using System.Text.Json.Serialization; -namespace FizzyLauncher.Models +namespace RokettoLaunch.Models { public class TileGroupModel { @@ -10,8 +10,6 @@ namespace FizzyLauncher.Models public bool IsExpanded { get; set; } = false; - public bool IsExclusive { get; set; } = false; - public List Items { get; set; } = new List(); [JsonConverter(typeof(RyzStudio.Text.Json.JsonSizeConverter))] diff --git a/Models/TileModel.cs b/Models/TileModel.cs index d7fe793..e61f02d 100644 --- a/Models/TileModel.cs +++ b/Models/TileModel.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using System.Drawing; using System.Text.Json.Serialization; -namespace FizzyLauncher.Models +namespace RokettoLaunch.Models { public class TileModel { diff --git a/NewForm.cs b/NewForm.cs index d6691ab..c0b5adc 100644 --- a/NewForm.cs +++ b/NewForm.cs @@ -1,124 +1,168 @@ -using RyzStudio.Windows.ThemedForms; -using System; +using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; +using RyzStudio.Windows.ThemedForms; -namespace FizzyLauncher +namespace RokettoLaunch { - public class NewForm : TDialogForm + public class NewForm : TDialog { private System.Windows.Forms.Label label1; - private TButton button1; - private TNumericBox numericBox1; + private ThButton button1; + private ThNumericBox numericBox1; + private ThNumericBox numericBox2; + private Label label2; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; - public NewForm(MainForm parent) : base() + public NewForm() { InitializeComponent(); - parentForm = parent; + this.OkButton = button1; numericBox1.Minimum = 4; numericBox1.Maximum = 24; - numericBox1.Value = 6; + numericBox1.Value = 8; + numericBox2.Minimum = 1; + numericBox2.Maximum = 8; + numericBox2.Value = 1; } private void InitializeComponent() { - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new RyzStudio.Windows.ThemedForms.TButton(); - this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.numericBox1 = new RyzStudio.Windows.ThemedForms.TNumericBox(); - this.SuspendLayout(); + label1 = new Label(); + button1 = new ThButton(); + tHorizontalSeparator1 = new THorizontalSeparator(); + numericBox1 = new ThNumericBox(); + numericBox2 = new ThNumericBox(); + label2 = new Label(); + SuspendLayout(); // // label1 // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.ForeColor = System.Drawing.SystemColors.ControlText; - this.label1.Location = new System.Drawing.Point(10, 21); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label1.Size = new System.Drawing.Size(137, 34); - this.label1.TabIndex = 153; - this.label1.Text = "Number of Tiles Per Row"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.Transparent; + label1.ForeColor = System.Drawing.SystemColors.ControlText; + label1.Location = new System.Drawing.Point(10, 21); + label1.Margin = new Padding(0); + label1.Name = "label1"; + label1.Padding = new Padding(0, 9, 0, 10); + label1.Size = new System.Drawing.Size(76, 34); + label1.TabIndex = 153; + label1.Text = "Tiles Per Row"; + 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.IdleImage = null; - this.button1.ActiveImage = null; - this.button1.LabelText = "&Save"; - this.button1.Location = new System.Drawing.Point(241, 109); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.HoverImage = 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.Click += new System.EventHandler(this.button1_Click); + button1.AcceptButton = null; + button1.ActiveImage = null; + button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + button1.BackColor = System.Drawing.Color.Transparent; + button1.EnableMenuOnClick = false; + button1.EnableReactiveVisual = true; + button1.HoverImage = null; + button1.IdleImage = null; + button1.LabelText = "&OK"; + button1.Location = new System.Drawing.Point(241, 369); + button1.Margin = new Padding(10, 10, 10, 0); + button1.Name = "button1"; + button1.Padding = new Padding(4, 4, 3, 3); + button1.Size = new System.Drawing.Size(128, 32); + button1.TabIndex = 173; + button1.TabStop = false; // // 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, 77); - this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); - 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; + tHorizontalSeparator1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | 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(10, 337); + tHorizontalSeparator1.Margin = new Padding(0, 10, 0, 0); + tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2); + tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22); + tHorizontalSeparator1.Name = "tHorizontalSeparator1"; + tHorizontalSeparator1.Size = new System.Drawing.Size(364, 22); + tHorizontalSeparator1.TabIndex = 188; + tHorizontalSeparator1.TabStop = false; // // numericBox1 // - this.numericBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.numericBox1.BackColor = System.Drawing.Color.Transparent; - this.numericBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.numericBox1.Location = new System.Drawing.Point(285, 20); - this.numericBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.numericBox1.Name = "numericBox1"; - this.numericBox1.Padding = new System.Windows.Forms.Padding(8, 8, 7, 7); - this.numericBox1.Size = new System.Drawing.Size(84, 34); - this.numericBox1.AcceptButton = null; - this.numericBox1.TabIndex = 189; - this.numericBox1.Value = 0; + numericBox1.AcceptButton = null; + numericBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; + numericBox1.BackColor = System.Drawing.Color.Transparent; + numericBox1.EnableReactiveVisual = true; + numericBox1.Font = new System.Drawing.Font("Segoe UI", 9F); + numericBox1.Location = new System.Drawing.Point(285, 20); + numericBox1.Margin = new Padding(10, 10, 10, 0); + numericBox1.Maximum = 100; + numericBox1.Minimum = 1; + numericBox1.Name = "numericBox1"; + numericBox1.Padding = new Padding(4, 4, 3, 3); + numericBox1.Size = new System.Drawing.Size(84, 32); + numericBox1.TabIndex = 189; + numericBox1.TabStop = false; + numericBox1.Value = 1; + // + // numericBox2 + // + numericBox2.AcceptButton = null; + numericBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right; + numericBox2.BackColor = System.Drawing.Color.Transparent; + numericBox2.EnableReactiveVisual = true; + numericBox2.Font = new System.Drawing.Font("Segoe UI", 9F); + numericBox2.Location = new System.Drawing.Point(285, 62); + numericBox2.Margin = new Padding(10, 10, 10, 0); + numericBox2.Maximum = 100; + numericBox2.Minimum = 1; + numericBox2.Name = "numericBox2"; + numericBox2.Padding = new Padding(4, 4, 3, 3); + numericBox2.Size = new System.Drawing.Size(84, 32); + numericBox2.TabIndex = 191; + numericBox2.TabStop = false; + numericBox2.Value = 1; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = System.Drawing.Color.Transparent; + label2.ForeColor = System.Drawing.SystemColors.ControlText; + label2.Location = new System.Drawing.Point(10, 63); + label2.Margin = new Padding(0); + label2.Name = "label2"; + label2.Padding = new Padding(0, 9, 0, 10); + label2.Size = new System.Drawing.Size(106, 34); + label2.TabIndex = 190; + label2.Text = "Number of Groups"; + label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // NewForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(384, 161); - this.Controls.Add(this.numericBox1); - this.Controls.Add(this.tHorizontalSeparator1); - this.Controls.Add(this.button1); - this.Controls.Add(this.label1); - this.MinimumSize = new System.Drawing.Size(400, 200); - this.Name = "NewForm"; - this.Text = "New"; - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(384, 421); + Controls.Add(numericBox2); + Controls.Add(label2); + Controls.Add(numericBox1); + Controls.Add(tHorizontalSeparator1); + Controls.Add(button1); + Controls.Add(label1); + MinimumSize = new System.Drawing.Size(400, 200); + Name = "NewForm"; + Text = "New"; + ResumeLayout(false); + PerformLayout(); } - public MainForm parentForm { get; set; } = null; - - - private void button1_Click(object sender, EventArgs e) + public NewFormModel Result { - if (parentForm != null) + get => new NewFormModel() { - parentForm.Clear(numericBox1.Value); - } - - this.Close(); + ColumnCount = numericBox1.Value, + GroupCount = numericBox2.Value + }; } } diff --git a/NewForm.resx b/NewForm.resx index f298a7b..af32865 100644 --- a/NewForm.resx +++ b/NewForm.resx @@ -1,4 +1,64 @@ - + + + diff --git a/OptionsForm.cs b/OptionsForm.cs index 8e845e5..4a37aa7 100644 --- a/OptionsForm.cs +++ b/OptionsForm.cs @@ -1,279 +1,429 @@ -using FizzyLauncher.Models; +using System; +using System.Linq; +using System.Windows.Forms; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; using RyzStudio.Windows.ThemedForms; using RyzStudio.Windows.ThemedForms.ButtonTextBox; using RyzStudio.Windows.ThemedForms.PickerBox; -using System; -namespace FizzyLauncher +namespace RokettoLaunch { - public class OptionsForm : TDialogForm + public class OptionsForm : TDialog { private System.Windows.Forms.Label label1; - private TButton button1; - private TYesNoPickerBox pickerBox2; + private ThButton button1; + private ThYesNoPickerBox yesNoPickerBox2; private System.Windows.Forms.Label label6; - private TYesNoPickerBox pickerBox3; + private ThYesNoPickerBox yesNoPickerBox3; private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private TPickerBox pickerBox1; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; - private TKeyCodeTextBox textBox1; + private ThKeyCodeTextBox textBox1; + private ThNumericBox numericBox1; + private Label label4; + private FlowLayoutPanel flowLayoutPanel1; + private TTogglePanel tTogglePanel1; + private TTogglePanel tTogglePanel2; + private ThYesNoPickerBox yesNoPickerBox1; + private Label label2; + private ThYesNoPickerBox yesNoPickerBox4; + private Label label3; + + private AppOptions _appSession = null; - public OptionsForm(MainForm parent) : base() + public OptionsForm(AppOptions appSession) { InitializeComponent(); - parentForm = parent; + this.OkButton = button1; - pickerBox1.ComboBox.Items.Clear(); - foreach (string item in Enum.GetNames(typeof(LauncherSession.AutoSaveOption))) + numericBox1.Minimum = 4; + numericBox1.Maximum = 24; + + _appSession = appSession; + + if (_appSession != null) { - pickerBox1.ComboBox.Items.Add(item); + numericBox1.Value = _appSession.TilesPerRow; + yesNoPickerBox1.Value = _appSession.ShowBigIcons; + textBox1.UpdateKeyCode(_appSession?.ShowToggleHotkey ?? new ThKeyCodeTextBox.Results()); + yesNoPickerBox2.Value = _appSession.HideOnClose; + yesNoPickerBox3.Value = _appSession.HideOnExecute; + yesNoPickerBox4.Value = _appSession.AlwaysOnTop; } - - if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0; - } private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm)); - TKeyCodeTextBox.Results results1 = new TKeyCodeTextBox.Results(); - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new TButton(); - this.pickerBox2 = new TYesNoPickerBox(); - this.label6 = new System.Windows.Forms.Label(); - this.pickerBox3 = new TYesNoPickerBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.pickerBox1 = new TPickerBox(); - this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.textBox1 = new TKeyCodeTextBox(); - this.SuspendLayout(); - // + ThKeyCodeTextBox.Results results1 = new ThKeyCodeTextBox.Results(); + label1 = new Label(); + button1 = new ThButton(); + yesNoPickerBox2 = new ThYesNoPickerBox(); + label6 = new Label(); + yesNoPickerBox3 = new ThYesNoPickerBox(); + label7 = new Label(); + tHorizontalSeparator1 = new THorizontalSeparator(); + textBox1 = new ThKeyCodeTextBox(); + numericBox1 = new ThNumericBox(); + label4 = new Label(); + flowLayoutPanel1 = new FlowLayoutPanel(); + tTogglePanel1 = new TTogglePanel(); + yesNoPickerBox1 = new ThYesNoPickerBox(); + label2 = new Label(); + tTogglePanel2 = new TTogglePanel(); + yesNoPickerBox4 = new ThYesNoPickerBox(); + label3 = new Label(); + flowLayoutPanel1.SuspendLayout(); + tTogglePanel1.SuspendLayout(); + tTogglePanel2.SuspendLayout(); + SuspendLayout(); + // // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.ForeColor = System.Drawing.SystemColors.ControlText; - this.label1.Location = new System.Drawing.Point(10, 21); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label1.Size = new System.Drawing.Size(107, 34); - this.label1.TabIndex = 153; - this.label1.Text = "Show/Hide Hotkey"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // + // + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.Transparent; + label1.ForeColor = System.Drawing.SystemColors.ControlText; + label1.Location = new System.Drawing.Point(1, 22); + label1.Margin = new Padding(0); + label1.Name = "label1"; + label1.Padding = new Padding(0, 8, 0, 0); + label1.Size = new System.Drawing.Size(115, 23); + label1.TabIndex = 153; + label1.Text = "Show Toggle Hotkey"; + 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.IdleImage = null; - this.button1.ActiveImage = null; - this.button1.LabelText = "&Save"; - this.button1.Location = new System.Drawing.Point(241, 469); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.HoverImage = 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.Click += new System.EventHandler(this.button1_Click); - // - // pickerBox2 - // - this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox2.BackColor = System.Drawing.Color.Transparent; - this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox2.Location = new System.Drawing.Point(285, 103); - this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4); - this.pickerBox2.Name = "pickerBox2"; - this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox2.Size = new System.Drawing.Size(84, 34); - this.pickerBox2.AcceptButton = null; - this.pickerBox2.TabIndex = 183; - this.pickerBox2.Value = true; - // + // + button1.AcceptButton = null; + button1.ActiveImage = null; + button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + button1.BackColor = System.Drawing.Color.Transparent; + button1.EnableMenuOnClick = false; + button1.EnableReactiveVisual = true; + button1.HoverImage = null; + button1.IdleImage = null; + button1.LabelText = "&Save"; + button1.Location = new System.Drawing.Point(301, 469); + button1.Margin = new Padding(10, 10, 10, 0); + button1.Name = "button1"; + button1.Padding = new Padding(4, 4, 3, 3); + button1.Size = new System.Drawing.Size(128, 32); + button1.TabIndex = 173; + button1.TabStop = false; + // + // yesNoPickerBox2 + // + yesNoPickerBox2.AcceptButton = null; + yesNoPickerBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right; + yesNoPickerBox2.BackColor = System.Drawing.Color.Transparent; + yesNoPickerBox2.EnableReactiveVisual = true; + yesNoPickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F); + yesNoPickerBox2.Location = new System.Drawing.Point(307, 63); + yesNoPickerBox2.Margin = new Padding(10, 10, 10, 0); + yesNoPickerBox2.Name = "yesNoPickerBox2"; + yesNoPickerBox2.Padding = new Padding(4, 4, 3, 3); + yesNoPickerBox2.SelectedIndex = 1; + yesNoPickerBox2.Size = new System.Drawing.Size(84, 34); + yesNoPickerBox2.TabIndex = 183; + yesNoPickerBox2.TabStop = false; + yesNoPickerBox2.Value = true; + // // label6 - // - this.label6.AutoSize = true; - this.label6.BackColor = System.Drawing.Color.Transparent; - this.label6.ForeColor = System.Drawing.SystemColors.ControlText; - this.label6.Location = new System.Drawing.Point(10, 103); - this.label6.Margin = new System.Windows.Forms.Padding(0); - this.label6.Name = "label6"; - this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label6.Size = new System.Drawing.Size(83, 34); - this.label6.TabIndex = 182; - this.label6.Text = "Hide On Close"; - this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // pickerBox3 - // - this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox3.BackColor = System.Drawing.Color.Transparent; - this.pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox3.Location = new System.Drawing.Point(285, 144); - this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4); - this.pickerBox3.Name = "pickerBox3"; - this.pickerBox3.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox3.Size = new System.Drawing.Size(84, 34); - this.pickerBox3.AcceptButton = null; - this.pickerBox3.TabIndex = 185; - this.pickerBox3.Value = true; - // + // + label6.AutoSize = true; + label6.BackColor = System.Drawing.Color.Transparent; + label6.ForeColor = System.Drawing.SystemColors.ControlText; + label6.Location = new System.Drawing.Point(1, 63); + label6.Margin = new Padding(0); + label6.Name = "label6"; + label6.Padding = new Padding(0, 8, 0, 0); + label6.Size = new System.Drawing.Size(83, 23); + label6.TabIndex = 182; + label6.Text = "Hide On Close"; + label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // yesNoPickerBox3 + // + yesNoPickerBox3.AcceptButton = null; + yesNoPickerBox3.Anchor = AnchorStyles.Top | AnchorStyles.Right; + yesNoPickerBox3.BackColor = System.Drawing.Color.Transparent; + yesNoPickerBox3.EnableReactiveVisual = true; + yesNoPickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F); + yesNoPickerBox3.Location = new System.Drawing.Point(307, 107); + yesNoPickerBox3.Margin = new Padding(10, 10, 10, 0); + yesNoPickerBox3.Name = "yesNoPickerBox3"; + yesNoPickerBox3.Padding = new Padding(4, 4, 3, 3); + yesNoPickerBox3.SelectedIndex = 1; + yesNoPickerBox3.Size = new System.Drawing.Size(84, 34); + yesNoPickerBox3.TabIndex = 185; + yesNoPickerBox3.TabStop = false; + yesNoPickerBox3.Value = true; + // // label7 - // - this.label7.AutoSize = true; - this.label7.BackColor = System.Drawing.Color.Transparent; - this.label7.ForeColor = System.Drawing.SystemColors.ControlText; - this.label7.Location = new System.Drawing.Point(10, 144); - this.label7.Margin = new System.Windows.Forms.Padding(0); - this.label7.Name = "label7"; - this.label7.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label7.Size = new System.Drawing.Size(95, 34); - this.label7.TabIndex = 184; - this.label7.Text = "Hide On Execute"; - this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.BackColor = System.Drawing.Color.Transparent; - this.label8.ForeColor = System.Drawing.SystemColors.ControlText; - this.label8.Location = new System.Drawing.Point(10, 62); - this.label8.Margin = new System.Windows.Forms.Padding(0); - this.label8.Name = "label8"; - this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label8.Size = new System.Drawing.Size(60, 34); - this.label8.TabIndex = 186; - this.label8.Text = "Auto Save"; - this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // pickerBox1 - // - this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox1.BackColor = System.Drawing.Color.Transparent; - this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox1.Location = new System.Drawing.Point(285, 62); - this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4); - this.pickerBox1.Name = "pickerBox1"; - this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox1.Size = new System.Drawing.Size(84, 34); - this.pickerBox1.AcceptButton = null; - this.pickerBox1.TabIndex = 187; - // + // + label7.AutoSize = true; + label7.BackColor = System.Drawing.Color.Transparent; + label7.ForeColor = System.Drawing.SystemColors.ControlText; + label7.Location = new System.Drawing.Point(1, 107); + label7.Margin = new Padding(0); + label7.Name = "label7"; + label7.Padding = new Padding(0, 8, 0, 0); + label7.Size = new System.Drawing.Size(95, 23); + label7.TabIndex = 184; + label7.Text = "Hide On Execute"; + label7.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(10, 0, 10, 0); - 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; - // + // + tHorizontalSeparator1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | 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(10, 437); + tHorizontalSeparator1.Margin = new Padding(0, 10, 0, 0); + tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2); + tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22); + tHorizontalSeparator1.Name = "tHorizontalSeparator1"; + tHorizontalSeparator1.Size = new System.Drawing.Size(424, 22); + tHorizontalSeparator1.TabIndex = 188; + tHorizontalSeparator1.TabStop = false; + // // 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"))); + // + textBox1.AcceptButton = null; + textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBox1.BackColor = System.Drawing.Color.Transparent; + textBox1.EnableReactiveVisual = true; + textBox1.Font = new System.Drawing.Font("Segoe UI", 9F); + textBox1.HighlightImage = (System.Drawing.Image)resources.GetObject("textBox1.HighlightImage"); results1.IsAlt = false; results1.IsCtrl = false; results1.IsShift = false; - results1.Key = System.Windows.Forms.Keys.None; - this.textBox1.KeyCodeResults = results1; - this.textBox1.Location = new System.Drawing.Point(192, 20); - this.textBox1.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.textBox1.Name = "textBox1"; - this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage"))); - this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox1.Size = new System.Drawing.Size(177, 35); - this.textBox1.AcceptButton = null; - this.textBox1.TabIndex = 189; - this.textBox1.UseSystemPasswordChar = false; - // + results1.Key = Keys.None; + textBox1.KeyCodeResults = results1; + textBox1.Location = new System.Drawing.Point(192, 21); + textBox1.Margin = new Padding(10, 10, 10, 0); + textBox1.Name = "textBox1"; + textBox1.NormalImage = (System.Drawing.Image)resources.GetObject("textBox1.NormalImage"); + textBox1.Padding = new Padding(4, 4, 3, 3); + textBox1.Size = new System.Drawing.Size(199, 32); + textBox1.TabIndex = 189; + textBox1.TabStop = false; + textBox1.UseSystemPasswordChar = false; + // + // numericBox1 + // + numericBox1.AcceptButton = null; + numericBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; + numericBox1.BackColor = System.Drawing.Color.Transparent; + numericBox1.EnableReactiveVisual = true; + numericBox1.Font = new System.Drawing.Font("Segoe UI", 9F); + numericBox1.Location = new System.Drawing.Point(252, 22); + numericBox1.Margin = new Padding(10, 10, 10, 0); + numericBox1.Maximum = 100; + numericBox1.Minimum = 1; + numericBox1.Name = "numericBox1"; + numericBox1.Padding = new Padding(4, 4, 3, 3); + numericBox1.Size = new System.Drawing.Size(139, 32); + numericBox1.TabIndex = 192; + numericBox1.TabStop = false; + numericBox1.Value = 1; + // + // label4 + // + label4.AutoSize = true; + label4.BackColor = System.Drawing.Color.Transparent; + label4.ForeColor = System.Drawing.SystemColors.ControlText; + label4.Location = new System.Drawing.Point(1, 22); + label4.Margin = new Padding(0); + label4.Name = "label4"; + label4.Padding = new Padding(0, 8, 0, 0); + label4.Size = new System.Drawing.Size(76, 23); + label4.TabIndex = 193; + label4.Text = "Tiles Per Row"; + label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // flowLayoutPanel1 + // + flowLayoutPanel1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + flowLayoutPanel1.AutoScroll = true; + flowLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + flowLayoutPanel1.Controls.Add(tTogglePanel1); + flowLayoutPanel1.Controls.Add(tTogglePanel2); + flowLayoutPanel1.FlowDirection = FlowDirection.TopDown; + flowLayoutPanel1.Location = new System.Drawing.Point(8, 12); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new System.Drawing.Size(436, 412); + flowLayoutPanel1.TabIndex = 194; + flowLayoutPanel1.WrapContents = false; + flowLayoutPanel1.Resize += flowLayoutPanel1_Resize; + // + // tTogglePanel1 + // + tTogglePanel1.AutoScrollMargin = new System.Drawing.Size(0, 0); + tTogglePanel1.AutoScrollMinSize = new System.Drawing.Size(0, 0); + tTogglePanel1.Controls.Add(yesNoPickerBox1); + tTogglePanel1.Controls.Add(label2); + tTogglePanel1.Controls.Add(label4); + tTogglePanel1.Controls.Add(numericBox1); + tTogglePanel1.ExpandedHeight = 100; + tTogglePanel1.ForeColor = System.Drawing.Color.FromArgb(99, 105, 119); + tTogglePanel1.IsOpen = true; + tTogglePanel1.Location = new System.Drawing.Point(0, 0); + tTogglePanel1.Margin = new Padding(0); + tTogglePanel1.Name = "tTogglePanel1"; + tTogglePanel1.Padding = new Padding(0, 22, 0, 0); + tTogglePanel1.Size = new System.Drawing.Size(401, 119); + tTogglePanel1.TabIndex = 0; + tTogglePanel1.Title = "Appearance"; + tTogglePanel1.TitleContextMenuStrip = null; + tTogglePanel1.TitleCursor = Cursors.Default; + tTogglePanel1.TitlePadding = new Padding(4, 4, 0, 2); + // + // yesNoPickerBox1 + // + yesNoPickerBox1.AcceptButton = null; + yesNoPickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right; + yesNoPickerBox1.BackColor = System.Drawing.Color.Transparent; + yesNoPickerBox1.EnableReactiveVisual = true; + yesNoPickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F); + yesNoPickerBox1.Location = new System.Drawing.Point(307, 64); + yesNoPickerBox1.Margin = new Padding(10, 10, 10, 0); + yesNoPickerBox1.Name = "yesNoPickerBox1"; + yesNoPickerBox1.Padding = new Padding(4, 4, 3, 3); + yesNoPickerBox1.SelectedIndex = 1; + yesNoPickerBox1.Size = new System.Drawing.Size(84, 34); + yesNoPickerBox1.TabIndex = 195; + yesNoPickerBox1.TabStop = false; + yesNoPickerBox1.Value = true; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = System.Drawing.Color.Transparent; + label2.ForeColor = System.Drawing.SystemColors.ControlText; + label2.Location = new System.Drawing.Point(1, 64); + label2.Margin = new Padding(0); + label2.Name = "label2"; + label2.Padding = new Padding(0, 8, 0, 0); + label2.Size = new System.Drawing.Size(87, 23); + label2.TabIndex = 194; + label2.Text = "Show Big Icons"; + label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tTogglePanel2 + // + tTogglePanel2.AutoScrollMargin = new System.Drawing.Size(0, 0); + tTogglePanel2.AutoScrollMinSize = new System.Drawing.Size(0, 0); + tTogglePanel2.Controls.Add(yesNoPickerBox4); + tTogglePanel2.Controls.Add(label3); + tTogglePanel2.Controls.Add(label1); + tTogglePanel2.Controls.Add(textBox1); + tTogglePanel2.Controls.Add(yesNoPickerBox2); + tTogglePanel2.Controls.Add(yesNoPickerBox3); + tTogglePanel2.Controls.Add(label6); + tTogglePanel2.Controls.Add(label7); + tTogglePanel2.ExpandedHeight = 100; + tTogglePanel2.ForeColor = System.Drawing.Color.FromArgb(99, 105, 119); + tTogglePanel2.IsOpen = true; + tTogglePanel2.Location = new System.Drawing.Point(0, 119); + tTogglePanel2.Margin = new Padding(0); + tTogglePanel2.Name = "tTogglePanel2"; + tTogglePanel2.Padding = new Padding(0, 22, 0, 0); + tTogglePanel2.Size = new System.Drawing.Size(401, 206); + tTogglePanel2.TabIndex = 1; + tTogglePanel2.Title = "Behaviour"; + tTogglePanel2.TitleContextMenuStrip = null; + tTogglePanel2.TitleCursor = Cursors.Default; + tTogglePanel2.TitlePadding = new Padding(4, 4, 0, 2); + // + // yesNoPickerBox4 + // + yesNoPickerBox4.AcceptButton = null; + yesNoPickerBox4.Anchor = AnchorStyles.Top | AnchorStyles.Right; + yesNoPickerBox4.BackColor = System.Drawing.Color.Transparent; + yesNoPickerBox4.EnableReactiveVisual = true; + yesNoPickerBox4.Font = new System.Drawing.Font("Segoe UI", 9F); + yesNoPickerBox4.Location = new System.Drawing.Point(307, 151); + yesNoPickerBox4.Margin = new Padding(10, 10, 10, 0); + yesNoPickerBox4.Name = "yesNoPickerBox4"; + yesNoPickerBox4.Padding = new Padding(4, 4, 3, 3); + yesNoPickerBox4.SelectedIndex = 1; + yesNoPickerBox4.Size = new System.Drawing.Size(84, 34); + yesNoPickerBox4.TabIndex = 191; + yesNoPickerBox4.TabStop = false; + yesNoPickerBox4.Value = true; + // + // label3 + // + label3.AutoSize = true; + label3.BackColor = System.Drawing.Color.Transparent; + label3.ForeColor = System.Drawing.SystemColors.ControlText; + label3.Location = new System.Drawing.Point(1, 151); + label3.Margin = new Padding(0); + label3.Name = "label3"; + label3.Padding = new Padding(0, 8, 0, 0); + label3.Size = new System.Drawing.Size(85, 23); + label3.TabIndex = 190; + label3.Text = "Always On Top"; + label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // // OptionsForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(384, 521); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.tHorizontalSeparator1); - this.Controls.Add(this.pickerBox1); - this.Controls.Add(this.label8); - this.Controls.Add(this.pickerBox3); - this.Controls.Add(this.label7); - this.Controls.Add(this.pickerBox2); - this.Controls.Add(this.label6); - this.Controls.Add(this.button1); - this.Controls.Add(this.label1); - this.MinimumSize = new System.Drawing.Size(400, 560); - this.Name = "OptionsForm"; - this.Text = "Options"; - this.ResumeLayout(false); - this.PerformLayout(); - + // + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(444, 521); + Controls.Add(flowLayoutPanel1); + Controls.Add(tHorizontalSeparator1); + Controls.Add(button1); + MinimumSize = new System.Drawing.Size(460, 560); + Name = "OptionsForm"; + Text = "Options"; + flowLayoutPanel1.ResumeLayout(false); + tTogglePanel1.ResumeLayout(false); + tTogglePanel1.PerformLayout(); + tTogglePanel2.ResumeLayout(false); + tTogglePanel2.PerformLayout(); + ResumeLayout(false); } - protected override void OnShown(EventArgs e) + protected override void OnLoad(EventArgs e) { - base.OnShown(e); + base.OnLoad(e); - if (parentForm == null) - { - return; - } - - if (parentForm.CurrentSession == null) - { - return; - } - - // hotkey - if (parentForm.CurrentSession.HotKey != null) - { - textBox1.UpdateKeyCode(parentForm.CurrentSession.HotKey.IsCtrl, parentForm.CurrentSession.HotKey.IsAlt, parentForm.CurrentSession.HotKey.IsShift, parentForm.CurrentSession.HotKey.KeyCode); - } - - pickerBox1.ComboBox.SelectedIndex = (int)parentForm.CurrentSession.AutoSave; - pickerBox2.Value = parentForm.CurrentSession.HideOnClose; - pickerBox3.Value = parentForm.CurrentSession.HideOnClick; + flowLayoutPanel1_Resize(null, e); } - - public MainForm parentForm { get; set; } = null; - - - private void button1_Click(object sender, EventArgs e) + private void flowLayoutPanel1_Resize(object sender, EventArgs e) { - if (parentForm != null) + var width = flowLayoutPanel1.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth; + + foreach (var item in flowLayoutPanel1.Controls.OfType()) { - if (parentForm.CurrentSession == null) parentForm.CurrentSession = new LauncherSession(); - if (parentForm.CurrentSession.HotKey == null) parentForm.CurrentSession.HotKey = new LauncherSession.HotKeyOptions(); - - parentForm.CurrentSession.HotKey.IsCtrl = textBox1.KeyCodeResults.IsCtrl; - parentForm.CurrentSession.HotKey.IsAlt = textBox1.KeyCodeResults.IsAlt; - parentForm.CurrentSession.HotKey.IsShift = textBox1.KeyCodeResults.IsShift; - parentForm.CurrentSession.HotKey.Key = textBox1.KeyCodeResults.KeyCode; - - parentForm.CurrentSession.AutoSave = (LauncherSession.AutoSaveOption)pickerBox1.ComboBox.SelectedIndex; - parentForm.CurrentSession.HideOnClose = pickerBox2.Value; - parentForm.CurrentSession.HideOnClick = pickerBox3.Value; - + item.Width = width; } + } - this.Close(); + public AppOptions Result + { + get + { + if (_appSession == null) + { + _appSession = new AppOptions(); + } + + _appSession.TilesPerRow = numericBox1.Value; + _appSession.ShowBigIcons = yesNoPickerBox1.Value; + _appSession.ShowToggleHotkey = textBox1.KeyCodeResults; + _appSession.HideOnClose = yesNoPickerBox2.Value; + _appSession.HideOnExecute = yesNoPickerBox3.Value; + _appSession.AlwaysOnTop = yesNoPickerBox4.Value; + + return _appSession; + } } } diff --git a/OptionsForm.resx b/OptionsForm.resx index c8f691f..0386da6 100644 --- a/OptionsForm.resx +++ b/OptionsForm.resx @@ -1,4 +1,64 @@ - + + + @@ -60,21 +120,22 @@ - iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAClSURBVDhP7dI/ - DgFBGIbxSVTKjcRx3MLqXYCOjkocQcMF3MAZOIKaE5AthOexf2QnbJQKb/JLJvO9XzLFhCgtbHDBveB5 - DWcfM8ANC0wKnr1LUUsbHXSxxBlJxDtnduy6E04on/Utd0IPOxwxxBT9iHfO7Nh155kV9vmxMXbsVvkv - vvIji4f82Bg7tcUxrpih/NyxOeyMUMVPu0WGd39TzuzQDeEB5/ZKvTSyulEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAN5JREFUOE/tUzsKwkAUXLCyFMHjeIvdB4Gk8ALamU4rsbLaTWz0AOYGOYMewTqe + QLEQnZc8WRMSsBYHhrzPzJBin2pC60PPGLs3xl3Bp5DrHe9E1g2tHUH8QMjKmGReketyZkRWh9abfhTZ + YRimI4jWRPYSBMngkzzjHWtYyx6xK4X0Anz/7rcsxM4BdoxBTuTOqCdEaUyU6DrTuNqxxuXsEXsFDLfg + UdpOsIa10nr8A34p4CRtJ1jTGoC3PsPiBi78ETXplqzBwU3F5sHHgWWGJ3rHt+3tg+Uu84ek1AsYYd8q + EsfwCwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADTSURBVDhP7ZI7 - CsJQEEUfWFmK4HLchdpnA9ppp5W4BBtdQNyBC0ilRf6VdVyBwUL03JdXxC/YWThwmDcz94YJjKmH7/uN - OI7XaZqekiS5Cr1hpZmTPQemAeILeU4eC/dWr+9kVQRB0MzzvB2GYQfBAsExiqJWHfU0k0ZaeQyNAuxa - X1CYLMu6/MOW4kD2YAK9B9TznGYrj12XVZY0drb4ENJI68q/sR4/YoS9K9+GNHdGLmIEJV+cku1xP4Jh - Ri7JQ2erDp3mBs7w6jaFZht74MaYGwmLbkeRGexGAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAANFJREFUOE/tkzEKAjEURANWliJ4HG+h9l5AO7fTSjyCxWpCIBB2b+AZ9AjW6wlc + LGSdWb9Elw1YiwOP/Pw/E1Ikqqksyzpa670x5goqgfWOM7HFhfAE5jvWNdYFkZq9sdg+laZp13vfBwOY + NjBfnHO9d9jjjB56mZG4UhgW4HXdbykkXl97iMYBnFFPrbUJGDVIOKOHXmYk/hSaW3CUbVT00CvboP8B + v3TASbZR0RM7YA5KsAT1J2phBUq8wpnEgvg5MMwxvGFte/uVzPLwkZR6AInAKK6aICfTAAAAAElFTkSu + QmCC \ No newline at end of file diff --git a/Program.cs b/Program.cs index 71f4564..9470017 100644 --- a/Program.cs +++ b/Program.cs @@ -1,10 +1,7 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; -namespace FizzyLauncher +namespace RokettoLaunch { static class Program { diff --git a/References/HtmlAgilityPack.dll b/References/HtmlAgilityPack.dll deleted file mode 100644 index d817f94..0000000 Binary files a/References/HtmlAgilityPack.dll and /dev/null differ diff --git a/References/Ryz3core.deps.json b/References/Ryz3core.deps.json deleted file mode 100644 index 0866e06..0000000 --- a/References/Ryz3core.deps.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0/win-x64", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": {}, - ".NETCoreApp,Version=v6.0/win-x64": { - "Ryz3core/0.1.5.035": { - "dependencies": { - "HtmlAgilityPack": "1.11.46", - "System.Data.SQLite.Core": "1.0.117" - }, - "runtime": { - "Ryz3core.dll": {} - } - }, - "HtmlAgilityPack/1.11.46": { - "runtime": { - "lib/netstandard2.0/HtmlAgilityPack.dll": { - "assemblyVersion": "1.11.46.0", - "fileVersion": "1.11.46.0" - } - } - }, - "Stub.System.Data.SQLite.Core.NetStandard/1.0.117": { - "runtime": { - "lib/netstandard2.1/System.Data.SQLite.dll": { - "assemblyVersion": "1.0.117.0", - "fileVersion": "1.0.117.0" - } - }, - "native": { - "runtimes/win-x64/native/SQLite.Interop.dll": { - "fileVersion": "1.0.117.0" - } - } - }, - "System.Data.SQLite.Core/1.0.117": { - "dependencies": { - "Stub.System.Data.SQLite.Core.NetStandard": "1.0.117" - } - } - } - }, - "libraries": { - "Ryz3core/0.1.5.035": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "HtmlAgilityPack/1.11.46": { - "type": "package", - "serviceable": true, - "sha512": "sha512-dLMn4EVfJBHWmWK4Uh0XGD76FPLHI0qr2Tm0s1m/xmgiHb1JUb9zB8AzO8HtrkBBlMN6JfCUBYddhqC0hZNR+g==", - "path": "htmlagilitypack/1.11.46", - "hashPath": "htmlagilitypack.1.11.46.nupkg.sha512" - }, - "Stub.System.Data.SQLite.Core.NetStandard/1.0.117": { - "type": "package", - "serviceable": true, - "sha512": "sha512-x1zzPC/A4MmiKGDLoxLE6O5KLu7Kz7dyzhPQzlqYFTFcXmXAtM7hNNWpGw5yLEz833AnGbd/kxoitXArgR4YyA==", - "path": "stub.system.data.sqlite.core.netstandard/1.0.117", - "hashPath": "stub.system.data.sqlite.core.netstandard.1.0.117.nupkg.sha512" - }, - "System.Data.SQLite.Core/1.0.117": { - "type": "package", - "serviceable": true, - "sha512": "sha512-lGfOhA3QQod9XhdWYqLgNgbgq5uZnVG6DtnhDAdPisbLpTTgZBNbeGnp+GWt8C+3EyaqBYTGJWXcxHlHKwo05A==", - "path": "system.data.sqlite.core/1.0.117", - "hashPath": "system.data.sqlite.core.1.0.117.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/References/Ryz3core.dll b/References/Ryz3core.dll deleted file mode 100644 index 2a0daf0..0000000 Binary files a/References/Ryz3core.dll and /dev/null differ diff --git a/References/Ryz3ui.dll b/References/Ryz3ui.dll deleted file mode 100644 index f77c4e4..0000000 Binary files a/References/Ryz3ui.dll and /dev/null differ diff --git a/References/RyzStudio.8.1.2.244.nupkg b/References/RyzStudio.8.1.2.244.nupkg new file mode 100644 index 0000000..e296f09 Binary files /dev/null and b/References/RyzStudio.8.1.2.244.nupkg differ diff --git a/References/RyzStudio.Windows.Forms.8.1.2.246.nupkg b/References/RyzStudio.Windows.Forms.8.1.2.246.nupkg new file mode 100644 index 0000000..b86205c Binary files /dev/null and b/References/RyzStudio.Windows.Forms.8.1.2.246.nupkg differ diff --git a/References/SQLite.Interop.dll b/References/SQLite.Interop.dll deleted file mode 100644 index 0736a58..0000000 Binary files a/References/SQLite.Interop.dll and /dev/null differ diff --git a/References/System.Data.SQLite.dll b/References/System.Data.SQLite.dll deleted file mode 100644 index 58593e6..0000000 Binary files a/References/System.Data.SQLite.dll and /dev/null differ diff --git a/Resources/icon-128.png b/Resources/icon-128.png new file mode 100644 index 0000000..ab38161 Binary files /dev/null and b/Resources/icon-128.png differ diff --git a/Resources/icon-64.png b/Resources/icon-64.png new file mode 100644 index 0000000..1d94d28 Binary files /dev/null and b/Resources/icon-64.png differ diff --git a/Resources/toggle-left-ea-16.png b/Resources/toggle-left-ea-16.png deleted file mode 100644 index e7895fd..0000000 Binary files a/Resources/toggle-left-ea-16.png and /dev/null differ diff --git a/Resources/toggle-right-ea-16.png b/Resources/toggle-right-ea-16.png deleted file mode 100644 index aedd7c2..0000000 Binary files a/Resources/toggle-right-ea-16.png and /dev/null differ diff --git a/FizzyLauncher.csproj b/RokettoLaunch.csproj similarity index 58% rename from FizzyLauncher.csproj rename to RokettoLaunch.csproj index 1a8e3e7..708b855 100644 --- a/FizzyLauncher.csproj +++ b/RokettoLaunch.csproj @@ -2,21 +2,22 @@ WinExe - net6.0-windows + net8.0-windows8.0 true true favicon.ico false - fizzylauncher + rokettolaunch Ray Lam Hi, I'm Ray - Fizzy Launcher + RokettoLaunch Ray Lam 1.0.0.0 1.0.0.0 - 0.2.5.058 + 0.3.0.153 False x64 + icon-128.png @@ -45,10 +46,28 @@ + + + + + + + + + + + + + + + + + + @@ -59,12 +78,8 @@ - - References\Ryz3core.dll - - - References\Ryz3ui.dll - + + @@ -83,4 +98,11 @@ + + + True + \ + + + \ No newline at end of file diff --git a/Windows/Forms/EditGroupForm.cs b/Windows/Forms/EditGroupForm.cs deleted file mode 100644 index 2b0314c..0000000 --- a/Windows/Forms/EditGroupForm.cs +++ /dev/null @@ -1,175 +0,0 @@ -using FizzyLauncher.Models; -using RyzStudio.Windows.ThemedForms; -using System; - -namespace FizzyLauncher.Windows.Forms -{ - public class EditGroupForm : TDialogForm - { - public static void ShowDialog(TilePanelLayout control) - { - EditGroupForm form = new EditGroupForm(); - form.TilePanelLayout = control; - form.ShowDialog(); - } - - - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private TButton button1; - private TPickerBox pickerBox1; - private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2; - private TTextBox textBox1; - - - public EditGroupForm() : base() - { - InitializeComponent(); - - pickerBox1.ComboBox.Items.Clear(); - pickerBox1.ComboBox.Items.AddRange(new string[] { "No", "Yes" }); - if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0; - } - - private void InitializeComponent() - { - this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new RyzStudio.Windows.ThemedForms.TButton(); - this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TPickerBox(); - this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.SuspendLayout(); - // - // 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("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.textBox1.Location = new System.Drawing.Point(192, 20); - this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.textBox1.Name = "textBox1"; - this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox1.Size = new System.Drawing.Size(177, 35); - this.textBox1.AcceptButton = null; - this.textBox1.TabIndex = 152; - this.textBox1.UseSystemPasswordChar = false; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.Color.Transparent; - this.label2.ForeColor = System.Drawing.SystemColors.ControlText; - this.label2.Location = new System.Drawing.Point(10, 62); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label2.Size = new System.Drawing.Size(119, 34); - this.label2.TabIndex = 155; - this.label2.Text = "Show Only Expanded"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.ForeColor = System.Drawing.SystemColors.ControlText; - this.label1.Location = new System.Drawing.Point(10, 21); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label1.Size = new System.Drawing.Size(29, 34); - this.label1.TabIndex = 153; - this.label1.Text = "Title"; - 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.IdleImage = null; - this.button1.ActiveImage = null; - this.button1.LabelText = "&Save"; - this.button1.Location = new System.Drawing.Point(241, 469); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.HoverImage = 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.Click += new System.EventHandler(this.button1_Click); - // - // pickerBox1 - // - this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox1.BackColor = System.Drawing.Color.Transparent; - this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox1.Location = new System.Drawing.Point(285, 62); - this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.pickerBox1.Name = "pickerBox1"; - this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox1.Size = new System.Drawing.Size(84, 34); - this.pickerBox1.AcceptButton = null; - this.pickerBox1.TabIndex = 174; - // - // horizontalSeparator2 - // - this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent; - this.horizontalSeparator2.Location = new System.Drawing.Point(10, 437); - this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); - this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); - this.horizontalSeparator2.Name = "horizontalSeparator2"; - this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22); - this.horizontalSeparator2.TabIndex = 182; - // - // EditGroupForm - // - this.ClientSize = new System.Drawing.Size(384, 521); - this.Controls.Add(this.horizontalSeparator2); - this.Controls.Add(this.pickerBox1); - this.Controls.Add(this.button1); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.textBox1); - this.MinimumSize = new System.Drawing.Size(400, 560); - this.Name = "EditGroupForm"; - this.Text = "Edit Group"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - protected override void OnShown(EventArgs e) - { - base.OnShown(e); - - if (this.TilePanelLayout != null) - { - textBox1.Text = this.TilePanelLayout.Model.Title; - pickerBox1.ComboBox.SelectedIndex = (this.TilePanelLayout.Model.IsExclusive ? 1 : 0); - } - } - - - public TilePanelLayout TilePanelLayout { get; set; } = null; - - - private void button1_Click(object sender, EventArgs e) - { - TileGroupModel model = this.TilePanelLayout.Model; - model.Title = textBox1.Text?.Trim(); - model.IsExclusive = (pickerBox1.ComboBox.SelectedIndex == 1); - - this.TilePanelLayout.UpdateModel(model); - - this.Close(); - } - - } -} diff --git a/Windows/Forms/EditGroupForm.resx b/Windows/Forms/EditGroupForm.resx deleted file mode 100644 index f298a7b..0000000 --- a/Windows/Forms/EditGroupForm.resx +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Windows/Forms/EditTileFolderForm.cs b/Windows/Forms/EditTileFolderForm.cs deleted file mode 100644 index 2bb45d7..0000000 --- a/Windows/Forms/EditTileFolderForm.cs +++ /dev/null @@ -1,393 +0,0 @@ -using FizzyLauncher.Models; -using RyzStudio.Windows.ThemedForms; -using System; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Windows.Forms; - -namespace FizzyLauncher.Windows.Forms -{ - public class EditTileFolderForm : TDialogForm - { - public static void ShowAddDialog(TilePanelLayout control, Point coord) - { - EditTileFolderForm form = new EditTileFolderForm(DialogModeType.Add); - form.TilePanelLayout = control; - form.AimCoord = coord; - form.ShowDialog(); - } - - public static void ShowEditDialog(TilePanel control) - { - EditTileFolderForm form = new EditTileFolderForm(DialogModeType.Edit); - form.TilePanel = control; - form.ShowDialog(); - } - - - private System.Windows.Forms.Label label1; - private TButton button1; - private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2; - private TTextBox textBox1; - private TListBox listBox1; - private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; - private System.Windows.Forms.Label label2; - - - public enum DialogModeType - { - Add = 0, - Edit - } - - - protected DialogModeType dialogMode = DialogModeType.Add; - - - public EditTileFolderForm(DialogModeType dialogMode) : base() - { - InitializeComponent(); - - this.DialogMode = dialogMode; - } - - private void InitializeComponent() - { - this.textBox1 = new RyzStudio.Windows.ThemedForms.TTextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new RyzStudio.Windows.ThemedForms.TButton(); - this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.listBox1 = new RyzStudio.Windows.ThemedForms.TListBox(); - this.label2 = new System.Windows.Forms.Label(); - this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.SuspendLayout(); - // - // 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("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.textBox1.Location = new System.Drawing.Point(192, 20); - this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.textBox1.Name = "textBox1"; - this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox1.Size = new System.Drawing.Size(177, 35); - this.textBox1.AcceptButton = null; - this.textBox1.TabIndex = 152; - this.textBox1.UseSystemPasswordChar = false; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.ForeColor = System.Drawing.SystemColors.ControlText; - this.label1.Location = new System.Drawing.Point(10, 21); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label1.Size = new System.Drawing.Size(29, 34); - this.label1.TabIndex = 153; - this.label1.Text = "Title"; - 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.IdleImage = null; - this.button1.ActiveImage = null; - this.button1.LabelText = "&Save"; - this.button1.Location = new System.Drawing.Point(241, 469); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.HoverImage = 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.Click += new System.EventHandler(this.button1_Click); - // - // horizontalSeparator2 - // - this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent; - this.horizontalSeparator2.Location = new System.Drawing.Point(10, 61); - this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); - this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); - this.horizontalSeparator2.Name = "horizontalSeparator2"; - this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22); - this.horizontalSeparator2.TabIndex = 177; - // - // listBox1 - // - this.listBox1.AllowDrop = true; - 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.Color.Transparent; - this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.listBox1.Location = new System.Drawing.Point(109, 87); - this.listBox1.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4); - this.listBox1.Name = "listBox1"; - this.listBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.listBox1.Size = new System.Drawing.Size(260, 346); - this.listBox1.AcceptButton = null; - this.listBox1.TabIndex = 180; - this.listBox1.OnAdd += new System.EventHandler(this.listBox1_OnAdd); - this.listBox1.OnEdit += new System.EventHandler(this.listBox1_OnEdit); - this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop); - this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.Color.Transparent; - this.label2.ForeColor = System.Drawing.SystemColors.ControlText; - this.label2.Location = new System.Drawing.Point(8, 87); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label2.Size = new System.Drawing.Size(25, 34); - this.label2.TabIndex = 181; - this.label2.Text = "List"; - this.label2.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(10, 0, 10, 0); - 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 = 182; - // - // EditTileFolderForm - // - this.ClientSize = new System.Drawing.Size(384, 521); - this.Controls.Add(this.tHorizontalSeparator1); - this.Controls.Add(this.label2); - this.Controls.Add(this.listBox1); - this.Controls.Add(this.horizontalSeparator2); - this.Controls.Add(this.button1); - this.Controls.Add(this.label1); - this.Controls.Add(this.textBox1); - this.MinimumSize = new System.Drawing.Size(400, 560); - this.Name = "EditTileFolderForm"; - this.Text = "Add List Tile"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - protected override void OnShown(EventArgs e) - { - base.OnShown(e); - - if (this.DialogMode == DialogModeType.Edit) - { - listBox1.ListBox.Items.Clear(); - - if (this.TilePanel == null) return; - if (this.TilePanel.ModelInfo == null) return; - - textBox1.Text = this.TilePanel.ModelInfo.Title; - - if (this.TilePanel.ModelInfo.Items != null) - { - foreach (TileModel item in this.TilePanel.ModelInfo.Items) - { - if (item.IsGroup) - { - continue; - } - - listBox1.ListBox.Items.Add(item); - } - } - } - } - - - public TilePanelLayout TilePanelLayout { get; set; } = null; - - public TilePanel TilePanel { get; set; } = null; - - public Point AimCoord { get; set; } = new Point(-1, -1); - - public DialogModeType DialogMode - { - get => dialogMode; - set - { - dialogMode = value; - - switch (dialogMode) - { - case DialogModeType.Add: - this.Text = "Add Folder"; - textBox1.Text = "New Folder"; - break; - case DialogModeType.Edit: - this.Text = "Edit Folder"; - break; - default: break; - } - } - } - - - private void button1_Click(object sender, EventArgs e) - { - TileModel model = new TileModel() - { - Title = textBox1.Text?.Trim(), - IsGroup = true - }; - - switch (this.DialogMode) - { - case DialogModeType.Add: - if (!this.AimCoord.Equals(new Point(-1, -1))) - { - model.Position = this.AimCoord; - } - - model.Items = new System.Collections.Generic.List(); - - foreach (TileModel item in listBox1.ListBox.Items.OfType()) - { - if (item.IsGroup) - { - continue; - } - - model.Items.Add(item); - } - - this.TilePanelLayout.AddTile(model); - - break; - case DialogModeType.Edit: - model.Items = new System.Collections.Generic.List(); - - foreach (TileModel item in listBox1.ListBox.Items.OfType()) - { - if (item.IsGroup) - { - continue; - } - - model.Items.Add(item); - } - - this.TilePanel.LoadInfo(model); - - break; - default: break; - } - - this.Close(); - } - - private void listBox1_OnAdd(object sender, EventArgs e) => EditTileForm.ShowAddDialog(listBox1); - - private void listBox1_OnEdit(object sender, EventArgs e) - { - if (listBox1.ListBox.Items.Count <= 0) - { - return; - } - - if (listBox1.ListBox.SelectedIndex < 0) - { - return; - } - - if (listBox1.ListBox.SelectedItem == null) - { - return; - } - - EditTileForm.ShowEditDialog(listBox1); - } - - private void listBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.FileDrop)) - { - e.Effect = DragDropEffects.Link; - } - else - { - e.Effect = DragDropEffects.None; - } - } - - private void listBox1_DragDrop(object sender, DragEventArgs e) - { - string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[]; - if (fileList == null) - { - return; - } - - if (fileList.Length <= 0) - { - return; - } - - if (string.IsNullOrWhiteSpace(fileList[0])) - { - return; - } - - TileModel model = new TileModel() - { - ProcessFilename = fileList[0], - Title = Path.GetFileName(fileList[0]) - }; - - // exe - if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase)) - { - if (File.Exists(fileList[0])) - { - try - { - FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]); - if (fvi != null) - { - model.Title = fvi.ProductName; - } - } - catch - { - // do nothing - } - } - - - if (string.IsNullOrWhiteSpace(model.Title)) - { - model.Title = Path.GetFileNameWithoutExtension(fileList[0]); - } - } - - listBox1.ListBox.Items.Add(model); - } - - } -} \ No newline at end of file diff --git a/Windows/Forms/EditTileFolderForm.resx b/Windows/Forms/EditTileFolderForm.resx deleted file mode 100644 index f298a7b..0000000 --- a/Windows/Forms/EditTileFolderForm.resx +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Windows/Forms/EditTileForm.cs b/Windows/Forms/EditTileForm.cs deleted file mode 100644 index 0ef5e5f..0000000 --- a/Windows/Forms/EditTileForm.cs +++ /dev/null @@ -1,482 +0,0 @@ -using FizzyLauncher.Models; -using RyzStudio.Windows.ThemedForms; -using RyzStudio.Windows.ThemedForms.ButtonTextBox; -using System; -using System.Drawing; - -namespace FizzyLauncher.Windows.Forms -{ - public class EditTileForm : TDialogForm - { - public static void ShowAddDialog(TilePanelLayout control, Point coord) - { - EditTileForm form = new EditTileForm(DialogModeType.Add); - form.TilePanelLayout = control; - form.AimCoord = coord; - form.ShowDialog(); - } - - public static void ShowAddDialog(TListBox control) - { - EditTileForm form = new EditTileForm(DialogModeType.Add); - form.ListBox = control; - form.ShowDialog(); - } - - public static void ShowEditDialog(TilePanel control) - { - EditTileForm form = new EditTileForm(DialogModeType.Edit); - form.TilePanel = control; - form.ShowDialog(); - } - - public static void ShowEditDialog(TListBox control) - { - EditTileForm form = new EditTileForm(DialogModeType.Edit); - form.ListBox = control; - form.ShowDialog(); - } - - - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private TOpenFileTextBox textBox2; - private TTextBox textBox3; - private TFolderTextBox textBox4; - private TButton button1; - private TPickerBox pickerBox1; - private TPickerBox pickerBox2; - private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator1; - private RyzStudio.Windows.Forms.THorizontalSeparator horizontalSeparator2; - private TTextBox textBox1; - - - public enum DialogModeType - { - Add = 0, - Edit - } - - - protected DialogModeType dialogMode = DialogModeType.Add; - - - public EditTileForm(DialogModeType dialogMode) : base() - { - InitializeComponent(); - - this.DialogMode = dialogMode; - - pickerBox1.ComboBox.Items.Clear(); - pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" }); - if (pickerBox1.ComboBox.Items.Count > 0) pickerBox1.ComboBox.SelectedIndex = 0; - - pickerBox2.ComboBox.Items.Clear(); - pickerBox2.ComboBox.Items.AddRange(new string[] { "No", "Yes" }); - if (pickerBox2.ComboBox.Items.Count > 0) pickerBox2.ComboBox.SelectedIndex = 0; - } - - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTileForm)); - this.textBox1 = new TTextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox2 = new TOpenFileTextBox(); - this.textBox3 = new TTextBox(); - this.textBox4 = new TFolderTextBox(); - this.button1 = new TButton(); - this.pickerBox1 = new TPickerBox(); - this.pickerBox2 = new TPickerBox(); - this.horizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.horizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator(); - this.SuspendLayout(); - // - // 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.Location = new System.Drawing.Point(192, 20); - this.textBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.textBox1.Name = "textBox1"; - this.textBox1.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox1.Size = new System.Drawing.Size(177, 35); - this.textBox1.AcceptButton = null; - this.textBox1.TabIndex = 152; - this.textBox1.UseSystemPasswordChar = false; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.BackColor = System.Drawing.Color.Transparent; - this.label6.ForeColor = System.Drawing.SystemColors.ControlText; - this.label6.Location = new System.Drawing.Point(10, 250); - this.label6.Name = "label6"; - this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label6.Size = new System.Drawing.Size(83, 34); - this.label6.TabIndex = 163; - this.label6.Text = "Run As Admin"; - this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.BackColor = System.Drawing.Color.Transparent; - this.label7.ForeColor = System.Drawing.SystemColors.ControlText; - this.label7.Location = new System.Drawing.Point(10, 209); - this.label7.Name = "label7"; - this.label7.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label7.Size = new System.Drawing.Size(79, 34); - this.label7.TabIndex = 161; - this.label7.Text = "Window Style"; - this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.BackColor = System.Drawing.Color.Transparent; - this.label4.ForeColor = System.Drawing.SystemColors.ControlText; - this.label4.Location = new System.Drawing.Point(10, 144); - this.label4.Name = "label4"; - this.label4.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label4.Size = new System.Drawing.Size(103, 34); - this.label4.TabIndex = 159; - this.label4.Text = "Working Directory"; - this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.BackColor = System.Drawing.Color.Transparent; - this.label3.ForeColor = System.Drawing.SystemColors.ControlText; - this.label3.Location = new System.Drawing.Point(10, 103); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label3.Size = new System.Drawing.Size(61, 34); - this.label3.TabIndex = 157; - this.label3.Text = "Argument"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.Color.Transparent; - this.label2.ForeColor = System.Drawing.SystemColors.ControlText; - this.label2.Location = new System.Drawing.Point(10, 62); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label2.Size = new System.Drawing.Size(55, 34); - this.label2.TabIndex = 155; - this.label2.Text = "Filename"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.ForeColor = System.Drawing.SystemColors.ControlText; - this.label1.Location = new System.Drawing.Point(10, 21); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); - this.label1.Size = new System.Drawing.Size(29, 34); - this.label1.TabIndex = 153; - this.label1.Text = "Title"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox2 - // - this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox2.BackColor = System.Drawing.Color.Transparent; - this.textBox2.FileDialog = null; - this.textBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.textBox2.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox2.HighlightImage"))); - this.textBox2.Location = new System.Drawing.Point(192, 61); - this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.textBox2.Name = "textBox2"; - this.textBox2.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox2.NormalImage"))); - this.textBox2.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox2.Size = new System.Drawing.Size(177, 35); - this.textBox2.AcceptButton = null; - this.textBox2.TabIndex = 170; - this.textBox2.UseSystemPasswordChar = false; - // - // textBox3 - // - this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox3.BackColor = System.Drawing.Color.Transparent; - this.textBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.textBox3.Location = new System.Drawing.Point(192, 102); - this.textBox3.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.textBox3.Name = "textBox3"; - this.textBox3.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox3.Size = new System.Drawing.Size(177, 35); - this.textBox3.AcceptButton = null; - this.textBox3.TabIndex = 171; - this.textBox3.UseSystemPasswordChar = false; - // - // textBox4 - // - this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox4.BackColor = System.Drawing.Color.Transparent; - this.textBox4.FolderDialog = null; - this.textBox4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.textBox4.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox4.HighlightImage"))); - this.textBox4.Location = new System.Drawing.Point(192, 143); - this.textBox4.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.textBox4.Name = "textBox4"; - this.textBox4.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox4.NormalImage"))); - this.textBox4.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); - this.textBox4.Size = new System.Drawing.Size(177, 35); - this.textBox4.AcceptButton = null; - this.textBox4.TabIndex = 172; - this.textBox4.UseSystemPasswordChar = false; - // - // 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.IdleImage = null; - this.button1.ActiveImage = null; - this.button1.LabelText = "&Save"; - this.button1.Location = new System.Drawing.Point(241, 469); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.HoverImage = 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.Click += new System.EventHandler(this.button1_Click); - // - // pickerBox1 - // - this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox1.BackColor = System.Drawing.Color.Transparent; - this.pickerBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox1.Location = new System.Drawing.Point(241, 209); - this.pickerBox1.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.pickerBox1.Name = "pickerBox1"; - this.pickerBox1.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox1.Size = new System.Drawing.Size(128, 34); - this.pickerBox1.AcceptButton = null; - this.pickerBox1.TabIndex = 174; - // - // pickerBox2 - // - this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pickerBox2.BackColor = System.Drawing.Color.Transparent; - this.pickerBox2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.pickerBox2.Location = new System.Drawing.Point(285, 250); - this.pickerBox2.Margin = new System.Windows.Forms.Padding(10, 6, 10, 6); - this.pickerBox2.Name = "pickerBox2"; - this.pickerBox2.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5); - this.pickerBox2.Size = new System.Drawing.Size(84, 34); - this.pickerBox2.AcceptButton = null; - this.pickerBox2.TabIndex = 175; - // - // horizontalSeparator1 - // - this.horizontalSeparator1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.horizontalSeparator1.AutoScrollMargin = new System.Drawing.Size(0, 0); - this.horizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0); - this.horizontalSeparator1.BackColor = System.Drawing.Color.Transparent; - this.horizontalSeparator1.Location = new System.Drawing.Point(10, 181); - this.horizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.horizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2); - this.horizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22); - this.horizontalSeparator1.Name = "horizontalSeparator1"; - this.horizontalSeparator1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.horizontalSeparator1.Size = new System.Drawing.Size(364, 22); - this.horizontalSeparator1.TabIndex = 176; - // - // horizontalSeparator2 - // - this.horizontalSeparator2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.horizontalSeparator2.AutoScrollMargin = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); - this.horizontalSeparator2.BackColor = System.Drawing.Color.Transparent; - this.horizontalSeparator2.Location = new System.Drawing.Point(10, 437); - this.horizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); - this.horizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); - this.horizontalSeparator2.Name = "horizontalSeparator2"; - this.horizontalSeparator2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.horizontalSeparator2.Size = new System.Drawing.Size(364, 22); - this.horizontalSeparator2.TabIndex = 177; - // - // EditTileForm - // - this.ClientSize = new System.Drawing.Size(384, 521); - this.Controls.Add(this.horizontalSeparator2); - this.Controls.Add(this.horizontalSeparator1); - this.Controls.Add(this.pickerBox2); - this.Controls.Add(this.pickerBox1); - this.Controls.Add(this.button1); - this.Controls.Add(this.textBox4); - this.Controls.Add(this.textBox3); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.label6); - this.Controls.Add(this.label7); - this.Controls.Add(this.label4); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.textBox1); - this.MinimumSize = new System.Drawing.Size(400, 560); - this.Name = "EditTileForm"; - this.Text = "Add Tile"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - protected override void OnShown(EventArgs e) - { - base.OnShown(e); - - if (this.DialogMode == DialogModeType.Edit) - { - if (this.TilePanel != null) - { - updateModel(this.TilePanel.ModelInfo); - } - else if (this.ListBox != null) - { - if (this.ListBox.ListBox.SelectedItem != null) - { - TileModel model = (this.ListBox.ListBox.SelectedItem as TileModel); - if (model != null) - { - updateModel(model); - } - } - } - } - } - - - public TilePanelLayout TilePanelLayout { get; set; } = null; - - public TilePanel TilePanel { get; set; } = null; - - public TListBox ListBox { get; set; } = null; - - public Point AimCoord { get; set; } = new Point(-1, -1); - - public DialogModeType DialogMode - { - get => dialogMode; - set - { - dialogMode = value; - - switch (dialogMode) - { - case DialogModeType.Add: - this.Text = "Add Tile"; - break; - case DialogModeType.Edit: - this.Text = "Edit Tile"; - break; - default: break; - } - } - } - - - private void button1_Click(object sender, EventArgs e) - { - TileModel model = buildModel(); - - switch (this.DialogMode) - { - case DialogModeType.Add: - if (this.TilePanelLayout != null) - { - this.TilePanelLayout.AddTile(model); - } - else if (this.ListBox != null) - { - int n = this.ListBox.ListBox.Items.Add(model); - this.ListBox.ListBox.SelectedIndex = n; - } - - break; - case DialogModeType.Edit: - if (this.TilePanel != null) - { - this.TilePanel.LoadInfo(model); - } - else if (this.ListBox != null) - { - int n = this.ListBox.ListBox.SelectedIndex; - if (n >= 0) - { - this.ListBox.ListBox.Items.RemoveAt(n); - this.ListBox.ListBox.Items.Insert(n, model); - this.ListBox.ListBox.SelectedIndex = n; - } - } - - break; - default: break; - } - - this.Close(); - } - - protected TileModel buildModel() - { - TileModel rs = new TileModel() - { - Title = textBox1.Text?.Trim(), - ProcessFilename = textBox2.Text?.Trim(), - ProcessArgument = textBox3.Text?.Trim(), - ProcessWorkingDirectory = textBox4.Text?.Trim(), - ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex, - ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1) - }; - - if (this.DialogMode == DialogModeType.Add) - { - if (!this.AimCoord.Equals(new Point(-1, -1))) - { - rs.Position = this.AimCoord; - } - } - - return rs; - } - - protected void updateModel(TileModel model) - { - if (model == null) - { - return; - } - - textBox1.Text = model.Title; - textBox2.Text = model.ProcessFilename; - textBox3.Text = model.ProcessArgument; - textBox4.Text = model.ProcessWorkingDirectory; - pickerBox1.ComboBox.SelectedIndex = (int)model.ProcessWindowStyle; - pickerBox2.ComboBox.SelectedIndex = (model.ProcessAsAdmin ? 1 : 0); - } - - } -} diff --git a/Windows/Forms/EditTileForm.resx b/Windows/Forms/EditTileForm.resx deleted file mode 100644 index 0220ec4..0000000 --- a/Windows/Forms/EditTileForm.resx +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAAK9JREFUOE/t0zsKwkAURuGp1BWJK3EhIrgAV+EOLLWwtRQLwQdiIbbiIkwynj+O - IVwnyhR2XvjyInNIkXHee8f0cEQBPbDOaKEarSvXhsAJO4wirlB4jipiA3phoIvIrLFChhnKiA3o8Ckw - RR93LNBODVwwwRL62kNKYIxNzQ1FSsDOEHk08HrYJMw/8KtA06/cCef6KJDZgDbTFrHNZO3x9idqOyui - m2+07bvPgHcPXOhtG3D6cUIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAAMZJREFUOE/tk7sNwjAQQF3BRohJGAQhMQBTsAElFLSUiAKJTxIXhBZlCILNuyRG - iXEQKeg46fmsO/slhU9Za5XWehiXYcD6JElygZ6qhdwTioVDGo4wDXDjsohXdYkvMDTHVa8R9Hb0tpCz - XzqJL5Df/CRYRFE0Yn8nr9M07XcSwBXmXN6QDfncRTCjt6+Rgfla4Adfn3D+ERS4Yht/wY8FxVN2xTac - gLP5qyYLAhmmA4SGyeeEoPkSq3EWydsoB4gRDEqBVU/p15ajstHKCgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAJtJREFUOE/t0zEKwkAQheEpvILHSLySlTeJ6AnEzpPYi0ERPIKWKtZKNv9LNS5x - E6xS+OCDJew8tsgYmeCECsGZo1dKXLBwtnghQ2fe0JDPGHecsW6xwgwjNM8tdIgyxQ0qij2gORV9LejK - Bk8dfi3QjGY/C0IISS7/gkEVtP3KfbKEZm0PLZM++IVK0d0rdrAcR8TrnKK7BzPLa7Wb+WX/Nb8PAAAA - AElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAALZJREFUOE/tkzEKwjAYRjt4BY9hvZKTN1HsCYqbJzGzKBGb9gY6qjgrxvdJK7ZS - Gpwc/ODBnzTvg0AT5Xk+hB3cwVc456ZRSIqi2MAeafbGEq5Zlg3KY+1Bvkkql89Ya/vsnUCZN8FJYWyM - 6ekKnsWkdF9hb8S3I6ioyRnkpa0FXcFbwOXrAjlyawXe+06q/At+qoDh41cOCU4iV8OaQY8pUVEgOnuA - VcSzjRm2UHvOHeisdc7FDwDnJKIbLgP9AAAAAElFTkSuQmCC - - - \ No newline at end of file diff --git a/Windows/Forms/TileContainer.cs b/Windows/Forms/TileContainer.cs deleted file mode 100644 index a692bb0..0000000 --- a/Windows/Forms/TileContainer.cs +++ /dev/null @@ -1,149 +0,0 @@ -using FizzyLauncher.Models; -using RyzStudio.Windows.Forms; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace FizzyLauncher.Windows.Forms -{ - public class TileContainer : Panel - { - protected const int DEFAULT_COLUMN = 6; - - protected FlowLayoutPanel flowLayoutPanel1 = null; - - - public TileContainer() - { - flowLayoutPanel1 = new FlowLayoutPanel(); - flowLayoutPanel1.AutoSize = true; - flowLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink; - flowLayoutPanel1.BackColor = Color.Transparent; - flowLayoutPanel1.FlowDirection = FlowDirection.TopDown; - flowLayoutPanel1.Location = new Point(10, 10); - flowLayoutPanel1.Margin = new Padding(0); - flowLayoutPanel1.Padding = new Padding(0, 0, 0, 20); - flowLayoutPanel1.Size = new Size(0, 20); - flowLayoutPanel1.WrapContents = false; - - this.AutoScroll = true; - this.AutoSizeMode = AutoSizeMode.GrowAndShrink; - this.BackColor = System.Drawing.Color.Transparent; - this.Margin = new Padding(0); - this.Name = "tileContainer1"; - this.Padding = new Padding(10, 10, 10, 20); - this.Controls.Add(flowLayoutPanel1); - } - - - [Browsable(false)] - public event EventHandler OnColumnSizeChanged; - - - public int CalcWidth - { - get => - TilePanelLayout.CalcWidth(this.TileWidthCount) + - this.Left + this.Padding.Horizontal + this.Margin.Horizontal + - flowLayoutPanel1.Padding.Horizontal + flowLayoutPanel1.Margin.Horizontal; - } - - public int GroupCount - { - get => flowLayoutPanel1.Controls.Count; - } - - public IEnumerable Groups - { - get - { - for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++) - { - if (flowLayoutPanel1.Controls[i].GetType() != typeof(TilePanelLayout)) - { - continue; - } - - TilePanelLayout container = flowLayoutPanel1.Controls[i] as TilePanelLayout; - yield return container; - } - } - } - - public IEnumerable GroupModels - { - get - { - foreach (TilePanelLayout item in this.Groups) - { - yield return item.Model; - } - } - } - - public int TileWidthCount { get; private set; } = DEFAULT_COLUMN; - - - public void Add() - { - this.Add(new TilePanelLayout(new TileGroupModel() - { - Title = "New Group", - IsExpanded = true, - GridSize = new Size(this.TileWidthCount, 1) - })); - } - - public void Add(TilePanelLayout tilePanelLayout) - { - UIControl.Add(flowLayoutPanel1, tilePanelLayout); - - this.InvalidateColumnSize(); - } - - public void Add(int columnCount) - { - this.TileWidthCount = ((columnCount <= 0) ? DEFAULT_COLUMN : columnCount); - - this.Add(); - } - - public void Clear() - { - UIControl.Clear(flowLayoutPanel1); - - this.TileWidthCount = DEFAULT_COLUMN; - - InvalidateColumnSize(); - } - - public void InvalidateColumnSize() - { - this.OnColumnSizeChanged?.Invoke(this, null); - } - - public void Load(List groupList) - { - this.Clear(); - - if (groupList == null) - { - return; - } - - foreach (TileGroupModel item in groupList) - { - this.TileWidthCount = Math.Max(this.TileWidthCount, item.GridSize.Width); - - TilePanelLayout panel = new TilePanelLayout(item); - - this.Add(panel); - } - - InvalidateColumnSize(); - } - - } -} diff --git a/Windows/Forms/TilePanel.Designer.cs b/Windows/Forms/TilePanel.Designer.cs index b771cd9..b61fcff 100644 --- a/Windows/Forms/TilePanel.Designer.cs +++ b/Windows/Forms/TilePanel.Designer.cs @@ -1,4 +1,4 @@ -namespace FizzyLauncher.Windows.Forms +namespace RokettoLaunch.Windows.Forms { partial class TilePanel { @@ -61,16 +61,9 @@ // TilePanel // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(234))))); - this.Margin = new System.Windows.Forms.Padding(4, 3, 0, 0); - this.MaximumSize = new System.Drawing.Size(82, 81); - this.MinimumSize = new System.Drawing.Size(82, 81); this.Name = "TilePanel"; - this.Size = new System.Drawing.Size(82, 81); this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); - } #endregion diff --git a/Windows/Forms/TilePanel.cs b/Windows/Forms/TilePanel.cs index 57a65cb..a76f573 100644 --- a/Windows/Forms/TilePanel.cs +++ b/Windows/Forms/TilePanel.cs @@ -4,130 +4,43 @@ using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms; -using FizzyLauncher.Models; +using RokettoLaunch.Models; +using RyzStudio.Windows.Forms; -namespace FizzyLauncher.Windows.Forms +namespace RokettoLaunch.Windows.Forms { - public partial class TilePanel : RyzStudio.Windows.Forms.TC1UserControl + public partial class TilePanel : RyzStudio.Windows.TileForms.Tile { - protected bool isDragging = false; - protected Point startPosition = new Point(); - - protected int imageLeft = 0; - protected int imageTop = 11; - protected int labelMargin = 3; - protected int labelTop = 47; - protected Rectangle labelRectangle = new Rectangle(); - - protected string title = ""; - protected Image icon = null; - protected ContextMenuStrip groupContextMenu = null; protected TileModel modelInfo = new TileModel(); - public TilePanel() : base() + public TilePanel() { InitializeComponent(); this.AllowDrop = true; - this.AutoSize = false; - this.BackColor = Color.FromArgb(250, 250, 250); this.ContextMenuStrip = contextMenuStrip1; - this.DoubleBuffered = true; - this.Font = new Font(this.Font.FontFamily, 8.25F); - this.ForeColor = Color.FromArgb(99, 105, 119); - this.Size = new Size(70, 70); - this.MaximumSize = this.MinimumSize = this.Size; - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - this.AllowDrop = true; - this.AutoSize = false; - this.BackColor = Color.FromArgb(250, 250, 250); - this.ContextMenuStrip = contextMenuStrip1; - this.DoubleBuffered = true; this.Font = new Font(this.Font.FontFamily, 8.25F); this.Size = new Size(70, 70); - this.MaximumSize = this.MinimumSize = this.Size; - } + this.AutoScaleMode = AutoScaleMode.None; - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - - Graphics g = e.Graphics; - - - if (this.Image != null) - { - g.DrawImage(this.Image, new Point(imageLeft, imageTop)); - } - - if (!string.IsNullOrWhiteSpace(this.Title)) - { - TextRenderer.DrawText(e.Graphics, this.Title, this.Font, labelRectangle, this.ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.NoPadding | TextFormatFlags.EndEllipsis); - } - - g.DrawRectangle(new Pen(Color.FromArgb(204, 206, 218), 1), new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - 1), (this.DisplayRectangle.Height - 1))); - - } - - [Category("Tile"), Browsable(true)] - public Image Image - { - get => icon; - protected set - { - icon = value; - - if (icon == null) - { - imageLeft = 0; - } - else - { - imageLeft = (this.Width - icon.Width) / 2; - } - } - } - - [Category("Tile"), Browsable(true)] - public string Title - { - get => title; - protected set - { - title = value; - - labelRectangle = new Rectangle(labelMargin, labelTop, (this.Width - (labelMargin * 2)), (this.Height - labelTop - 1)); - - this.Invalidate(); - } + this.EnableMovable = true; } [Browsable(false)] public TileModel ModelInfo => modelInfo; - public TilePanelLayout PanelContainer + public RyzStudio.Windows.TileForms.TileContainer TileContainer { get => UIControl.GetParentsUntil(this); } + + protected MainForm MainForm { get => UIControl.GetParentsUntil(this); } + + + protected override void OnDragOver(DragEventArgs e) { - get - { - if (this.Parent == null) - { - return null; - } + base.OnDragDrop(e); - if (this.Parent.GetType() != typeof(TilePanelLayout)) - { - return null; - } - - return (TilePanelLayout)this.Parent; - } + e.Effect = (e.Data.GetDataPresent(DataFormats.FileDrop)) ? DragDropEffects.Link : DragDropEffects.None; } protected override void OnDragDrop(DragEventArgs e) @@ -138,67 +51,27 @@ namespace FizzyLauncher.Windows.Forms { this.DropFileList(fileList); - invalidateGroupMenu(this.ModelInfo); - } - else - { - if (this.PanelContainer != null) - { - this.PanelContainer.DropFileList(fileList); - } - } - } - - protected override void OnDragOver(DragEventArgs e) - { - base.OnDragDrop(e); - - e.Effect = (e.Data.GetDataPresent(DataFormats.FileDrop)) ? DragDropEffects.Link : DragDropEffects.None; - } - - protected override void OnMouseUp(MouseEventArgs e) - { - base.OnMouseUp(e); - - isDragging = false; - } - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - - TilePanelLayout container = this.PanelContainer; - if (container == null) - { - return; - } - - this.BringToFront(); - - if (((e.Button == MouseButtons.Left) && (Control.ModifierKeys == Keys.Control)) || (e.Button == MouseButtons.Right)) - { - isDragging = true; - startPosition = e.Location; + InvalidateGroupMenu(this.ModelInfo); } } protected override void OnMouseClick(MouseEventArgs e) { - base.OnMouseClick(e); + if (Control.ModifierKeys == Keys.Control) + { + return; + } - if (Control.ModifierKeys == Keys.Control) return; - if (this.ModelInfo == null) return; + if (this.ModelInfo == null) + { + return; + } if (e.Button == MouseButtons.Left) { if (this.ModelInfo.IsGroup) { - if (groupContextMenu != null) - { - invalidateGroupMenuSize(); - - groupContextMenu.Show(this, e.Location); - } + this.LeftContextMenuStrip?.Show(this, e.Location); } else { @@ -211,33 +84,57 @@ namespace FizzyLauncher.Windows.Forms { base.OnMouseDoubleClick(e); - if (Control.ModifierKeys == Keys.Control) return; + if (Control.ModifierKeys == Keys.Control) + { + return; + } if (e.Button == MouseButtons.Left) { - execute(this.ModelInfo); + Execute(this.ModelInfo); } } - protected override void OnMouseMove(MouseEventArgs e) + +#region Context Menu + + /// + /// Edit + /// + /// + /// + private void editToolStripMenuItem_Click(object sender, EventArgs e) { - base.OnMouseMove(e); - - if (isDragging) + if (this.ModelInfo.IsGroup) { - TilePanelLayout layoutPanel = this.PanelContainer; - if (layoutPanel == null) + var form = new EditTileFolderForm(this.ModelInfo); + if (form.ShowDialog() == DialogResult.OK) { - return; - } - - int x = (this.Location.X + (e.Location.X - startPosition.X)); - int y = (this.Location.Y + (e.Location.Y - startPosition.Y)); - - layoutPanel.MoveTile(this, x, y); + this.LoadInfo(form.Result); + }; + } + else + { + var form = new EditTileForm(this.ModelInfo); + if (form.ShowDialog() == DialogResult.OK) + { + this.LoadInfo(form.Result); + }; } } + /// + /// Remove + /// + /// + /// + private void removeToolStripMenuItem_Click(object sender, EventArgs e) + { + this.TileContainer?.Controls?.Remove(this); + } + +#endregion + public void DropFileList(string[] fileList) { @@ -294,46 +191,24 @@ namespace FizzyLauncher.Windows.Forms { this.modelInfo = model; - this.Image = null; + this.LargeIcon = null; this.Title = model.Title; if (this.modelInfo.IsGroup) { - this.Image = AppResource.folder_32; + this.LargeIcon = AppResource.folder_32; - invalidateGroupMenu(this.modelInfo); + InvalidateGroupMenu(this.modelInfo); } else { - this.Image = getIcon(model); + this.LargeIcon = RyzStudio.IO.File.GetIcon(model.CleanProcessFilename); } toolTip1.SetToolTip(this, this.Title); } - private void editToolStripMenuItem_Click(object sender, EventArgs e) - { - if (this.ModelInfo.IsGroup) - { - EditTileFolderForm.ShowEditDialog(this); - } - else - { - EditTileForm.ShowEditDialog(this); - } - } - - private void removeToolStripMenuItem_Click(object sender, EventArgs e) - { - if (this.PanelContainer == null) - { - return; - } - - this.PanelContainer.Remove(this); - } - - protected void execute(TileModel model) + protected void Execute(TileModel model) { if (model == null) { @@ -345,159 +220,51 @@ namespace FizzyLauncher.Windows.Forms return; } - if (string.IsNullOrWhiteSpace(model.CleanProcessFilename)) + if (this.MainForm != null) { - return; - } - - if (!File.Exists(model.CleanProcessFilename)) - { - return; - } - - ProcessStartInfo p = new ProcessStartInfo(); - p.FileName = model.CleanProcessFilename; - p.WindowStyle = model.ProcessWindowStyle; - p.UseShellExecute = true; - - if (!string.IsNullOrWhiteSpace(model.CleanProcessArgument)) - { - p.Arguments = model.CleanProcessArgument; - } - - if (!string.IsNullOrWhiteSpace(model.CleanProcessWorkingDirectory)) - { - p.WorkingDirectory = model.CleanProcessWorkingDirectory; - } - - if (model.ProcessAsAdmin) - { - p.Verb = "runas"; - } - - MainForm parentForm = findMainForm(); - if (parentForm != null) - { - if (parentForm.CurrentSession != null) + if (this.MainForm.CurrentSession?.HideOnExecute ?? true) { - if (parentForm.CurrentSession.HideOnClick) - { - parentForm.Visible = false; - } + this.MainForm.Visible = false; } } - try - { - Process.Start(p); - } - catch (Exception exc) - { - MessageBox.Show(exc.Message); - } + RyzStudio.Diagnostics.Process.Execute(model.CleanProcessFilename, model.CleanProcessWorkingDirectory, model.CleanProcessArgument, model.ProcessWindowStyle, model.ProcessAsAdmin); } - protected Image getIcon(TileModel model) + protected void InvalidateGroupMenu(TileModel model) { - if (!File.Exists(model.CleanProcessFilename)) + var iconSize = ((this.MainForm?.CurrentSession?.ShowBigIcons ?? true) ? 24 : 16); + + if (this.LeftContextMenuStrip == null) { - return null; + this.LeftContextMenuStrip = new ContextMenuStrip(); } - try - { - return Icon.ExtractAssociatedIcon(model.CleanProcessFilename)?.ToBitmap(); - } - catch - { - // do nothing - } + this.LeftContextMenuStrip.ImageScalingSize = new Size(iconSize, iconSize); + this.LeftContextMenuStrip.Items.Clear(); - return null; - } - - protected void invalidateGroupMenu(TileModel model) - { - if (groupContextMenu == null) + foreach (TileModel item in model?.Items ?? new System.Collections.Generic.List()) { - groupContextMenu = new ContextMenuStrip(); - } - - groupContextMenu.Items.Clear(); - - if (model.Items == null) - { - return; - } - - foreach (TileModel item in model.Items) - { - ToolStripItem toolItem = groupContextMenu.Items.Add(item.Title); - toolItem.Image = getIcon(item); + ToolStripItem toolItem = this.LeftContextMenuStrip.Items.Add(item.Title); + toolItem.Image = RyzStudio.IO.File.GetIcon(item.CleanProcessFilename); toolItem.Tag = item; - toolItem.Click += toolItem_Click; - } - } - - protected void invalidateGroupMenuSize() - { - if (this.PanelContainer != null) - { - if (this.PanelContainer.MainForm != null) + toolItem.Click += (object sender, EventArgs e) => { - if (this.PanelContainer.MainForm.CurrentSession != null) + var menuItem = (System.Windows.Forms.ToolStripMenuItem)sender; + if (menuItem == null) { - if (this.PanelContainer.MainForm.CurrentSession.EnableBigIconInFolder) - { - groupContextMenu.ImageScalingSize = new Size(24, 24); - return; - } + return; } - } + + var model = (menuItem.Tag as TileModel); + if (model == null) + { + return; + } + + Execute(model); + }; } - - groupContextMenu.ImageScalingSize = new Size(16, 16); - } - - protected MainForm findMainForm() - { - Control item = this; - - while (true) - { - item = item.Parent; - if (item == null) - { - return null; - } - - if (item.GetType() == typeof(MainForm)) - { - return (item as MainForm); - } - } - } - - private void toolItem_Click(object sender, EventArgs e) - { - if (sender.GetType() != typeof(ToolStripMenuItem)) - { - return; - } - - ToolStripMenuItem item = (sender as ToolStripMenuItem); - if (item.Tag == null) - { - return; - } - - if (item.Tag.GetType() != typeof(TileModel)) - { - return; - } - - TileModel model = (item.Tag as TileModel); - execute(model); } } diff --git a/Windows/Forms/TilePanelLayout.Designer.cs b/Windows/Forms/TilePanelLayout.Designer.cs deleted file mode 100644 index 41d2ee5..0000000 --- a/Windows/Forms/TilePanelLayout.Designer.cs +++ /dev/null @@ -1,259 +0,0 @@ -namespace FizzyLauncher.Windows.Forms -{ - partial class TilePanelLayout - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.addListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator(); - this.removeRowToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); - this.topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.upToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); - this.label1 = new System.Windows.Forms.Label(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); - this.removeRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuStrip1.SuspendLayout(); - this.contextMenuStrip2.SuspendLayout(); - this.SuspendLayout(); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.addToolStripMenuItem, - this.addListToolStripMenuItem, - this.toolStripMenuItem6, - this.removeRowToolStripMenuItem1}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(144, 76); - // - // addToolStripMenuItem - // - this.addToolStripMenuItem.Name = "addToolStripMenuItem"; - this.addToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.addToolStripMenuItem.Text = "&Add Tile"; - this.addToolStripMenuItem.Click += new System.EventHandler(this.addTileMenuItem_Click); - // - // addListToolStripMenuItem - // - this.addListToolStripMenuItem.Name = "addListToolStripMenuItem"; - this.addListToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.addListToolStripMenuItem.Text = "Add &Folder"; - this.addListToolStripMenuItem.Click += new System.EventHandler(this.addListTileMenuItem_Click); - // - // toolStripMenuItem6 - // - this.toolStripMenuItem6.Name = "toolStripMenuItem6"; - this.toolStripMenuItem6.Size = new System.Drawing.Size(140, 6); - // - // removeRowToolStripMenuItem1 - // - this.removeRowToolStripMenuItem1.Name = "removeRowToolStripMenuItem1"; - this.removeRowToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); - this.removeRowToolStripMenuItem1.Text = "&Remove Row"; - this.removeRowToolStripMenuItem1.Click += new System.EventHandler(this.removeRowToolStripMenuItem_Click_1); - // - // contextMenuStrip2 - // - this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem2, - this.toolStripMenuItem1, - this.toolStripSeparator3, - this.toolStripMenuItem7, - this.toolStripSeparator2, - this.toolStripMenuItem4, - this.toolStripSeparator1, - this.toolStripMenuItem3}); - this.contextMenuStrip2.Name = "contextMenuStrip1"; - this.contextMenuStrip2.Size = new System.Drawing.Size(181, 154); - // - // toolStripMenuItem2 - // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem2.Text = "&Add Group"; - this.toolStripMenuItem2.Click += new System.EventHandler(this.addGroupMenuItem_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem1.Text = "&Edit"; - this.toolStripMenuItem1.Click += new System.EventHandler(this.editGroupMenuItem_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6); - // - // toolStripMenuItem4 - // - this.toolStripMenuItem4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.topToolStripMenuItem, - this.upToolStripMenuItem, - this.downToolStripMenuItem, - this.bottomToolStripMenuItem}); - this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem4.Text = "&Move"; - // - // topToolStripMenuItem - // - this.topToolStripMenuItem.Name = "topToolStripMenuItem"; - this.topToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.topToolStripMenuItem.Text = "&Top"; - this.topToolStripMenuItem.Click += new System.EventHandler(this.moveTopMenuItem_Click); - // - // upToolStripMenuItem - // - this.upToolStripMenuItem.Name = "upToolStripMenuItem"; - this.upToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.upToolStripMenuItem.Text = "&Up"; - this.upToolStripMenuItem.Click += new System.EventHandler(this.moveUpMenuItem_Click); - // - // downToolStripMenuItem - // - this.downToolStripMenuItem.Name = "downToolStripMenuItem"; - this.downToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.downToolStripMenuItem.Text = "&Down"; - this.downToolStripMenuItem.Click += new System.EventHandler(this.moveDownMenuItem_Click); - // - // bottomToolStripMenuItem - // - this.bottomToolStripMenuItem.Name = "bottomToolStripMenuItem"; - this.bottomToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.bottomToolStripMenuItem.Text = "&Bottom"; - this.bottomToolStripMenuItem.Click += new System.EventHandler(this.moveBottomMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6); - // - // toolStripMenuItem3 - // - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem3.Text = "&Remove"; - this.toolStripMenuItem3.Click += new System.EventHandler(this.removeGroupMenuItem3_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(99)))), ((int)(((byte)(105)))), ((int)(((byte)(119))))); - this.label1.Image = global::FizzyLauncher.AppResource.toggle_left_ea_16; - this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.label1.Location = new System.Drawing.Point(265, 83); - this.label1.Margin = new System.Windows.Forms.Padding(0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(0, 15); - this.label1.TabIndex = 2; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick); - this.label1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.label1_MouseClick); - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6); - // - // toolStripMenuItem7 - // - this.toolStripMenuItem7.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem5, - this.removeRowToolStripMenuItem}); - this.toolStripMenuItem7.Name = "toolStripMenuItem7"; - this.toolStripMenuItem7.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem7.Text = "Ro&w"; - // - // toolStripMenuItem5 - // - this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(180, 22); - this.toolStripMenuItem5.Text = "Add &Row"; - this.toolStripMenuItem5.Click += new System.EventHandler(this.toolStripMenuItem5_Click); - // - // removeRowToolStripMenuItem - // - this.removeRowToolStripMenuItem.Name = "removeRowToolStripMenuItem"; - this.removeRowToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.removeRowToolStripMenuItem.Text = "Remo&ve Row"; - this.removeRowToolStripMenuItem.Click += new System.EventHandler(this.removeRowToolStripMenuItem_Click_1); - // - // TilePanelLayout - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.Transparent; - this.Controls.Add(this.label1); - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Name = "TilePanelLayout"; - this.Size = new System.Drawing.Size(432, 173); - this.contextMenuStrip1.ResumeLayout(false); - this.contextMenuStrip2.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem addListToolStripMenuItem; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; - private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem upToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem bottomToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ToolStripSeparator toolStripMenuItem6; - private System.Windows.Forms.ToolStripMenuItem removeRowToolStripMenuItem1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem7; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5; - private System.Windows.Forms.ToolStripMenuItem removeRowToolStripMenuItem; - } -} diff --git a/Windows/Forms/TilePanelLayout.cs b/Windows/Forms/TilePanelLayout.cs deleted file mode 100644 index a2b8c9a..0000000 --- a/Windows/Forms/TilePanelLayout.cs +++ /dev/null @@ -1,942 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using FizzyLauncher.Models; -using RyzStudio.Windows.Forms; - -namespace FizzyLauncher.Windows.Forms -{ - public partial class TilePanelLayout : RyzStudio.Windows.Forms.TC1UserControl - { - public static int CalcWidth(int tileCount) => (tileCount * tileSize) + ((tileCount - 1) * margin); - - - public class Item - { - public TilePanel Tile { get; set; } - public Point Coord { get; set; } = new Point(0, 0); - } - - - protected const int tileSize = 70; - protected const int margin = 3; - protected const int labelHeight = 20; - protected const int collapseIncrement = 6; - protected const int expandIncrement = 8; - - protected TileGroupModel groupModel = null; - protected List items = new List(); - - protected int collapseHeight = 0; - protected int expandedHeight = 0; - - protected bool isAnimating = false; - protected bool isChecked = true; - protected Point lastMousePosition = new Point(); - protected Point gridSize = new Point(); - - - public TilePanelLayout(TileGroupModel model) : base() - { - InitializeComponent(); - - this.AllowDrop = true; - this.BackColor = Color.Transparent; - - this.LoadModel(model); - - label1.Location = new Point(0, 4); - label1.Margin = new Padding(0); - label1.Padding = new Padding(0); - } - - protected override void OnDragDrop(DragEventArgs e) - { - string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[]; - - this.DropFileList(fileList); - } - - protected override void OnDragOver(DragEventArgs e) - { - if (e.Data.GetDataPresent(DataFormats.FileDrop)) - { - e.Effect = DragDropEffects.Link; - } - else - { - e.Effect = DragDropEffects.None; - } - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - this.Margin = new Padding(0); - this.Padding = new Padding(0, 0, 0, 10); - } - - protected override async void OnResize(EventArgs e) - { - base.OnResize(e); - - await this.InvalidateContainer(); - } - - protected override void OnMouseClick(MouseEventArgs e) - { - base.OnMouseClick(e); - - lastMousePosition = e.Location; - - bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= 20)); - - if (e.Button == MouseButtons.Left) - { - // do nothing - } - else if (e.Button == MouseButtons.Right) - { - if (isLabel) - { - contextMenuStrip2.Show(this, e.Location); - } - else - { - contextMenuStrip1.Show(this, e.Location); - } - } - } - - protected override void OnMouseDoubleClick(MouseEventArgs e) => base.OnMouseClick(e); - - public Point GridSize - { - get => gridSize; - } - - public bool EnableAnimation - { - get - { - MainForm mainForm = this.MainForm; - if (mainForm == null) - { - return false; - } - - if (mainForm.CurrentSession == null) - { - return false; - } - - return mainForm.CurrentSession.EnableAnimation; - } - } - - public int CollapseHeight => labelHeight + collapseHeight; - - public int ExpandedHeight => expandedHeight + this.Padding.Bottom; - - public void DropFileList(string[] fileList) - { - if (fileList == null) - { - return; - } - - if (fileList.Length <= 0) - { - return; - } - - if (string.IsNullOrWhiteSpace(fileList[0])) - { - return; - } - - TileModel model = new TileModel() - { - ProcessFilename = fileList[0], - Title = Path.GetFileName(fileList[0]) - }; - - // exe - if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase)) - { - if (File.Exists(fileList[0])) - { - try - { - FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]); - if (fvi != null) - { - model.Title = fvi.ProductName; - } - } - catch - { - // do nothing - } - } - - if (string.IsNullOrWhiteSpace(model.Title)) - { - model.Title = Path.GetFileNameWithoutExtension(fileList[0]); - } - } - - this.AddTile(model); - } - - public TileGroupModel Model - { - get - { - TileGroupModel rs = new TileGroupModel() - { - Title = groupModel.Title, - GridSize = new Size(this.GridSize.X, this.GridSize.Y), - IsExpanded = isChecked, - IsExclusive = groupModel.IsExclusive, - Items = this.Tiles - }; - - return rs; - } - } - - public FlowLayoutPanel FlowLayoutPanel - { - get - { - Control parentControl = this.Parent; - while (true) - { - if (parentControl == null) - { - return null; - } - - if (parentControl.GetType() == typeof(FlowLayoutPanel)) - { - return parentControl as FlowLayoutPanel; - } - - parentControl = parentControl.Parent; - } - } - } - - public MainForm MainForm - { - get - { - Control parentControl = this.FlowLayoutPanel; - while (true) - { - if (parentControl == null) - { - return null; - } - - if (parentControl.GetType() == typeof(MainForm)) - { - return parentControl as MainForm; - } - - parentControl = parentControl.Parent; - } - } - } - - public List Tiles - { - get - { - List rs = new List(); - foreach (Item item in items) - { - TileModel model = item.Tile.ModelInfo; - model.Position = item.Coord; - - rs.Add(model); - } - - return rs; - } - } - - public int TileSize => (tileSize + margin); - - public void AddTile(TileModel tile) - { - Point gridSize = this.GridSize; - - if (items.Count >= (gridSize.X * gridSize.Y)) - { - this.SetGridSize(gridSize.X, (gridSize.Y + 1)); - } - - Point? newCoord = tile.Position; - if ((newCoord == null) || hasTile(tile.Position)) - { - newCoord = findLastFreeCoord(); - } - - if (newCoord == null) - { - return; - } - - tile.Position = newCoord.Value; - - TilePanel panel = new TilePanel(); - panel.LoadInfo(tile); - panel.Location = convertCoordToLocation(tile.Position); - - items.Add(new Item() - { - Tile = panel, - Coord = tile.Position - }); - - this.Controls.Add(panel); - } - - public void Clear() - { - this.Controls.Clear(); - } - - public async Task Collapse() - { - await Task.Run(() => - { - if (isAnimating) return; - - isAnimating = true; - isChecked = false; - - if (this.EnableAnimation) - { - while (this.Height > this.CollapseHeight) - { - UIControl.SetHeight(this, (this.Height - collapseIncrement)); - - Thread.Sleep(10); - } - } - - UIControl.SetHeight(this, this.CollapseHeight); - - isAnimating = false; - - this.Invalidate(this.DisplayRectangle, false); - }); - } - - public async Task Expand() - { - await Task.Run(() => - { - if (isAnimating) return; - - isAnimating = true; - isChecked = true; - - if (this.EnableAnimation) - { - while (this.Height < this.ExpandedHeight) - { - UIControl.SetHeight(this, (this.Height + expandIncrement)); - Thread.Sleep(10); - } - } - - UIControl.SetHeight(this, this.ExpandedHeight); - - isAnimating = false; - - this.Invalidate(this.DisplayRectangle, false); - }); - } - - public Point GetTilePosition(int posX, int posY) - { - int x = (int)Math.Round(decimal.Divide(posX, this.TileSize)); - int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize)); - - if (x < 0) x = 0; - if (y < 0) y = 0; - - return new Point((x * this.TileSize), ((y * this.TileSize) + labelHeight)); - } - - public async Task InvalidateContainer() - { - if (isAnimating) - { - return; - } - - if (isChecked) - { - await this.Expand(); - } - else - { - await this.Collapse(); - } - } - - public void AddGroup() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - this.FlowLayoutPanel.Controls.Add(new TilePanelLayout(new TileGroupModel() - { - Title = "New Group", - GridSize = new Size(8, 1) - })); - } - - public void AddRow() => this.SetGridSize(gridSize.X, (gridSize.Y + 1)); - - public void EditGroup() => EditGroupForm.ShowDialog(this); - - public void LoadModel(TileGroupModel model) - { - groupModel = model; - - isChecked = groupModel.IsExpanded; - - label1.Text = " " + groupModel?.Title; - label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16); - - this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height); - this.LoadTiles(model.Items); - this.SetGridSize(groupModel.GridSize.Width, groupModel.GridSize.Height); - - this.Invalidate(); - } - - public void UpdateModel(TileGroupModel model) - { - groupModel = model; - isChecked = groupModel.IsExpanded; - - label1.Text = " " + groupModel?.Title; - - this.Invalidate(); - } - - public void LoadTiles(List tiles) - { - if (tiles == null) - { - return; - } - - if (tiles.Count() <= 0) - { - return; - } - - foreach (TileModel item in tiles) - { - // resolve final grid position - Point? confirmedPosition = resolveCoord(item.Position); - if (confirmedPosition == null) - { - continue; - } - - // place control - TilePanel panel = new TilePanel(); - panel.LoadInfo(item); - panel.Location = convertCoordToLocation(confirmedPosition.Value); - - items.Add(new Item() - { - Tile = panel, - Coord = confirmedPosition.Value - }); - - this.Controls.Add(panel); - } - } - - public void MoveTile(TilePanel panel, int posX, int posY) - { - Item item = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault(); - if (item == null) - { - return; - } - - Point newPosition = convertLocationToCoord_Nearest(posX, posY); - if (!isTileInBounds(newPosition)) - { - return; - } - - if (hasTile(newPosition)) - { - Item swapItem = items.Where(x => x.Coord.Equals(newPosition)).FirstOrDefault(); - if (swapItem != null) - { - swapItem.Coord = item.Coord; - swapItem.Tile.Location = convertCoordToLocation(item.Coord); - } - - item.Coord = newPosition; - panel.Location = convertCoordToLocation(newPosition); - } - else - { - item.Coord = newPosition; - panel.Location = convertCoordToLocation(newPosition); - } - } - - public void MoveTop() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - this.FlowLayoutPanel.Controls.SetChildIndex(this, 0); - } - - public void MoveUp() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this); - if (pos <= 0) - { - return; - } - - this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos - 1)); - } - - public void MoveDown() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - int pos = this.FlowLayoutPanel.Controls.GetChildIndex(this); - if (pos >= (this.FlowLayoutPanel.Controls.Count - 1)) - { - return; - } - - this.FlowLayoutPanel.Controls.SetChildIndex(this, (pos + 1)); - } - - public void MoveBottom() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - this.FlowLayoutPanel.Controls.SetChildIndex(this, (this.FlowLayoutPanel.Controls.Count - 1)); - } - - public void Remove() - { - if (this.FlowLayoutPanel == null) - { - return; - } - - this.FlowLayoutPanel.Controls.Remove(this); - } - - public void Remove(TilePanel panel) - { - Item m = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault(); - if (m != null) - { - items.Remove(m); - } - - this.Controls.Remove(panel); - } - - public void SetGridSize(int width, int height) - { - gridSize = new Point(width, height); - - groupModel.GridSize = new Size(groupModel.GridSize.Width, height); - - expandedHeight = (this.TileSize * height) + labelHeight; - - int w = CalcWidth(gridSize.X); - - this.Size = new Size(w, (isChecked ? this.ExpandedHeight : this.CollapseHeight)); - } - - protected Point convertCoordToLocation(Point position) => new Point((position.X * this.TileSize), ((position.Y * this.TileSize) + labelHeight)); - - protected Point convertLocationToCoord(int posX, int posY) - { - int x = (int)Math.Ceiling(decimal.Divide(posX, this.TileSize)); - int y = (int)Math.Ceiling(decimal.Divide((posY - labelHeight), this.TileSize)); - - x--; - y--; - - if (x < 0) x = 0; - if (y < 0) y = 0; - - return new Point(x, y); - } - - protected Point convertLocationToCoord_Nearest(int posX, int posY) - { - int x = (int)Math.Round(decimal.Divide(posX, this.TileSize)); - int y = (int)Math.Round(decimal.Divide((posY - labelHeight), this.TileSize)); - - if (x < 0) x = 0; - if (y < 0) y = 0; - - return new Point(x, y); - } - - protected Point? findFirstFreeCoord() - { - Point gridSize = this.GridSize; - - for (int y = 0; y < gridSize.Y; y++) - { - for (int x = 0; x < gridSize.X; x++) - { - if (hasTile(new Point(x, y))) - { - continue; - } - - return new Point(x, y); - } - } - - return null; - } - - protected Point? findLastFreeCoord() - { - Point gridSize = this.GridSize; - - // none available - if (items.Count >= (gridSize.X * gridSize.Y)) - { - return null; - } - - if (items.Count <= 0) - { - return findFirstFreeCoord(); - } - - // only one available - if (items.Count >= ((gridSize.X * gridSize.Y) - 1)) - { - return findFirstFreeCoord(); - } - - Point? rv = null; - - for (int y = (gridSize.Y - 1); y >= 0; y--) - { - for (int x = (gridSize.X - 1); x >= 0; x--) - { - if (hasTile(new Point(x, y))) - { - if (rv.HasValue) - { - return rv; - } - } - else - { - rv = new Point(x, y); - } - } - } - - return null; - } - - protected bool hasTile(Point position) - { - if (items == null) - { - return false; - } - - if (items.Count <= 0) - { - return false; - } - - return (items.Count(x => x.Coord.Equals(position)) > 0); - } - - protected bool isTileInBounds(Point position) - { - Point gridSize = this.GridSize; - - if (position.X >= gridSize.X) - { - return false; - } - - if (position.Y >= gridSize.Y) - { - return false; - } - - return true; - } - - protected Point? resolveCoord(Point coord) - { - if (!isTileInBounds(coord)) - { - return null; - } - - if (!hasTile(coord)) - { - return coord; - } - - return resolveNextCoord(coord); - } - - protected Point? resolveNextCoord(Point coord) - { - Point gridSize = this.GridSize; - Point newCoord = coord; - - while (true) - { - newCoord.X++; - - if (newCoord.X >= gridSize.X) - { - newCoord.Y++; - newCoord.X = 0; - } - - if (!isTileInBounds(newCoord)) - { - return null; - } - - if (hasTile(newCoord)) - { - continue; - } - - return newCoord; - } - } - - private async void label1_MouseClick(object sender, MouseEventArgs e) - { - if (isAnimating) return; - - if (e.Button == MouseButtons.Left) - { - isChecked = !isChecked; - - label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16); - - this.Invalidate(); - - await this.InvalidateContainer(); - - // exclusivity - if (isChecked) - { - if (this.Model.IsExclusive) - { - if (this.FlowLayoutPanel != null) - { - foreach (TilePanelLayout item in this.FlowLayoutPanel.Controls.OfType()) - { - if (item.Equals(this)) - { - continue; - } - - await item.Collapse(); - } - } - } - } - - label1.Image = (isChecked ? AppResource.toggle_right_ea_16 : AppResource.toggle_left_ea_16); - } - else if (e.Button == MouseButtons.Right) - { - contextMenuStrip2.Show(this, e.Location); - } - } - - #region tile context menu - - /// - /// Add tile - /// - /// - /// - private void addTileMenuItem_Click(object sender, EventArgs e) - { - Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y); - - EditTileForm.ShowAddDialog(this, coord); - } - - /// - /// Add folder - /// - /// - /// - private void addListTileMenuItem_Click(object sender, EventArgs e) - { - Point coord = convertLocationToCoord(lastMousePosition.X, lastMousePosition.Y); - - EditTileFolderForm.ShowAddDialog(this, coord); - } - - #endregion - - #region group context menu - - /// - /// Add group - /// - /// - /// - private void addGroupMenuItem_Click(object sender, EventArgs e) - { - this.AddGroup(); - } - - /// - /// Edit group - /// - /// - /// - private void editGroupMenuItem_Click(object sender, EventArgs e) - { - this.EditGroup(); - } - - /// - /// Add row - /// - /// - /// - private void toolStripMenuItem5_Click(object sender, EventArgs e) - { - this.AddRow(); - } - - /// - /// Remove row - /// - /// - /// - private void removeRowToolStripMenuItem_Click_1(object sender, EventArgs e) - { - if (gridSize.Y <= 1) - { - return; - } - - bool rs = items.Exists(x => x.Coord.Y.Equals(gridSize.Y - 1)); - if (rs) - { - return; - } - - this.SetGridSize(gridSize.X, (gridSize.Y - 1)); - } - - /// - /// Move to top - /// - /// - /// - private void moveTopMenuItem_Click(object sender, EventArgs e) - { - this.MoveTop(); - } - - /// - /// Move up - /// - /// - /// - private void moveUpMenuItem_Click(object sender, EventArgs e) - { - this.MoveUp(); - } - - /// - /// Move down - /// - /// - /// - private void moveDownMenuItem_Click(object sender, EventArgs e) - { - this.MoveDown(); - } - - /// - /// Move to bottom - /// - /// - /// - private void moveBottomMenuItem_Click(object sender, EventArgs e) - { - this.MoveBottom(); - } - - /// - /// Remove group - /// - /// - /// - private void removeGroupMenuItem3_Click(object sender, EventArgs e) - { - this.Remove(); - } - - #endregion - - } -} diff --git a/Windows/Forms/TilePanelLayout.resx b/Windows/Forms/TilePanelLayout.resx deleted file mode 100644 index b5d6123..0000000 --- a/Windows/Forms/TilePanelLayout.resx +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 172, 17 - - \ No newline at end of file diff --git a/build-installer.iss b/build-installer.iss index 7d944e3..71e6ba0 100644 --- a/build-installer.iss +++ b/build-installer.iss @@ -1,15 +1,15 @@ ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! -#define MyAppName "Fizzy Launcher" -#define MyAppVersion "0.2.5.058" +#define MyAppName "RokettoLaunch" +#define MyAppVersion "0.3.0.153" #define MyAppPublisher "Hi, I'm Ray" #define MyAppURL "https://www.hiimray.co.uk/software-fizzy-launcher" -#define MyAppExeName "fizzylauncher.exe" +#define MyAppExeName "rokettolaunch.exe" -#define AppSourcePath "L:\gitea-hiimray\linear-app-launcher\bin\Release\64" -#define AppReleasePath "L:\gitea-hiimray\linear-app-launcher\bin\Release" -#define AppReleaseName "fizzy-launcher" +#define AppSourcePath "L:\gitea-hiimray\linear-app-launcher\bin" +#define AppReleasePath "L:\gitea-hiimray\linear-app-launcher\bin" +#define AppReleaseName "rokettolaunch-installer" [Setup] @@ -41,7 +41,7 @@ Name: "english"; MessagesFile: "compiler:Default.isl" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "{#AppSourcePath}\fizzylauncher.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#AppSourcePath}\rokettolaunch.exe"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] diff --git a/build.bat b/build.bat index d90b1f3..244bf0b 100644 --- a/build.bat +++ b/build.bat @@ -1,10 +1,17 @@ -rmdir /s /q "bin\Release\" -dotnet publish skye.sln -r win-x64 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="bin\Release\64\" +RMDIR /s /q "bin\" +RMDIR /s /q "obj\" -##rmdir /s /q "bin\Release\86\" -##dotnet publish skye.sln -r win-x86 -c Release /p:PublishSingleFile=true /p:SelfContained=false /p:PublishReadyToRunfalse=true /p:PublishDir="bin\Release\" +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\" "C:\B\Portable Files (dev)\Inno Setup\v6.0.4-2\app\ISCC.exe" "build-installer.iss" -cd "bin\Release\64\" -"C:\B\Portable Files\PeaZip (Portable)\v6.5.1\App\PeaZip\res\7z\7z.exe" a -t7z "..\fizzy-launcher.7z" "*" -mx9 \ No newline at end of file +"C:\B\Portable Files\7-Zip (Portable)\23.01\App\7-Zip64\7z.exe" a -t7z "bin\rokettolaunch.7z" ".\bin\rokettolaunch.exe" -mx9 + +RMDIR /s /q "bin\debug" +RMDIR /s /q "bin\release" +RMDIR /s /q "obj\" + +PAUSE \ No newline at end of file diff --git a/favicon.ico b/favicon.ico index 5d60ade..32f7bcb 100644 Binary files a/favicon.ico and b/favicon.ico differ diff --git a/skye.sln b/skye.sln index 94d918f..4e11779 100644 --- a/skye.sln +++ b/skye.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FizzyLauncher", "FizzyLauncher.csproj", "{4833FB27-0817-4720-A54B-180369B0C374}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RokettoLaunch", "RokettoLaunch.csproj", "{4833FB27-0817-4720-A54B-180369B0C374}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution