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;
}
}