using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace DD2Switcher { public partial class SettingsForm : Form { private FlowLayoutPanel windowsPanel; public SettingsForm() { InitializeComponent(); LoadIcon(); RefreshWindowsList(); } private void InitializeComponent() { this.windowsPanel = new System.Windows.Forms.FlowLayoutPanel(); this.SuspendLayout(); // // windowsPanel // this.windowsPanel.AutoScroll = true; this.windowsPanel.BackColor = System.Drawing.Color.White; this.windowsPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.windowsPanel.Location = new System.Drawing.Point(12, 12); this.windowsPanel.Name = "windowsPanel"; this.windowsPanel.Padding = new System.Windows.Forms.Padding(10); this.windowsPanel.Size = new System.Drawing.Size(576, 396); this.windowsPanel.TabIndex = 1; // // SettingsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(600, 420); this.Controls.Add(this.windowsPanel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SettingsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "DD2Switcher Settings"; this.ResumeLayout(false); } private void closeButton_Click(object sender, EventArgs e) { this.Close(); } private void refreshButton_Click(object sender, EventArgs e) { RefreshWindowsList(); } private void RefreshWindowsList() { windowsPanel.Controls.Clear(); // Get tracked windows from Program var trackedWindows = GetTrackedWindows(); if (trackedWindows.Count == 0) { var noWindowsLabel = new Label(); noWindowsLabel.Text = "No windows currently tracked"; noWindowsLabel.AutoSize = true; noWindowsLabel.ForeColor = Color.Gray; noWindowsLabel.Font = new Font("Segoe UI", 10F); windowsPanel.Controls.Add(noWindowsLabel); return; } for (int i = 0; i < trackedWindows.Count; i++) { var window = trackedWindows[i]; if (window == null) continue; var windowPanelForm = new WindowPanelForm(); windowPanelForm.WindowIndex = i; windowPanelForm.WindowProcess = window; windowPanelForm.IsFirst = (i == Program.FirstIndex); windowPanelForm.IsLast = (i == Program.LastIndex); windowPanelForm.UpdateDisplay(); windowPanelForm.PickClicked += (sender, index) => { if (Program.FirstIndex == -1) { // First pick - set both first and last Program.FirstIndex = index; Program.LastIndex = index; } else if (Program.LastIndex == -1) { // Second pick - set last (must be >= first) if (index >= Program.FirstIndex) { Program.LastIndex = index; } else { Program.LastIndex = Program.FirstIndex; Program.FirstIndex = index; } } else { // Subsequent picks - determine which becomes first int distanceToFirst = Math.Abs(index - Program.FirstIndex); int distanceToLast = Math.Abs(index - Program.LastIndex); if (distanceToFirst <= distanceToLast) { // New index is closer to first, so first moves if (index <= Program.LastIndex) { Program.FirstIndex = index; } else { Program.LastIndex = Program.FirstIndex; Program.FirstIndex = index; } } else { // New index is closer to last, so last moves if (index >= Program.FirstIndex) { Program.LastIndex = index; } else { Program.FirstIndex = Program.LastIndex; Program.LastIndex = index; } } } // Ensure last >= first if (Program.LastIndex < Program.FirstIndex) { int tmp = Program.LastIndex; Program.LastIndex = Program.FirstIndex; Program.FirstIndex = tmp; } RefreshWindowsList(); }; windowPanelForm.UntrackClicked += (sender, index) => { UntrackWindow(index); RefreshWindowsList(); }; windowsPanel.Controls.Add(windowPanelForm); } } private string GetFirstLastText(int index) { if (index == Program.FirstIndex && index == Program.LastIndex) { return "First & Last"; } else if (index == Program.FirstIndex) { return "First"; } else if (index == Program.LastIndex) { return "Last"; } return ""; } private List GetTrackedWindows() { var windows = Program.GetTrackedWindows(); return windows.ToList(); } private void UntrackWindow(int index) { Program.UntrackWindow(index); } private void LoadIcon() { try { this.Icon = new Icon(System.IO.Path.Combine( System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "app.ico")); } catch { // Use default icon if custom icon not found } } } }