113 lines
3.8 KiB
C#
113 lines
3.8 KiB
C#
using Lattice.UI.Docking.Abstractions;
|
||
|
||
namespace Lattice.UI.Docking.Services;
|
||
|
||
/// <summary>
|
||
/// Базовая реализация UI-сервиса с общими функциями.
|
||
/// </summary>
|
||
public abstract class DockUIServiceBase : IDockUIService
|
||
{
|
||
private IDockTheme? _currentTheme;
|
||
|
||
/// <inheritdoc/>
|
||
public abstract object CreateMainWindow(IDockHost host);
|
||
|
||
/// <inheritdoc/>
|
||
public virtual bool? ShowDialog(string title, object content)
|
||
{
|
||
// Базовая реализация - просто возвращает null
|
||
// В производных классах должна быть реальная реализация
|
||
return null;
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual void ShowMessage(string message, string caption)
|
||
{
|
||
// Базовая реализация не делает ничего
|
||
// В производных классах должна быть реальная реализация
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual bool Confirm(string message, string caption)
|
||
{
|
||
// Базовая реализация всегда возвращает true
|
||
// В производных классах должна быть реальная реализация
|
||
return true;
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual string? Prompt(string prompt, string? defaultValue = null)
|
||
{
|
||
// Базовая реализация возвращает значение по умолчанию
|
||
// В производных классах должна быть реальная реализация
|
||
return defaultValue;
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual void InvokeOnUIThread(Action action)
|
||
{
|
||
// Базовая реализация просто выполняет действие
|
||
// В производных классах должна быть синхронизация с UI-потоком
|
||
action?.Invoke();
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual IDockTheme GetCurrentTheme()
|
||
{
|
||
return _currentTheme ?? CreateDefaultTheme();
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public virtual void SetTheme(IDockTheme theme)
|
||
{
|
||
_currentTheme = theme;
|
||
theme.Apply();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Создает тему по умолчанию.
|
||
/// </summary>
|
||
protected virtual IDockTheme CreateDefaultTheme()
|
||
{
|
||
return new DefaultDockTheme();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Тема оформления по умолчанию.
|
||
/// </summary>
|
||
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;
|
||
}
|
||
} |