public SensorNode(ISensor sensor, PersistentSettings settings, UnitManager unitManager) : base() { this.sensor = sensor; this.settings = settings; this.unitManager = unitManager; switch (sensor.SensorType) { case SensorType.Voltage: format = "{0:F3} V"; break; case SensorType.Clock: format = "{0:F0} MHz"; break; case SensorType.Load: format = "{0:F1} %"; break; case SensorType.Temperature: format = "{0:F1} °C"; break; case SensorType.Fan: format = "{0:F0} RPM"; break; case SensorType.Flow: format = "{0:F0} L/h"; break; case SensorType.Control: format = "{0:F1} %"; break; case SensorType.Level: format = "{0:F1} %"; break; case SensorType.Power: format = "{0:F1} W"; break; case SensorType.Data: format = "{0:F1} GB"; break; case SensorType.Factor: format = "{0:F3}"; break; case SensorType.DataRate: format = "{0:bf}/s"; break; } bool hidden = settings.GetValue(new Identifier(sensor.Identifier, "hidden").ToString(), sensor.IsDefaultHidden); base.IsVisible = !hidden; this.Plot = settings.GetValue(new Identifier(sensor.Identifier, "plot").ToString(), false); }
public ComputerHardware() { settings = new OpenHardwareMonitor.PersistentSettings(); unitManager = new OpenHardwareMonitor.GUI.UnitManager(settings); treeModel = new OpenHardwareMonitor.GUI.TreeModel(); root = new OpenHardwareMonitor.GUI.Node(System.Environment.MachineName); root.Image = OpenHardwareMonitor.Utilities.EmbeddedResources.GetImage("computer.png"); treeModel.Nodes.Add(root); treeModel.ForceVisible = true; }
public HardwareNode(IHardware hardware, PersistentSettings settings, UnitManager unitManager) : base() { this.settings = settings; this.unitManager = unitManager; this.hardware = hardware; this.Image = HardwareTypeImage.Instance.GetImage(hardware.HardwareType); foreach (SensorType sensorType in Enum.GetValues(typeof(SensorType))) typeNodes.Add(new TypeNode(sensorType)); foreach (ISensor sensor in hardware.Sensors) SensorAdded(sensor); hardware.SensorAdded +=new SensorEventHandler(SensorAdded); hardware.SensorRemoved += new SensorEventHandler(SensorRemoved); }
public PlotPanel(PersistentSettings settings, UnitManager unitManager) { this.settings = settings; this.unitManager = unitManager; this.model = CreatePlotModel(); this.plot = new Plot(); this.plot.Dock = DockStyle.Fill; this.plot.Model = model; this.plot.BackColor = Color.White; this.plot.ContextMenu = CreateMenu(); UpdateAxesPosition(); this.SuspendLayout(); this.Controls.Add(plot); this.ResumeLayout(true); }
public MainForm() { InitializeComponent(); // check if the OpenHardwareMonitorLib assembly has the correct version if (Assembly.GetAssembly(typeof(Computer)).GetName().Version != Assembly.GetExecutingAssembly().GetName().Version) { MessageBox.Show( "The version of the file OpenHardwareMonitorLib.dll is incompatible.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); } this.settings = new PersistentSettings(); this.settings.Load(Path.ChangeExtension( Application.ExecutablePath, ".config")); this.unitManager = new UnitManager(settings); // make sure the buffers used for double buffering are not disposed // after each draw call BufferedGraphicsManager.Current.MaximumBuffer = Screen.PrimaryScreen.Bounds.Size; // set the DockStyle here, to avoid conflicts with the MainMenu this.splitContainer.Dock = DockStyle.Fill; this.Font = SystemFonts.MessageBoxFont; treeView.Font = SystemFonts.MessageBoxFont; plotPanel = new PlotPanel(settings, unitManager); plotPanel.Font = SystemFonts.MessageBoxFont; plotPanel.Dock = DockStyle.Fill; nodeCheckBox.IsVisibleValueNeeded += nodeCheckBox_IsVisibleValueNeeded; nodeTextBoxText.DrawText += nodeTextBoxText_DrawText; nodeTextBoxValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMin.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMax.DrawText += nodeTextBoxText_DrawText; nodeTextBoxText.EditorShowing += nodeTextBoxText_EditorShowing; foreach (TreeColumn column in treeView.Columns) column.Width = Math.Max(20, Math.Min(400, settings.GetValue("treeView.Columns." + column.Header + ".Width", column.Width))); treeModel = new TreeModel(); root = new Node(System.Environment.MachineName); root.Image = Utilities.EmbeddedResources.GetImage("computer.png"); treeModel.Nodes.Add(root); treeView.Model = treeModel; this.computer = new Computer(settings); systemTray = new SystemTray(computer, settings, unitManager); systemTray.HideShowCommand += hideShowClick; systemTray.ExitCommand += exitClick; int p = (int)Environment.OSVersion.Platform; if ((p == 4) || (p == 128)) { // Unix treeView.RowHeight = Math.Max(treeView.RowHeight, 18); splitContainer.BorderStyle = BorderStyle.None; splitContainer.Border3DStyle = Border3DStyle.Adjust; splitContainer.SplitterWidth = 4; treeView.BorderStyle = BorderStyle.Fixed3D; plotPanel.BorderStyle = BorderStyle.Fixed3D; gadgetMenuItem.Visible = false; minCloseMenuItem.Visible = false; minTrayMenuItem.Visible = false; startMinMenuItem.Visible = false; } else { // Windows treeView.RowHeight = Math.Max(treeView.Font.Height + 1, 18); gadget = new SensorGadget(computer, settings, unitManager); gadget.HideShowCommand += hideShowClick; wmiProvider = new WmiProvider(computer); } logger = new Logger(computer); plotColorPalette = new Color[13]; plotColorPalette[0] = Color.Blue; plotColorPalette[1] = Color.OrangeRed; plotColorPalette[2] = Color.Green; plotColorPalette[3] = Color.LightSeaGreen; plotColorPalette[4] = Color.Goldenrod; plotColorPalette[5] = Color.DarkViolet; plotColorPalette[6] = Color.YellowGreen; plotColorPalette[7] = Color.SaddleBrown; plotColorPalette[8] = Color.RoyalBlue; plotColorPalette[9] = Color.DeepPink; plotColorPalette[10] = Color.MediumSeaGreen; plotColorPalette[11] = Color.Olive; plotColorPalette[12] = Color.Firebrick; computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); computer.Open(); timer.Enabled = true; showHiddenSensors = new UserOption("hiddenMenuItem", false, hiddenMenuItem, settings); showHiddenSensors.Changed += delegate(object sender, EventArgs e) { treeModel.ForceVisible = showHiddenSensors.Value; }; showValue = new UserOption("valueMenuItem", true, valueMenuItem, settings); showValue.Changed += delegate(object sender, EventArgs e) { treeView.Columns[1].IsVisible = showValue.Value; }; showMin = new UserOption("minMenuItem", false, minMenuItem, settings); showMin.Changed += delegate(object sender, EventArgs e) { treeView.Columns[2].IsVisible = showMin.Value; }; showMax = new UserOption("maxMenuItem", true, maxMenuItem, settings); showMax.Changed += delegate(object sender, EventArgs e) { treeView.Columns[3].IsVisible = showMax.Value; }; startMinimized = new UserOption("startMinMenuItem", false, startMinMenuItem, settings); minimizeToTray = new UserOption("minTrayMenuItem", true, minTrayMenuItem, settings); minimizeToTray.Changed += delegate(object sender, EventArgs e) { systemTray.IsMainIconEnabled = minimizeToTray.Value; }; minimizeOnClose = new UserOption("minCloseMenuItem", false, minCloseMenuItem, settings); autoStart = new UserOption(null, startupManager.Startup, startupMenuItem, settings); autoStart.Changed += delegate(object sender, EventArgs e) { try { startupManager.Startup = autoStart.Value; } catch (InvalidOperationException) { MessageBox.Show("Updating the auto-startup option failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); autoStart.Value = startupManager.Startup; } }; readMainboardSensors = new UserOption("mainboardMenuItem", true, mainboardMenuItem, settings); readMainboardSensors.Changed += delegate(object sender, EventArgs e) { computer.MainboardEnabled = readMainboardSensors.Value; }; readCpuSensors = new UserOption("cpuMenuItem", true, cpuMenuItem, settings); readCpuSensors.Changed += delegate(object sender, EventArgs e) { computer.CPUEnabled = readCpuSensors.Value; }; readRamSensors = new UserOption("ramMenuItem", true, ramMenuItem, settings); readRamSensors.Changed += delegate(object sender, EventArgs e) { computer.RAMEnabled = readRamSensors.Value; }; readGpuSensors = new UserOption("gpuMenuItem", true, gpuMenuItem, settings); readGpuSensors.Changed += delegate(object sender, EventArgs e) { computer.GPUEnabled = readGpuSensors.Value; }; readFanControllersSensors = new UserOption("fanControllerMenuItem", true, fanControllerMenuItem, settings); readFanControllersSensors.Changed += delegate(object sender, EventArgs e) { computer.FanControllerEnabled = readFanControllersSensors.Value; }; readHddSensors = new UserOption("hddMenuItem", true, hddMenuItem, settings); readHddSensors.Changed += delegate(object sender, EventArgs e) { computer.HDDEnabled = readHddSensors.Value; }; showGadget = new UserOption("gadgetMenuItem", false, gadgetMenuItem, settings); showGadget.Changed += delegate(object sender, EventArgs e) { if (gadget != null) gadget.Visible = showGadget.Value; }; celsiusMenuItem.Checked = unitManager.TemperatureUnit == TemperatureUnit.Celsius; fahrenheitMenuItem.Checked = !celsiusMenuItem.Checked; server = new HttpServer(root, this.settings.GetValue("listenerPort", 8085)); if (server.PlatformNotSupported) { webMenuItemSeparator.Visible = false; webMenuItem.Visible = false; } runWebServer = new UserOption("runWebServerMenuItem", false, runWebServerMenuItem, settings); runWebServer.Changed += delegate(object sender, EventArgs e) { if (runWebServer.Value) server.StartHTTPListener(); else server.StopHTTPListener(); }; logSensors = new UserOption("logSensorsMenuItem", false, logSensorsMenuItem, settings); loggingInterval = new UserRadioGroup("loggingInterval", 0, new[] { log1sMenuItem, log2sMenuItem, log5sMenuItem, log10sMenuItem, log30sMenuItem, log1minMenuItem, log2minMenuItem, log5minMenuItem, log10minMenuItem, log30minMenuItem, log1hMenuItem, log2hMenuItem, log6hMenuItem}, settings); loggingInterval.Changed += (sender, e) => { switch (loggingInterval.Value) { case 0: logger.LoggingInterval = new TimeSpan(0, 0, 1); break; case 1: logger.LoggingInterval = new TimeSpan(0, 0, 2); break; case 2: logger.LoggingInterval = new TimeSpan(0, 0, 5); break; case 3: logger.LoggingInterval = new TimeSpan(0, 0, 10); break; case 4: logger.LoggingInterval = new TimeSpan(0, 0, 30); break; case 5: logger.LoggingInterval = new TimeSpan(0, 1, 0); break; case 6: logger.LoggingInterval = new TimeSpan(0, 2, 0); break; case 7: logger.LoggingInterval = new TimeSpan(0, 5, 0); break; case 8: logger.LoggingInterval = new TimeSpan(0, 10, 0); break; case 9: logger.LoggingInterval = new TimeSpan(0, 30, 0); break; case 10: logger.LoggingInterval = new TimeSpan(1, 0, 0); break; case 11: logger.LoggingInterval = new TimeSpan(2, 0, 0); break; case 12: logger.LoggingInterval = new TimeSpan(6, 0, 0); break; } }; InitializePlotForm(); startupMenuItem.Visible = startupManager.IsAvailable; if (startMinMenuItem.Checked) { if (!minTrayMenuItem.Checked) { WindowState = FormWindowState.Minimized; Show(); } } else { Show(); } // Create a handle, otherwise calling Close() does not fire FormClosed IntPtr handle = Handle; // Make sure the settings are saved when the user logs off Microsoft.Win32.SystemEvents.SessionEnded += delegate { computer.Close(); SaveConfiguration(); if (runWebServer.Value) server.Quit(); }; }
public SensorNotifyIcon(SystemTray sensorSystemTray, ISensor sensor, bool balloonTip, PersistentSettings settings, UnitManager unitManager) { this.unitManager = unitManager; this.sensor = sensor; this.notifyIcon = new NotifyIconAdv(); Color defaultColor = Color.Black; if (sensor.SensorType == SensorType.Load || sensor.SensorType == SensorType.Control || sensor.SensorType == SensorType.Level) { defaultColor = Color.FromArgb(0xff, 0x70, 0x8c, 0xf1); } Color = settings.GetValue(new Identifier(sensor.Identifier, "traycolor").ToString(), defaultColor); this.pen = new Pen(Color.FromArgb(96, Color.Black)); ContextMenu contextMenu = new ContextMenu(); MenuItem hideShowItem = new MenuItem("Hide/Show"); hideShowItem.Click += delegate(object obj, EventArgs args) { sensorSystemTray.SendHideShowCommand(); }; contextMenu.MenuItems.Add(hideShowItem); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem removeItem = new MenuItem("Remove Sensor"); removeItem.Click += delegate(object obj, EventArgs args) { sensorSystemTray.Remove(this.sensor); }; contextMenu.MenuItems.Add(removeItem); MenuItem colorItem = new MenuItem("Change Color..."); colorItem.Click += delegate(object obj, EventArgs args) { ColorDialog dialog = new ColorDialog(); dialog.Color = Color; if (dialog.ShowDialog() == DialogResult.OK) { Color = dialog.Color; settings.SetValue(new Identifier(sensor.Identifier, "traycolor").ToString(), Color); } }; contextMenu.MenuItems.Add(colorItem); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem exitItem = new MenuItem("Exit"); exitItem.Click += delegate(object obj, EventArgs args) { sensorSystemTray.SendExitCommand(); }; contextMenu.MenuItems.Add(exitItem); this.notifyIcon.ContextMenu = contextMenu; this.notifyIcon.DoubleClick += delegate(object obj, EventArgs args) { sensorSystemTray.SendHideShowCommand(); }; // get the default dpi to create an icon with the correct size float dpiX, dpiY; using (Bitmap b = new Bitmap(1, 1, PixelFormat.Format32bppArgb)) { dpiX = b.HorizontalResolution; dpiY = b.VerticalResolution; } // adjust the size of the icon to current dpi (default is 16x16 at 96 dpi) int width = (int)Math.Round(16 * dpiX / 96); int height = (int)Math.Round(16 * dpiY / 96); // make sure it does never get smaller than 16x16 width = width < 16 ? 16 : width; height = height < 16 ? 16 : height; // adjust the font size to the icon size FontFamily family = SystemFonts.MessageBoxFont.FontFamily; float baseSize; switch (family.Name) { case "Segoe UI": baseSize = 12; break; case "Tahoma": baseSize = 11; break; default: baseSize = 12; break; } this.font = new Font(family, baseSize * width / 16.0f, GraphicsUnit.Pixel); this.smallFont = new Font(family, 0.75f * baseSize * width / 16.0f, GraphicsUnit.Pixel); this.bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); this.graphics = Graphics.FromImage(this.bitmap); if (Environment.OSVersion.Version.Major > 5) { this.graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; this.graphics.SmoothingMode = SmoothingMode.HighQuality; } }
public MainForm() { InitializeComponent(); this.settings = new PersistentSettings(); this.settings.Load(Path.ChangeExtension( Application.ExecutablePath, ".config")); this.unitManager = new UnitManager(settings); // set the DockStyle here, to avoid conflicts with the MainMenu this.splitContainer.Dock = DockStyle.Fill; this.Font = SystemFonts.MessageBoxFont; treeView.Font = SystemFonts.MessageBoxFont; plotPanel.Font = SystemFonts.MessageBoxFont; nodeCheckBox.IsVisibleValueNeeded += nodeCheckBox_IsVisibleValueNeeded; nodeCheckBox.CheckStateChanged += UpdatePlotSelection; nodeTextBoxText.DrawText += nodeTextBoxText_DrawText; nodeTextBoxValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMin.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMax.DrawText += nodeTextBoxText_DrawText; nodeTextBoxText.EditorShowing += nodeTextBoxText_EditorShowing; foreach (TreeColumn column in treeView.Columns) { column.Width = Math.Max(20, Math.Min(400, settings.GetValue("treeView.Columns." + column.Header + ".Width", column.Width))); } treeModel = new TreeModel(); root = new Node(System.Environment.MachineName); root.Image = Utilities.EmbeddedResources.GetImage("computer.png"); treeModel.Nodes.Add(root); treeView.Model = treeModel; this.computer = new Computer(settings); systemTray = new SystemTray(computer, settings); systemTray.HideShowCommand += hideShowClick; systemTray.ExitCommand += exitClick; int p = (int)Environment.OSVersion.Platform; if ((p == 4) || (p == 128)) // Unix { treeView.RowHeight = Math.Max(treeView.RowHeight, 18); splitContainer.BorderStyle = BorderStyle.None; splitContainer.Border3DStyle = Border3DStyle.Adjust; splitContainer.SplitterWidth = 4; treeView.BorderStyle = BorderStyle.Fixed3D; plotPanel.BorderStyle = BorderStyle.Fixed3D; gadgetMenuItem.Visible = false; minCloseMenuItem.Visible = false; minTrayMenuItem.Visible = false; startMinMenuItem.Visible = false; } else // Windows { treeView.RowHeight = Math.Max(treeView.Font.Height + 1, 18); gadget = new SensorGadget(computer, settings, unitManager); gadget.HideShowCommand += hideShowClick; wmiProvider = new WmiProvider(computer); } computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); computer.Open(); timer.Enabled = true; plotColorPalette = new Color[13]; plotColorPalette[0] = Color.Blue; plotColorPalette[1] = Color.OrangeRed; plotColorPalette[2] = Color.Green; plotColorPalette[3] = Color.LightSeaGreen; plotColorPalette[4] = Color.Goldenrod; plotColorPalette[5] = Color.DarkViolet; plotColorPalette[6] = Color.YellowGreen; plotColorPalette[7] = Color.SaddleBrown; plotColorPalette[8] = Color.RoyalBlue; plotColorPalette[9] = Color.DeepPink; plotColorPalette[10] = Color.MediumSeaGreen; plotColorPalette[11] = Color.Olive; plotColorPalette[12] = Color.Firebrick; showHiddenSensors = new UserOption("hiddenMenuItem", false, hiddenMenuItem, settings); showHiddenSensors.Changed += delegate(object sender, EventArgs e) { treeModel.ForceVisible = showHiddenSensors.Value; }; showPlot = new UserOption("plotMenuItem", false, plotMenuItem, settings); showPlot.Changed += delegate(object sender, EventArgs e) { splitContainer.Panel2Collapsed = !showPlot.Value; treeView.Invalidate(); }; showValue = new UserOption("valueMenuItem", true, valueMenuItem, settings); showValue.Changed += delegate(object sender, EventArgs e) { treeView.Columns[1].IsVisible = showValue.Value; }; showMin = new UserOption("minMenuItem", false, minMenuItem, settings); showMin.Changed += delegate(object sender, EventArgs e) { treeView.Columns[2].IsVisible = showMin.Value; }; showMax = new UserOption("maxMenuItem", true, maxMenuItem, settings); showMax.Changed += delegate(object sender, EventArgs e) { treeView.Columns[3].IsVisible = showMax.Value; }; startMinimized = new UserOption("startMinMenuItem", false, startMinMenuItem, settings); minimizeToTray = new UserOption("minTrayMenuItem", true, minTrayMenuItem, settings); minimizeToTray.Changed += delegate(object sender, EventArgs e) { systemTray.IsMainIconEnabled = minimizeToTray.Value; }; minimizeOnClose = new UserOption("minCloseMenuItem", false, minCloseMenuItem, settings); autoStart = new UserOption(null, startupManager.Startup, startupMenuItem, settings); autoStart.Changed += delegate(object sender, EventArgs e) { try { startupManager.Startup = autoStart.Value; } catch (InvalidOperationException) { MessageBox.Show("Updating the auto-startup option failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); autoStart.Value = startupManager.Startup; } }; readHddSensors = new UserOption("hddMenuItem", true, hddMenuItem, settings); readHddSensors.Changed += delegate(object sender, EventArgs e) { computer.HDDEnabled = readHddSensors.Value; UpdatePlotSelection(null, null); }; showGadget = new UserOption("gadgetMenuItem", false, gadgetMenuItem, settings); showGadget.Changed += delegate(object sender, EventArgs e) { if (gadget != null) { gadget.Visible = showGadget.Value; } }; celciusMenuItem.Checked = unitManager.TemperatureUnit == TemperatureUnit.Celcius; fahrenheitMenuItem.Checked = !celciusMenuItem.Checked; startupMenuItem.Visible = startupManager.IsAvailable; if (startMinMenuItem.Checked) { if (!minTrayMenuItem.Checked) { WindowState = FormWindowState.Minimized; Show(); } } else { Show(); } // Create a handle, otherwise calling Close() does not fire FormClosed IntPtr handle = Handle; // Make sure the settings are saved when the user logs off Microsoft.Win32.SystemEvents.SessionEnded += delegate { SaveConfiguration(); }; }
public MainForm() { InitializeComponent(); // check if the OpenHardwareMonitorLib assembly has the correct version if (Assembly.GetAssembly(typeof(Computer)).GetName().Version != Assembly.GetExecutingAssembly().GetName().Version) { MessageBox.Show( "The version of the file OpenHardwareMonitorLib.dll is incompatible.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); } this.settings = new PersistentSettings(); this.settings.Load(Path.ChangeExtension( Application.ExecutablePath, ".config")); this.unitManager = new UnitManager(settings); // make sure the buffers used for double buffering are not disposed // after each draw call BufferedGraphicsManager.Current.MaximumBuffer = Screen.PrimaryScreen.Bounds.Size; // set the DockStyle here, to avoid conflicts with the MainMenu this.splitContainer.Dock = DockStyle.Fill; this.Font = SystemFonts.MessageBoxFont; treeView.Font = SystemFonts.MessageBoxFont; plotPanel = new PlotPanel(settings, unitManager); plotPanel.Font = SystemFonts.MessageBoxFont; plotPanel.Dock = DockStyle.Fill; nodeCheckBox.IsVisibleValueNeeded += nodeCheckBox_IsVisibleValueNeeded; nodeTextBoxText.DrawText += nodeTextBoxText_DrawText; nodeTextBoxValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMin.DrawText += nodeTextBoxText_DrawText; nodeTextBoxMax.DrawText += nodeTextBoxText_DrawText; nodeTextBoxText.EditorShowing += nodeTextBoxText_EditorShowing; this.sensor.Width = DpiHelper.LogicalToDeviceUnits(250); this.value.Width = DpiHelper.LogicalToDeviceUnits(100); this.min.Width = DpiHelper.LogicalToDeviceUnits(100); this.max.Width = DpiHelper.LogicalToDeviceUnits(100); foreach (TreeColumn column in treeView.Columns) { column.Width = Math.Max(DpiHelper.LogicalToDeviceUnits(20), Math.Min( DpiHelper.LogicalToDeviceUnits(400), settings.GetValue("treeView.Columns." + column.Header + ".Width", column.Width))); } treeModel = new TreeModel(); root = new Node(System.Environment.MachineName); root.Image = Utilities.EmbeddedResources.GetImage("computer.png"); treeModel.Nodes.Add(root); treeView.Model = treeModel; this.computer = new Computer(settings); systemTray = new SystemTray(computer, settings, unitManager); systemTray.HideShowCommand += hideShowClick; systemTray.ExitCommand += exitClick; if (Hardware.OperatingSystem.IsUnix) // Unix { treeView.RowHeight = Math.Max(treeView.RowHeight, DpiHelper.LogicalToDeviceUnits(18)); splitContainer.BorderStyle = BorderStyle.None; splitContainer.Border3DStyle = Border3DStyle.Adjust; splitContainer.SplitterWidth = 4; treeView.BorderStyle = BorderStyle.Fixed3D; plotPanel.BorderStyle = BorderStyle.Fixed3D; gadgetMenuItem.Visible = false; minCloseMenuItem.Visible = false; minTrayMenuItem.Visible = false; startMinMenuItem.Visible = false; } else // Windows { treeView.RowHeight = Math.Max(treeView.Font.Height + DpiHelper.LogicalToDeviceUnits(1), DpiHelper.LogicalToDeviceUnits(18)); gadget = new SensorGadget(computer, settings, unitManager); gadget.HideShowCommand += hideShowClick; } logger = new Logger(computer); plotColorPalette = new Color[13]; plotColorPalette[0] = Color.Blue; plotColorPalette[1] = Color.OrangeRed; plotColorPalette[2] = Color.Green; plotColorPalette[3] = Color.LightSeaGreen; plotColorPalette[4] = Color.Goldenrod; plotColorPalette[5] = Color.DarkViolet; plotColorPalette[6] = Color.YellowGreen; plotColorPalette[7] = Color.SaddleBrown; plotColorPalette[8] = Color.RoyalBlue; plotColorPalette[9] = Color.DeepPink; plotColorPalette[10] = Color.MediumSeaGreen; plotColorPalette[11] = Color.Olive; plotColorPalette[12] = Color.Firebrick; computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); computer.Open(); Microsoft.Win32.SystemEvents.PowerModeChanged += PowerModeChanged; timer.Enabled = true; showHiddenSensors = new UserOption("hiddenMenuItem", false, hiddenMenuItem, settings); showHiddenSensors.Changed += delegate(object sender, EventArgs e) { treeModel.ForceVisible = showHiddenSensors.Value; }; showValue = new UserOption("valueMenuItem", true, valueMenuItem, settings); showValue.Changed += delegate(object sender, EventArgs e) { treeView.Columns[1].IsVisible = showValue.Value; }; showMin = new UserOption("minMenuItem", false, minMenuItem, settings); showMin.Changed += delegate(object sender, EventArgs e) { treeView.Columns[2].IsVisible = showMin.Value; }; showMax = new UserOption("maxMenuItem", true, maxMenuItem, settings); showMax.Changed += delegate(object sender, EventArgs e) { treeView.Columns[3].IsVisible = showMax.Value; }; startMinimized = new UserOption("startMinMenuItem", false, startMinMenuItem, settings); minimizeToTray = new UserOption("minTrayMenuItem", true, minTrayMenuItem, settings); minimizeToTray.Changed += delegate(object sender, EventArgs e) { systemTray.IsMainIconEnabled = minimizeToTray.Value; }; minimizeOnClose = new UserOption("minCloseMenuItem", false, minCloseMenuItem, settings); autoStart = new UserOption(null, startupManager.Startup, startupMenuItem, settings); autoStart.Changed += delegate(object sender, EventArgs e) { try { startupManager.Startup = autoStart.Value; } catch (InvalidOperationException) { MessageBox.Show("Updating the auto-startup option failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); autoStart.Value = startupManager.Startup; } }; readMainboardSensors = new UserOption("mainboardMenuItem", true, mainboardMenuItem, settings); readMainboardSensors.Changed += delegate(object sender, EventArgs e) { computer.MainboardEnabled = readMainboardSensors.Value; }; readCpuSensors = new UserOption("cpuMenuItem", true, cpuMenuItem, settings); readCpuSensors.Changed += delegate(object sender, EventArgs e) { computer.CPUEnabled = readCpuSensors.Value; }; readRamSensors = new UserOption("ramMenuItem", true, ramMenuItem, settings); readRamSensors.Changed += delegate(object sender, EventArgs e) { computer.RAMEnabled = readRamSensors.Value; }; readGpuSensors = new UserOption("gpuMenuItem", true, gpuMenuItem, settings); readGpuSensors.Changed += delegate(object sender, EventArgs e) { computer.GPUEnabled = readGpuSensors.Value; }; readFanControllersSensors = new UserOption("fanControllerMenuItem", true, fanControllerMenuItem, settings); readFanControllersSensors.Changed += delegate(object sender, EventArgs e) { computer.FanControllerEnabled = readFanControllersSensors.Value; }; readHddSensors = new UserOption("hddMenuItem", true, hddMenuItem, settings); readHddSensors.Changed += delegate(object sender, EventArgs e) { computer.HDDEnabled = readHddSensors.Value; }; showGadget = new UserOption("gadgetMenuItem", false, gadgetMenuItem, settings); showGadget.Changed += delegate(object sender, EventArgs e) { if (gadget != null) { gadget.Visible = showGadget.Value; } }; celsiusMenuItem.Checked = unitManager.TemperatureUnit == TemperatureUnit.Celsius; fahrenheitMenuItem.Checked = !celsiusMenuItem.Checked; server = new HttpServer(root, this.settings.GetValue("listenerPort", 8085)); if (server.PlatformNotSupported) { webMenuItemSeparator.Visible = false; webMenuItem.Visible = false; } runWebServer = new UserOption("runWebServerMenuItem", false, runWebServerMenuItem, settings); runWebServer.Changed += delegate(object sender, EventArgs e) { if (runWebServer.Value) { server.StartHTTPListener(); } else { server.StopHTTPListener(); } }; logSensors = new UserOption("logSensorsMenuItem", false, logSensorsMenuItem, settings); loggingInterval = new UserRadioGroup("loggingInterval", 0, new[] { log1sMenuItem, log2sMenuItem, log5sMenuItem, log10sMenuItem, log30sMenuItem, log1minMenuItem, log2minMenuItem, log5minMenuItem, log10minMenuItem, log30minMenuItem, log1hMenuItem, log2hMenuItem, log6hMenuItem }, settings); loggingInterval.Changed += (sender, e) => { switch (loggingInterval.Value) { case 0: logger.LoggingInterval = new TimeSpan(0, 0, 1); break; case 1: logger.LoggingInterval = new TimeSpan(0, 0, 2); break; case 2: logger.LoggingInterval = new TimeSpan(0, 0, 5); break; case 3: logger.LoggingInterval = new TimeSpan(0, 0, 10); break; case 4: logger.LoggingInterval = new TimeSpan(0, 0, 30); break; case 5: logger.LoggingInterval = new TimeSpan(0, 1, 0); break; case 6: logger.LoggingInterval = new TimeSpan(0, 2, 0); break; case 7: logger.LoggingInterval = new TimeSpan(0, 5, 0); break; case 8: logger.LoggingInterval = new TimeSpan(0, 10, 0); break; case 9: logger.LoggingInterval = new TimeSpan(0, 30, 0); break; case 10: logger.LoggingInterval = new TimeSpan(1, 0, 0); break; case 11: logger.LoggingInterval = new TimeSpan(2, 0, 0); break; case 12: logger.LoggingInterval = new TimeSpan(6, 0, 0); break; } }; InitializePlotForm(); startupMenuItem.Visible = startupManager.IsAvailable; if (startMinMenuItem.Checked) { if (!minTrayMenuItem.Checked) { WindowState = FormWindowState.Minimized; Show(); } } else { Show(); } // Create a handle, otherwise calling Close() does not fire FormClosed IntPtr handle = Handle; // Make sure the settings are saved when the user logs off Microsoft.Win32.SystemEvents.SessionEnded += delegate { computer.Close(); SaveConfiguration(); if (runWebServer.Value) { server.Quit(); } }; }
public void Update() { Icon icon = notifyIcon.Icon; switch (sensor.SensorType) { case SensorType.Load: case SensorType.Control: case SensorType.Level: notifyIcon.Icon = CreatePercentageIcon(); break; default: notifyIcon.Icon = CreateTransparentIcon(); break; } if (icon != null) { icon.Dispose(); } string format = ""; switch (sensor.SensorType) { case SensorType.Voltage: format = "\n{0}: {1:F2} V"; break; case SensorType.Clock: format = "\n{0}: {1:F0} MHz"; break; case SensorType.Load: format = "\n{0}: {1:F1} %"; break; case SensorType.Temperature: format = "\n{0}: {1:F1} °C"; break; case SensorType.Fan: format = "\n{0}: {1:F0} RPM"; break; case SensorType.Flow: format = "\n{0}: {1:F0} L/h"; break; case SensorType.Control: format = "\n{0}: {1:F1} %"; break; case SensorType.Level: format = "\n{0}: {1:F1} %"; break; case SensorType.Power: format = "\n{0}: {1:F0} W"; break; case SensorType.Data: format = "\n{0}: {1:F0} GB"; break; case SensorType.Factor: format = "\n{0}: {1:F3} GB"; break; } string formattedValue = string.Format(format, sensor.Name, sensor.Value); if (sensor.SensorType == SensorType.Temperature && unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit) { format = "\n{0}: {1:F1} °F"; formattedValue = string.Format(format, sensor.Name, UnitManager.CelsiusToFahrenheit(sensor.Value)); } string hardwareName = sensor.Hardware.Name; hardwareName = hardwareName.Substring(0, Math.Min(63 - formattedValue.Length, hardwareName.Length)); string text = hardwareName + formattedValue; if (text.Length > 63) { text = null; } notifyIcon.Text = text; notifyIcon.Visible = true; }
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; int w = Size.Width; g.Clear(Color.Transparent); DrawBackground(g); int x; int y = topMargin; if (sensors.Count == 0) { x = leftBorder + 1; g.DrawString("Right-click on a sensor in the main window and select " + "\"Show in Gadget\" to show the sensor here.", smallFont, Brushes.White, new Rectangle(x, y - 1, w - rightBorder - x, 0)); } foreach (KeyValuePair <IHardware, IList <ISensor> > pair in sensors) { if (hardwareNames.Value) { if (y > topMargin) { y += hardwareLineHeight - sensorLineHeight; } x = leftBorder + 1; g.DrawImage(HardwareTypeImage.Instance.GetImage(pair.Key.HardwareType), new Rectangle(x, y + 1, iconSize, iconSize)); x += iconSize + 1; g.DrawString(pair.Key.Name, largeFont, Brushes.White, new Rectangle(x, y - 1, w - rightBorder - x, 0), stringFormat); y += hardwareLineHeight; } foreach (ISensor sensor in pair.Value) { int remainingWidth; if ((sensor.SensorType != SensorType.Load && sensor.SensorType != SensorType.Control && sensor.SensorType != SensorType.Level) || !sensor.Value.HasValue) { string formatted; if (sensor.Value.HasValue) { string format = ""; switch (sensor.SensorType) { case SensorType.Voltage: format = "{0:F3} V"; break; case SensorType.Clock: format = "{0:F0} MHz"; break; case SensorType.Fan: format = "{0:F0} RPM"; break; case SensorType.Flow: format = "{0:F0} L/h"; break; case SensorType.Power: format = "{0:F1} W"; break; case SensorType.Data: format = "{0:F1} GB"; break; case SensorType.Factor: format = "{0:F3}"; break; case SensorType.SmallData: format = "{0:F1} MB"; break; case SensorType.RawValue: format = "{0:F0}"; break; } switch (sensor.SensorType) { case SensorType.Temperature: if (unitManager.TemperatureUnit == TemperatureUnit.Fahrenheit) { formatted = string.Format("{0:F1} °F", UnitManager.CelsiusToFahrenheit(sensor.Value)); } else { formatted = string.Format("{0:F1} °C", sensor.Value); } break; case SensorType.Throughput: if (sensor.Value < 1) { formatted = string.Format("{0:F1} KB/s", sensor.Value * 0x400); } else { formatted = string.Format("{0:F1} MB/s", sensor.Value); } break; case SensorType.TimeSpan: TimeSpan s = TimeSpan.FromSeconds(sensor.Value.Value); formatted = s.ToString("g"); break; default: formatted = string.Format(format, sensor.Value); break; } } else { formatted = "-"; } g.DrawString(formatted, smallFont, darkWhite, new RectangleF(-1, y - 1, w - rightMargin + 3, 0), alignRightStringFormat); remainingWidth = w - (int)Math.Floor(g.MeasureString(formatted, smallFont, w, StringFormat.GenericTypographic).Width) - rightMargin; } else { DrawProgress(g, w - progressWidth - rightMargin, y + 0.35f * sensorLineHeight, progressWidth, 0.6f * sensorLineHeight, 0.01f * (float)sensor.Value.Value); remainingWidth = w - progressWidth - rightMargin; } remainingWidth -= leftMargin + 2; if (remainingWidth > 0) { g.DrawString(sensor.Name, smallFont, darkWhite, new RectangleF(leftMargin - 1, y - 1, remainingWidth, 0), trimStringFormat); } y += sensorLineHeight; } } }
public SensorGadget(IComputer computer, PersistentSettings settings, UnitManager unitManager) { this.unitManager = unitManager; this.settings = settings; computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); this.darkWhite = new SolidBrush(Color.FromArgb(0xF0, 0xF0, 0xF0)); this.stringFormat = new StringFormat(); this.stringFormat.FormatFlags = StringFormatFlags.NoWrap; this.trimStringFormat = new StringFormat(); this.trimStringFormat.Trimming = StringTrimming.EllipsisCharacter; this.trimStringFormat.FormatFlags = StringFormatFlags.NoWrap; this.alignRightStringFormat = new StringFormat(); this.alignRightStringFormat.Alignment = StringAlignment.Far; this.alignRightStringFormat.FormatFlags = StringFormatFlags.NoWrap; if (File.Exists("gadget_background.png")) { try { Image newBack = new Bitmap("gadget_background.png"); back.Dispose(); back = newBack; } catch { } } if (File.Exists("gadget_image.png")) { try { image = new Bitmap("gadget_image.png"); } catch {} } if (File.Exists("gadget_foreground.png")) { try { fore = new Bitmap("gadget_foreground.png"); } catch { } } if (File.Exists("gadget_bar_background.png")) { try { Image newBarBack = new Bitmap("gadget_bar_background.png"); barBack.Dispose(); barBack = newBarBack; } catch { } } if (File.Exists("gadget_bar_foreground.png")) { try { Image newBarColor = new Bitmap("gadget_bar_foreground.png"); barFore.Dispose(); barFore = newBarColor; } catch { } } this.Location = new Point( settings.GetValue("sensorGadget.Location.X", 100), settings.GetValue("sensorGadget.Location.Y", 100)); LocationChanged += delegate(object sender, EventArgs e) { settings.SetValue("sensorGadget.Location.X", Location.X); settings.SetValue("sensorGadget.Location.Y", Location.Y); }; // get the custom to default dpi ratio using (Bitmap b = new Bitmap(1, 1)) { scale = b.HorizontalResolution / 96.0f; } SetFontSize(settings.GetValue("sensorGadget.FontSize", 7.5f)); Resize(settings.GetValue("sensorGadget.Width", Size.Width)); ContextMenu contextMenu = new ContextMenu(); MenuItem hardwareNamesItem = new MenuItem("Hardware Names"); contextMenu.MenuItems.Add(hardwareNamesItem); MenuItem fontSizeMenu = new MenuItem("Font Size"); for (int i = 0; i < 4; i++) { float size; string name; switch (i) { case 0: size = 6.5f; name = "Small"; break; case 1: size = 7.5f; name = "Medium"; break; case 2: size = 9f; name = "Large"; break; case 3: size = 11f; name = "Very Large"; break; default: throw new NotImplementedException(); } MenuItem item = new MenuItem(name); item.Checked = fontSize == size; item.Click += delegate(object sender, EventArgs e) { SetFontSize(size); settings.SetValue("sensorGadget.FontSize", size); foreach (MenuItem mi in fontSizeMenu.MenuItems) { mi.Checked = mi == item; } }; fontSizeMenu.MenuItems.Add(item); } contextMenu.MenuItems.Add(fontSizeMenu); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem lockItem = new MenuItem("Lock Position and Size"); contextMenu.MenuItems.Add(lockItem); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem alwaysOnTopItem = new MenuItem("Always on Top"); contextMenu.MenuItems.Add(alwaysOnTopItem); MenuItem opacityMenu = new MenuItem("Opacity"); contextMenu.MenuItems.Add(opacityMenu); Opacity = (byte)settings.GetValue("sensorGadget.Opacity", 255); for (int i = 0; i < 5; i++) { MenuItem item = new MenuItem((20 * (i + 1)).ToString() + " %"); byte o = (byte)(51 * (i + 1)); item.Checked = Opacity == o; item.Click += delegate(object sender, EventArgs e) { Opacity = o; settings.SetValue("sensorGadget.Opacity", Opacity); foreach (MenuItem mi in opacityMenu.MenuItems) { mi.Checked = mi == item; } }; opacityMenu.MenuItems.Add(item); } this.ContextMenu = contextMenu; hardwareNames = new UserOption("sensorGadget.Hardwarenames", true, hardwareNamesItem, settings); hardwareNames.Changed += delegate(object sender, EventArgs e) { Resize(); }; alwaysOnTop = new UserOption("sensorGadget.AlwaysOnTop", false, alwaysOnTopItem, settings); alwaysOnTop.Changed += delegate(object sender, EventArgs e) { this.AlwaysOnTop = alwaysOnTop.Value; }; lockPositionAndSize = new UserOption("sensorGadget.LockPositionAndSize", false, lockItem, settings); lockPositionAndSize.Changed += delegate(object sender, EventArgs e) { this.LockPositionAndSize = lockPositionAndSize.Value; }; HitTest += delegate(object sender, HitTestEventArgs e) { if (lockPositionAndSize.Value) { return; } if (e.Location.X < leftBorder) { e.HitResult = HitResult.Left; return; } if (e.Location.X > Size.Width - 1 - rightBorder) { e.HitResult = HitResult.Right; return; } }; SizeChanged += delegate(object sender, EventArgs e) { settings.SetValue("sensorGadget.Width", Size.Width); Redraw(); }; VisibleChanged += delegate(object sender, EventArgs e) { Rectangle bounds = new Rectangle(Location, Size); Screen screen = Screen.FromRectangle(bounds); Rectangle intersection = Rectangle.Intersect(screen.WorkingArea, bounds); if (intersection.Width < Math.Min(16, bounds.Width) || intersection.Height < Math.Min(16, bounds.Height)) { Location = new Point( screen.WorkingArea.Width / 2 - bounds.Width / 2, screen.WorkingArea.Height / 2 - bounds.Height / 2); } }; MouseDoubleClick += delegate(object obj, MouseEventArgs args) { SendHideShowCommand(); }; }
public SensorNode(ISensor sensor, PersistentSettings settings, UnitManager unitManager) { Sensor = sensor; this.settings = settings; this.unitManager = unitManager; switch (sensor.SensorType) { case SensorType.Voltage: format = "{0:F3} V"; break; case SensorType.Clock: format = "{0:F0} MHz"; break; case SensorType.Load: format = "{0:F1} %"; break; case SensorType.Temperature: format = "{0:F1} °C"; break; case SensorType.Fan: format = "{0:F0} RPM"; break; case SensorType.Flow: format = "{0:F0} L/h"; break; case SensorType.Control: format = "{0:F1} %"; break; case SensorType.Level: format = "{0:F1} %"; break; case SensorType.Power: format = "{0:F1} W"; break; case SensorType.Data: format = "{0:F1} GB"; break; case SensorType.Factor: format = "{0:F3}"; break; } var hidden = settings.GetValue(new Identifier(sensor.Identifier, "hidden").ToString(), sensor.IsDefaultHidden); base.IsVisible = !hidden; Plot = settings.GetValue(new Identifier(sensor.Identifier, "plot").ToString(), false); }
public SystemTray(IComputer computer, PersistentSettings settings, UnitManager unitManager) { this.computer = computer; this.settings = settings; this.unitManager = unitManager; computer.HardwareAdded += new HardwareEventHandler(HardwareAdded); computer.HardwareRemoved += new HardwareEventHandler(HardwareRemoved); this.mainIcon = new NotifyIconAdv(); ContextMenu contextMenu = new ContextMenu(); MenuItem hideShowItem = new MenuItem("Hide/Show"); hideShowItem.Click += delegate(object obj, EventArgs args) { SendHideShowCommand(); }; contextMenu.MenuItems.Add(hideShowItem); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem exitItem = new MenuItem("Exit"); exitItem.Click += delegate(object obj, EventArgs args) { SendExitCommand(); }; contextMenu.MenuItems.Add(exitItem); this.mainIcon.ContextMenu = contextMenu; this.mainIcon.DoubleClick += delegate(object obj, EventArgs args) { SendHideShowCommand(); }; this.mainIcon.Icon = EmbeddedResources.GetIcon("smallicon.ico"); this.mainIcon.Text = "Open Hardware Monitor"; }