From ef580c927be762a625361c1fadcfa82d65bad0c9 Mon Sep 17 00:00:00 2001 From: ArsonArrow Date: Sat, 30 Nov 2024 17:19:43 -0500 Subject: [PATCH] Dark/Light Theme Feature - new menu tab "Settings" Issue: - Highlight color of current step value makes reading in dark theme difficult without highlighting text with mouse. --- SIC Simulator/Form1.cs | 51 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/SIC Simulator/Form1.cs b/SIC Simulator/Form1.cs index b83daab..bca3306 100644 --- a/SIC Simulator/Form1.cs +++ b/SIC Simulator/Form1.cs @@ -59,6 +59,14 @@ public Form1() { this.txtSICInput.ContextMenuStrip = cms; //System.Threading.Thread St = new System.Threading.Thread( this.RefreshCPUDisplays); + //Settings tab with switch between dark and light theme + var toggleThemeMenuItem = new ToolStripMenuItem("Toggle Theme"); + toggleThemeMenuItem.Click += (sender, e) => ToggleTheme(); + + var settingsMenu = new ToolStripMenuItem("Settings"); + settingsMenu.DropDownItems.Add(toggleThemeMenuItem); + + this.MainMenuStrip.Items.Add(settingsMenu); } private void tsmAbout_About_DropDownItemClicked(object sender, EventArgs e) { @@ -1181,7 +1189,7 @@ await Task.Run(() => { if (highlighStart1 != -1) { this.txtSICInput.SelectionStart = highlighStart1; this.txtSICInput.SelectionLength = highlightLength1; - this.txtSICInput.SelectionBackColor = Color.Yellow; + this.txtSICInput.SelectionBackColor = Color.Green; } if (highlighStart2 != -1) { @@ -1338,5 +1346,46 @@ private void saveNewSICSourceFileToolStripMenuItem_Click(object sender, EventArg } } + + private Color lightBackColor = Color.White; + private Color lightForeColor = Color.Black; + private Color darkBackColor = Color.Black; + private Color darkForeColor = Color.White; + private bool isDarkMode = false; + + private void ToggleTheme() + { + isDarkMode = !isDarkMode; + + Color backColor = isDarkMode ? darkBackColor : lightBackColor; + Color foreColor = isDarkMode ? darkForeColor : lightForeColor; + + this.BackColor = backColor; + this.ForeColor = foreColor; + + foreach (Control control in this.Controls) + { + ApplyThemeToControl(control, backColor, foreColor); + } + } + + private void ApplyThemeToControl(Control control, Color backColor, Color foreColor) + { + control.BackColor = backColor; + control.ForeColor = foreColor; + + if (control is ToolStrip toolStrip) + { + toolStrip.BackColor = backColor; + toolStrip.ForeColor = foreColor; + } + + foreach (Control child in control.Controls) + { + ApplyThemeToControl(child, backColor, foreColor); + } + } + + } }