steam-deck-tools/FanControl/FanControlForm.cs

173 lines
5.6 KiB
C#
Raw Normal View History

using CommonHelpers;
using CommonHelpers.FromLibreHardwareMonitor;
using FanControl.Properties;
using System;
2022-11-11 19:56:08 +01:00
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
2022-11-11 19:56:08 +01:00
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FanControl
{
public partial class FanControlForm : Form
{
private FanController fanControl = new FanController();
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()
{
InitializeComponent();
Text += " v" + Application.ProductVersion.ToString();
Instance.Open(Text, "Global\\FanControlOnce");
notifyIcon.Text = Text;
notifyIcon.Visible = true;
2022-11-12 22:22:48 +01:00
toolStripMenuItemAlwaysOnTop.Checked = TopMost = Properties.Settings.Default.AlwaysOnTop;
toolStripMenuItemStartupOnBoot.Visible = startupManager.IsAvailable;
toolStripMenuItemStartupOnBoot.Checked = startupManager.Startup;
2022-11-11 19:56:08 +01:00
propertyGrid1.SelectedObject = fanControl;
2022-11-12 10:14:09 +01:00
propertyGrid1.ExpandAllGridItems();
2022-11-11 19:56:08 +01:00
foreach (var item in Enum.GetValues(typeof(FanMode)))
2022-11-11 19:56:08 +01:00
{
fanModeSelectMenu.Items.Add(item);
fanModeSelectNotifyMenu.Items.Add(item);
}
try
{
var fanMode = Enum.Parse(typeof(FanMode), Properties.Settings.Default.FanMode);
setFanMode((FanMode)fanMode);
}
catch(System.ArgumentException)
{
setFanMode(FanMode.Default);
}
2022-11-11 19:56:08 +01:00
notifyIcon.ShowBalloonTip(3000, Text, "Fan Control Started", ToolTipIcon.Info);
2022-11-13 07:51:47 +01:00
Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
Microsoft.Win32.SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged;
}
private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
{
// Restore fan mode on resume
if (e.Mode == Microsoft.Win32.PowerModes.Resume)
{
fanControl.SetMode(fanControl.Mode);
}
}
private void setFanMode(FanMode mode)
{
fanControl.SetMode(mode);
fanModeSelectMenu.SelectedItem = mode;
fanModeSelectNotifyMenu.SelectedItem = mode;
Properties.Settings.Default["FanMode"] = mode.ToString();
Properties.Settings.Default.Save();
2022-11-11 19:56:08 +01:00
}
private void fanModeSelect_SelectedValueChanged(object sender, EventArgs e)
{
var comboBox = (ToolStripComboBox)sender;
var selectedMode = (FanMode)comboBox.SelectedItem;
setFanMode(selectedMode);
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)
{
WindowState = FormWindowState.Normal;
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 });
}
2022-11-12 10:14:09 +01:00
private void fanLoopTimer_Tick(object sender, EventArgs e)
2022-11-11 20:01:44 +01:00
{
SharedData_Update();
2022-11-11 20:01:44 +01:00
fanControl.Update();
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();
2022-11-11 20:01:44 +01:00
notifyIcon.Text = String.Format("Fan: {0} RPM Mode: {1}", fanControl.CurrentRPM, fanControl.Mode);
}
private void toolStripMenuItemStartupOnBoot_Click(object sender, EventArgs e)
{
startupManager.Startup = !startupManager.Startup;
toolStripMenuItemStartupOnBoot.Checked = startupManager.Startup;
}
2022-11-12 13:56:15 +01:00
private void help_DoubleClick(object sender, EventArgs e)
{
2022-11-12 23:35:13 +01:00
System.Diagnostics.Process.Start("explorer.exe", "http://github.com/ayufan-research/steam-deck-tools");
}
2022-11-12 22:22:48 +01:00
private void toolStripMenuItemAlwaysOnTop_Click(object sender, EventArgs e)
{
toolStripMenuItemAlwaysOnTop.Checked = !toolStripMenuItemAlwaysOnTop.Checked;
TopMost = toolStripMenuItemAlwaysOnTop.Checked;
Properties.Settings.Default.AlwaysOnTop = toolStripMenuItemAlwaysOnTop.Checked;
Properties.Settings.Default.Save();
}
2022-11-11 19:56:08 +01:00
}
}