From a278f183d7698b6693af275732f03e1ac4e1874e Mon Sep 17 00:00:00 2001 From: Terry MacDonald Date: Tue, 11 May 2021 22:01:51 +1200 Subject: [PATCH] [WIP] First working drag and drop Drag and drop finally works! But there is no feedback, and no animation and no cursor control. And the page still doesn't actually save the information, and it can't have new start programs added to it yet. It's fair to say there is still a lot to do :/ --- DisplayMagician/DisplayMagician.csproj | 1 - DisplayMagician/TableLayoutHelper.cs | 48 ------------------- .../UIForms/ShortcutForm.Designer.cs | 27 ++++++----- DisplayMagician/UIForms/ShortcutForm.cs | 48 +++++++++++++++++++ .../UIForms/StartProgramControl.Designer.cs | 5 +- README.md | 2 +- 6 files changed, 66 insertions(+), 65 deletions(-) delete mode 100644 DisplayMagician/TableLayoutHelper.cs diff --git a/DisplayMagician/DisplayMagician.csproj b/DisplayMagician/DisplayMagician.csproj index aee3386..86404fa 100644 --- a/DisplayMagician/DisplayMagician.csproj +++ b/DisplayMagician/DisplayMagician.csproj @@ -128,7 +128,6 @@ - Form diff --git a/DisplayMagician/TableLayoutHelper.cs b/DisplayMagician/TableLayoutHelper.cs deleted file mode 100644 index 755897d..0000000 --- a/DisplayMagician/TableLayoutHelper.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; -using System.Text; -using System.Threading.Tasks; - -namespace DisplayMagician -{ - - public static class TableLayoutHelper - { - public static void RemoveArbitraryRow(TableLayoutPanel panel, int rowIndex) - { - if (rowIndex >= panel.RowCount) - { - return; - } - - // delete all controls of row that we want to delete - for (int i = 0; i < panel.ColumnCount; i++) - { - var control = panel.GetControlFromPosition(i, rowIndex); - panel.Controls.Remove(control); - } - - // move up row controls that comes after row we want to remove - for (int i = rowIndex + 1; i < panel.RowCount; i++) - { - for (int j = 0; j < panel.ColumnCount; j++) - { - var control = panel.GetControlFromPosition(j, i); - if (control != null) - { - panel.SetRow(control, i - 1); - } - } - } - - var removeStyle = panel.RowCount - 1; - - if (panel.RowStyles.Count > removeStyle) - panel.RowStyles.RemoveAt(removeStyle); - - panel.RowCount--; - } - } -} diff --git a/DisplayMagician/UIForms/ShortcutForm.Designer.cs b/DisplayMagician/UIForms/ShortcutForm.Designer.cs index 72a98d4..36e791e 100644 --- a/DisplayMagician/UIForms/ShortcutForm.Designer.cs +++ b/DisplayMagician/UIForms/ShortcutForm.Designer.cs @@ -68,6 +68,7 @@ namespace DisplayMagician.UIForms this.rb_change_audio = new System.Windows.Forms.RadioButton(); this.rb_no_change_audio = new System.Windows.Forms.RadioButton(); this.tabp_before = new System.Windows.Forms.TabPage(); + this.flp_start_programs = new System.Windows.Forms.FlowLayoutPanel(); this.tabp_game = new System.Windows.Forms.TabPage(); this.lbl_no_game_libraries = new System.Windows.Forms.Label(); this.p_standalone = new System.Windows.Forms.Panel(); @@ -118,7 +119,6 @@ namespace DisplayMagician.UIForms this.cb_autosuggest = new System.Windows.Forms.CheckBox(); this.btn_hotkey = new System.Windows.Forms.Button(); this.lbl_hotkey_assigned = new System.Windows.Forms.Label(); - this.flp_start_programs = new System.Windows.Forms.FlowLayoutPanel(); this.tabc_shortcut.SuspendLayout(); this.tabp_display.SuspendLayout(); this.tabp_audio.SuspendLayout(); @@ -626,6 +626,19 @@ namespace DisplayMagician.UIForms this.tabp_before.TabIndex = 1; this.tabp_before.Text = "3. Choose what happens before"; // + // flp_start_programs + // + this.flp_start_programs.AllowDrop = true; + this.flp_start_programs.AutoScroll = true; + this.flp_start_programs.AutoScrollMargin = new System.Drawing.Size(5, 0); + this.flp_start_programs.AutoScrollMinSize = new System.Drawing.Size(5, 0); + this.flp_start_programs.BackColor = System.Drawing.Color.White; + this.flp_start_programs.Dock = System.Windows.Forms.DockStyle.Bottom; + this.flp_start_programs.Location = new System.Drawing.Point(3, 107); + this.flp_start_programs.Name = "flp_start_programs"; + this.flp_start_programs.Size = new System.Drawing.Size(1076, 508); + this.flp_start_programs.TabIndex = 0; + // // tabp_game // this.tabp_game.BackColor = System.Drawing.Color.Black; @@ -1248,18 +1261,6 @@ namespace DisplayMagician.UIForms this.lbl_hotkey_assigned.Visible = false; this.lbl_hotkey_assigned.Click += new System.EventHandler(this.lbl_hotkey_assigned_Click); // - // flp_start_programs - // - this.flp_start_programs.AutoScroll = true; - this.flp_start_programs.AutoScrollMargin = new System.Drawing.Size(5, 0); - this.flp_start_programs.AutoScrollMinSize = new System.Drawing.Size(5, 0); - this.flp_start_programs.BackColor = System.Drawing.Color.White; - this.flp_start_programs.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flp_start_programs.Location = new System.Drawing.Point(3, 107); - this.flp_start_programs.Name = "flp_start_programs"; - this.flp_start_programs.Size = new System.Drawing.Size(1076, 508); - this.flp_start_programs.TabIndex = 0; - // // ShortcutForm // this.AcceptButton = this.btn_save; diff --git a/DisplayMagician/UIForms/ShortcutForm.cs b/DisplayMagician/UIForms/ShortcutForm.cs index f7b2602..c8b2b38 100644 --- a/DisplayMagician/UIForms/ShortcutForm.cs +++ b/DisplayMagician/UIForms/ShortcutForm.cs @@ -56,6 +56,12 @@ namespace DisplayMagician.UIForms private Keys _hotkey = Keys.None; private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + private StartProgramControl startProgramControlToMove; + private int indexOfItemUnderMouseToDrag; + private int indexOfItemUnderMouseToDrop; + private Rectangle dragBoxFromMouseDown; + private Point screenOffset; + public ShortcutForm(ShortcutItem shortcutToEdit) { InitializeComponent(); @@ -1185,6 +1191,9 @@ namespace DisplayMagician.UIForms startProgramControl.Dock = DockStyle.None; startProgramControl.Margin = startProgramMargin; startProgramControl.Width = flp_start_programs.Width - 40; + startProgramControl.MouseDown += new MouseEventHandler(StartProgramControl_MouseDown); + startProgramControl.DragOver += new DragEventHandler(StartProgramControl_DragOver); + startProgramControl.AllowDrop = true; //startProgramControl.Height = 170; //startProgramControl.Height = pnl_start_programs.Height; @@ -2123,5 +2132,44 @@ namespace DisplayMagician.UIForms ShortcutRepository.RunShortcut(chosenShortcut); } } + + /*private void flp_start_programs_DragEnter(object sender, DragEventArgs e) + { + e.Effect = DragDropEffects.All; + }*/ + + /* private void flp_start_programs_DragDrop(object sender, DragEventArgs e) + { + StartProgramControl startProgramControlBeingMoved = (StartProgramControl)e.Data.GetData(typeof(StartProgramControl)); + + Point p = flp_start_programs.PointToClient(new Point(e.X, e.Y)); + var startProgramControl = flp_start_programs.GetChildAtPoint(p); + int index = flp_start_programs.Controls.GetChildIndex(startProgramControl, false); + flp_start_programs.Controls.SetChildIndex(startProgramControlBeingMoved, index); + flp_start_programs.Invalidate(); + }*/ + + private void StartProgramControl_MouseDown(object sender, MouseEventArgs e) + { + //base.OnMouseDown(e); + DoDragDrop(sender, DragDropEffects.All); + } + + private void StartProgramControl_DragOver(object sender, DragEventArgs e) + { + //base.OnDragOver(e); + // is another dragable + if (e.Data.GetData(typeof(StartProgramControl)) != null) + { + FlowLayoutPanel p = (FlowLayoutPanel)(sender as StartProgramControl).Parent; + //Current Position + int myIndex = p.Controls.GetChildIndex((sender as StartProgramControl)); + + //Dragged to control to location of next picturebox + StartProgramControl q = (StartProgramControl)e.Data.GetData(typeof(StartProgramControl)); + p.Controls.SetChildIndex(q, myIndex); + } + } + } } \ No newline at end of file diff --git a/DisplayMagician/UIForms/StartProgramControl.Designer.cs b/DisplayMagician/UIForms/StartProgramControl.Designer.cs index 225f9b4..478dce2 100644 --- a/DisplayMagician/UIForms/StartProgramControl.Designer.cs +++ b/DisplayMagician/UIForms/StartProgramControl.Designer.cs @@ -128,13 +128,13 @@ namespace DisplayMagician.UIForms this.btn_delete.UseVisualStyleBackColor = true; this.btn_delete.Click += new System.EventHandler(this.btn_delete_Click); // - // cb_start_program + // cb_disable_start_program // this.cb_disable_start_program.AutoSize = true; this.cb_disable_start_program.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cb_disable_start_program.ForeColor = System.Drawing.Color.White; this.cb_disable_start_program.Location = new System.Drawing.Point(78, 121); - this.cb_disable_start_program.Name = "cb_start_program"; + this.cb_disable_start_program.Name = "cb_disable_start_program"; this.cb_disable_start_program.Size = new System.Drawing.Size(312, 24); this.cb_disable_start_program.TabIndex = 28; this.cb_disable_start_program.Text = "Temporarily disable starting this program"; @@ -154,6 +154,7 @@ namespace DisplayMagician.UIForms // // StartProgramControl // + this.AllowDrop = true; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; this.AutoSize = true; this.BackColor = System.Drawing.Color.Black; diff --git a/README.md b/README.md index 2faab48..efa0741 100644 --- a/README.md +++ b/README.md @@ -120,4 +120,4 @@ with this program; if not, write to the Free Software Foundation, Inc., Thanks for the work and the time that all of our contributors put into making this a better project. Following is a short list, containing the name of some of these people: * Original HelioDisplayManagement project created by the amazing Soroush Falahati -* Readme file created by @timegrinder \ No newline at end of file +* Various icons made by Freepik from www.flaticon.com \ No newline at end of file