steam-deck-tools/FanControl/FanControlForm.cs

203 lines
6.6 KiB
C#
Raw Normal View History

using CommonHelpers;
using ExternalHelpers;
2022-11-11 19:56:08 +01:00
namespace FanControl
{
public partial class FanControlForm : Form
{
private FanController fanControl;
private StartupManager startupManager = new StartupManager(
"Steam Deck Fan Control",
"Starts Steam Deck Fan Control on Windows startup."
);
2022-11-11 19:56:08 +01:00
private SharedData<FanModeSetting> sharedData = SharedData<FanModeSetting>.CreateNew();
2022-11-11 19:56:08 +01:00
public FanControlForm()
{
Instance.OnUninstall(() =>
{
startupManager.Startup = false;
});
2022-11-11 19:56:08 +01:00
InitializeComponent();
Text += " v" + Application.ProductVersion.ToString();
Instance.Open(Text, true, "Global\\FanControlOnce");
Instance.RunUpdater(Text);
if (Instance.WantsRunOnStartup)
startupManager.Startup = true;
fanControl = new FanController();
SharedData_Update();
notifyIcon.Text = Text;
notifyIcon.Visible = true;
2022-12-08 10:30:46 +01:00
TopMost = Settings.Default.AlwaysOnTop;
2022-11-16 22:32:10 +01:00
toolStripMenuItemAlwaysOnTop.Checked = TopMost;
toolStripMenuItemAlwaysOnTopContext.Checked = TopMost;
toolStripMenuItemStartupOnBoot.Visible = startupManager.IsAvailable;
toolStripMenuItemStartupOnBoot.Checked = startupManager.Startup;
2022-11-16 22:32:10 +01:00
toolStripMenuItemStartupOnBootContext.Visible = startupManager.IsAvailable;
toolStripMenuItemStartupOnBootContext.Checked = startupManager.Startup;
2022-11-11 19:56:08 +01:00
foreach (var item in Enum.GetValues(typeof(FanMode)))
2022-11-11 19:56:08 +01:00
{
2022-11-16 22:32:10 +01:00
var menuItem = new ToolStripMenuItem(item.ToString()) { Tag = item };
menuItem.Click += FanMode_Click;
int insertIndex = contextMenu.Items.IndexOf(toolStripSeparatorEndOfModes);
contextMenu.Items.Insert(insertIndex, menuItem);
2022-11-11 19:56:08 +01:00
fanModeSelectMenu.Items.Add(item);
}
2022-12-08 10:30:46 +01:00
setFanMode(Settings.Default.FanMode);
2022-11-11 19:56:08 +01:00
2022-11-16 22:32:10 +01:00
propertyGrid1.SelectedObject = fanControl;
propertyGrid1.ExpandAllGridItems();
notifyIcon.ShowBalloonTip(3000, Text, "Fan Control Started", ToolTipIcon.Info);
2022-11-13 07:51:47 +01:00
Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
2022-11-26 10:13:16 +01:00
Opacity = 0;
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
Visible = false;
Opacity = 100;
2022-11-13 07:51:47 +01:00
}
private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
{
// Restore fan mode on resume
if (e.Mode == Microsoft.Win32.PowerModes.Resume)
{
Instance.HardwareComputer.Reset();
2022-11-13 07:51:47 +01:00
fanControl.SetMode(fanControl.Mode);
}
}
private void setFanMode(FanMode mode)
{
fanControl.SetMode(mode);
2022-12-08 10:30:46 +01:00
Settings.Default.FanMode = mode;
2022-11-16 22:32:10 +01:00
foreach (ToolStripItem menuItem in contextMenu.Items)
{
if (menuItem is ToolStripMenuItem && menuItem.Tag is FanMode)
((ToolStripMenuItem)menuItem).Checked = ((FanMode)menuItem.Tag == mode);
}
fanModeSelectMenu.SelectedItem = mode;
}
private void FanMode_Click(object? sender, EventArgs e)
{
var menuItem = (ToolStripMenuItem)sender;
setFanMode((FanMode)menuItem.Tag);
2022-11-11 19:56:08 +01:00
}
2022-11-16 22:32:10 +01:00
private void fanModeSelectMenu_SelectedIndexChanged(object sender, EventArgs e)
2022-11-11 19:56:08 +01:00
{
2022-11-16 22:32:10 +01:00
var menuItem = (ToolStripComboBox)sender;
setFanMode((FanMode)menuItem.SelectedItem);
2022-11-11 19:56:08 +01:00
}
private void FanControlForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing && Visible)
{
e.Cancel = true;
2022-11-12 13:56:15 +01:00
Hide();
2022-11-11 19:56:08 +01:00
}
}
private void formShow_Event(object sender, EventArgs e)
{
2022-11-12 13:56:15 +01:00
Show();
Activate();
2022-11-12 10:14:09 +01:00
propertyGrid1.Refresh();
2022-11-11 19:56:08 +01:00
}
private void formClose_Event(object sender, EventArgs e)
{
Hide();
Close();
}
private void FanControlForm_FormClosed(object sender, FormClosedEventArgs e)
{
// Always revert to default on closing
fanControl.SetMode(FanMode.Default);
2022-11-11 19:56:08 +01:00
}
2022-11-11 20:01:44 +01:00
private void SharedData_Update()
{
if (sharedData.GetValue(out var value) && Enum.IsDefined<FanMode>(value.Desired))
{
setFanMode((FanMode)value.Desired);
}
sharedData.SetValue(new FanModeSetting()
{
Current = fanControl.Mode,
KernelDriversLoaded = Instance.UseKernelDrivers ? KernelDriversLoaded.Yes : KernelDriversLoaded.No
});
}
2022-11-12 10:14:09 +01:00
private void fanLoopTimer_Tick(object sender, EventArgs e)
2022-11-11 20:01:44 +01:00
{
if (fanControl is null)
return;
SharedData_Update();
fanControl.Update(Visible);
2022-11-12 10:14:09 +01:00
}
2022-11-11 20:01:44 +01:00
2022-11-12 10:14:09 +01:00
private void propertyGridUpdateTimer_Tick(object sender, EventArgs e)
{
if (!Visible)
return;
2022-11-11 20:01:44 +01:00
2022-11-12 10:14:09 +01:00
propertyGrid1.Refresh();
sensorWarningLabel.Visible = fanControl.IsAnyInvalid();
if (fanControl.IsActive)
notifyIcon.Text = String.Format("Fan: {0} RPM Mode: {1}", fanControl.CurrentRPM, fanControl.Mode);
else
notifyIcon.Text = String.Format("Mode: {0}", fanControl.Mode);
2022-11-11 20:01:44 +01:00
}
private void toolStripMenuItemStartupOnBoot_Click(object sender, EventArgs e)
{
startupManager.Startup = !startupManager.Startup;
toolStripMenuItemStartupOnBoot.Checked = startupManager.Startup;
2022-11-16 22:32:10 +01:00
toolStripMenuItemStartupOnBootContext.Checked = startupManager.Startup;
}
2022-11-12 13:56:15 +01:00
private void help_DoubleClick(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("explorer.exe", "https://steam-deck-tools.ayufan.dev");
}
2022-11-12 22:22:48 +01:00
private void toolStripMenuItemAlwaysOnTop_Click(object sender, EventArgs e)
{
2022-11-16 22:32:10 +01:00
TopMost = !TopMost;
toolStripMenuItemAlwaysOnTop.Checked = TopMost;
toolStripMenuItemAlwaysOnTopContext.Checked = TopMost;
2022-12-08 10:30:46 +01:00
Settings.Default.AlwaysOnTop = toolStripMenuItemAlwaysOnTop.Checked;
2022-11-12 22:22:48 +01:00
}
private void checkForUpdates_Click(object sender, EventArgs e)
{
Instance.RunUpdater(Text, true);
}
2022-11-11 19:56:08 +01:00
}
}