diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9838c1..81bb1cd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,31 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [0.53.0] - 2026-05-13 + +### Added +- **Navigation: 4 new groups** — Gaming & Profiles, Privacy & Security, + Customization, and Advanced groups added to sidebar navigation. +- **Gaming & Profiles (5 WIP tabs)** — Gaming Profile, Standby List Cleaner, + Timer Resolution, CPU Core Affinity, Display Profiles. +- **Privacy & Security (6 WIP tabs)** — Privacy & Telemetry, Debloater & Ads, + Browser Cleaner, Edge/OneDrive Remover, Defender Tweaks, Notification Blocker. +- **Customization (4 WIP tabs)** — Context Menu, Dark Mode Scheduler, Volume + Control, Environment Variables. +- **Advanced (4 WIP tabs)** — Restore Points, Profile Export/Import, CLI + Interface, System Report. +- **Monitor (3 new WIP tabs)** — File Lock Detector, Settings Watchdog, + Bandwidth Monitor added to existing Monitor group. +- **System (2 new WIP tabs)** — Task Scheduler, Boot Analyzer added to + existing System group. +- **Cleanup (1 new WIP tab)** — Scheduled Maintenance moved into Cleanup group. + +### Changed +- **Navigation structure** — reorganized from 9 groups to 12 groups for better + feature categorization as the app grows. +- **Placeholder descriptions** — improved all WIP placeholder descriptions with + clearer feature explanations and correct issue references. + ## [0.52.0] - 2026-05-13 ### Fixed diff --git a/SysManager/SysManager.IntegrationTests/MainWindowViewModelTests.cs b/SysManager/SysManager.IntegrationTests/MainWindowViewModelTests.cs index e45848dd..8fdc0c89 100644 --- a/SysManager/SysManager.IntegrationTests/MainWindowViewModelTests.cs +++ b/SysManager/SysManager.IntegrationTests/MainWindowViewModelTests.cs @@ -75,47 +75,91 @@ public void EachTabViewModel_HasCorrectType() } [Fact] - public void NavItems_ContainAll36() + public void NavItems_ContainAll56() { var vm = new MainWindowViewModel(); - Assert.Equal(36, vm.NavItems.Count); + Assert.Equal(56, vm.NavItems.Count); var ids = vm.NavItems.Select(n => n.Id).ToList(); + + // Dashboard Assert.Contains("nav-dashboard", ids); + + // System (8) Assert.Contains("nav-system-health", ids); Assert.Contains("nav-windows-update", ids); Assert.Contains("nav-performance", ids); Assert.Contains("nav-services", ids); Assert.Contains("nav-startup", ids); Assert.Contains("nav-windows-features", ids); + Assert.Contains("nav-task-scheduler", ids); + Assert.Contains("nav-boot-analyzer", ids); + + // Gaming & Profiles (5) + Assert.Contains("nav-gaming-profile", ids); + Assert.Contains("nav-standby-cleaner", ids); + Assert.Contains("nav-timer-resolution", ids); + Assert.Contains("nav-cpu-affinity", ids); + Assert.Contains("nav-display-profiles", ids); + + // Monitor (7) Assert.Contains("nav-processes", ids); Assert.Contains("nav-resource-history", ids); Assert.Contains("nav-app-alerts", ids); Assert.Contains("nav-privacy-monitor", ids); + Assert.Contains("nav-file-lock", ids); + Assert.Contains("nav-settings-watchdog", ids); + Assert.Contains("nav-bandwidth-monitor", ids); + + // Cleanup (5) Assert.Contains("nav-cleanup", ids); Assert.Contains("nav-deep-cleanup", ids); Assert.Contains("nav-shortcut-cleaner", ids); Assert.Contains("nav-file-shredder", ids); + Assert.Contains("nav-scheduled-maintenance", ids); + + // Storage (2) Assert.Contains("nav-disk-analyzer", ids); Assert.Contains("nav-duplicates", ids); + + // Network (6) Assert.Contains("nav-ping", ids); Assert.Contains("nav-traceroute", ids); Assert.Contains("nav-speed-test", ids); Assert.Contains("nav-network-repair", ids); Assert.Contains("nav-dns-changer", ids); Assert.Contains("nav-hosts-editor", ids); + + // Apps (4) Assert.Contains("nav-app-updates", ids); Assert.Contains("nav-bulk-installer", ids); Assert.Contains("nav-uninstaller", ids); Assert.Contains("nav-app-blocker", ids); + + // Privacy & Security (6) Assert.Contains("nav-privacy-settings", ids); + Assert.Contains("nav-debloater", ids); + Assert.Contains("nav-browser-cleaner", ids); + Assert.Contains("nav-edge-onedrive", ids); + Assert.Contains("nav-defender-tweaks", ids); + Assert.Contains("nav-notification-blocker", ids); + + // Customization (4) Assert.Contains("nav-context-menu", ids); - Assert.Contains("nav-restore-points", ids); - Assert.Contains("nav-scheduled-maintenance", ids); - Assert.Contains("nav-system-report", ids); + Assert.Contains("nav-dark-mode", ids); + Assert.Contains("nav-volume-control", ids); + Assert.Contains("nav-env-variables", ids); + + // Info (4) Assert.Contains("nav-drivers", ids); Assert.Contains("nav-battery", ids); Assert.Contains("nav-logs", ids); Assert.Contains("nav-about", ids); + + // Advanced (4) + Assert.Contains("nav-restore-points", ids); + Assert.Contains("nav-profile-export", ids); + Assert.Contains("nav-cli-interface", ids); + Assert.Contains("nav-system-report", ids); } [Fact] @@ -159,10 +203,10 @@ public void NavItems_AllHaveLabelsAndGlyphs() // ── NavGroup tests ────────────────────────────────────────────── [Fact] - public void NavGroups_Has9Groups() + public void NavGroups_Has12Groups() { var vm = new MainWindowViewModel(); - Assert.Equal(9, vm.NavGroups.Count); + Assert.Equal(12, vm.NavGroups.Count); } [Fact] @@ -195,11 +239,11 @@ public void NavGroups_SingleItemGroups_AreDashboardOnly() } [Fact] - public void NavGroups_SystemGroup_Contains6Items() + public void NavGroups_SystemGroup_Contains8Items() { var vm = new MainWindowViewModel(); var sys = vm.NavGroups.First(g => g.Id == "grp-system"); - Assert.Equal(6, sys.Children.Count); + Assert.Equal(8, sys.Children.Count); var ids = sys.Children.Select(c => c.Id).ToList(); Assert.Contains("nav-system-health", ids); Assert.Contains("nav-windows-update", ids); @@ -207,6 +251,8 @@ public void NavGroups_SystemGroup_Contains6Items() Assert.Contains("nav-services", ids); Assert.Contains("nav-startup", ids); Assert.Contains("nav-windows-features", ids); + Assert.Contains("nav-task-scheduler", ids); + Assert.Contains("nav-boot-analyzer", ids); } [Fact] @@ -220,12 +266,12 @@ public void NavGroups_StorageGroup_ContainsDiskAnalyzerAndDuplicates() } [Fact] - public void NavGroups_CleanupGroup_Has4Items() + public void NavGroups_CleanupGroup_Has5Items() { - // Cleanup now has: Quick, Deep, Shortcut Cleaner, File Shredder + // Cleanup now has: Quick, Deep, Shortcut Cleaner, File Shredder, Scheduled Maintenance var vm = new MainWindowViewModel(); var cleanup = vm.NavGroups.First(g => g.Id == "grp-cleanup"); - Assert.Equal(4, cleanup.Children.Count); + Assert.Equal(5, cleanup.Children.Count); } [Fact] diff --git a/SysManager/SysManager/ViewModels/MainWindowViewModel.cs b/SysManager/SysManager/ViewModels/MainWindowViewModel.cs index e51ccaf0..3c12c8e2 100644 --- a/SysManager/SysManager/ViewModels/MainWindowViewModel.cs +++ b/SysManager/SysManager/ViewModels/MainWindowViewModel.cs @@ -37,24 +37,63 @@ public partial class MainWindowViewModel : ObservableObject, IDisposable public AboutViewModel About { get; } public ServicesViewModel Services { get; } - // ── Placeholder ViewModels for planned features (WIP) ────────── + // ── Implemented ViewModels (non-DI resolved) ───────────────────── public WindowsFeaturesViewModel WindowsFeatures { get; } - public PlaceholderViewModel WipResourceHistory { get; private set; } = null!; public AppAlertsViewModel AppAlerts { get; } - public PlaceholderViewModel WipPrivacyMonitor { get; private set; } = null!; public ShortcutCleanerViewModel ShortcutCleaner { get; } + public AppBlockerViewModel AppBlocker { get; } + + // ── Placeholder ViewModels for planned features (WIP) ────────── + // Monitor group + public PlaceholderViewModel WipResourceHistory { get; private set; } = null!; + public PlaceholderViewModel WipPrivacyMonitor { get; private set; } = null!; + public PlaceholderViewModel WipFileLockDetector { get; private set; } = null!; + public PlaceholderViewModel WipSettingsWatchdog { get; private set; } = null!; + public PlaceholderViewModel WipBandwidthMonitor { get; private set; } = null!; + + // Gaming & Profiles group + public PlaceholderViewModel WipGamingProfile { get; private set; } = null!; + public PlaceholderViewModel WipStandbyListCleaner { get; private set; } = null!; + public PlaceholderViewModel WipTimerResolution { get; private set; } = null!; + public PlaceholderViewModel WipCpuAffinity { get; private set; } = null!; + public PlaceholderViewModel WipDisplayProfiles { get; private set; } = null!; + + // Cleanup group public PlaceholderViewModel WipFileShredder { get; private set; } = null!; + public PlaceholderViewModel WipScheduledMaintenance { get; private set; } = null!; + + // Network group public PlaceholderViewModel WipDnsChanger { get; private set; } = null!; public PlaceholderViewModel WipHostsEditor { get; private set; } = null!; + + // Apps group public PlaceholderViewModel WipBulkInstaller { get; private set; } = null!; - public AppBlockerViewModel AppBlocker { get; } + + // Privacy & Security group public PlaceholderViewModel WipPrivacySettings { get; private set; } = null!; + public PlaceholderViewModel WipDebloater { get; private set; } = null!; + public PlaceholderViewModel WipBrowserCleaner { get; private set; } = null!; + public PlaceholderViewModel WipEdgeOneDriveRemover { get; private set; } = null!; + public PlaceholderViewModel WipDefenderTweaks { get; private set; } = null!; + public PlaceholderViewModel WipNotificationBlocker { get; private set; } = null!; + + // Customization group public PlaceholderViewModel WipContextMenu { get; private set; } = null!; + public PlaceholderViewModel WipDarkModeScheduler { get; private set; } = null!; + public PlaceholderViewModel WipVolumeControl { get; private set; } = null!; + public PlaceholderViewModel WipEnvVariableEditor { get; private set; } = null!; + + // System group (additions) + public PlaceholderViewModel WipTaskScheduler { get; private set; } = null!; + public PlaceholderViewModel WipBootAnalyzer { get; private set; } = null!; + + // Advanced group public PlaceholderViewModel WipRestorePoints { get; private set; } = null!; - public PlaceholderViewModel WipScheduledMaintenance { get; private set; } = null!; + public PlaceholderViewModel WipProfileExportImport { get; private set; } = null!; + public PlaceholderViewModel WipCliInterface { get; private set; } = null!; public PlaceholderViewModel WipSystemReport { get; private set; } = null!; - /// Grouped sidebar tree (9 categories). + /// Grouped sidebar tree (12 categories). public ObservableCollection NavGroups { get; } = new(); /// Flat list of every leaf NavItem (backward compat + lookup). @@ -145,17 +184,55 @@ public MainWindowViewModel() private void InitPlaceholders() { // ── WIP placeholders for planned features ────────────────────── - WipResourceHistory = new PlaceholderViewModel("Resource History", "Historical CPU, RAM, GPU and temperature graphs.", "377"); - WipPrivacyMonitor = new PlaceholderViewModel("Privacy Monitor", "Monitor and alert on webcam, microphone, and location access.", "380"); - WipFileShredder = new PlaceholderViewModel("File Shredder", "Securely delete files beyond recovery.", "386"); - WipDnsChanger = new PlaceholderViewModel("DNS Changer", "Quickly switch DNS servers for any network adapter.", "382"); - WipHostsEditor = new PlaceholderViewModel("Hosts Editor", "Edit the Windows hosts file with a friendly UI.", "382"); - WipBulkInstaller = new PlaceholderViewModel("Bulk Installer", "Install multiple applications at once via winget.", "387"); - WipPrivacySettings = new PlaceholderViewModel("Privacy Settings", "Windows debloat and privacy toggles.", "384"); - WipContextMenu = new PlaceholderViewModel("Context Menu", "Manage right-click context menu entries.", "385"); - WipRestorePoints = new PlaceholderViewModel("Restore Points", "Create and manage system restore points.", "383"); - WipScheduledMaintenance = new PlaceholderViewModel("Scheduled Maintenance", "Automate cleanup and maintenance tasks.", "383"); - WipSystemReport = new PlaceholderViewModel("System Report", "Comprehensive system info export.", "389"); + + // Monitor group + WipResourceHistory = new PlaceholderViewModel("Resource History", "Historical CPU, RAM, GPU and temperature graphs with timeline.", "#13"); + WipPrivacyMonitor = new PlaceholderViewModel("Privacy Monitor", "Monitor and alert on webcam, microphone, and location access in real-time.", "#12"); + WipFileLockDetector = new PlaceholderViewModel("File Lock Detector", "Find which process is locking a file and optionally release the handle.", "#333"); + WipSettingsWatchdog = new PlaceholderViewModel("Settings Watchdog", "Detect when Windows Update resets your settings and offer one-click restore.", "#335"); + WipBandwidthMonitor = new PlaceholderViewModel("Bandwidth Monitor", "Real-time per-app network usage with history graphs and alerts.", "#337"); + + // Gaming & Profiles group + WipGamingProfile = new PlaceholderViewModel("Gaming Profile", "One-click game mode: kill background processes, clear RAM, set timer resolution, auto-revert on game exit.", "#324"); + WipStandbyListCleaner = new PlaceholderViewModel("Standby List Cleaner", "Automatic standby memory purging when free RAM drops below threshold (ISLC-style).", "#325"); + WipTimerResolution = new PlaceholderViewModel("Timer Resolution", "Set Windows timer to 0.5ms for reduced input lag in competitive games.", "#326"); + WipCpuAffinity = new PlaceholderViewModel("CPU Core Affinity", "Set per-game CPU affinity with P-core/E-core awareness for Intel hybrid CPUs.", "#327"); + WipDisplayProfiles = new PlaceholderViewModel("Display Profiles", "Quick-switch refresh rate, HDR, resolution presets (Gaming/Work/Movie).", "#328"); + + // Cleanup group + WipFileShredder = new PlaceholderViewModel("File Shredder", "Securely delete files beyond recovery with multi-pass overwrite (DoD/Gutmann).", "#7"); + WipScheduledMaintenance = new PlaceholderViewModel("Scheduled Maintenance", "Automate cleanup, RAM trim, and health checks on schedule or idle trigger.", "#10"); + + // Network group + WipDnsChanger = new PlaceholderViewModel("DNS Changer", "Quick-switch DNS with benchmark, DNS-over-HTTPS, and TCP/IP optimization.", "#11"); + WipHostsEditor = new PlaceholderViewModel("Hosts Editor", "GUI hosts file editor with domain toggle, import block lists, and backup/restore.", "#11"); + + // Apps group + WipBulkInstaller = new PlaceholderViewModel("Bulk Installer", "Curated checkbox app installer via winget with presets (Gamer/Dev/Creative).", "#6"); + + // Privacy & Security group + WipPrivacySettings = new PlaceholderViewModel("Privacy & Telemetry", "80-100+ toggles for telemetry, ads, AI/Copilot, location, diagnostics with presets.", "#9"); + WipDebloater = new PlaceholderViewModel("Debloater & Ads", "Remove UWP bloatware, disable all Windows ads, remove Copilot/Recall/AI features.", "#9"); + WipBrowserCleaner = new PlaceholderViewModel("Browser Cleaner", "Per-browser cache/cookies/history cleanup with keep-list for important cookies.", "#336"); + WipEdgeOneDriveRemover = new PlaceholderViewModel("Edge/OneDrive Remover", "Safely remove or disable Edge and OneDrive with full restore capability.", "#339"); + WipDefenderTweaks = new PlaceholderViewModel("Defender Tweaks", "Toggle SmartScreen, manage exclusions, configure PUA and cloud protection.", "#344"); + WipNotificationBlocker = new PlaceholderViewModel("Notification Blocker", "Suppress annoying app pop-ups (update nags, trial reminders) with allowlist.", "#340"); + + // Customization group + WipContextMenu = new PlaceholderViewModel("Context Menu", "Manage right-click entries, restore Win10 full menu, add custom items.", "#8"); + WipDarkModeScheduler = new PlaceholderViewModel("Dark Mode Scheduler", "Auto light/dark theme + color temperature (f.lux-style) on schedule or sunset.", "#329"); + WipVolumeControl = new PlaceholderViewModel("Volume Control", "Per-app volume mixer with output device routing and profile presets.", "#332"); + WipEnvVariableEditor = new PlaceholderViewModel("Environment Variables", "GUI PATH editor with drag-reorder, duplicate detection, and path validation.", "#331"); + + // System group (additions) + WipTaskScheduler = new PlaceholderViewModel("Task Scheduler", "Browse and toggle scheduled tasks with color-coded safety indicators.", "#334"); + WipBootAnalyzer = new PlaceholderViewModel("Boot Analyzer", "Measure boot time breakdown per service/driver with optimization recommendations.", "#343"); + + // Advanced group + WipRestorePoints = new PlaceholderViewModel("Restore Points", "Create and manage system restore points with size tracking.", "#10"); + WipProfileExportImport = new PlaceholderViewModel("Profile Export/Import", "Export SysManager configuration as JSON, import on another PC.", "#341"); + WipCliInterface = new PlaceholderViewModel("CLI Interface", "Command-line control: sysmanager --cleanup --apply-profile Gaming --silent.", "#342"); + WipSystemReport = new PlaceholderViewModel("System Report", "Comprehensive system info export (better than DxDiag) in HTML/JSON.", "#4"); } private void InitNavigation() @@ -165,7 +242,7 @@ private void InitNavigation() Title = IsElevated ? "SysManager — Administrator" : "SysManager"; Log.Information("MainWindow initialized. Elevated: {IsElevated}", IsElevated); - // ── Sidebar tree: 9 groups, 36 leaf items ────────────────────── + // ── Sidebar tree: 12 groups ──────────────────────────────────── // Views are instantiated lazily on first access — lets unit tests // construct the VM on an MTA thread without pulling WPF resources in. @@ -174,42 +251,60 @@ private void InitNavigation() new NavItem { Id = "nav-dashboard", Label = "Dashboard", Glyph = "\uE80F", Content = Dashboard, ViewType = typeof(Views.DashboardView) }, }}; - // 🔧 System (6) + // 🔧 System (8) var grpSystem = new NavGroup { Id = "grp-system", Label = "System", Glyph = "\uE912", - Subtitle = "Health · WinUpdate · Perf · Services · Startup · Features", - Tooltip = "System Health\nWindows Update\nPerformance Mode\nServices\nStartup Manager\nWindows Features", + Subtitle = "Health · WinUpdate · Perf · Services · Startup · Features · Tasks · Boot", + Tooltip = "System Health\nWindows Update\nPerformance Mode\nServices\nStartup Manager\nWindows Features\nTask Scheduler\nBoot Analyzer", Children = { - new NavItem { Id = "nav-system-health", Label = "System Health", Glyph = "\uE9D9", Content = SystemHealth, ViewType = typeof(Views.SystemHealthView) }, - new NavItem { Id = "nav-windows-update", Label = "Windows Update", Glyph = "\uE895", Content = WindowsUpdate, ViewType = typeof(Views.WindowsUpdateView) }, - new NavItem { Id = "nav-performance", Label = "Performance Mode", Glyph = "\uE945", Content = Performance, ViewType = typeof(Views.PerformanceView) }, - new NavItem { Id = "nav-services", Label = "Services", Glyph = "\uE912", Content = Services, ViewType = typeof(Views.ServicesView) }, - new NavItem { Id = "nav-startup", Label = "Startup Manager", Glyph = "\uE7B5", Content = Startup, ViewType = typeof(Views.StartupView) }, - new NavItem { Id = "nav-windows-features", Label = "Windows Features", Glyph = "\uE9CE", Content = WindowsFeatures, ViewType = typeof(Views.WindowsFeaturesView) }, + new NavItem { Id = "nav-system-health", Label = "System Health", Glyph = "\uE9D9", Content = SystemHealth, ViewType = typeof(Views.SystemHealthView) }, + new NavItem { Id = "nav-windows-update", Label = "Windows Update", Glyph = "\uE895", Content = WindowsUpdate, ViewType = typeof(Views.WindowsUpdateView) }, + new NavItem { Id = "nav-performance", Label = "Performance Mode", Glyph = "\uE945", Content = Performance, ViewType = typeof(Views.PerformanceView) }, + new NavItem { Id = "nav-services", Label = "Services", Glyph = "\uE912", Content = Services, ViewType = typeof(Views.ServicesView) }, + new NavItem { Id = "nav-startup", Label = "Startup Manager", Glyph = "\uE7B5", Content = Startup, ViewType = typeof(Views.StartupView) }, + new NavItem { Id = "nav-windows-features", Label = "Windows Features", Glyph = "\uE9CE", Content = WindowsFeatures, ViewType = typeof(Views.WindowsFeaturesView) }, + new NavItem { Id = "nav-task-scheduler", Label = "Task Scheduler", Glyph = "\uE916", Content = WipTaskScheduler, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-boot-analyzer", Label = "Boot Analyzer", Glyph = "\uE7F8", Content = WipBootAnalyzer, ViewType = typeof(Views.PlaceholderView) }, }}; - // 📊 Monitor (4) — NEW GROUP + // 🎮 Gaming & Profiles (5) — NEW GROUP + var grpGaming = new NavGroup { Id = "grp-gaming", Label = "Gaming & Profiles", Glyph = "\uE7FC", + Subtitle = "Game Mode · Standby · Timer · Affinity · Display", + Tooltip = "Gaming Profile\nStandby List Cleaner\nTimer Resolution\nCPU Core Affinity\nDisplay Profiles", + Children = { + new NavItem { Id = "nav-gaming-profile", Label = "Gaming Profile", Glyph = "\uE7FC", Content = WipGamingProfile, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-standby-cleaner", Label = "Standby List Cleaner", Glyph = "\uE945", Content = WipStandbyListCleaner, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-timer-resolution", Label = "Timer Resolution", Glyph = "\uE916", Content = WipTimerResolution, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-cpu-affinity", Label = "CPU Core Affinity", Glyph = "\uE950", Content = WipCpuAffinity, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-display-profiles", Label = "Display Profiles", Glyph = "\uE7F4", Content = WipDisplayProfiles, ViewType = typeof(Views.PlaceholderView) }, + }}; + + // 📊 Monitor (7) var grpMonitor = new NavGroup { Id = "grp-monitor", Label = "Monitor", Glyph = "\uE9D9", - Subtitle = "Processes · Resources · Alerts · Privacy", - Tooltip = "Process Manager\nResource History\nApp Alerts\nPrivacy Monitor", + Subtitle = "Processes · Resources · Alerts · Privacy · Lock · Watchdog · Bandwidth", + Tooltip = "Process Manager\nResource History\nApp Alerts\nPrivacy Monitor\nFile Lock Detector\nSettings Watchdog\nBandwidth Monitor", Children = { - new NavItem { Id = "nav-processes", Label = "Process Manager", Glyph = "\uEBC4", Content = ProcessManager, ViewType = typeof(Views.ProcessManagerView) }, - new NavItem { Id = "nav-resource-history", Label = "Resource History", Glyph = "\uE9D9", Content = WipResourceHistory, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-app-alerts", Label = "App Alerts", Glyph = "\uEA8F", Content = AppAlerts, ViewType = typeof(Views.AppAlertsView) }, - new NavItem { Id = "nav-privacy-monitor", Label = "Privacy Monitor", Glyph = "\uE727", Content = WipPrivacyMonitor, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-processes", Label = "Process Manager", Glyph = "\uEBC4", Content = ProcessManager, ViewType = typeof(Views.ProcessManagerView) }, + new NavItem { Id = "nav-resource-history", Label = "Resource History", Glyph = "\uE9D9", Content = WipResourceHistory, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-app-alerts", Label = "App Alerts", Glyph = "\uEA8F", Content = AppAlerts, ViewType = typeof(Views.AppAlertsView) }, + new NavItem { Id = "nav-privacy-monitor", Label = "Privacy Monitor", Glyph = "\uE727", Content = WipPrivacyMonitor, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-file-lock", Label = "File Lock Detector", Glyph = "\uE72E", Content = WipFileLockDetector, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-settings-watchdog", Label = "Settings Watchdog", Glyph = "\uE7BA", Content = WipSettingsWatchdog, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-bandwidth-monitor", Label = "Bandwidth Monitor", Glyph = "\uE839", Content = WipBandwidthMonitor, ViewType = typeof(Views.PlaceholderView) }, }}; - // 🧹 Cleanup (4) + // 🧹 Cleanup (5) var grpCleanup = new NavGroup { Id = "grp-cleanup", Label = "Cleanup", Glyph = "\uE74D", - Subtitle = "Quick · Deep · Shortcuts · Shredder", - Tooltip = "Quick Cleanup\nDeep Cleanup\nShortcut Cleaner\nFile Shredder", + Subtitle = "Quick · Deep · Shortcuts · Shredder · Maintenance", + Tooltip = "Quick Cleanup\nDeep Cleanup\nShortcut Cleaner\nFile Shredder\nScheduled Maintenance", Children = { - new NavItem { Id = "nav-cleanup", Label = "Quick Cleanup", Glyph = "\uE74D", Content = Cleanup, ViewType = typeof(Views.CleanupView) }, - new NavItem { Id = "nav-deep-cleanup", Label = "Deep Cleanup", Glyph = "\uE81E", Content = DeepCleanup, ViewType = typeof(Views.DeepCleanupView) }, - new NavItem { Id = "nav-shortcut-cleaner", Label = "Shortcut Cleaner", Glyph = "\uE71B", Content = ShortcutCleaner, ViewType = typeof(Views.ShortcutCleanerView) }, - new NavItem { Id = "nav-file-shredder", Label = "File Shredder", Glyph = "\uE74D", Content = WipFileShredder, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-cleanup", Label = "Quick Cleanup", Glyph = "\uE74D", Content = Cleanup, ViewType = typeof(Views.CleanupView) }, + new NavItem { Id = "nav-deep-cleanup", Label = "Deep Cleanup", Glyph = "\uE81E", Content = DeepCleanup, ViewType = typeof(Views.DeepCleanupView) }, + new NavItem { Id = "nav-shortcut-cleaner", Label = "Shortcut Cleaner", Glyph = "\uE71B", Content = ShortcutCleaner, ViewType = typeof(Views.ShortcutCleanerView) }, + new NavItem { Id = "nav-file-shredder", Label = "File Shredder", Glyph = "\uE74D", Content = WipFileShredder, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-scheduled-maintenance", Label = "Scheduled Maintenance", Glyph = "\uE823", Content = WipScheduledMaintenance, ViewType = typeof(Views.PlaceholderView) }, }}; - // 💾 Storage (2) — unchanged + // 💾 Storage (2) var grpStorage = new NavGroup { Id = "grp-storage", Label = "Storage", Glyph = "\uE958", Subtitle = "Disk Analyzer · Duplicate Finder", Tooltip = "Disk Analyzer\nDuplicate Finder", @@ -236,22 +331,34 @@ private void InitNavigation() Subtitle = "Updates · Installer · Uninstaller · Blocker", Tooltip = "App Updates\nBulk Installer\nUninstaller\nApp Blocker", Children = { - new NavItem { Id = "nav-app-updates", Label = "App Updates", Glyph = "\uE7B8", Content = AppUpdates, ViewType = typeof(Views.AppUpdatesView) }, - new NavItem { Id = "nav-bulk-installer", Label = "Bulk Installer", Glyph = "\uE896", Content = WipBulkInstaller, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-uninstaller", Label = "Uninstaller", Glyph = "\uE738", Content = Uninstaller, ViewType = typeof(Views.UninstallerView) }, - new NavItem { Id = "nav-app-blocker", Label = "App Blocker", Glyph = "\uE8F8", Content = AppBlocker, ViewType = typeof(Views.AppBlockerView) }, + new NavItem { Id = "nav-app-updates", Label = "App Updates", Glyph = "\uE7B8", Content = AppUpdates, ViewType = typeof(Views.AppUpdatesView) }, + new NavItem { Id = "nav-bulk-installer", Label = "Bulk Installer", Glyph = "\uE896", Content = WipBulkInstaller, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-uninstaller", Label = "Uninstaller", Glyph = "\uE738", Content = Uninstaller, ViewType = typeof(Views.UninstallerView) }, + new NavItem { Id = "nav-app-blocker", Label = "App Blocker", Glyph = "\uE8F8", Content = AppBlocker, ViewType = typeof(Views.AppBlockerView) }, }}; - // 🛡️ Control (5) — NEW GROUP - var grpControl = new NavGroup { Id = "grp-control", Label = "Control", Glyph = "\uE83D", - Subtitle = "Privacy · Context Menu · Restore · Maintenance · Report", - Tooltip = "Privacy Settings\nContext Menu\nRestore Points\nScheduled Maintenance\nSystem Report", + // 🛡️ Privacy & Security (6) — NEW GROUP + var grpPrivacy = new NavGroup { Id = "grp-privacy", Label = "Privacy & Security", Glyph = "\uE72E", + Subtitle = "Telemetry · Debloat · Browser · Edge/OneDrive · Defender · Notifications", + Tooltip = "Privacy & Telemetry\nDebloater & Ads\nBrowser Cleaner\nEdge/OneDrive Remover\nDefender Tweaks\nNotification Blocker", Children = { - new NavItem { Id = "nav-privacy-settings", Label = "Privacy Settings", Glyph = "\uE72E", Content = WipPrivacySettings, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-context-menu", Label = "Context Menu", Glyph = "\uE700", Content = WipContextMenu, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-restore-points", Label = "Restore Points", Glyph = "\uE7AD", Content = WipRestorePoints, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-scheduled-maintenance", Label = "Scheduled Maintenance", Glyph = "\uE823", Content = WipScheduledMaintenance, ViewType = typeof(Views.PlaceholderView) }, - new NavItem { Id = "nav-system-report", Label = "System Report", Glyph = "\uE9F9", Content = WipSystemReport, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-privacy-settings", Label = "Privacy & Telemetry", Glyph = "\uE72E", Content = WipPrivacySettings, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-debloater", Label = "Debloater & Ads", Glyph = "\uE74D", Content = WipDebloater, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-browser-cleaner", Label = "Browser Cleaner", Glyph = "\uEB41", Content = WipBrowserCleaner, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-edge-onedrive", Label = "Edge/OneDrive Remover", Glyph = "\uE738", Content = WipEdgeOneDriveRemover, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-defender-tweaks", Label = "Defender Tweaks", Glyph = "\uE83D", Content = WipDefenderTweaks, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-notification-blocker", Label = "Notification Blocker", Glyph = "\uE7ED", Content = WipNotificationBlocker, ViewType = typeof(Views.PlaceholderView) }, + }}; + + // 🎨 Customization (4) — NEW GROUP + var grpCustomization = new NavGroup { Id = "grp-customization", Label = "Customization", Glyph = "\uE771", + Subtitle = "Context Menu · Dark Mode · Volume · Env Variables", + Tooltip = "Context Menu\nDark Mode Scheduler\nVolume Control\nEnvironment Variables", + Children = { + new NavItem { Id = "nav-context-menu", Label = "Context Menu", Glyph = "\uE700", Content = WipContextMenu, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-dark-mode", Label = "Dark Mode Scheduler", Glyph = "\uE793", Content = WipDarkModeScheduler, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-volume-control", Label = "Volume Control", Glyph = "\uE767", Content = WipVolumeControl, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-env-variables", Label = "Environment Variables", Glyph = "\uE943", Content = WipEnvVariableEditor, ViewType = typeof(Views.PlaceholderView) }, }}; // ℹ️ Info (4) @@ -265,15 +372,29 @@ private void InitNavigation() new NavItem { Id = "nav-about", Label = "About", Glyph = "\uE946", Content = About, ViewType = typeof(Views.AboutView) }, }}; + // ⚙️ Advanced (4) — NEW GROUP + var grpAdvanced = new NavGroup { Id = "grp-advanced", Label = "Advanced", Glyph = "\uE713", + Subtitle = "Restore · Export/Import · CLI · Report", + Tooltip = "Restore Points\nProfile Export/Import\nCLI Interface\nSystem Report", + Children = { + new NavItem { Id = "nav-restore-points", Label = "Restore Points", Glyph = "\uE7AD", Content = WipRestorePoints, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-profile-export", Label = "Profile Export/Import", Glyph = "\uE8B5", Content = WipProfileExportImport, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-cli-interface", Label = "CLI Interface", Glyph = "\uE756", Content = WipCliInterface, ViewType = typeof(Views.PlaceholderView) }, + new NavItem { Id = "nav-system-report", Label = "System Report", Glyph = "\uE9F9", Content = WipSystemReport, ViewType = typeof(Views.PlaceholderView) }, + }}; + NavGroups.Add(grpDashboard); NavGroups.Add(grpSystem); + NavGroups.Add(grpGaming); NavGroups.Add(grpMonitor); NavGroups.Add(grpCleanup); NavGroups.Add(grpStorage); NavGroups.Add(grpNetwork); NavGroups.Add(grpApps); - NavGroups.Add(grpControl); + NavGroups.Add(grpPrivacy); + NavGroups.Add(grpCustomization); NavGroups.Add(grpInfo); + NavGroups.Add(grpAdvanced); // Flat index for backward compat (Open*Tab commands, tests, automation). foreach (var g in NavGroups) @@ -346,20 +467,43 @@ public void Dispose() Services?.Dispose(); NetworkShared?.Dispose(); WindowsFeatures?.Dispose(); - WipResourceHistory?.Dispose(); AppAlerts?.Dispose(); - WipPrivacyMonitor?.Dispose(); ShortcutCleaner?.Dispose(); + AppBlocker?.Dispose(); + + // WIP placeholders + WipResourceHistory?.Dispose(); + WipPrivacyMonitor?.Dispose(); + WipFileLockDetector?.Dispose(); + WipSettingsWatchdog?.Dispose(); + WipBandwidthMonitor?.Dispose(); + WipGamingProfile?.Dispose(); + WipStandbyListCleaner?.Dispose(); + WipTimerResolution?.Dispose(); + WipCpuAffinity?.Dispose(); + WipDisplayProfiles?.Dispose(); WipFileShredder?.Dispose(); + WipScheduledMaintenance?.Dispose(); WipDnsChanger?.Dispose(); WipHostsEditor?.Dispose(); WipBulkInstaller?.Dispose(); - AppBlocker?.Dispose(); WipPrivacySettings?.Dispose(); + WipDebloater?.Dispose(); + WipBrowserCleaner?.Dispose(); + WipEdgeOneDriveRemover?.Dispose(); + WipDefenderTweaks?.Dispose(); + WipNotificationBlocker?.Dispose(); WipContextMenu?.Dispose(); + WipDarkModeScheduler?.Dispose(); + WipVolumeControl?.Dispose(); + WipEnvVariableEditor?.Dispose(); + WipTaskScheduler?.Dispose(); + WipBootAnalyzer?.Dispose(); WipRestorePoints?.Dispose(); - WipScheduledMaintenance?.Dispose(); + WipProfileExportImport?.Dispose(); + WipCliInterface?.Dispose(); WipSystemReport?.Dispose(); + GC.SuppressFinalize(this); } }