private RightImageToolStripMenuItem GetMenuItemForSnapshot(Snapshot snapshot, bool showMonitorIcons, long maxNumMonitorPixels) { var menuItem = new RightImageToolStripMenuItem(snapshot.GetDisplayString()) { Tag = snapshot }; menuItem.Click += snapshot.Restore; menuItem.MouseEnter += SnapshotMousedOver; if (snapshot.UserInitiated) { menuItem.Font = new Font(menuItem.Font, FontStyle.Bold); } // monitor icons var monitorSizes = new List <float>(); if (showMonitorIcons) { foreach (var monitorPixels in snapshot.MonitorPixelCounts) { monitorSizes.Add((float)Math.Sqrt((float)monitorPixels / maxNumMonitorPixels)); } } menuItem.MonitorSizes = monitorSizes.ToArray(); return(menuItem); }
private void UpdateRestoreChoicesInMenu() { // construct the new list of menu items, then populate them // this function is idempotent var snapshotsOldestFirst = new List <Snapshot>(CondenseSnapshots(_snapshots, 8)); var newMenuItems = new List <ToolStripItem> { quitToolStripMenuItem, aboutToolStripMenuItem, snapshotListEndLine }; var maxNumMonitors = 0; var maxNumMonitorPixels = 0L; var showMonitorIcons = false; foreach (var snapshot in snapshotsOldestFirst) { if (maxNumMonitors != snapshot.NumMonitors && maxNumMonitors != 0) { showMonitorIcons = true; } maxNumMonitors = Math.Max(maxNumMonitors, snapshot.NumMonitors); foreach (var monitorPixels in snapshot.MonitorPixelCounts) { maxNumMonitorPixels = Math.Max(maxNumMonitorPixels, monitorPixels); } } foreach (var snapshot in snapshotsOldestFirst) { try { RightImageToolStripMenuItem menuItem = GetMenuItemForSnapshot(snapshot, showMonitorIcons, maxNumMonitorPixels); newMenuItems.Add(menuItem); } catch (Exception ex) { Logger.Log($"Error creating menu item: {ex}"); } } newMenuItems.Add(justNowToolStripMenuItem); newMenuItems.Add(snapshotListStartLine); newMenuItems.Add(clearSnapshotsToolStripMenuItem); newMenuItems.Add(snapshotToolStripMenuItem); // If showing monitor icons, subtract 34 pixels from the right due to too much right padding. try { RemovePaddingForIcons(showMonitorIcons); } catch (Exception ex) { Logger.Log($"Error modifying padding: {ex}"); } // If showing monitor icons, make the menu item width 50 + 22 * maxNumMonitors pixels wider to make room for the icons. try { AdjustPaddingForIcons(showMonitorIcons, maxNumMonitors); } catch (Exception ex) { Logger.Log($"Error modifying padding for icons: {ex}"); } trayMenu.Items.Clear(); trayMenu.Items.AddRange(newMenuItems.ToArray()); }