using System; using System.Collections.Generic; using System.Windows.Controls; using Kniip.Editor; using Kniip.Upload; namespace Kniip.Settings; public enum CaptureAction { /// Melding rechtsonder tonen; klikken opent de editor. Notify, /// Editor direct openen. OpenEditor, /// Niets doen (alleen handmatig openen via tray of "Openen met"). Nothing } public enum ScreencastFormat { Mp4, Gif } public enum SaveButtonChoice { /// Alleen het bestand opslaan. SaveOnly, /// Bestand opslaan en naar het klembord kopiëren. SaveAndCopy } public enum EditorLayout { /// Eén werkbalk met gereedschappen en acties. Single, /// Split-weergave: gereedschappen boven, opslaan/kopiëren en zoom onder. Split, /// Als Split, met Nieuw en Screencast in een zijbalk naast het canvas. ThreeSplit } public enum ColorMode { Light, Dark, /// De app-modus van Windows volgen (licht of donker). System } public sealed class AppSettings { public bool WatchClipboard { get; set; } = true; public bool WatchScreenshotsFolder { get; set; } = true; public bool OnlyFromSnippingTool { get; set; } = true; public CaptureAction Action { get; set; } = CaptureAction.Notify; public bool StraightHighlight { get; set; } = true; public ToolKind LastTool { get; set; } = ToolKind.Rectangle; public string? LastSaveFolder { get; set; } /// Map waarin knipsels zonder te vragen worden opgeslagen; leeg betekent elke keer vragen. public string? SnipSaveFolder { get; set; } /// Naamsjabloon voor knipsels (zie FileNameTemplate); leeg betekent "Knipsel" met datum en tijd. public string? SnipFileNameTemplate { get; set; } public Dictionary ToolStyles { get; set; } = new(); /// Recent gekozen emoji (codepunten), nieuwste eerst. public List RecentEmoji { get; set; } = new(); /// Sneltoets voor een eigen rechthoekknipsel (zie HotkeyGesture); leeg betekent geen sneltoets. public string SnipHotkey { get; set; } = "PrintScreen"; /// Sneltoets om een venster aan te klikken en te knippen. public string WindowHotkey { get; set; } = "Alt+PrintScreen"; /// Sneltoets voor een screencast die als MP4 wordt aangeboden. public string RecordHotkey { get; set; } = "Ctrl+Shift+R"; /// Sneltoets voor een screencast die als GIF wordt aangeboden. public string GifHotkey { get; set; } = "Ctrl+Shift+G"; /// Sneltoets om de afbeelding op het klembord in de editor te openen; standaard geen. public string ClipboardHotkey { get; set; } = ""; public bool RecordSystemAudio { get; set; } = true; public bool RecordMicrophone { get; set; } public bool RecordShowCursor { get; set; } = true; public bool RecordHighlightClicks { get; set; } = true; public int RecordFps { get; set; } = 30; public int GifFps { get; set; } = 10; public int GifMaxWidth { get; set; } = 800; public ScreencastFormat LastScreencastFormat { get; set; } = ScreencastFormat.Mp4; public string? LastVideoFolder { get; set; } /// Map waarin screencasts zonder te vragen worden opgeslagen; leeg betekent elke keer vragen. public string? VideoSaveFolder { get; set; } /// Naamsjabloon voor screencasts (zie FileNameTemplate); leeg betekent "Screencast" met datum en tijd. public string? VideoFileNameTemplate { get; set; } /// Gedrag van de knop Opslaan in de editor en de screencast. public SaveButtonChoice SaveButton { get; set; } = SaveButtonChoice.SaveOnly; /// Rand van het editorvenster waar de werkbalk staat. public Dock ToolbarPosition { get; set; } = Dock.Top; /// Vergrendeld: knoppen werken gewoon. Ontgrendeld: knoppen kunnen versleept worden. public bool ToolbarLocked { get; set; } = true; /// Volgorde van de werkbalkitems (ItemId's); leeg betekent de standaardvolgorde. public List ToolbarOrder { get; set; } = new(); /// Kleurmodus van alle vensters van kniip. public ColorMode ColorMode { get; set; } = ColorMode.Light; /// Indeling van de werkbalk(en) in de editor. public EditorLayout EditorLayout { get; set; } = EditorLayout.Split; /// Volgorde van de werkbalkitems in de gesplitste indeling (boven, dan onder); leeg betekent de standaardvolgorde. public List SplitToolbarOrder { get; set; } = new(); /// Kant van het canvas (Left of Right) waar de zijbalk van de drie-split-indeling staat. public Dock CaptureBarPosition { get; set; } = Dock.Left; public List ToolbarHidden { get; set; } = new(); /// Zipline-server waar Uploaden naartoe gaat; leeg betekent geen uploadknop. public UploaderConfig? Uploader { get; set; } /// Bij het starten en daarna dagelijks op de achtergrond kijken of er een nieuwere versie is. public bool CheckForUpdates { get; set; } = true; /// Vergrootglas met kruisdraad en coördinaten tonen bij het kiezen van een gebied (knipsel en screencast). public bool ShowMagnifier { get; set; } = true; private int _captureDelaySeconds; /// Seconden wachten voordat een rechthoek- of vensterknipsel het scherm bevriest (0-60); 0 is direct. public int CaptureDelaySeconds { get => _captureDelaySeconds; set => _captureDelaySeconds = Math.Clamp(value, 0, MaxCaptureDelaySeconds); } public const int MaxCaptureDelaySeconds = 60; public StyleSet StyleFor(ToolKind tool) { if (!ToolStyles.TryGetValue(tool, out StyleSet? style)) { style = StyleSet.DefaultFor(tool); ToolStyles[tool] = style; } return style; } }