using System.Windows; using Notification.Core; namespace ytLive.ViewModels; /// /// App Settings as a right-edge drawer (creator ruling 2026-11-01): the gear rail tab opens it /// immediately, in the same exclusive-slide pattern as Stream Settings / YPP / Socials / TEST. /// /// It is a separate flag from because the overlay shell now /// only carries Report Bug / Feature Request / About — settings stopped being a modal. /// public partial class MainViewModel { private bool _settingsDrawerOpen; private NotificationPosition _toastPosition = NotificationPosition.BottomRight; public NotificationPosition ToastPosition { get => _toastPosition; set { if (!IsSupportedToastPosition(value) || !SetProperty(ref _toastPosition, value)) return; _layoutStore.SaveNotificationPosition(value); OnPropertyChanged(nameof(ToastAreaMargin)); } } public Thickness ToastAreaMargin => ToastPosition switch { NotificationPosition.TopLeft => new Thickness(12, 12, 0, 0), NotificationPosition.TopRight => new Thickness(0, 12, 12, 0), NotificationPosition.CenterLeft => new Thickness(12, 0, 0, 0), NotificationPosition.CenterRight => new Thickness(0, 0, 12, 0), NotificationPosition.BottomLeft => new Thickness(12, 0, 0, 96), _ => new Thickness(0, 0, 12, 96), }; private static bool IsSupportedToastPosition(NotificationPosition position) => position is NotificationPosition.TopLeft or NotificationPosition.TopRight or NotificationPosition.CenterLeft or NotificationPosition.CenterRight or NotificationPosition.BottomLeft or NotificationPosition.BottomRight; public bool SettingsDrawerOpen { get => _settingsDrawerOpen; private set => SetProperty(ref _settingsDrawerOpen, value); } internal void ToggleSettingsDrawer() { if (_settingsDrawerOpen) { SettingsDrawerOpen = false; return; } // One drawer at a time, like the rail's other tabs. BroadcastForm.IsDrawerOpen = false; Ypp.IsDrawerOpen = false; TestSession.IsDrawerOpen = false; if (SocialsDrawerOpen) CloseSocialsDrawer(); SettingsDrawerOpen = true; } /// Called by the other drawers when they open, so settings yields to them — and by the /// window's click-outside guard, so the gear tab retracts like every other drawer (2026-11-05). internal void CloseSettingsDrawerIfOpen() { if (_settingsDrawerOpen) SettingsDrawerOpen = false; } }