using Lattice.UI.Docking.Abstractions; namespace Lattice.UI.Docking.Services; /// /// Базовая реализация UI-сервиса с общими функциями. /// public abstract class DockUIServiceBase : IDockUIService { private IDockTheme? _currentTheme; /// public abstract object CreateMainWindow(IDockHost host); /// public virtual bool? ShowDialog(string title, object content) { // Базовая реализация - просто возвращает null // В производных классах должна быть реальная реализация return null; } /// public virtual void ShowMessage(string message, string caption) { // Базовая реализация не делает ничего // В производных классах должна быть реальная реализация } /// public virtual bool Confirm(string message, string caption) { // Базовая реализация всегда возвращает true // В производных классах должна быть реальная реализация return true; } /// public virtual string? Prompt(string prompt, string? defaultValue = null) { // Базовая реализация возвращает значение по умолчанию // В производных классах должна быть реальная реализация return defaultValue; } /// public virtual void InvokeOnUIThread(Action action) { // Базовая реализация просто выполняет действие // В производных классах должна быть синхронизация с UI-потоком action?.Invoke(); } /// public virtual IDockTheme GetCurrentTheme() { return _currentTheme ?? CreateDefaultTheme(); } /// public virtual void SetTheme(IDockTheme theme) { _currentTheme = theme; theme.Apply(); } /// /// Создает тему по умолчанию. /// protected virtual IDockTheme CreateDefaultTheme() { return new DefaultDockTheme(); } } /// /// Тема оформления по умолчанию. /// public class DefaultDockTheme : IDockTheme { public string Name => "Default"; public string BackgroundColor { get; set; } = "#1E1E1E"; public string PanelBackgroundColor { get; set; } = "#252526"; public string TabBackgroundColor { get; set; } = "#2D2D2D"; public string ActiveTabBackgroundColor { get; set; } = "#3E3E3E"; public string BorderColor { get; set; } = "#3F3F46"; public string SplitterColor { get; set; } = "#2D2D2D"; public string TextColor { get; set; } = "#CCCCCC"; public string AccentColor { get; set; } = "#007ACC"; public double CornerRadius { get; set; } = 3.0; public double BorderThickness { get; set; } = 1.0; public double SplitterWidth { get; set; } = 4.0; public void Apply() { // В UI-реализациях этот метод должен применять тему к элементам } public void Reset() { BackgroundColor = "#1E1E1E"; PanelBackgroundColor = "#252526"; TabBackgroundColor = "#2D2D2D"; ActiveTabBackgroundColor = "#3E3E3E"; BorderColor = "#3F3F46"; SplitterColor = "#2D2D2D"; TextColor = "#CCCCCC"; AccentColor = "#007ACC"; CornerRadius = 3.0; BorderThickness = 1.0; SplitterWidth = 4.0; } }