DragAndDrop core
This commit is contained in:
113
Lattice.UI.Docking/Services/DockUIServiceBase.cs
Normal file
113
Lattice.UI.Docking/Services/DockUIServiceBase.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user