From 2c116af5aac1a54456fdebfc3196f8147ff5ff9a Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 2 May 2020 17:17:10 +0100 Subject: [PATCH] WIP: tile container animation --- LinearAppLauncher.csproj | 6 + MainForm.Designer.cs | 1 + MainForm.cs | 26 +- Windows/Forms/AddTileForm.cs | 374 +++++++++++++++++++ Windows/Forms/AddTileForm.resx | 131 +++++++ Windows/Forms/EditTileForm.cs | 40 +- Windows/Forms/Tile/TileContainer.Designer.cs | 21 ++ Windows/Forms/Tile/TileContainer.cs | 74 +++- Windows/Forms/Tile/TileContainer.resx | 3 + Windows/Forms/Tile/TileGroupLabel.cs | 49 +-- Windows/Forms/Tile/TileLayoutPanel.cs | 74 ++-- Windows/Forms/Tile/TilePanel.cs | 55 +-- Windows/Forms/TitlePanel.cs | 26 +- 13 files changed, 758 insertions(+), 122 deletions(-) create mode 100644 Windows/Forms/AddTileForm.cs create mode 100644 Windows/Forms/AddTileForm.resx diff --git a/LinearAppLauncher.csproj b/LinearAppLauncher.csproj index 547fbca..8a584d0 100644 --- a/LinearAppLauncher.csproj +++ b/LinearAppLauncher.csproj @@ -128,6 +128,9 @@ UserControl.cs + + Form + Form @@ -192,6 +195,9 @@ TextButtonBox.cs + + AddTileForm.cs + EditTileForm.cs diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 92fc8f6..e2c842f 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -88,6 +88,7 @@ this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Size = new System.Drawing.Size(600, 369); this.flowLayoutPanel1.TabIndex = 27; + this.flowLayoutPanel1.WrapContents = false; // // button3 // diff --git a/MainForm.cs b/MainForm.cs index 9895c64..e031341 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -27,6 +27,23 @@ namespace AppLauncher InitializeComponent(); } + //protected override void OnLoad(EventArgs e) + //{ + // base.OnLoad(e); + + //} + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + + string jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig"); + if (File.Exists(jsonfigFilename)) + { + loadSession(jsonfigFilename); + } + } + private async void button1_Click(object sender, EventArgs e) { //if (this.Width > collapsedWidth) @@ -173,7 +190,7 @@ namespace AppLauncher this.Close(); } - protected void loadSession(string filename) + protected async void loadSession(string filename) { string sourceCode = File.ReadAllText(filename); if (string.IsNullOrWhiteSpace(sourceCode)) @@ -193,13 +210,18 @@ namespace AppLauncher { TileContainer panel = new TileContainer(item); flowLayoutPanel1.Controls.Add(panel); + + if (item.IsExpanded) + { + //await panel.Expand(); + } } } private void button3_Click(object sender, EventArgs e) { - loadSession(Application.StartupPath.TrimEnd('\\') + "\\test1.jsonfig"); +// loadSession(Application.StartupPath.TrimEnd('\\') + "\\test1.jsonfig"); } diff --git a/Windows/Forms/AddTileForm.cs b/Windows/Forms/AddTileForm.cs new file mode 100644 index 0000000..62c04c8 --- /dev/null +++ b/Windows/Forms/AddTileForm.cs @@ -0,0 +1,374 @@ +using AppLauncher.Models; +using RyzStudio.Windows.ThemedForms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AppLauncher.Windows.Forms +{ + public class AddTileForm : DialogForm + { + 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 TextButtonBox textBox2; + private TextBox textBox3; + private TextButtonBox textBox4; + private Button button1; + private PickerBox pickerBox1; + private PickerBox pickerBox2; + private RyzStudio.Windows.Forms.HorizontalSeparator horizontalSeparator1; + private RyzStudio.Windows.Forms.HorizontalSeparator horizontalSeparator2; + private TextBox textBox1; + + protected TileLayoutPanel parentPanel = null; + + public AddTileForm() : base() + { + InitializeComponent(); + initialiseComponents2(); + } + + public AddTileForm(TileLayoutPanel panel) : base() + { + parentPanel = panel; + + InitializeComponent(); + initialiseComponents2(); + } + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTileForm)); + this.textBox1 = new RyzStudio.Windows.ThemedForms.TextBox(); + 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 RyzStudio.Windows.ThemedForms.TextButtonBox(); + this.textBox3 = new RyzStudio.Windows.ThemedForms.TextBox(); + this.textBox4 = new RyzStudio.Windows.ThemedForms.TextButtonBox(); + this.button1 = new RyzStudio.Windows.ThemedForms.Button(); + this.pickerBox1 = new RyzStudio.Windows.ThemedForms.PickerBox(); + this.pickerBox2 = new RyzStudio.Windows.ThemedForms.PickerBox(); + this.horizontalSeparator1 = new RyzStudio.Windows.Forms.HorizontalSeparator(); + this.horizontalSeparator2 = new RyzStudio.Windows.Forms.HorizontalSeparator(); + ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).BeginInit(); + this.SuspendLayout(); + // + // imgbxClose + // + this.imgbxClose.Image = ((System.Drawing.Image)(resources.GetObject("imgbxClose.Image"))); + this.imgbxClose.Location = new System.Drawing.Point(367, 5); + // + // lblDescription + // + this.lblDescription.Size = new System.Drawing.Size(359, 30); + this.lblDescription.Text = "Edit Tile"; + // + // panel1 + // + this.panel1.Location = new System.Drawing.Point(394, 474); + // + // area1 + // + this.area1.Location = new System.Drawing.Point(1, 474); + this.area1.Size = new System.Drawing.Size(392, 5); + // + // 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); + this.textBox1.Location = new System.Drawing.Point(159, 50); + 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(220, 32); + this.textBox1.SubmitButton = null; + this.textBox1.TabIndex = 152; + this.textBox1.UseSystemPasswordChar = false; + // + // label6 + // + this.label6.BackColor = System.Drawing.Color.Transparent; + this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label6.Location = new System.Drawing.Point(18, 268); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(208, 32); + this.label6.TabIndex = 163; + this.label6.Text = "Run As Admin"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label7 + // + this.label7.BackColor = System.Drawing.Color.Transparent; + this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label7.Location = new System.Drawing.Point(18, 227); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(208, 32); + this.label7.TabIndex = 161; + this.label7.Text = "Window Style"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label4 + // + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label4.Location = new System.Drawing.Point(18, 173); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(131, 32); + this.label4.TabIndex = 159; + this.label4.Text = "Working Directory"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label3 + // + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label3.Location = new System.Drawing.Point(18, 132); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(131, 32); + this.label3.TabIndex = 157; + this.label3.Text = "Argument"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label2.Location = new System.Drawing.Point(18, 91); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(131, 32); + this.label2.TabIndex = 155; + this.label2.Text = "Filename"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(95)))), ((int)(((byte)(99)))), ((int)(((byte)(104))))); + this.label1.Location = new System.Drawing.Point(18, 50); + this.label1.Margin = new System.Windows.Forms.Padding(0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(131, 32); + 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.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.textBox2.HighlightImage = global::AppLauncher.Properties.Resources.button16_file_add2; + this.textBox2.Location = new System.Drawing.Point(159, 91); + this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); + this.textBox2.Name = "textBox2"; + this.textBox2.NormalImage = global::AppLauncher.Properties.Resources.button16_file_add; + this.textBox2.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); + this.textBox2.Size = new System.Drawing.Size(220, 32); + this.textBox2.SubmitButton = 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("Microsoft Sans Serif", 8.25F); + this.textBox3.Location = new System.Drawing.Point(159, 132); + 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(220, 32); + this.textBox3.SubmitButton = 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.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.textBox4.HighlightImage = global::AppLauncher.Properties.Resources.button16_folder_add2; + this.textBox4.Location = new System.Drawing.Point(159, 173); + this.textBox4.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); + this.textBox4.Name = "textBox4"; + this.textBox4.NormalImage = global::AppLauncher.Properties.Resources.button16_folder_add; + this.textBox4.Padding = new System.Windows.Forms.Padding(10, 10, 9, 9); + this.textBox4.Size = new System.Drawing.Size(220, 32); + this.textBox4.SubmitButton = null; + this.textBox4.TabIndex = 172; + this.textBox4.UseSystemPasswordChar = false; + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button1.BackColor = System.Drawing.Color.Transparent; + this.button1.DefaultImage = null; + this.button1.DownImage = null; + this.button1.LabelText = "&Save"; + this.button1.Location = new System.Drawing.Point(251, 427); + this.button1.Name = "button1"; + this.button1.OverImage = null; + this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3); + this.button1.Size = new System.Drawing.Size(128, 32); + this.button1.TabIndex = 173; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // pickerBox1 + // + this.pickerBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pickerBox1.BackColor = System.Drawing.Color.Transparent; + this.pickerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.pickerBox1.Location = new System.Drawing.Point(239, 227); + 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(140, 32); + this.pickerBox1.SubmitButton = null; + this.pickerBox1.TabIndex = 174; + // + // pickerBox2 + // + this.pickerBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pickerBox2.BackColor = System.Drawing.Color.Transparent; + this.pickerBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.pickerBox2.Location = new System.Drawing.Point(239, 268); + 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(140, 32); + this.pickerBox2.SubmitButton = 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.Location = new System.Drawing.Point(10, 215); + this.horizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2); + this.horizontalSeparator1.Name = "horizontalSeparator1"; + this.horizontalSeparator1.Size = new System.Drawing.Size(380, 2); + this.horizontalSeparator1.TabIndex = 176; + // + // 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.Location = new System.Drawing.Point(10, 310); + this.horizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); + this.horizontalSeparator2.Name = "horizontalSeparator2"; + this.horizontalSeparator2.Size = new System.Drawing.Size(380, 2); + this.horizontalSeparator2.TabIndex = 177; + // + // EditTileForm + // + this.ClientSize = new System.Drawing.Size(400, 480); + 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.Description = "Edit Tile"; + this.Name = "EditTileForm"; + this.Controls.SetChildIndex(this.imgbxClose, 0); + this.Controls.SetChildIndex(this.lblDescription, 0); + this.Controls.SetChildIndex(this.panel1, 0); + this.Controls.SetChildIndex(this.area1, 0); + this.Controls.SetChildIndex(this.textBox1, 0); + this.Controls.SetChildIndex(this.label1, 0); + this.Controls.SetChildIndex(this.label2, 0); + this.Controls.SetChildIndex(this.label3, 0); + this.Controls.SetChildIndex(this.label4, 0); + this.Controls.SetChildIndex(this.label7, 0); + this.Controls.SetChildIndex(this.label6, 0); + this.Controls.SetChildIndex(this.textBox2, 0); + this.Controls.SetChildIndex(this.textBox3, 0); + this.Controls.SetChildIndex(this.textBox4, 0); + this.Controls.SetChildIndex(this.button1, 0); + this.Controls.SetChildIndex(this.pickerBox1, 0); + this.Controls.SetChildIndex(this.pickerBox2, 0); + this.Controls.SetChildIndex(this.horizontalSeparator1, 0); + this.Controls.SetChildIndex(this.horizontalSeparator2, 0); + ((System.ComponentModel.ISupportInitialize)(this.imgbxClose)).EndInit(); + this.ResumeLayout(false); + + } + + private void initialiseComponents2() + { + 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; + } + + //protected override void OnShown(EventArgs e) + //{ + // base.OnShown(e); + + // if (parentPanel != null) + // { + // textBox1.Text = parentPanel.ModelInfo.Title; + // textBox2.Text = parentPanel.ModelInfo.ProcessFilename; + // textBox3.Text = parentPanel.ModelInfo.ProcessArgument; + // textBox4.Text = parentPanel.ModelInfo.ProcessWorkingDirectory; + // pickerBox1.ComboBox.SelectedIndex = (int)parentPanel.ModelInfo.ProcessWindowStyle; + // pickerBox2.ComboBox.SelectedIndex = (parentPanel.ModelInfo.ProcessAsAdmin ? 1 : 0); + // } + //} + + private void button1_Click(object sender, EventArgs e) + { + TileModel model = 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) + }; + + //parentPanel.LoadInfo(model); + + //parentPanel.Info.Title = textBox1.Text?.Trim(); + //parentPanel.Info.ProcessFilename = textBox2.Text?.Trim(); + //parentPanel.Info.ProcessArgument = textBox3.Text?.Trim(); + //parentPanel.Info.ProcessWorkingDirectory = textBox4.Text?.Trim(); + //parentPanel.Info.ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle) pickerBox1.ComboBox.SelectedIndex; + //parentPanel.Info.ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1); + + this.Close(); + } + + } +} diff --git a/Windows/Forms/AddTileForm.resx b/Windows/Forms/AddTileForm.resx new file mode 100644 index 0000000..3747e00 --- /dev/null +++ b/Windows/Forms/AddTileForm.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS4xYyqcSwAAANlJREFUOE+lU1sO + gjAQrHgRY6KemQ+VT9NrgAfgfRA+SawzdTAk2lhkkgm7s7vTAq0py/LUNM0dHEEXSfYWfd8fDQIOD23b + nvFMY6jeAcxpMFIwC1HX9YWzNOCWUunR4AxnvxpUVbV3zm2UGsbUlHoEDfBhdsgf4BWDCcmYGmtqCxtw + NeQcoJ6JjGn43hXy8CvIxDeIGbREZY+pHjLgtqeVHf7SzVq7VdmDM6x9GGj1/19h9UckVv3GWMwNRh5L + 6dGYH+UCHCTQ9SfV+7pMvJIIaLL0Oudd1x2eUQ8MyeAeq0cAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Windows/Forms/EditTileForm.cs b/Windows/Forms/EditTileForm.cs index 5af5165..851cbf3 100644 --- a/Windows/Forms/EditTileForm.cs +++ b/Windows/Forms/EditTileForm.cs @@ -1,4 +1,5 @@ -using RyzStudio.Windows.ThemedForms; +using AppLauncher.Models; +using RyzStudio.Windows.ThemedForms; using System; using System.Collections.Generic; using System.Linq; @@ -225,6 +226,7 @@ namespace AppLauncher.Windows.Forms 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 // @@ -335,15 +337,39 @@ namespace AppLauncher.Windows.Forms if (parentPanel != null) { - textBox1.Text = parentPanel.Info.Title; - textBox2.Text = parentPanel.Info.ProcessFilename; - textBox3.Text = parentPanel.Info.ProcessArgument; - textBox4.Text = parentPanel.Info.ProcessWorkingDirectory; - pickerBox1.ComboBox.SelectedIndex = (int)parentPanel.Info.ProcessWindowStyle; - pickerBox2.ComboBox.SelectedIndex = (parentPanel.Info.ProcessAsAdmin ? 1 : 0); + textBox1.Text = parentPanel.ModelInfo.Title; + textBox2.Text = parentPanel.ModelInfo.ProcessFilename; + textBox3.Text = parentPanel.ModelInfo.ProcessArgument; + textBox4.Text = parentPanel.ModelInfo.ProcessWorkingDirectory; + pickerBox1.ComboBox.SelectedIndex = (int)parentPanel.ModelInfo.ProcessWindowStyle; + pickerBox2.ComboBox.SelectedIndex = (parentPanel.ModelInfo.ProcessAsAdmin ? 1 : 0); } } + private void button1_Click(object sender, EventArgs e) + { + TileModel model = 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) + }; + + parentPanel.LoadInfo(model); + + //parentPanel.Info.Title = textBox1.Text?.Trim(); + //parentPanel.Info.ProcessFilename = textBox2.Text?.Trim(); + //parentPanel.Info.ProcessArgument = textBox3.Text?.Trim(); + //parentPanel.Info.ProcessWorkingDirectory = textBox4.Text?.Trim(); + //parentPanel.Info.ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle) pickerBox1.ComboBox.SelectedIndex; + //parentPanel.Info.ProcessAsAdmin = (pickerBox2.ComboBox.SelectedIndex == 1); + + this.Close(); + } + } } diff --git a/Windows/Forms/Tile/TileContainer.Designer.cs b/Windows/Forms/Tile/TileContainer.Designer.cs index 4dcd41d..23b6118 100644 --- a/Windows/Forms/Tile/TileContainer.Designer.cs +++ b/Windows/Forms/Tile/TileContainer.Designer.cs @@ -28,8 +28,12 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.label1 = new AppLauncher.Windows.Forms.TileGroupLabel(); this.panel1 = new AppLauncher.Windows.Forms.TileLayoutPanel(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // // label1 @@ -57,6 +61,20 @@ this.panel1.Size = new System.Drawing.Size(223, 127); this.panel1.TabIndex = 27; // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(181, 48); + // + // addToolStripMenuItem + // + this.addToolStripMenuItem.Name = "addToolStripMenuItem"; + this.addToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.addToolStripMenuItem.Text = "&Add"; + this.addToolStripMenuItem.Click += new System.EventHandler(this.addToolStripMenuItem_Click); + // // TileContainer // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -66,6 +84,7 @@ this.Controls.Add(this.label1); this.Name = "TileContainer"; this.Size = new System.Drawing.Size(370, 150); + this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); } @@ -74,5 +93,7 @@ private TileGroupLabel label1; private TileLayoutPanel panel1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem; } } diff --git a/Windows/Forms/Tile/TileContainer.cs b/Windows/Forms/Tile/TileContainer.cs index 83a5886..ffaa380 100644 --- a/Windows/Forms/Tile/TileContainer.cs +++ b/Windows/Forms/Tile/TileContainer.cs @@ -17,11 +17,15 @@ namespace AppLauncher.Windows.Forms protected int collapseIncrement = 6; protected int expandIncrement = 8; protected TileGroupModel groupInfo = null; + protected bool isAnimating = false; public TileContainer(TileGroupModel model) : base() { InitializeComponent(); + this.ContextMenuStrip = contextMenuStrip1; + //this.BackColor = Color.MistyRose; + label1.TileGroupPanel = this; groupInfo = model; @@ -29,40 +33,36 @@ namespace AppLauncher.Windows.Forms label1.TitleText = groupInfo.Title; panel1.SetGridSize(groupInfo.GridSize.Width, groupInfo.GridSize.Height); label1.Checked = groupInfo.IsExpanded; - - //label1.Width = panel1.Width; - //label1.PanelHeight = panel1.Height; - - //this.Margin = new Padding(0); - //this.Size = new Size(panel1.Width, (label1.Height + panel1.Height)); - //this.MaximumSize = this.Size; - //this.MinimumSize = this.Size; - - //this.BackColor = Color.MistyRose; - panel1.LoadTiles(model.Items); } - protected override void OnLoad(EventArgs e) + protected override async void OnLoad(EventArgs e) { base.OnLoad(e); label1.Width = panel1.Width; - this.Margin = new Padding(0); - this.MaximumSize = new Size(panel1.Width, (label1.Height + panel1.ExpandedHeight)); + this.Margin = new Padding(0, 0, 0, 0); + this.Padding = new Padding(0, 0, 0, 20); + this.MaximumSize = new Size(panel1.Width, expandedHeight); this.MinimumSize = new Size(panel1.Width, label1.Height); this.Size = this.MaximumSize; } protected int collapseHeight => label1.Height + panel1.CollapseHeight; - protected int expandedHeight => label1.Height + panel1.ExpandedHeight; + protected int expandedHeight => label1.Height + panel1.ExpandedHeight + this.Padding.Top + this.Padding.Bottom; + + public bool IsAnimating => isAnimating; public async Task Collapse() { await Task.Run(() => { + if (isAnimating) return; + + isAnimating = true; + while (this.Height > collapseHeight) { if (this.InvokeRequired) @@ -78,6 +78,8 @@ namespace AppLauncher.Windows.Forms Thread.Sleep(10); } + + isAnimating = false; }); } @@ -85,6 +87,10 @@ namespace AppLauncher.Windows.Forms { await Task.Run(() => { + if (isAnimating) return; + + isAnimating = true; + if (this.InvokeRequired) { this.Invoke(new MethodInvoker(() => { @@ -95,6 +101,8 @@ namespace AppLauncher.Windows.Forms { this.Height = collapseHeight; } + + isAnimating = false; }); } @@ -102,6 +110,10 @@ namespace AppLauncher.Windows.Forms { await Task.Run(() => { + if (isAnimating) return; + + isAnimating = true; + while (this.Height < expandedHeight) { if (this.InvokeRequired) @@ -119,8 +131,40 @@ namespace AppLauncher.Windows.Forms Thread.Sleep(10); } + + isAnimating = false; }); } + public async Task InvalidateContainer(bool animate = true) + { + if (this.IsAnimating) + { + return; + } + + if (label1.Checked) + { + await this.Expand(); + } + else + { + if (animate) + { + await this.Collapse(); + } + else + { + await this.CollapseNow(); + } + } + } + + private void addToolStripMenuItem_Click(object sender, EventArgs e) + { + AddTileForm addForm = new AddTileForm(panel1); + addForm.ShowDialog(); + } + } } diff --git a/Windows/Forms/Tile/TileContainer.resx b/Windows/Forms/Tile/TileContainer.resx index 1af7de1..ad53752 100644 --- a/Windows/Forms/Tile/TileContainer.resx +++ b/Windows/Forms/Tile/TileContainer.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/Windows/Forms/Tile/TileGroupLabel.cs b/Windows/Forms/Tile/TileGroupLabel.cs index d43696d..9c60aea 100644 --- a/Windows/Forms/Tile/TileGroupLabel.cs +++ b/Windows/Forms/Tile/TileGroupLabel.cs @@ -1,20 +1,15 @@ -using System; -using System.ComponentModel; -using System.Threading.Tasks; +using System.ComponentModel; using System.Windows.Forms; namespace AppLauncher.Windows.Forms { public partial class TileGroupLabel : AUserControl { - protected bool isChecked = false; + protected bool isChecked = true; public TileGroupLabel() : base() { InitializeComponent(); - - this.Checked = false; - } [Category("Appearance"), Browsable(true)] @@ -29,20 +24,18 @@ namespace AppLauncher.Windows.Forms isChecked = value; pictureBox1.BackgroundImage = (value) ? Properties.Resources.toggle_right_ea_16 : Properties.Resources.toggle_left_ea_16; + + if (this.TileGroupPanel != null) + { + this.TileGroupPanel.InvalidateContainer(); + } } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public TileContainer TileGroupPanel { get; set; } = null; - protected async override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - await invalidateToggle(false); - } - - protected async void panel_MouseClick(object sender, MouseEventArgs e) + protected void panel_MouseClick(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) { @@ -50,32 +43,6 @@ namespace AppLauncher.Windows.Forms } this.Checked = !this.Checked; - - await invalidateToggle(); - } - - protected async Task invalidateToggle(bool animate = true) - { - if (this.TileGroupPanel == null) - { - return; - } - - if (this.Checked) - { - await this.TileGroupPanel.Expand(); - } - else - { - if (animate) - { - await this.TileGroupPanel.Collapse(); - } - else - { - await this.TileGroupPanel.CollapseNow(); - } - } } } diff --git a/Windows/Forms/Tile/TileLayoutPanel.cs b/Windows/Forms/Tile/TileLayoutPanel.cs index 02c5610..43b3f7b 100644 --- a/Windows/Forms/Tile/TileLayoutPanel.cs +++ b/Windows/Forms/Tile/TileLayoutPanel.cs @@ -56,6 +56,11 @@ namespace AppLauncher.Windows.Forms public int ExpandedHeight => expandedHeight; + public void AddTile(TileModel tile) + { + + } + public void Clear() { this.Controls.Clear(); @@ -87,13 +92,6 @@ namespace AppLauncher.Windows.Forms return new Point((x * this.TileSize), (y * this.TileSize)); } - public void SetGridSize(int width, int height) - { - expandedHeight = (this.TileSize * height); - - this.Size = new Size((this.TileSize * width), expandedHeight); - } - public void LoadTiles(List tiles) { if (tiles == null) @@ -109,7 +107,7 @@ namespace AppLauncher.Windows.Forms foreach (TileModel item in tiles) { // resolve final grid position - Point? confirmedPosition = resolvePosition(item.Position); + Point? confirmedPosition = resolveCoord(item.Position); if (confirmedPosition == null) { continue; @@ -119,7 +117,7 @@ namespace AppLauncher.Windows.Forms // place control TilePanel panel = new TilePanel(); panel.LoadInfo(item); - panel.Location = convertPositionToLocation(confirmedPosition.Value); + panel.Location = convertCoordToLocation(confirmedPosition.Value); items.Add(new Item() { @@ -139,7 +137,7 @@ namespace AppLauncher.Windows.Forms return; } - Point newPosition = convertLocationToPosition(posX, posY); + Point newPosition = convertLocationToCoord(posX, posY); if (!isTileInBounds(newPosition)) { return; @@ -151,22 +149,40 @@ namespace AppLauncher.Windows.Forms if (swapItem != null) { swapItem.Coord = item.Coord; - swapItem.Tile.Location = convertPositionToLocation(item.Coord); + swapItem.Tile.Location = convertCoordToLocation(item.Coord); } item.Coord = newPosition; - panel.Location = convertPositionToLocation(newPosition); + panel.Location = convertCoordToLocation(newPosition); } else { item.Coord = newPosition; - panel.Location = convertPositionToLocation(newPosition); + panel.Location = convertCoordToLocation(newPosition); } } - protected Point convertPositionToLocation(Point position) => new Point((position.X * this.TileSize), (position.Y * this.TileSize)); + public void Remove(TilePanel panel) + { + Item m = items.Where(x => x.Tile.Equals(panel)).FirstOrDefault(); + if (m != null) + { + items.Remove(m); + } - protected Point convertLocationToPosition(int posX, int posY) + this.Controls.Remove(panel); + } + + public void SetGridSize(int width, int height) + { + expandedHeight = (this.TileSize * height); + + this.Size = new Size((this.TileSize * width), expandedHeight); + } + + protected Point convertCoordToLocation(Point position) => new Point((position.X * this.TileSize), (position.Y * this.TileSize)); + + protected Point convertLocationToCoord(int posX, int posY) { int x = (int)Math.Round(decimal.Divide(posX, this.TileSize)); int y = (int)Math.Round(decimal.Divide(posY, this.TileSize)); @@ -177,47 +193,47 @@ namespace AppLauncher.Windows.Forms return new Point(x, y); } - protected Point? resolvePosition(Point position) + protected Point? resolveCoord(Point coord) { - if (!isTileInBounds(position)) + if (!isTileInBounds(coord)) { return null; } - if (!hasTile(position)) + if (!hasTile(coord)) { - return position; + return coord; } - return resolveNextPosition(position); + return resolveNextCoord(coord); } - protected Point? resolveNextPosition(Point position) + protected Point? resolveNextCoord(Point coord) { Point gridSize = this.GridSize; - Point newPosition = position; + Point newCoord = coord; while (true) { - newPosition.X++; + newCoord.X++; - if (newPosition.X >= gridSize.X) + if (newCoord.X >= gridSize.X) { - newPosition.Y++; - newPosition.X = 0; + newCoord.Y++; + newCoord.X = 0; } - if (!isTileInBounds(newPosition)) + if (!isTileInBounds(newCoord)) { return null; } - if (hasTile(newPosition)) + if (hasTile(newCoord)) { continue; } - return newPosition; + return newCoord; } } diff --git a/Windows/Forms/Tile/TilePanel.cs b/Windows/Forms/Tile/TilePanel.cs index 3ed5924..97940e1 100644 --- a/Windows/Forms/Tile/TilePanel.cs +++ b/Windows/Forms/Tile/TilePanel.cs @@ -13,7 +13,7 @@ namespace AppLauncher.Windows.Forms protected bool isDragging = false; protected Point startPosition = new Point(); - protected TileModel model = new TileModel(); + protected TileModel modelInfo = new TileModel(); protected EditTileForm editForm = null; public TilePanel() : base() @@ -40,7 +40,7 @@ namespace AppLauncher.Windows.Forms public Image Image { get => pictureBox1.BackgroundImage; protected set => pictureBox1.BackgroundImage = value; } [Browsable(false)] - public TileModel Info => model; + public TileModel ModelInfo => modelInfo; public TileLayoutPanel PanelContainer { @@ -62,25 +62,25 @@ namespace AppLauncher.Windows.Forms public void LoadInfo(TileModel model) { - this.model = model; + this.modelInfo = model; this.Title = model.Title; - //this.Image = model.Icon; + this.Image = model.Icon; - //if (this.Image == null) - //{ - // if (File.Exists(model.ProcessFilename)) - // { - // try - // { - // this.Image = Icon.ExtractAssociatedIcon(model.ProcessFilename)?.ToBitmap(); - // } - // catch - // { + if (this.Image == null) + { + if (File.Exists(model.ProcessFilename)) + { + try + { + this.Image = Icon.ExtractAssociatedIcon(model.ProcessFilename)?.ToBitmap(); + } + catch + { - // } - // } - //} + } + } + } } @@ -127,27 +127,27 @@ namespace AppLauncher.Windows.Forms private void TilePanel_MouseDoubleClick(object sender, MouseEventArgs e) { - if (this.Info == null) + if (this.ModelInfo == null) { return; } - if (string.IsNullOrWhiteSpace(this.Info.ProcessFilename)) + if (string.IsNullOrWhiteSpace(this.ModelInfo.ProcessFilename)) { return; } - if (!File.Exists(this.Info.ProcessFilename)) + if (!File.Exists(this.ModelInfo.ProcessFilename)) { return; } ProcessStartInfo p = new ProcessStartInfo(); - p.FileName = this.Info.ProcessFilename; - p.WindowStyle = this.Info.ProcessWindowStyle; - if (!string.IsNullOrWhiteSpace(this.Info.ProcessArgument)) p.Arguments = this.Info.ProcessArgument; - if (!string.IsNullOrWhiteSpace(this.Info.ProcessWorkingDirectory)) p.WorkingDirectory = this.Info.ProcessWorkingDirectory; - if (this.Info.ProcessAsAdmin) p.Verb = "runas"; + p.FileName = this.ModelInfo.ProcessFilename; + p.WindowStyle = this.ModelInfo.ProcessWindowStyle; + if (!string.IsNullOrWhiteSpace(this.ModelInfo.ProcessArgument)) p.Arguments = this.ModelInfo.ProcessArgument; + if (!string.IsNullOrWhiteSpace(this.ModelInfo.ProcessWorkingDirectory)) p.WorkingDirectory = this.ModelInfo.ProcessWorkingDirectory; + if (this.ModelInfo.ProcessAsAdmin) p.Verb = "runas"; try { @@ -172,7 +172,12 @@ namespace AppLauncher.Windows.Forms private void removeToolStripMenuItem_Click(object sender, EventArgs e) { + if (this.PanelContainer == null) + { + return; + } + this.PanelContainer.Remove(this); } } diff --git a/Windows/Forms/TitlePanel.cs b/Windows/Forms/TitlePanel.cs index e70f2df..aadf460 100644 --- a/Windows/Forms/TitlePanel.cs +++ b/Windows/Forms/TitlePanel.cs @@ -87,11 +87,15 @@ namespace AppLauncher.Windows.Forms if (isDragging) { Point pos = this.PointToScreen(e.Location); + int y = (pos.Y - windowOffset.Y); + int x = (pos.X - windowOffset.X); - int y = Math.Max((pos.Y - windowOffset.Y), Screen.PrimaryScreen.WorkingArea.Y); - y = Math.Min(y, (Screen.PrimaryScreen.WorkingArea.Y + Screen.PrimaryScreen.WorkingArea.Height) - this.Height); + this.Parent.Location = new Point(x, y); - this.Parent.Location = new Point(Screen.PrimaryScreen.WorkingArea.X, y); + //int y = Math.Max((pos.Y - windowOffset.Y), Screen.PrimaryScreen.WorkingArea.Y); + //y = Math.Min(y, (Screen.PrimaryScreen.WorkingArea.Y + Screen.PrimaryScreen.WorkingArea.Height) - this.Height); + + //this.Parent.Location = new Point(Screen.PrimaryScreen.WorkingArea.X, y); } } @@ -116,5 +120,21 @@ namespace AppLauncher.Windows.Forms await this.MainForm.ToggleSize(); } + //protected Point validateFormLocation(int x, int y) + //{ + // Screen activeScreen = Screen.FromControl(this); + // int maxX = (activeScreen.WorkingArea.X + activeScreen.WorkingArea.Width) - this.Width; + // int maxY = (activeScreen.WorkingArea.Y + activeScreen.WorkingArea.Height) - this.Height; + + // if (x < activeScreen.WorkingArea.X) x = activeScreen.WorkingArea.X; + // if (y < activeScreen.WorkingArea.Y) y = activeScreen.WorkingArea.Y; + // if (x > maxX) x = maxX; + // if (y > maxY) y = maxY; + + // //y = activeScreen.WorkingArea.Y; + + // return new Point(x, y); + //} + } }