private void MainForm_Load(object sender, EventArgs e) { Rectangle newBounds = new Rectangle { X = settings.GetValue("mainForm.Location.X", Location.X), Y = settings.GetValue("mainForm.Location.Y", Location.Y), Width = settings.GetValue("mainForm.Width", DpiHelper.LogicalToDeviceUnits(470)), Height = settings.GetValue("mainForm.Height", DpiHelper.LogicalToDeviceUnits(640)) }; Rectangle fullWorkingArea = new Rectangle(int.MaxValue, int.MaxValue, int.MinValue, int.MinValue); foreach (Screen screen in Screen.AllScreens) { fullWorkingArea = Rectangle.Union(fullWorkingArea, screen.Bounds); } Rectangle intersection = Rectangle.Intersect(fullWorkingArea, newBounds); if (intersection.Width < 20 || intersection.Height < 20 || !settings.Contains("mainForm.Location.X") ) { newBounds.X = (Screen.PrimaryScreen.WorkingArea.Width / 2) - (newBounds.Width / 2); newBounds.Y = (Screen.PrimaryScreen.WorkingArea.Height / 2) - (newBounds.Height / 2); } this.Bounds = newBounds; if (!splitContainer.Panel2Collapsed) { splitContainer.SplitterDistance = settings.GetValue("splitContainer.SplitterDistance", splitContainer.SplitterDistance); } }
private void MainForm_Load(object sender, EventArgs e) { Rectangle newBounds = new Rectangle { X = settings.GetValue("mainForm.Location.X", Location.X), Y = settings.GetValue("mainForm.Location.Y", Location.Y), Width = settings.GetValue("mainForm.Width", DpiHelper.LogicalToDeviceUnits(470)), Height = settings.GetValue("mainForm.Height", DpiHelper.LogicalToDeviceUnits(640)) }; Rectangle fullWorkingArea = new Rectangle(int.MaxValue, int.MaxValue, int.MinValue, int.MinValue); foreach (Screen screen in Screen.AllScreens) { fullWorkingArea = Rectangle.Union(fullWorkingArea, screen.Bounds); } Rectangle intersection = Rectangle.Intersect(fullWorkingArea, newBounds); if (intersection.Width < 20 || intersection.Height < 20 || !settings.Contains("mainForm.Location.X") ) { newBounds.X = (Screen.PrimaryScreen.WorkingArea.Width / 2) - (newBounds.Width / 2); newBounds.Y = (Screen.PrimaryScreen.WorkingArea.Height / 2) - (newBounds.Height / 2); } this.Bounds = newBounds; // Register for receiving hardware change information (trough WndProc) DeviceNotification.RegisterDeviceNotification(Handle); }
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; 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(); 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(); } }; }