[Phase 41] SettingsViewModel·AgentLoopService 파셜 클래스 분할

SettingsViewModel (1,855줄 → 320줄, 82.7% 감소):
- SettingsViewModel.Properties.cs (837줄): 바인딩 프로퍼티 전체
- SettingsViewModel.Methods.cs (469줄): Save/Browse/Add 등 메서드
- SettingsViewModelModels.cs (265줄): 6개 모델 클래스 분리

AgentLoopService (1,823줄 → 1,334줄, 26.8% 감소):
- AgentLoopService.Execution.cs (498줄): 병렬 도구 실행, ToolExecutionState
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-03 19:37:24 +09:00
parent 6448451d78
commit c9a6e6442f
7 changed files with 2099 additions and 2027 deletions

View File

@@ -0,0 +1,837 @@
using System.Collections.ObjectModel;
using AxCopilot.Models;
namespace AxCopilot.ViewModels;
public partial class SettingsViewModel
{
/// <summary>CodeSettings 바인딩용 프로퍼티. XAML에서 {Binding Code.EnableLsp} 등으로 접근.</summary>
public Models.CodeSettings Code => _service.Settings.Llm.Code;
// ─── 등록 모델 목록 ───────────────────────────────────────────────────
public ObservableCollection<RegisteredModelRow> RegisteredModels { get; } = new();
public string LlmService
{
get => _llmService;
set { _llmService = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsInternalService)); OnPropertyChanged(nameof(IsExternalService)); OnPropertyChanged(nameof(NeedsEndpoint)); OnPropertyChanged(nameof(NeedsApiKey)); OnPropertyChanged(nameof(IsGeminiSelected)); OnPropertyChanged(nameof(IsClaudeSelected)); }
}
public bool IsInternalService => _llmService is "ollama" or "vllm";
public bool IsExternalService => _llmService is "gemini" or "claude";
public bool NeedsEndpoint => _llmService is "ollama" or "vllm";
public bool NeedsApiKey => _llmService is not "ollama";
public bool IsGeminiSelected => _llmService == "gemini";
public bool IsClaudeSelected => _llmService == "claude";
// ── Ollama 설정 ──
public string OllamaEndpoint { get => _ollamaEndpoint; set { _ollamaEndpoint = value; OnPropertyChanged(); } }
public string OllamaApiKey { get => _ollamaApiKey; set { _ollamaApiKey = value; OnPropertyChanged(); } }
public string OllamaModel { get => _ollamaModel; set { _ollamaModel = value; OnPropertyChanged(); } }
// ── vLLM 설정 ──
public string VllmEndpoint { get => _vllmEndpoint; set { _vllmEndpoint = value; OnPropertyChanged(); } }
public string VllmApiKey { get => _vllmApiKey; set { _vllmApiKey = value; OnPropertyChanged(); } }
public string VllmModel { get => _vllmModel; set { _vllmModel = value; OnPropertyChanged(); } }
// ── Gemini 설정 ──
public string GeminiApiKey { get => _geminiApiKey; set { _geminiApiKey = value; OnPropertyChanged(); } }
public string GeminiModel { get => _geminiModel; set { _geminiModel = value; OnPropertyChanged(); } }
// ── Claude 설정 ──
public string ClaudeApiKey { get => _claudeApiKey; set { _claudeApiKey = value; OnPropertyChanged(); } }
public string ClaudeModel { get => _claudeModel; set { _claudeModel = value; OnPropertyChanged(); } }
// ── 공통 응답 설정 ──
public bool LlmStreaming
{
get => _llmStreaming;
set { _llmStreaming = value; OnPropertyChanged(); }
}
public int LlmMaxContextTokens
{
get => _llmMaxContextTokens;
set { _llmMaxContextTokens = value; OnPropertyChanged(); }
}
public int LlmRetentionDays
{
get => _llmRetentionDays;
set { _llmRetentionDays = value; OnPropertyChanged(); }
}
public double LlmTemperature
{
get => _llmTemperature;
set { _llmTemperature = Math.Round(Math.Clamp(value, 0.0, 2.0), 1); OnPropertyChanged(); }
}
// 에이전트 기본 파일 접근 권한
private string _defaultAgentPermission;
public string DefaultAgentPermission
{
get => _defaultAgentPermission;
set { _defaultAgentPermission = value; OnPropertyChanged(); }
}
// ── 코워크/에이전트 고급 설정 ──
private string _defaultOutputFormat;
public string DefaultOutputFormat
{
get => _defaultOutputFormat;
set { _defaultOutputFormat = value; OnPropertyChanged(); }
}
private string _autoPreview;
public string AutoPreview
{
get => _autoPreview;
set { _autoPreview = value; OnPropertyChanged(); }
}
private int _maxAgentIterations;
public int MaxAgentIterations
{
get => _maxAgentIterations;
set { _maxAgentIterations = Math.Clamp(value, 1, 100); OnPropertyChanged(); }
}
private int _maxRetryOnError;
public int MaxRetryOnError
{
get => _maxRetryOnError;
set { _maxRetryOnError = Math.Clamp(value, 0, 10); OnPropertyChanged(); }
}
private string _agentLogLevel;
public string AgentLogLevel
{
get => _agentLogLevel;
set { _agentLogLevel = value; OnPropertyChanged(); }
}
private string _agentDecisionLevel = "detailed";
public string AgentDecisionLevel
{
get => _agentDecisionLevel;
set { _agentDecisionLevel = value; OnPropertyChanged(); }
}
private string _planMode = "off";
public string PlanMode
{
get => _planMode;
set { _planMode = value; OnPropertyChanged(); }
}
private bool _enableMultiPassDocument;
public bool EnableMultiPassDocument
{
get => _enableMultiPassDocument;
set { _enableMultiPassDocument = value; OnPropertyChanged(); }
}
private bool _enableCoworkVerification;
public bool EnableCoworkVerification
{
get => _enableCoworkVerification;
set { _enableCoworkVerification = value; OnPropertyChanged(); }
}
private bool _enableFilePathHighlight = true;
public bool EnableFilePathHighlight
{
get => _enableFilePathHighlight;
set { _enableFilePathHighlight = value; OnPropertyChanged(); }
}
private string _folderDataUsage;
public string FolderDataUsage
{
get => _folderDataUsage;
set { _folderDataUsage = value; OnPropertyChanged(); }
}
// ── 모델 폴백 + 보안 + MCP ──
private bool _enableAuditLog;
public bool EnableAuditLog
{
get => _enableAuditLog;
set { _enableAuditLog = value; OnPropertyChanged(); }
}
private bool _enableAgentMemory;
public bool EnableAgentMemory
{
get => _enableAgentMemory;
set { _enableAgentMemory = value; OnPropertyChanged(); }
}
private bool _enableProjectRules = true;
public bool EnableProjectRules
{
get => _enableProjectRules;
set { _enableProjectRules = value; OnPropertyChanged(); }
}
private int _maxMemoryEntries;
public int MaxMemoryEntries
{
get => _maxMemoryEntries;
set { _maxMemoryEntries = value; OnPropertyChanged(); }
}
// ── 이미지 입력 (멀티모달) ──
private bool _enableImageInput = true;
public bool EnableImageInput
{
get => _enableImageInput;
set { _enableImageInput = value; OnPropertyChanged(); }
}
private int _maxImageSizeKb = 5120;
public int MaxImageSizeKb
{
get => _maxImageSizeKb;
set { _maxImageSizeKb = value; OnPropertyChanged(); }
}
// ── 자동 모델 라우팅 ──
private bool _enableAutoRouter;
public bool EnableAutoRouter
{
get => _enableAutoRouter;
set { _enableAutoRouter = value; OnPropertyChanged(); }
}
private double _autoRouterConfidence = 0.7;
public double AutoRouterConfidence
{
get => _autoRouterConfidence;
set { _autoRouterConfidence = value; OnPropertyChanged(); }
}
// ── 에이전트 훅 시스템 ──
private bool _enableToolHooks = true;
public bool EnableToolHooks
{
get => _enableToolHooks;
set { _enableToolHooks = value; OnPropertyChanged(); }
}
private int _toolHookTimeoutMs = 10000;
public int ToolHookTimeoutMs
{
get => _toolHookTimeoutMs;
set { _toolHookTimeoutMs = value; OnPropertyChanged(); }
}
// ── 스킬 시스템 ──
private bool _enableSkillSystem = true;
public bool EnableSkillSystem
{
get => _enableSkillSystem;
set { _enableSkillSystem = value; OnPropertyChanged(); }
}
private string _skillsFolderPath = "";
public string SkillsFolderPath
{
get => _skillsFolderPath;
set { _skillsFolderPath = value; OnPropertyChanged(); }
}
private int _slashPopupPageSize = 6;
public int SlashPopupPageSize
{
get => _slashPopupPageSize;
set { _slashPopupPageSize = Math.Clamp(value, 3, 10); OnPropertyChanged(); }
}
// ── 드래그&드롭 AI ──
private bool _enableDragDropAiActions = true;
public bool EnableDragDropAiActions
{
get => _enableDragDropAiActions;
set { _enableDragDropAiActions = value; OnPropertyChanged(); }
}
private bool _dragDropAutoSend;
public bool DragDropAutoSend
{
get => _dragDropAutoSend;
set { _dragDropAutoSend = value; OnPropertyChanged(); }
}
// ── 코드 리뷰 ──
private bool _enableCodeReview = true;
public bool EnableCodeReview
{
get => _enableCodeReview;
set { _enableCodeReview = value; OnPropertyChanged(); }
}
// ── 시각 효과 + 알림 + 개발자 모드 (공통) ──
private bool _enableChatRainbowGlow;
public bool EnableChatRainbowGlow
{
get => _enableChatRainbowGlow;
set { _enableChatRainbowGlow = value; OnPropertyChanged(); }
}
private bool _notifyOnComplete;
public bool NotifyOnComplete
{
get => _notifyOnComplete;
set { _notifyOnComplete = value; OnPropertyChanged(); }
}
private bool _showTips;
public bool ShowTips
{
get => _showTips;
set { _showTips = value; OnPropertyChanged(); }
}
private bool _devMode;
public bool DevMode
{
get => _devMode;
set { _devMode = value; OnPropertyChanged(); }
}
private bool _devModeStepApproval;
public bool DevModeStepApproval
{
get => _devModeStepApproval;
set { _devModeStepApproval = value; OnPropertyChanged(); }
}
private bool _workflowVisualizer;
public bool WorkflowVisualizer
{
get => _workflowVisualizer;
set { _workflowVisualizer = value; OnPropertyChanged(); }
}
private bool _freeTierMode;
public bool FreeTierMode
{
get => _freeTierMode;
set { _freeTierMode = value; OnPropertyChanged(); }
}
private int _freeTierDelaySeconds = 4;
public int FreeTierDelaySeconds
{
get => _freeTierDelaySeconds;
set { _freeTierDelaySeconds = value; OnPropertyChanged(); }
}
private bool _showTotalCallStats;
public bool ShowTotalCallStats
{
get => _showTotalCallStats;
set { _showTotalCallStats = value; OnPropertyChanged(); }
}
private string _defaultMood = "modern";
public string DefaultMood
{
get => _defaultMood;
set { _defaultMood = value; OnPropertyChanged(); }
}
// 차단 경로/확장자 (읽기 전용 UI)
public ObservableCollection<string> BlockedPaths { get; } = new();
public ObservableCollection<string> BlockedExtensions { get; } = new();
public string Hotkey
{
get => _hotkey;
set { _hotkey = value; OnPropertyChanged(); }
}
public int MaxResults
{
get => _maxResults;
set { _maxResults = value; OnPropertyChanged(); }
}
public double Opacity
{
get => _opacity;
set { _opacity = value; OnPropertyChanged(); OnPropertyChanged(nameof(OpacityPercent)); }
}
public int OpacityPercent => (int)Math.Round(_opacity * 100);
public string SelectedThemeKey
{
get => _selectedThemeKey;
set
{
_selectedThemeKey = value;
OnPropertyChanged();
OnPropertyChanged(nameof(IsCustomTheme));
foreach (var card in ThemeCards)
card.IsSelected = card.Key == value;
}
}
public bool IsCustomTheme => _selectedThemeKey == "custom";
public string LauncherPosition
{
get => _launcherPosition;
set { _launcherPosition = value; OnPropertyChanged(); }
}
public string WebSearchEngine
{
get => _webSearchEngine;
set { _webSearchEngine = value; OnPropertyChanged(); }
}
public bool SnippetAutoExpand
{
get => _snippetAutoExpand;
set { _snippetAutoExpand = value; OnPropertyChanged(); }
}
public string Language
{
get => _language;
set { _language = value; OnPropertyChanged(); }
}
public string IndexSpeed
{
get => _indexSpeed;
set { _indexSpeed = value; OnPropertyChanged(); OnPropertyChanged(nameof(IndexSpeedHint)); }
}
public string IndexSpeedHint => _indexSpeed switch
{
"fast" => "CPU 사용률이 높아질 수 있습니다. 고성능 PC에 권장합니다.",
"slow" => "인덱싱이 오래 걸리지만 PC 성능에 영향을 주지 않습니다.",
_ => "일반적인 PC에 적합한 균형 설정입니다.",
};
// ─── 기능 토글 속성 ───────────────────────────────────────────────────
public bool ShowNumberBadges
{
get => _showNumberBadges;
set { _showNumberBadges = value; OnPropertyChanged(); }
}
public bool EnableFavorites
{
get => _enableFavorites;
set { _enableFavorites = value; OnPropertyChanged(); }
}
public bool EnableRecent
{
get => _enableRecent;
set { _enableRecent = value; OnPropertyChanged(); }
}
public bool EnableActionMode
{
get => _enableActionMode;
set { _enableActionMode = value; OnPropertyChanged(); }
}
public bool CloseOnFocusLost
{
get => _closeOnFocusLost;
set { _closeOnFocusLost = value; OnPropertyChanged(); }
}
public bool ShowPrefixBadge
{
get => _showPrefixBadge;
set { _showPrefixBadge = value; OnPropertyChanged(); }
}
public bool EnableIconAnimation
{
get => _enableIconAnimation;
set { _enableIconAnimation = value; OnPropertyChanged(); }
}
public bool EnableRainbowGlow
{
get => _enableRainbowGlow;
set { _enableRainbowGlow = value; OnPropertyChanged(); }
}
public bool EnableSelectionGlow
{
get => _enableSelectionGlow;
set { _enableSelectionGlow = value; OnPropertyChanged(); }
}
public bool EnableRandomPlaceholder
{
get => _enableRandomPlaceholder;
set { _enableRandomPlaceholder = value; OnPropertyChanged(); }
}
public bool ShowLauncherBorder
{
get => _showLauncherBorder;
set { _showLauncherBorder = value; OnPropertyChanged(); }
}
// ─── v1.4.0 신기능 설정 ──────────────────────────────────────────────────
private bool _enableTextAction = true;
public bool EnableTextAction
{
get => _enableTextAction;
set { _enableTextAction = value; OnPropertyChanged(); }
}
private bool _enableFileDialogIntegration = false;
public bool EnableFileDialogIntegration
{
get => _enableFileDialogIntegration;
set { _enableFileDialogIntegration = value; OnPropertyChanged(); }
}
private bool _enableClipboardAutoCategory = true;
public bool EnableClipboardAutoCategory
{
get => _enableClipboardAutoCategory;
set { _enableClipboardAutoCategory = value; OnPropertyChanged(); }
}
private int _maxPinnedClipboardItems = 20;
public int MaxPinnedClipboardItems
{
get => _maxPinnedClipboardItems;
set { _maxPinnedClipboardItems = value; OnPropertyChanged(); }
}
private string _textActionTranslateLanguage = "auto";
public string TextActionTranslateLanguage
{
get => _textActionTranslateLanguage;
set { _textActionTranslateLanguage = value; OnPropertyChanged(); }
}
private int _maxSubAgents = 3;
public int MaxSubAgents
{
get => _maxSubAgents;
set { _maxSubAgents = value; OnPropertyChanged(); }
}
private string _pdfExportPath = "";
public string PdfExportPath
{
get => _pdfExportPath;
set { _pdfExportPath = value; OnPropertyChanged(); }
}
private int _tipDurationSeconds = 5;
public int TipDurationSeconds
{
get => _tipDurationSeconds;
set { _tipDurationSeconds = value; OnPropertyChanged(); }
}
public bool ShortcutHelpUseThemeColor
{
get => _shortcutHelpUseThemeColor;
set { _shortcutHelpUseThemeColor = value; OnPropertyChanged(); }
}
// ─── 테마 카드 목록 ───────────────────────────────────────────────────
public List<ThemeCardModel> ThemeCards { get; } = new()
{
new()
{
Key = "system", Name = "시스템",
PreviewBackground = "#1E1E1E", PreviewText = "#FFFFFF",
PreviewSubText = "#888888", PreviewAccent = "#0078D4",
PreviewItem = "#2D2D2D", PreviewBorder = "#3D3D3D"
},
new()
{
Key = "dark", Name = "Dark",
PreviewBackground = "#1A1B2E", PreviewText = "#F0F0FF",
PreviewSubText = "#7A7D9C", PreviewAccent = "#4B5EFC",
PreviewItem = "#252637", PreviewBorder = "#2E2F4A"
},
new()
{
Key = "light", Name = "Light",
PreviewBackground = "#FAFAFA", PreviewText = "#1A1B2E",
PreviewSubText = "#666680", PreviewAccent = "#4B5EFC",
PreviewItem = "#F0F0F8", PreviewBorder = "#E0E0F0"
},
new()
{
Key = "oled", Name = "OLED",
PreviewBackground = "#000000", PreviewText = "#FFFFFF",
PreviewSubText = "#888899", PreviewAccent = "#5C6EFF",
PreviewItem = "#0A0A14", PreviewBorder = "#1A1A2E"
},
new()
{
Key = "nord", Name = "Nord",
PreviewBackground = "#2E3440", PreviewText = "#ECEFF4",
PreviewSubText = "#D8DEE9", PreviewAccent = "#88C0D0",
PreviewItem = "#3B4252", PreviewBorder = "#434C5E"
},
new()
{
Key = "monokai", Name = "Monokai",
PreviewBackground = "#272822", PreviewText = "#F8F8F2",
PreviewSubText = "#75715E", PreviewAccent = "#A6E22E",
PreviewItem = "#3E3D32", PreviewBorder = "#49483E"
},
new()
{
Key = "catppuccin", Name = "Catppuccin",
PreviewBackground = "#1E1E2E", PreviewText = "#CDD6F4",
PreviewSubText = "#A6ADC8", PreviewAccent = "#CBA6F7",
PreviewItem = "#313244", PreviewBorder = "#45475A"
},
new()
{
Key = "sepia", Name = "Sepia",
PreviewBackground = "#F5EFE0", PreviewText = "#3C2F1A",
PreviewSubText = "#7A6040", PreviewAccent = "#C0822A",
PreviewItem = "#EDE6D6", PreviewBorder = "#D8CCBA"
},
new()
{
Key = "alfred", Name = "Indigo",
PreviewBackground = "#26273B", PreviewText = "#EEEEFF",
PreviewSubText = "#8888BB", PreviewAccent = "#8877EE",
PreviewItem = "#3B3D60", PreviewBorder = "#40416A"
},
new()
{
Key = "alfredlight", Name = "Frost",
PreviewBackground = "#FFFFFF", PreviewText = "#1A1A2E",
PreviewSubText = "#9090AA", PreviewAccent = "#5555EE",
PreviewItem = "#E8E9FF", PreviewBorder = "#DCDCEE"
},
new()
{
Key = "codex", Name = "Codex",
PreviewBackground = "#FFFFFF", PreviewText = "#111111",
PreviewSubText = "#6B7280", PreviewAccent = "#7C3AED",
PreviewItem = "#F5F5F7", PreviewBorder = "#E5E7EB"
},
new()
{
Key = "custom", Name = "커스텀",
PreviewBackground = "#1A1B2E", PreviewText = "#F0F0FF",
PreviewSubText = "#7A7D9C", PreviewAccent = "#4B5EFC",
PreviewItem = "#252637", PreviewBorder = "#2E2F4A"
},
};
// ─── 커스텀 색상 행 목록 ──────────────────────────────────────────────
public List<ColorRowModel> ColorRows { get; }
// ─── 프롬프트 템플릿 ──────────────────────────────────────────────────
public ObservableCollection<PromptTemplateRow> PromptTemplates { get; } = new();
// ─── 배치 명령 ────────────────────────────────────────────────────────
public ObservableCollection<BatchCommandModel> BatchCommands { get; } = new();
private string _newBatchKey = "";
private string _newBatchCommand = "";
private bool _newBatchShowWindow;
public string NewBatchKey
{
get => _newBatchKey;
set { _newBatchKey = value; OnPropertyChanged(); }
}
public string NewBatchCommand
{
get => _newBatchCommand;
set { _newBatchCommand = value; OnPropertyChanged(); }
}
public bool NewBatchShowWindow
{
get => _newBatchShowWindow;
set { _newBatchShowWindow = value; OnPropertyChanged(); }
}
// ─── 빠른 실행 단축키 ─────────────────────────────────────────────────
public ObservableCollection<AppShortcutModel> AppShortcuts { get; } = new();
private string _newKey = "";
private string _newDescription = "";
private string _newTarget = "";
private string _newType = "app";
public string NewKey { get => _newKey; set { _newKey = value; OnPropertyChanged(); } }
public string NewDescription { get => _newDescription; set { _newDescription = value; OnPropertyChanged(); } }
public string NewTarget { get => _newTarget; set { _newTarget = value; OnPropertyChanged(); } }
public string NewType { get => _newType; set { _newType = value; OnPropertyChanged(); } }
// ─── 커스텀 테마 모서리 라운딩 ───────────────────────────────────────────
private int _customWindowCornerRadius = 20;
private int _customItemCornerRadius = 10;
public int CustomWindowCornerRadius
{
get => _customWindowCornerRadius;
set { _customWindowCornerRadius = Math.Clamp(value, 0, 30); OnPropertyChanged(); }
}
public int CustomItemCornerRadius
{
get => _customItemCornerRadius;
set { _customItemCornerRadius = Math.Clamp(value, 0, 20); OnPropertyChanged(); }
}
// ─── 인덱스 경로 ──────────────────────────────────────────────────────
public ObservableCollection<string> IndexPaths { get; } = new();
// ─── 인덱스 확장자 ──────────────────────────────────────────────────
public ObservableCollection<string> IndexExtensions { get; } = new();
// ─── 스니펫 설정 ──────────────────────────────────────────────────────────
public ObservableCollection<SnippetRowModel> Snippets { get; } = new();
private string _newSnippetKey = "";
private string _newSnippetName = "";
private string _newSnippetContent = "";
public string NewSnippetKey { get => _newSnippetKey; set { _newSnippetKey = value; OnPropertyChanged(); } }
public string NewSnippetName { get => _newSnippetName; set { _newSnippetName = value; OnPropertyChanged(); } }
public string NewSnippetContent { get => _newSnippetContent; set { _newSnippetContent = value; OnPropertyChanged(); } }
// ─── 클립보드 히스토리 설정 ────────────────────────────────────────────────
private bool _clipboardEnabled;
private int _clipboardMaxItems;
public bool ClipboardEnabled
{
get => _clipboardEnabled;
set { _clipboardEnabled = value; OnPropertyChanged(); }
}
public int ClipboardMaxItems
{
get => _clipboardMaxItems;
set { _clipboardMaxItems = value; OnPropertyChanged(); }
}
// ─── 스크린 캡처 설정 ──────────────────────────────────────────────────────
private string _capPrefix = "cap";
private bool _capGlobalHotkeyEnabled;
private string _capGlobalHotkey = "PrintScreen";
private string _capGlobalMode = "screen";
private int _capScrollDelayMs = 120;
public string CapPrefix
{
get => _capPrefix;
set { _capPrefix = value; OnPropertyChanged(); }
}
public bool CapGlobalHotkeyEnabled
{
get => _capGlobalHotkeyEnabled;
set { _capGlobalHotkeyEnabled = value; OnPropertyChanged(); }
}
public string CapGlobalHotkey
{
get => _capGlobalHotkey;
set { _capGlobalHotkey = value; OnPropertyChanged(); }
}
public string CapGlobalMode
{
get => _capGlobalMode;
set { _capGlobalMode = value; OnPropertyChanged(); }
}
public int CapScrollDelayMs
{
get => _capScrollDelayMs;
set { _capScrollDelayMs = value; OnPropertyChanged(); OnPropertyChanged(nameof(CapScrollDelayMsStr)); }
}
/// <summary>ComboBox SelectedValue와 string 바인딩 용도</summary>
public string CapScrollDelayMsStr
{
get => _capScrollDelayMs.ToString();
set { if (int.TryParse(value, out int v)) CapScrollDelayMs = v; }
}
// ─── 잠금 해제 알림 설정 ──────────────────────────────────────────────────
private bool _reminderEnabled;
private string _reminderCorner = "bottom-right";
private int _reminderIntervalMinutes = 60;
private int _reminderDisplaySeconds = 15;
public bool ReminderEnabled
{
get => _reminderEnabled;
set { _reminderEnabled = value; OnPropertyChanged(); }
}
public string ReminderCorner
{
get => _reminderCorner;
set { _reminderCorner = value; OnPropertyChanged(); }
}
public int ReminderIntervalMinutes
{
get => _reminderIntervalMinutes;
set { _reminderIntervalMinutes = value; OnPropertyChanged(); }
}
public int ReminderDisplaySeconds
{
get => _reminderDisplaySeconds;
set { _reminderDisplaySeconds = value; OnPropertyChanged(); }
}
// ─── 시스템 명령 설정 ──────────────────────────────────────────────────────
private bool _sysShowLock;
private bool _sysShowSleep;
private bool _sysShowRestart;
private bool _sysShowShutdown;
private bool _sysShowHibernate;
private bool _sysShowLogout;
private bool _sysShowRecycleBin;
public bool SysShowLock { get => _sysShowLock; set { _sysShowLock = value; OnPropertyChanged(); } }
public bool SysShowSleep { get => _sysShowSleep; set { _sysShowSleep = value; OnPropertyChanged(); } }
public bool SysShowRestart { get => _sysShowRestart; set { _sysShowRestart = value; OnPropertyChanged(); } }
public bool SysShowShutdown { get => _sysShowShutdown; set { _sysShowShutdown = value; OnPropertyChanged(); } }
public bool SysShowHibernate { get => _sysShowHibernate; set { _sysShowHibernate = value; OnPropertyChanged(); } }
public bool SysShowLogout { get => _sysShowLogout; set { _sysShowLogout = value; OnPropertyChanged(); } }
public bool SysShowRecycleBin { get => _sysShowRecycleBin; set { _sysShowRecycleBin = value; OnPropertyChanged(); } }
// ─── 시스템 명령 별칭 (쉼표 구분 문자열) ───────────────────────────────────
private string _aliasLock = "";
private string _aliasSleep = "";
private string _aliasRestart = "";
private string _aliasShutdown = "";
private string _aliasHibernate = "";
private string _aliasLogout = "";
private string _aliasRecycle = "";
public string AliasLock { get => _aliasLock; set { _aliasLock = value; OnPropertyChanged(); } }
public string AliasSleep { get => _aliasSleep; set { _aliasSleep = value; OnPropertyChanged(); } }
public string AliasRestart { get => _aliasRestart; set { _aliasRestart = value; OnPropertyChanged(); } }
public string AliasShutdown { get => _aliasShutdown; set { _aliasShutdown = value; OnPropertyChanged(); } }
public string AliasHibernate { get => _aliasHibernate; set { _aliasHibernate = value; OnPropertyChanged(); } }
public string AliasLogout { get => _aliasLogout; set { _aliasLogout = value; OnPropertyChanged(); } }
public string AliasRecycle { get => _aliasRecycle; set { _aliasRecycle = value; OnPropertyChanged(); } }
}