Files
multiboxer/DD2Switcher/SettingsForm.cs

152 lines
5.6 KiB
C#

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;
private int firstIndex = -1;
private int lastIndex = -1;
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 == firstIndex);
windowPanelForm.IsLast = (i == lastIndex);
windowPanelForm.UpdateDisplay();
windowPanelForm.PickClicked += (sender, index) => {
if (firstIndex == -1) {
// First pick - set both first and last
firstIndex = index;
lastIndex = index;
} else if (lastIndex == -1) {
// Second pick - set last
lastIndex = index;
} else {
// Subsequent picks - determine which becomes first
if (index < firstIndex) {
// New index is lower, so it becomes first
lastIndex = firstIndex;
firstIndex = index;
} else {
// New index is higher, so it becomes last
lastIndex = index;
}
}
RefreshWindowsList();
};
windowPanelForm.UntrackClicked += (sender, index) => {
UntrackWindow(index);
if (index == firstIndex) {
firstIndex = -1;
}
if (index == lastIndex) {
lastIndex = -1;
}
RefreshWindowsList();
};
windowsPanel.Controls.Add(windowPanelForm);
}
}
private string GetFirstLastText(int index) {
if (index == firstIndex && index == lastIndex) {
return "First & Last";
} else if (index == firstIndex) {
return "First";
} else if (index == lastIndex) {
return "Last";
}
return "";
}
private List<Process> 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
}
}
}
}