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 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; } 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 UserOption(string name, bool value, MenuItem menuItem, PersistentSettings settings) { this.settings = settings; this.name = name; if (name != null) this.value = settings.GetValue(name, value); else this.value = value; this.menuItem = menuItem; this.menuItem.Checked = this.value; this.menuItem.Click += new EventHandler(menuItem_Click); }
private void InitializeCPUTriggers() { string cpu_threshold_format = "cpu_temperature_threshold_{0:D}"; string cpu_action_format = "cpu_temperature_action_{0:D}"; string cpu_triggers_count = "cpu_triggers_count"; int triggers_count = settings.GetValue(cpu_triggers_count, 0); for (int i = 0; i < triggers_count; ++i) { Trigger trigger = new Trigger(); trigger.threshold = settings.GetValue(string.Format(cpu_threshold_format, i), CPU_DEFAULT_THRESHOLD); string action = settings.GetValue(string.Format(cpu_action_format, i), "undefined"); trigger.action = GetTriggerActionFromString(action); if (trigger.action != null) { cpuTriggers.Add(trigger); } } }
public static void LoadEvent(int id, PersistentSettings settings) { Event e = new Event(new Identifier("event", id + "")); e.Name = settings.GetValue(new Identifier(e.Identifier, "name").ToString(), float.MaxValue.ToString()); for (int i = 0; i < MAX_TRIGGERS; i++) { if (settings.Contains(new Identifier(e.Identifier, "trigger", i + "", "type").ToString())) { EventTrigger t = EventTrigger.LoadTrigger(e, i, settings); } } }
public Node(string text, Identifier identifier, PersistentSettings settings) { this.text = text; this.nodes = new NodeCollection(this); this.visible = true; this.identifier = identifier; this.settings = settings; if (settings != null) { this.collapsed = settings.GetValue(new Identifier(identifier, "collapsed").ToString(), false); } }
private void LoadMonitorSettings() { computer.CPUEnabled = settings.GetValue(CPU_ENABLE_KEY, true); computer.GPUEnabled = settings.GetValue(GPU_ENABLE_KEY, true); computer.RAMEnabled = settings.GetValue(RAM_ENABLE_KEY, true); computer.HDDEnabled = settings.GetValue(HDD_ENABLE_KEY, true); computer.MainboardEnabled = settings.GetValue(MAINBOARD_ENABLE_KEY, true); computer.FanControllerEnabled = settings.GetValue(FAN_CONTROLLER_ENABLE_KEY, true); }
public SensorNode(ISensor sensor, PersistentSettings settings, UnitManager unitManager, ISensorTextManager sensorTextManager) : base() { this.sensor = sensor; this.settings = settings; this.unitManager = unitManager; this.sensorTextManager = sensorTextManager; 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); string id = new Identifier(sensor.Identifier, "penColor").ToString(); if (settings.Contains(id)) { this.PenColor = settings.GetValue(id, Color.Black); } }
public UserOption(string name, bool value, MenuItem menuItem, PersistentSettings settings) { this.settings = settings; this.name = name; if (name != null) { this.value = settings.GetValue(name, value); } else { this.value = value; } this.menuItem = menuItem; this.menuItem.Checked = this.value; this.menuItem.Click += new EventHandler(menuItem_Click); }
private void InitializePlotForm() { plotForm = new Form(); plotForm.FormBorderStyle = FormBorderStyle.SizableToolWindow; plotForm.ShowInTaskbar = false; plotForm.StartPosition = FormStartPosition.Manual; this.AddOwnedForm(plotForm); plotForm.Bounds = new Rectangle { X = settings.GetValue("plotForm.Location.X", -100000), Y = settings.GetValue("plotForm.Location.Y", 100), Width = settings.GetValue("plotForm.Width", 640), Height = settings.GetValue("plotForm.Height", 470) }; EventHandler moveOrResizePlotForm = delegate(object sender, EventArgs e) { if (plotForm.WindowState != FormWindowState.Minimized) { settings.SetValue("plotForm.Location.X", plotForm.Bounds.X); settings.SetValue("plotForm.Location.Y", plotForm.Bounds.Y); settings.SetValue("plotForm.Width", plotForm.Bounds.Width); settings.SetValue("plotForm.Height", plotForm.Bounds.Height); } }; plotForm.Move += moveOrResizePlotForm; plotForm.Resize += moveOrResizePlotForm; plotForm.VisibleChanged += delegate(object sender, EventArgs e) { Rectangle bounds = new Rectangle(plotForm.Location, plotForm.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)) { plotForm.Location = new Point( screen.WorkingArea.Width / 2 - bounds.Width / 2, screen.WorkingArea.Height / 2 - bounds.Height / 2); } }; }
public UserRadioGroup(string name, int value, MenuItem[] menuItems, PersistentSettings settings) { this.settings = settings; this.name = name; if (name != null) this.value = settings.GetValue(name, value); else this.value = value; this.menuItems = menuItems; this.value = Math.Max(Math.Min(this.value, menuItems.Length - 1), 0); for (int i = 0; i < this.menuItems.Length; i++) { this.menuItems[i].Checked = i == this.value; int index = i; this.menuItems[i].Click += delegate(object sender, EventArgs e) { this.Value = index; }; } }
public UserRadioGroup(string name, int value, MenuItem[] menuItems, PersistentSettings settings) { _settings = settings; _name = name; _value = name != null?settings.GetValue(name, value) : value; _menuItems = menuItems; _value = Math.Max(Math.Min(_value, menuItems.Length - 1), 0); for (int i = 0; i < _menuItems.Length; i++) { _menuItems[i].Checked = i == _value; int index = i; _menuItems[i].Click += delegate { Value = index; }; } }
public UserRadioGroup(string name, int value, MenuItem[] menuItems, PersistentSettings settings) { this.settings = settings; this.name = name; if (name != null) { this.value = settings.GetValue(name, value); } else { this.value = value; } this.menuItems = menuItems; this.value = Math.Max(Math.Min(this.value, menuItems.Length - 1), 0); for (var i = 0; i < this.menuItems.Length; i++) { this.menuItems[i].Checked = i == this.value; var index = i; this.menuItems[i].Click += delegate { this.Value = index; }; } }
public HardwareNode(IHardware hardware, PersistentSettings settings, UnitManager unitManager) { _settings = settings; _unitManager = unitManager; _expandedIdentifier = new Identifier(hardware.Identifier, "expanded").ToString(); Hardware = hardware; Image = HardwareTypeImage.Instance.GetImage(hardware.HardwareType); foreach (SensorType sensorType in Enum.GetValues(typeof(SensorType))) { _typeNodes.Add(new TypeNode(sensorType, hardware.Identifier, _settings)); } foreach (ISensor sensor in hardware.Sensors) { SensorAdded(sensor); } hardware.SensorAdded += SensorAdded; hardware.SensorRemoved += SensorRemoved; _expanded = settings.GetValue(_expandedIdentifier, true); }
public MainForm() { InitializeComponent(); _settings = new PersistentSettings(); _settings.Load(Path.ChangeExtension(Application.ExecutablePath, ".config")); _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 splitContainer.Dock = DockStyle.Fill; Font = SystemFonts.MessageBoxFont; treeView.Font = SystemFonts.MessageBoxFont; // Set the bounds immediately, so that our child components can be // properly placed. Bounds = new Rectangle { X = _settings.GetValue("mainForm.Location.X", Location.X), Y = _settings.GetValue("mainForm.Location.Y", Location.Y), Width = _settings.GetValue("mainForm.Width", 470), Height = _settings.GetValue("mainForm.Height", 640) }; _plotPanel = new PlotPanel(_settings, _unitManager) { Font = SystemFonts.MessageBoxFont, 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 treeModel = new TreeModel(); _root = new Node(Environment.MachineName) { Image = EmbeddedResources.GetImage("computer.png") }; treeModel.Nodes.Add(_root); treeView.Model = treeModel; _computer = new Computer(_settings); _systemTray = new SystemTray(_computer, _settings, _unitManager); _systemTray.HideShowCommand += HideShowClick; _systemTray.ExitCommand += ExitClick; if (Software.OperatingSystem.IsUnix) { // 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); } treeView.ShowNodeToolTips = true; NodeToolTipProvider tooltipProvider = new(); nodeTextBoxText.ToolTipProvider = tooltipProvider; nodeTextBoxValue.ToolTipProvider = tooltipProvider; _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 += HardwareAdded; _computer.HardwareRemoved += HardwareRemoved; _computer.Open(); timer.Enabled = true; UserOption showHiddenSensors = new UserOption("hiddenMenuItem", false, hiddenMenuItem, _settings); showHiddenSensors.Changed += delegate { treeModel.ForceVisible = showHiddenSensors.Value; }; UserOption showValue = new UserOption("valueMenuItem", true, valueMenuItem, _settings); showValue.Changed += delegate { treeView.Columns[1].IsVisible = showValue.Value; }; UserOption showMin = new UserOption("minMenuItem", false, minMenuItem, _settings); showMin.Changed += delegate { treeView.Columns[2].IsVisible = showMin.Value; }; UserOption showMax = new UserOption("maxMenuItem", true, maxMenuItem, _settings); showMax.Changed += delegate { treeView.Columns[3].IsVisible = showMax.Value; }; var _ = new UserOption("startMinMenuItem", false, startMinMenuItem, _settings); _minimizeToTray = new UserOption("minTrayMenuItem", true, minTrayMenuItem, _settings); _minimizeToTray.Changed += delegate { _systemTray.IsMainIconEnabled = _minimizeToTray.Value; }; _minimizeOnClose = new UserOption("minCloseMenuItem", false, minCloseMenuItem, _settings); _autoStart = new UserOption(null, _startupManager.Startup, startupMenuItem, _settings); _autoStart.Changed += delegate { 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 { _computer.IsMotherboardEnabled = _readMainboardSensors.Value; }; _readCpuSensors = new UserOption("cpuMenuItem", true, cpuMenuItem, _settings); _readCpuSensors.Changed += delegate { _computer.IsCpuEnabled = _readCpuSensors.Value; }; _readRamSensors = new UserOption("ramMenuItem", true, ramMenuItem, _settings); _readRamSensors.Changed += delegate { _computer.IsMemoryEnabled = _readRamSensors.Value; }; _readGpuSensors = new UserOption("gpuMenuItem", true, gpuMenuItem, _settings); _readGpuSensors.Changed += delegate { _computer.IsGpuEnabled = _readGpuSensors.Value; }; _readFanControllersSensors = new UserOption("fanControllerMenuItem", true, fanControllerMenuItem, _settings); _readFanControllersSensors.Changed += delegate { _computer.IsControllerEnabled = _readFanControllersSensors.Value; }; _readHddSensors = new UserOption("hddMenuItem", true, hddMenuItem, _settings); _readHddSensors.Changed += delegate { _computer.IsStorageEnabled = _readHddSensors.Value; }; _readNicSensors = new UserOption("nicMenuItem", true, nicMenuItem, _settings); _readNicSensors.Changed += delegate { _computer.IsNetworkEnabled = _readNicSensors.Value; }; _readPsuSensors = new UserOption("psuMenuItem", true, psuMenuItem, _settings); _readPsuSensors.Changed += delegate { _computer.IsPsuEnabled = _readPsuSensors.Value; }; _showGadget = new UserOption("gadgetMenuItem", false, gadgetMenuItem, _settings); _showGadget.Changed += delegate { if (_gadget != null) { _gadget.Visible = _showGadget.Value; } }; celsiusMenuItem.Checked = _unitManager.TemperatureUnit == TemperatureUnit.Celsius; fahrenheitMenuItem.Checked = !celsiusMenuItem.Checked; Server = new HttpServer(_root, _settings.GetValue("listenerPort", 8085), _settings.GetValue("authenticationEnabled", false), _settings.GetValue("authenticationUserName", ""), _settings.GetValue("authenticationPassword", "")); if (Server.PlatformNotSupported) { webMenuItemSeparator.Visible = false; webMenuItem.Visible = false; } _runWebServer = new UserOption("runWebServerMenuItem", false, runWebServerMenuItem, _settings); _runWebServer.Changed += delegate { if (_runWebServer.Value) { Server.StartHttpListener(); } else { Server.StopHttpListener(); } }; authWebServerMenuItem.Checked = _settings.GetValue("authenticationEnabled", false); _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; } }; _sensorValuesTimeWindow = new UserRadioGroup("sensorValuesTimeWindow", 10, new[] { timeWindow30sMenuItem, timeWindow1minMenuItem, timeWindow2minMenuItem, timeWindow5minMenuItem, timeWindow10minMenuItem, timeWindow30minMenuItem, timeWindow1hMenuItem, timeWindow2hMenuItem, timeWindow6hMenuItem, timeWindow12hMenuItem, timeWindow24hMenuItem }, _settings); _sensorValuesTimeWindow.Changed += (sender, e) => { TimeSpan timeWindow = TimeSpan.Zero; switch (_sensorValuesTimeWindow.Value) { case 0: timeWindow = new TimeSpan(0, 0, 30); break; case 1: timeWindow = new TimeSpan(0, 1, 0); break; case 2: timeWindow = new TimeSpan(0, 2, 0); break; case 3: timeWindow = new TimeSpan(0, 5, 0); break; case 4: timeWindow = new TimeSpan(0, 10, 0); break; case 5: timeWindow = new TimeSpan(0, 30, 0); break; case 6: timeWindow = new TimeSpan(1, 0, 0); break; case 7: timeWindow = new TimeSpan(2, 0, 0); break; case 8: timeWindow = new TimeSpan(6, 0, 0); break; case 9: timeWindow = new TimeSpan(12, 0, 0); break; case 10: timeWindow = new TimeSpan(24, 0, 0); break; } _computer.Accept(new SensorVisitor(delegate(ISensor sensor) { sensor.ValuesTimeWindow = timeWindow; })); }; InitializePlotForm(); InitializeSplitter(); 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 // Make sure the settings are saved when the user logs off Microsoft.Win32.SystemEvents.SessionEnded += delegate { _computer.Close(); SaveConfiguration(); if (_runWebServer.Value) { Server.Quit(); } }; Microsoft.Win32.SystemEvents.PowerModeChanged += PowerModeChanged; }
public UnitManager(PersistentSettings settings) { this.settings = settings; this.temperatureUnit = (TemperatureUnit)settings.GetValue("TemperatureUnit", (int)TemperatureUnit.Celsius); }
public TypeNode(SensorType sensorType, IHardware hardware, PersistentSettings settings) : base() { this.settings = settings; this.sensorType = sensorType; this.hardware = hardware; switch (sensorType) { case SensorType.Voltage: this.Image = Utilities.EmbeddedResources.GetImage("voltage.png"); this.Text = "Voltages"; break; case SensorType.Clock: this.Image = Utilities.EmbeddedResources.GetImage("clock.png"); this.Text = "Clocks"; break; case SensorType.Load: this.Image = Utilities.EmbeddedResources.GetImage("load.png"); this.Text = "Load"; break; case SensorType.Temperature: this.Image = Utilities.EmbeddedResources.GetImage("temperature.png"); this.Text = "Temperatures"; break; case SensorType.Fan: this.Image = Utilities.EmbeddedResources.GetImage("fan.png"); this.Text = "Fans"; break; case SensorType.Flow: this.Image = Utilities.EmbeddedResources.GetImage("flow.png"); this.Text = "Flows"; break; case SensorType.Control: this.Image = Utilities.EmbeddedResources.GetImage("control.png"); this.Text = "Controls"; break; case SensorType.Level: this.Image = Utilities.EmbeddedResources.GetImage("level.png"); this.Text = "Levels"; break; case SensorType.Power: this.Image = Utilities.EmbeddedResources.GetImage("power.png"); this.Text = "Powers"; break; case SensorType.Data: this.Image = Utilities.EmbeddedResources.GetImage("data.png"); this.Text = "Data"; break; case SensorType.SmallData: this.Image = Utilities.EmbeddedResources.GetImage("data.png"); this.Text = "Data"; break; case SensorType.Factor: this.Image = Utilities.EmbeddedResources.GetImage("factor.png"); this.Text = "Factors"; break; case SensorType.Throughput: this.Image = Utilities.EmbeddedResources.GetImage("throughput.png"); this.Text = "Throughput"; break; } NodeAdded += new NodeEventHandler(TypeNode_NodeAdded); NodeRemoved += new NodeEventHandler(TypeNode_NodeRemoved); this.expandedIdentifier = new Identifier(new Identifier(hardware.Identifier, sensorType.ToString().ToLowerInvariant()), "expanded"); base.IsExpanded = settings.GetValue(expandedIdentifier.ToString(), base.IsExpanded); }
private PlotModel CreatePlotModel() { timeAxis.Position = AxisPosition.Bottom; timeAxis.MajorGridlineStyle = LineStyle.Solid; timeAxis.MajorGridlineThickness = 1; timeAxis.MajorGridlineColor = OxyColor.FromRgb(192, 192, 192); timeAxis.MinorGridlineStyle = LineStyle.Solid; timeAxis.MinorGridlineThickness = 1; timeAxis.MinorGridlineColor = OxyColor.FromRgb(232, 232, 232); timeAxis.StartPosition = 1; timeAxis.EndPosition = 0; timeAxis.MinimumPadding = 0; timeAxis.MaximumPadding = 0; timeAxis.AbsoluteMinimum = 0; timeAxis.Minimum = 0; timeAxis.AbsoluteMaximum = 24 * 60 * 60; timeAxis.Zoom( settings.GetValue("plotPanel.MinTimeSpan", 0.0f), settings.GetValue("plotPanel.MaxTimeSpan", 10.0f * 60)); timeAxis.StringFormat = "h:mm"; var units = new Dictionary <SensorType, string>(); units.Add(SensorType.Voltage, "V"); units.Add(SensorType.Clock, "MHz"); units.Add(SensorType.Temperature, "°C"); units.Add(SensorType.Load, "%"); units.Add(SensorType.Fan, "RPM"); units.Add(SensorType.Flow, "L/h"); units.Add(SensorType.Control, "%"); units.Add(SensorType.Level, "%"); units.Add(SensorType.Factor, "1"); units.Add(SensorType.Power, "W"); units.Add(SensorType.Data, "GB"); units.Add(SensorType.Current, "A"); units.Add(SensorType.KWH, "kWh"); foreach (SensorType type in Enum.GetValues(typeof(SensorType))) { var axis = new LinearAxis(); axis.Position = AxisPosition.Left; axis.MajorGridlineStyle = LineStyle.Solid; axis.MajorGridlineThickness = 1; axis.MajorGridlineColor = timeAxis.MajorGridlineColor; axis.MinorGridlineStyle = LineStyle.Solid; axis.MinorGridlineThickness = 1; axis.MinorGridlineColor = timeAxis.MinorGridlineColor; axis.AxislineStyle = LineStyle.Solid; axis.Title = type.ToString(); axis.Key = type.ToString(); axis.Zoom( settings.GetValue("plotPanel.Min" + axis.Key, float.NaN), settings.GetValue("plotPanel.Max" + axis.Key, float.NaN)); if (units.ContainsKey(type)) { axis.Unit = units[type]; } axes.Add(type, axis); } var model = new PlotModel(); model.Axes.Add(timeAxis); foreach (var axis in axes.Values) { model.Axes.Add(axis); } model.PlotMargins = new OxyThickness(0); model.IsLegendVisible = false; return(model); }
private void InitializePlotForm() { plotForm = new Form { FormBorderStyle = FormBorderStyle.SizableToolWindow, ShowInTaskbar = false, StartPosition = FormStartPosition.Manual }; this.AddOwnedForm(plotForm); plotForm.Bounds = new Rectangle { X = settings.GetValue("plotForm.Location.X", -100000), Y = settings.GetValue("plotForm.Location.Y", 100), Width = settings.GetValue("plotForm.Width", 600), Height = settings.GetValue("plotForm.Height", 400) }; showPlot = new UserOption("plotMenuItem", false, plotMenuItem, settings); plotLocation = new UserRadioGroup("plotLocation", 0, new[] { plotWindowMenuItem, plotBottomMenuItem, plotRightMenuItem }, settings); showPlot.Changed += delegate(object sender, EventArgs e) { if (plotLocation.Value == 0) { if (showPlot.Value && this.Visible) { plotForm.Show(); } else { plotForm.Hide(); } } else { splitContainer.Panel2Collapsed = !showPlot.Value; } treeView.Invalidate(); }; plotLocation.Changed += delegate(object sender, EventArgs e) { switch (plotLocation.Value) { case 0: splitContainer.Panel2.Controls.Clear(); splitContainer.Panel2Collapsed = true; plotForm.Controls.Add(plotPanel); if (showPlot.Value && this.Visible) { plotForm.Show(); } break; case 1: plotForm.Controls.Clear(); plotForm.Hide(); splitContainer.Orientation = Orientation.Horizontal; splitContainer.Panel2.Controls.Add(plotPanel); splitContainer.Panel2Collapsed = !showPlot.Value; break; case 2: plotForm.Controls.Clear(); plotForm.Hide(); splitContainer.Orientation = Orientation.Vertical; splitContainer.Panel2.Controls.Add(plotPanel); splitContainer.Panel2Collapsed = !showPlot.Value; break; } }; plotForm.FormClosing += delegate(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { // just switch off the plotting when the user closes the form if (plotLocation.Value == 0) { showPlot.Value = false; } e.Cancel = true; } }; void MoveOrResizePlotForm(object sender, EventArgs e) { if (plotForm.WindowState != FormWindowState.Minimized) { settings.SetValue("plotForm.Location.X", plotForm.Bounds.X); settings.SetValue("plotForm.Location.Y", plotForm.Bounds.Y); settings.SetValue("plotForm.Width", plotForm.Bounds.Width); settings.SetValue("plotForm.Height", plotForm.Bounds.Height); } } plotForm.Move += MoveOrResizePlotForm; plotForm.Resize += MoveOrResizePlotForm; plotForm.VisibleChanged += delegate(object sender, EventArgs e) { Rectangle bounds = new Rectangle(plotForm.Location, plotForm.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)) { plotForm.Location = new Point(screen.WorkingArea.Width / 2 - bounds.Width / 2, screen.WorkingArea.Height / 2 - bounds.Height / 2); } }; this.VisibleChanged += delegate(object sender, EventArgs e) { if (this.Visible && showPlot.Value && plotLocation.Value == 0) { plotForm.Show(); } else { plotForm.Hide(); } }; }
private PlotModel CreatePlotModel() { _timeAxis.Position = AxisPosition.Bottom; _timeAxis.MajorGridlineStyle = LineStyle.Solid; _timeAxis.MajorGridlineThickness = 1; _timeAxis.MajorGridlineColor = OxyColor.FromRgb(192, 192, 192); _timeAxis.MinorGridlineStyle = LineStyle.Solid; _timeAxis.MinorGridlineThickness = 1; _timeAxis.MinorGridlineColor = OxyColor.FromRgb(232, 232, 232); _timeAxis.StartPosition = 1; _timeAxis.EndPosition = 0; _timeAxis.MinimumPadding = 0; _timeAxis.MaximumPadding = 0; _timeAxis.AbsoluteMinimum = 0; _timeAxis.Minimum = 0; _timeAxis.AbsoluteMaximum = 24 * 60 * 60; _timeAxis.Zoom( _settings.GetValue("plotPanel.MinTimeSpan", 0.0f), _settings.GetValue("plotPanel.MaxTimeSpan", 10.0f * 60)); _timeAxis.StringFormat = "h:mm"; var units = new Dictionary <SensorType, string> { { SensorType.Voltage, "V" }, { SensorType.Clock, "MHz" }, { SensorType.Temperature, "°C" }, { SensorType.Load, "%" }, { SensorType.Fan, "RPM" }, { SensorType.Flow, "L/h" }, { SensorType.Control, "%" }, { SensorType.Level, "%" }, { SensorType.Factor, "1" }, { SensorType.Power, "W" }, { SensorType.Data, "GB" }, { SensorType.Frequency, "Hz" } }; foreach (SensorType type in Enum.GetValues(typeof(SensorType))) { string typeName = type.ToString(); var axis = new LinearAxis { Position = AxisPosition.Left, MajorGridlineStyle = LineStyle.Solid, MajorGridlineThickness = 1, MajorGridlineColor = _timeAxis.MajorGridlineColor, MinorGridlineStyle = LineStyle.Solid, MinorGridlineThickness = 1, MinorGridlineColor = _timeAxis.MinorGridlineColor, AxislineStyle = LineStyle.Solid, Title = typeName, Key = typeName, }; var annotation = new LineAnnotation { Type = LineAnnotationType.Horizontal, ClipByXAxis = false, ClipByYAxis = false, LineStyle = LineStyle.Solid, Color = OxyColors.Black, YAxisKey = typeName, StrokeThickness = 2, }; axis.AxisChanged += (sender, args) => annotation.Y = axis.ActualMinimum; axis.TransformChanged += (sender, args) => annotation.Y = axis.ActualMinimum; axis.Zoom(_settings.GetValue("plotPanel.Min" + axis.Key, float.NaN), _settings.GetValue("plotPanel.Max" + axis.Key, float.NaN)); if (units.ContainsKey(type)) { axis.Unit = units[type]; } _axes.Add(type, axis); _annotations.Add(type, annotation); } var model = new ScaledPlotModel(_dpiXScale, _dpiYScale); model.Axes.Add(_timeAxis); foreach (LinearAxis axis in _axes.Values) { model.Axes.Add(axis); } model.IsLegendVisible = false; return(model); }
public DisplayConnector(IHardware[] hardware, List <ISensor> sensors, PersistentSettings settings) { this.settings = settings; this.sensors = sensors; int tmp = 0; if (!int.TryParse(settings.GetValue( new Identifier(identifier, "mode").ToString(), "2"), NumberStyles.Integer, CultureInfo.InvariantCulture, out tmp)) { mode = LCDConnectionMode.NONE; } else { mode = (LCDConnectionMode)tmp; } text = new List <SensorString>(); this.curText = 0; int.TryParse(settings.GetValue(new Identifier(identifier, "curText").ToString(), "0"), out this.curText); int curID = 0; while (settings.Contains(new Identifier(identifier, curID + "", "text").ToString())) { text.Add(new SensorString(settings.GetValue(new Identifier(identifier, curID + "", "text").ToString(), "-"), sensors)); curID++; } if (text.Count == 0) { text.Add(new SensorString("-", sensors)); } // this.text = new List<SensorString>(new SensorString(settings.GetValue(new Identifier(identifier, curText + "", "text").ToString(), "-"), sensors); if (mode == LCDConnectionMode.SERIAL) { try { //InitSerial(settings.GetValue(new Identifier(identifier, "comport").ToString(), "COM1")); } catch (Exception e) { Debug.WriteLine(e.ToString()); mode = LCDConnectionMode.NONE; } } else if (mode == LCDConnectionMode.ARDUINO) { // Stupidly pick the first Arduino found foreach (IHardware h in hardware) { if (h.GetType() == typeof(Arduino)) { arduino = (Arduino)h; break; } } if (arduino == null) { mode = LCDConnectionMode.NONE; } else { arduino.SetDisplay(true); settings.hotkeyManager.RegisterHotkey("test", 0x0002 + 0x0004, (int)Keys.P, delegate { ToggleDisplay(); }); settings.hotkeyManager.RegisterHotkey("next_display_text", 0x0002 + 0x0004, (int)Keys.J, delegate { if (CurText + 1 > text.Count - 1) { CurText = 0; } else { CurText = CurText + 1; } }); settings.hotkeyManager.RegisterHotkey("prev_display_text", 0x0002 + 0x0004, (int)Keys.K, delegate { if (CurText - 1 < 0) { CurText = text.Count - 1; } else { CurText = CurText - 1; } }); } } }
public TypeNode(SensorType sensorType, Identifier parentId, PersistentSettings settings) { SensorType = sensorType; _expandedIdentifier = new Identifier(parentId, SensorType.ToString(), ".expanded").ToString(); _settings = settings; switch (sensorType) { case SensorType.Voltage: Image = Utilities.EmbeddedResources.GetImage("voltage.png"); Text = "Voltages"; break; case SensorType.Clock: Image = Utilities.EmbeddedResources.GetImage("clock.png"); Text = "Clocks"; break; case SensorType.Load: Image = Utilities.EmbeddedResources.GetImage("load.png"); Text = "Load"; break; case SensorType.Temperature: Image = Utilities.EmbeddedResources.GetImage("temperature.png"); Text = "Temperatures"; break; case SensorType.Fan: Image = Utilities.EmbeddedResources.GetImage("fan.png"); Text = "Fans"; break; case SensorType.Flow: Image = Utilities.EmbeddedResources.GetImage("flow.png"); Text = "Flows"; break; case SensorType.Control: Image = Utilities.EmbeddedResources.GetImage("control.png"); Text = "Controls"; break; case SensorType.Level: Image = Utilities.EmbeddedResources.GetImage("level.png"); Text = "Levels"; break; case SensorType.Power: Image = Utilities.EmbeddedResources.GetImage("power.png"); Text = "Powers"; break; case SensorType.Data: Image = Utilities.EmbeddedResources.GetImage("data.png"); Text = "Data"; break; case SensorType.SmallData: Image = Utilities.EmbeddedResources.GetImage("data.png"); Text = "Data"; break; case SensorType.Factor: Image = Utilities.EmbeddedResources.GetImage("factor.png"); Text = "Factors"; break; case SensorType.Frequency: Image = Utilities.EmbeddedResources.GetImage("clock.png"); Text = "Frequencies"; break; case SensorType.Throughput: Image = Utilities.EmbeddedResources.GetImage("throughput.png"); Text = "Throughput"; break; } NodeAdded += TypeNode_NodeAdded; NodeRemoved += TypeNode_NodeRemoved; _expanded = settings.GetValue(_expandedIdentifier, true); }
public SensorNotifyIcon(SystemTray sensorSystemTray, ISensor sensor, bool balloonTip, PersistentSettings settings) { this.sensor = sensor; this.notifyIcon = new NotifyIcon(); 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)); this.font = SystemFonts.MessageBoxFont; 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; 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; } }
private void NotificationsForm_Load(object sender, EventArgs e) { notificationEmailTxtBox.Text = settings.GetValue(EmailNotificationManager.EmailIdentifier.ToString(), string.Empty); GPULoadNumUpDown.Value = Convert.ToDecimal(settings.GetValue(GPULoadChecker.ThresholdIdentifier.ToString(), 0)); GPULoadDDL.SelectedIndex = Convert.ToInt32(settings.GetValue(GPULoadChecker.GraterLessSignIdentifier.ToString(), 0)); GPUTemperatureNumUpDown.Value = Convert.ToDecimal(settings.GetValue(GPUTemperatureChecker.ThresholdIdentifier.ToString(), 0)); GPUTemperatureDDL.SelectedIndex = Convert.ToInt32(settings.GetValue(GPUTemperatureChecker.GraterLessSignIdentifier.ToString(), 0)); CPULoadNumUpDown.Value = Convert.ToDecimal(settings.GetValue(CPULoadChecker.ThresholdIdentifier.ToString(), 0)); CPULoadDDL.SelectedIndex = Convert.ToInt32(settings.GetValue(CPULoadChecker.GraterLessSignIdentifier.ToString(), 0)); CPUTemperatureNumUpDown.Value = Convert.ToDecimal(settings.GetValue(CPUTemperatureChecker.ThresholdIdentifier.ToString(), 0)); CPUTemperatureDDL.SelectedIndex = Convert.ToInt32(settings.GetValue(CPUTemperatureChecker.GraterLessSignIdentifier.ToString(), 0)); MemoryUsageNumUpDown.Value = Convert.ToDecimal(settings.GetValue(MemoryUsageChecker.ThresholdIdentifier.ToString(), 0)); MemoryUsageDDL.SelectedIndex = Convert.ToInt32(settings.GetValue(MemoryUsageChecker.GraterLessSignIdentifier.ToString(), 0)); this.SetControlsBehavior(); }
public SensorNotifyIcon(SystemTray sensorSystemTray, ISensor sensor, bool balloonTip, PersistentSettings settings) { this.sensor = sensor; this.notifyIcon = new NotifyIcon(); Color defaultColor = Color.Black; if (sensor.SensorType == SensorType.Load) { 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)); this.font = SystemFonts.MessageBoxFont; 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(); }; this.bitmap = new Bitmap(16, 16, 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 SensorNotifyIcon(SystemTray sensorSystemTray, ISensor sensor, PersistentSettings settings, UnitManager unitManager) { _unitManager = unitManager; Sensor = sensor; _notifyIcon = new NotifyIconAdv(); Color defaultColor = Color.White; 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); _pen = new Pen(Color.FromArgb(96, Color.Black)); ContextMenu contextMenu = new ContextMenu(); MenuItem hideShowItem = new MenuItem("Hide/Show"); hideShowItem.Click += delegate { sensorSystemTray.SendHideShowCommand(); }; contextMenu.MenuItems.Add(hideShowItem); contextMenu.MenuItems.Add(new MenuItem("-")); MenuItem removeItem = new MenuItem("Remove Sensor"); removeItem.Click += delegate { sensorSystemTray.Remove(Sensor); }; contextMenu.MenuItems.Add(removeItem); MenuItem colorItem = new MenuItem("Change Color..."); colorItem.Click += delegate { ColorDialog dialog = new ColorDialog { 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 { sensorSystemTray.SendExitCommand(); }; contextMenu.MenuItems.Add(exitItem); _notifyIcon.ContextMenu = contextMenu; _notifyIcon.DoubleClick += delegate { 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; } _font = new Font(family, baseSize * width / 16.0f, GraphicsUnit.Pixel); _smallFont = new Font(family, 0.75f * baseSize * width / 16.0f, GraphicsUnit.Pixel); _bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); _graphics = Graphics.FromImage(_bitmap); if (Environment.OSVersion.Version.Major > 5) { _graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; _graphics.SmoothingMode = SmoothingMode.HighQuality; } }
public SensorNotifyIcon(SystemTray sensorSystemTray, ISensor sensor, bool balloonTip, PersistentSettings settings) { this.sensor = sensor; this.notifyIcon = new NotifyIcon(); 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)); this.font = SystemFonts.MessageBoxFont; 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; 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 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 SensorGadget(IComputer computer, PersistentSettings settings, UnitManager unitManager) { _unitManager = unitManager; _settings = settings; computer.HardwareAdded += HardwareAdded; computer.HardwareRemoved += HardwareRemoved; _stringFormat = new StringFormat { FormatFlags = StringFormatFlags.NoWrap }; _trimStringFormat = new StringFormat { Trimming = StringTrimming.EllipsisCharacter, FormatFlags = StringFormatFlags.NoWrap }; _alignRightStringFormat = new StringFormat { Alignment = StringAlignment.Far, 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 { } } Location = new Point(settings.GetValue("sensorGadget.Location.X", 100), settings.GetValue("sensorGadget.Location.Y", 100)); LocationChanged += delegate { 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)); ContextMenuStrip contextMenuStrip = new ContextMenuStrip(); ToolStripMenuItem hardwareNamesItem = new ToolStripMenuItem("Hardware Names"); contextMenuStrip.Items.Add(hardwareNamesItem); ToolStripMenuItem fontSizeMenu = new ToolStripMenuItem("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(); } ToolStripItem item = new ToolStripMenuItem(name) { Checked = _fontSize == size }; item.Click += delegate { SetFontSize(size); settings.SetValue("sensorGadget.FontSize", size); foreach (ToolStripMenuItem mi in fontSizeMenu.DropDownItems) { mi.Checked = mi == item; } }; fontSizeMenu.DropDownItems.Add(item); } contextMenuStrip.Items.Add(fontSizeMenu); Color fontColor = settings.GetValue("sensorGadget.FontColor", Color.White); int fontColorArgb = fontColor.ToArgb(); SetFontColor(fontColor); IEnumerable <Color> providedColors = Enum.GetValues(typeof(KnownColor)) .Cast <KnownColor>() .Select(x => Color.FromKnownColor(x)) .Where(x => !x.IsSystemColor && x.Name.Length < 7); ToolStripMenuItem fontColorMenu = new ToolStripMenuItem("Font Color"); foreach (Color color in providedColors) { ToolStripItem item = new ToolStripMenuItem(color.Name) { Checked = fontColorArgb == color.ToArgb() }; item.Click += delegate { SetFontColor(color); settings.SetValue("sensorGadget.FontColor", color); foreach (ToolStripMenuItem mi in fontColorMenu.DropDownItems) { mi.Checked = mi == item; } }; fontColorMenu.DropDownItems.Add(item); } contextMenuStrip.Items.Add(fontColorMenu); contextMenuStrip.Items.Add(new ToolStripSeparator()); ToolStripMenuItem lockItem = new ToolStripMenuItem("Lock Position and Size"); contextMenuStrip.Items.Add(lockItem); contextMenuStrip.Items.Add(new ToolStripSeparator()); ToolStripMenuItem alwaysOnTopItem = new ToolStripMenuItem("Always on Top"); contextMenuStrip.Items.Add(alwaysOnTopItem); ToolStripMenuItem opacityMenu = new ToolStripMenuItem("Opacity"); contextMenuStrip.Items.Add(opacityMenu); Opacity = (byte)settings.GetValue("sensorGadget.Opacity", 255); for (int i = 0; i < 5; i++) { ToolStripMenuItem item = new ToolStripMenuItem((20 * (i + 1)).ToString() + " %"); byte o = (byte)(51 * (i + 1)); item.Checked = Opacity == o; item.Click += delegate { Opacity = o; settings.SetValue("sensorGadget.Opacity", Opacity); foreach (ToolStripMenuItem mi in opacityMenu.DropDownItems) { mi.Checked = mi == item; } }; opacityMenu.DropDownItems.Add(item); } ContextMenuStrip = contextMenuStrip; _hardwareNames = new UserOption("sensorGadget.Hardwarenames", true, hardwareNamesItem, settings); _hardwareNames.Changed += delegate { Resize(); }; UserOption alwaysOnTop = new UserOption("sensorGadget.AlwaysOnTop", false, alwaysOnTopItem, settings); alwaysOnTop.Changed += delegate { AlwaysOnTop = alwaysOnTop.Value; }; UserOption lockPositionAndSize = new UserOption("sensorGadget.LockPositionAndSize", false, lockItem, settings); lockPositionAndSize.Changed += delegate { 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; } }; SizeChanged += delegate { settings.SetValue("sensorGadget.Width", Size.Width); Redraw(); }; VisibleChanged += delegate { 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 { SendHideShowCommand(); }; }
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; 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); }; 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(); }; }
public UnitManager(PersistentSettings settings) { this.settings = settings; this.temperatureUnit = (TemperatureUnit)settings.GetValue("TemperatureUnit", (int)TemperatureUnit.Celsius); }
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 MainForm() { InitializeComponent(); this.settings = new PersistentSettings(); this.settings.Load(Path.ChangeExtension(Application.ExecutablePath, ".config")); // 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; nodeTextBoxText.DrawText += nodeTextBoxText_DrawText; nodeTextBoxACValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxDCValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxUnit.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))); } treeView.RowHeight = Math.Max(treeView.Font.Height + 1, 18); treeModel = new TreeModel(); showHiddenSettings = new UserOption("hiddenMenuItem", false, hiddenMenuItem, settings); showHiddenSettings.Changed += delegate(object sender, EventArgs e) { treeModel.ForceVisible = showHiddenSettings.Value; }; applyChanges = new UserOption("applyMenuItem", false, applyMenuItem, settings); forcePowerManager = new UserOption("forceMenuItem", false, forceMenuItem, settings); root = new ComputerNode(System.Environment.MachineName, settings); treeModel.Root = root; treeView.Model = treeModel; nodeTextBoxACValue.IsVisibleValueNeeded += nodeTextBoxAC_IsVisibleValueNeeded; nodeComboBoxACValue.IsVisibleValueNeeded += nodeComboBoxAC_IsVisibleValueNeeded; nodeComboBoxACValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxACValue.DataPropertyName = "AcValue"; nodeComboBoxACValue.DataPropertyName = "AcValue"; nodeTextBoxDCValue.IsVisibleValueNeeded += nodeTextBoxAC_IsVisibleValueNeeded; nodeComboBoxDCValue.IsVisibleValueNeeded += nodeComboBoxAC_IsVisibleValueNeeded; nodeComboBoxDCValue.DrawText += nodeTextBoxText_DrawText; nodeTextBoxDCValue.DataPropertyName = "DcValue"; nodeComboBoxDCValue.DataPropertyName = "DcValue"; 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 SensorNode(ISensor sensor, PersistentSettings settings, UnitManager unitManager) { Sensor = sensor; _settings = settings; _unitManager = unitManager; switch (sensor.SensorType) { case SensorType.Voltage: Format = "{0:F3} V"; break; case SensorType.Current: Format = "{0:F3} A"; break; case SensorType.Clock: Format = "{0:F1} 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:F1} 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.SmallData: Format = "{0:F1} MB"; break; case SensorType.Factor: Format = "{0:F3}"; break; case SensorType.Frequency: Format = "{0:F1} Hz"; break; case SensorType.Throughput: Format = "{0:F1} B/s"; break; case SensorType.TimeSpan: Format = "{0:g}"; break; case SensorType.Energy: Format = "{0:F0} mWh"; break; } bool hidden = settings.GetValue(new Identifier(sensor.Identifier, "hidden").ToString(), sensor.IsDefaultHidden); base.IsVisible = !hidden; Plot = settings.GetValue(new Identifier(sensor.Identifier, "plot").ToString(), false); string id = new Identifier(sensor.Identifier, "penColor").ToString(); if (settings.Contains(id)) { PenColor = settings.GetValue(id, Color.Black); } }
public FanController(byte id, List <ISensor> sensors, PersistentSettings settings) { this.id = id; this.sensors = sensors; this.settings = settings; identifier = new Identifier("FanController", id + ""); if (!settings.Contains(new Identifier(identifier, "name").ToString())) { // Create new instsance Name = "FanController " + id; value = new ValueString("", sensors); // Select the first IControl available foreach (ISensor s in sensors) { if (s.Control == null) { continue; } else { Controlled = s.Control; break; } } sourceSensor = sensors[0]; } else { // Load instance name = settings.GetValue(new Identifier(identifier, "name").ToString(), "FanController " + id); value = new ValueString(settings.GetValue(new Identifier(identifier, "valueString").ToString(), "0"), sensors); string c = settings.GetValue(new Identifier(identifier, "controlled").ToString(), null); foreach (ISensor s in sensors) { if (s.Control == null) { continue; } if (s.Control.Identifier.ToString() == c) { controlled = s.Control; break; } } } if (controlled == null) { throw new Exception("No supported fan control found"); } curve = new FanControlCurve(new Identifier(identifier, "curve"), settings); enabled = bool.Parse(settings.GetValue(new Identifier(identifier, "enabled").ToString(), "false")); hysteresis = float.Parse(settings.GetValue(new Identifier(identifier, "hysteresis").ToString(), "1").Replace('.', ',')); sourceSensor = SharedData.AllSensors.GetByIdentifier(settings.GetValue(new Identifier(identifier, "sourceSensor").ToString(), "0")); if (sourceSensor == null) { sourceSensor = sensors[0]; } source = (InputSource)int.Parse(settings.GetValue(new Identifier(identifier, "inputSource").ToString(), "0")); tryRestart = bool.Parse(settings.GetValue(new Identifier(identifier, "tryRestart").ToString(), "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; // Set the bounds immediately, so that our child components can be // properly placed. this.Bounds = new Rectangle { X = settings.GetValue("mainForm.Location.X", Location.X), Y = settings.GetValue("mainForm.Location.Y", Location.Y), Width = settings.GetValue("mainForm.Width", 470), Height = settings.GetValue("mainForm.Height", 640) }; 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; }; readNicSensors = new UserOption("nicMenuItem", true, nicMenuItem, settings); readNicSensors.Changed += delegate(object sender, EventArgs e) { computer.NICEnabled = readNicSensors.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; } }; sensorValuesTimeWindow = new UserRadioGroup("sensorValuesTimeWindow", 10, new[] { timeWindow30sMenuItem, timeWindow1minMenuItem, timeWindow2minMenuItem, timeWindow5minMenuItem, timeWindow10minMenuItem, timeWindow30minMenuItem, timeWindow1hMenuItem, timeWindow2hMenuItem, timeWindow6hMenuItem, timeWindow12hMenuItem, timeWindow24hMenuItem }, settings); sensorValuesTimeWindow.Changed += (sender, e) => { TimeSpan timeWindow = TimeSpan.Zero; switch (sensorValuesTimeWindow.Value) { case 0: timeWindow = new TimeSpan(0, 0, 30); break; case 1: timeWindow = new TimeSpan(0, 1, 0); break; case 2: timeWindow = new TimeSpan(0, 2, 0); break; case 3: timeWindow = new TimeSpan(0, 5, 0); break; case 4: timeWindow = new TimeSpan(0, 10, 0); break; case 5: timeWindow = new TimeSpan(0, 30, 0); break; case 6: timeWindow = new TimeSpan(1, 0, 0); break; case 7: timeWindow = new TimeSpan(2, 0, 0); break; case 8: timeWindow = new TimeSpan(6, 0, 0); break; case 9: timeWindow = new TimeSpan(12, 0, 0); break; case 10: timeWindow = new TimeSpan(24, 0, 0); break; } computer.Accept(new SensorVisitor(delegate(ISensor sensor) { sensor.ValuesTimeWindow = timeWindow; })); }; InitializePlotForm(); InitializeSplitter(); 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 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, 17); 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, 17); 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(); }; }