using System; using System.Drawing; using TweetDuck.Core.Controls; using TweetDuck.Core.Notification; using TweetDuck.Core.Other; using TweetDuck.Core.Utils; using TweetDuck.Data; namespace TweetDuck.Configuration{ sealed class UserConfig : ConfigManager.BaseConfig{ // CONFIGURATION DATA public bool FirstRun { get; set; } = true; public bool AllowDataCollection { get; set; } = false; public WindowState BrowserWindow { get; set; } = new WindowState(); public Size PluginsWindowSize { get; set; } = Size.Empty; public bool ExpandLinksOnHover { get; set; } = true; public bool OpenSearchInFirstColumn { get; set; } = true; public bool KeepLikeFollowDialogsOpen { get; set; } = true; public bool BestImageQuality { get; set; } = true; public bool EnableAnimatedImages { get; set; } = true; private bool _enableSmoothScrolling = true; private bool _enableTouchAdjustment = false; private string _customCefArgs = null; public string BrowserPath { get; set; } = null; public bool IgnoreTrackingUrlWarning { get; set; } = false; public string SearchEngineUrl { get; set; } = null; private int _zoomLevel = 100; public int VideoPlayerVolume { get; set; } = 50; public bool EnableSpellCheck { get; set; } = false; private string _spellCheckLanguage = "en-US"; public string TranslationTarget { get; set; } = "en"; private TrayIcon.Behavior _trayBehavior = TrayIcon.Behavior.Disabled; public bool EnableTrayHighlight { get; set; } = true; public bool EnableUpdateCheck { get; set; } = true; public string DismissedUpdate { get; set; } = null; public bool DisplayNotificationColumn { get; set; } = false; public bool NotificationMediaPreviews { get; set; } = true; public bool NotificationSkipOnLinkClick { get; set; } = false; public bool NotificationNonIntrusiveMode { get; set; } = true; public int NotificationIdlePauseSeconds { get; set; } = 0; public bool DisplayNotificationTimer { get; set; } = true; public bool NotificationTimerCountDown { get; set; } = false; public int NotificationDurationValue { get; set; } = 25; public TweetNotification.Position NotificationPosition { get; set; } = TweetNotification.Position.TopRight; public Point CustomNotificationPosition { get; set; } = ControlExtensions.InvisibleLocation; public int NotificationDisplay { get; set; } = 0; public int NotificationEdgeDistance { get; set; } = 8; public TweetNotification.Size NotificationSize { get; set; } = TweetNotification.Size.Auto; public Size CustomNotificationSize { get; set; } = Size.Empty; public int NotificationScrollSpeed { get; set; } = 100; private string _notificationSoundPath; private int _notificationSoundVolume = 100; private bool _muteNotifications; public string CustomBrowserCSS { get; set; } = null; public string CustomNotificationCSS { get; set; } = null; // SPECIAL PROPERTIES public bool IsCustomNotificationPositionSet => CustomNotificationPosition != ControlExtensions.InvisibleLocation; public bool IsCustomNotificationSizeSet => CustomNotificationSize != Size.Empty; public bool IsCustomSoundNotificationSet => NotificationSoundPath != string.Empty; public TwitterUtils.ImageQuality TwitterImageQuality => BestImageQuality ? TwitterUtils.ImageQuality.Orig : TwitterUtils.ImageQuality.Default; public string NotificationSoundPath{ get => _notificationSoundPath ?? string.Empty; set => UpdatePropertyWithEvent(ref _notificationSoundPath, value, SoundNotificationChanged); } public int NotificationSoundVolume{ get => _notificationSoundVolume; set => UpdatePropertyWithEvent(ref _notificationSoundVolume, value, SoundNotificationChanged); } public bool MuteNotifications{ get => _muteNotifications; set => UpdatePropertyWithEvent(ref _muteNotifications, value, MuteToggled); } public int ZoomLevel{ get => _zoomLevel; set => UpdatePropertyWithEvent(ref _zoomLevel, value, ZoomLevelChanged); } public TrayIcon.Behavior TrayBehavior{ get => _trayBehavior; set => UpdatePropertyWithEvent(ref _trayBehavior, value, TrayBehaviorChanged); } public bool EnableSmoothScrolling{ get => _enableSmoothScrolling; set => UpdatePropertyWithRestartRequest(ref _enableSmoothScrolling, value); } public bool EnableTouchAdjustment{ get => _enableTouchAdjustment; set => UpdatePropertyWithRestartRequest(ref _enableTouchAdjustment, value); } public string CustomCefArgs{ get => _customCefArgs; set => UpdatePropertyWithRestartRequest(ref _customCefArgs, value); } public string SpellCheckLanguage{ get => _spellCheckLanguage; set => UpdatePropertyWithRestartRequest(ref _spellCheckLanguage, value); } // EVENTS public event EventHandler MuteToggled; public event EventHandler ZoomLevelChanged; public event EventHandler TrayBehaviorChanged; public event EventHandler SoundNotificationChanged; // END OF CONFIG public UserConfig(ConfigManager configManager) : base(configManager){} protected override ConfigManager.BaseConfig ConstructWithDefaults(ConfigManager configManager){ return new UserConfig(configManager); } } }