Files
aistudio-wpf-diagram/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramServicesProvider.cs

224 lines
6.9 KiB
C#
Raw Normal View History

2021-07-23 09:42:22 +08:00
using System;
using System.Collections.Generic;
2021-07-23 09:42:22 +08:00
using System.ComponentModel;
2023-05-14 00:31:25 +08:00
using System.Windows.Media;
2021-07-23 09:42:22 +08:00
2023-03-18 21:44:58 +08:00
namespace AIStudio.Wpf.DiagramDesigner.ViewModels.BaseViewModel
2021-07-23 09:42:22 +08:00
{
/// <summary>
/// Simple service locator
/// </summary>
public class DiagramServiceProvider : BindableBase, IDiagramServiceProvider
{
public DiagramServiceProvider()
{
ColorViewModel = new ColorViewModel();
FontViewModel = new FontViewModel();
ShapeViewModel = new ShapeViewModel();
2023-05-14 00:31:25 +08:00
AnimationViewModel = new AnimationViewModel();
2021-07-23 09:42:22 +08:00
LockObjectViewModel = new LockObjectViewModel();
2021-07-23 09:42:22 +08:00
_drawModeViewModel = new DrawModeViewModel();
_quickThemeViewModel = new QuickThemeViewModel();
2023-03-18 21:44:58 +08:00
2021-07-23 09:42:22 +08:00
_drawModeViewModel.PropertyChanged += ViewModel_PropertyChanged;
_quickThemeViewModel.PropertyChanged += ViewModel_PropertyChanged;
2023-03-18 21:44:58 +08:00
SetOldValue(ColorViewModel, nameof(ColorViewModel));
SetOldValue(FontViewModel, nameof(FontViewModel));
SetOldValue(ShapeViewModel, nameof(ShapeViewModel));
2023-04-29 15:29:22 +08:00
SetOldValue(AnimationViewModel, nameof(AnimationViewModel));
2023-03-18 21:44:58 +08:00
SetOldValue(LockObjectViewModel, nameof(LockObjectViewModel));
2021-07-23 09:42:22 +08:00
}
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RaisePropertyChanged(sender, e.PropertyName);
}
public IColorViewModel CopyDefaultColorViewModel()
{
var viewModel = GetOldValue<ColorViewModel>(nameof(ColorViewModel));
return CopyHelper.Mapper(viewModel);
}
public IFontViewModel CopyDefaultFontViewModel()
{
var viewModel = GetOldValue<FontViewModel>(nameof(FontViewModel));
return CopyHelper.Mapper(viewModel);
}
public IShapeViewModel CopyDefaultShapeViewModel()
{
var viewModel = GetOldValue<ShapeViewModel>(nameof(ShapeViewModel));
return CopyHelper.Mapper(viewModel);
}
2023-04-29 15:29:22 +08:00
public IAnimationViewModel CopyDefaultAnimationViewModel()
{
var viewModel = GetOldValue<AnimationViewModel>(nameof(AnimationViewModel));
return CopyHelper.Mapper(viewModel);
}
2021-07-23 09:42:22 +08:00
private IColorViewModel _colorViewModel;
public IColorViewModel ColorViewModel
{
get
{
return _colorViewModel;
}
set
{
SetProperty(ref _colorViewModel, value);
}
2023-03-18 21:44:58 +08:00
}
2021-07-23 09:42:22 +08:00
2023-05-14 00:31:25 +08:00
2021-07-23 09:42:22 +08:00
private IFontViewModel _fontViewModel;
public IFontViewModel FontViewModel
{
get
{
return _fontViewModel;
}
set
2023-05-14 00:31:25 +08:00
{
2021-07-23 09:42:22 +08:00
SetProperty(ref _fontViewModel, value);
}
}
2023-04-08 23:38:01 +08:00
private IShapeViewModel _shapeViewModel;
public IShapeViewModel ShapeViewModel
{
get
{
2023-04-08 23:38:01 +08:00
return _shapeViewModel;
}
set
{
2023-04-08 23:38:01 +08:00
SetProperty(ref _shapeViewModel, value);
}
}
2023-04-29 15:29:22 +08:00
private IAnimationViewModel _animationViewModel;
public IAnimationViewModel AnimationViewModel
{
get
{
return _animationViewModel;
}
set
{
SetProperty(ref _animationViewModel, value);
}
}
2023-03-11 22:27:23 +08:00
private IDrawModeViewModel _drawModeViewModel;
2021-07-23 09:42:22 +08:00
public IDrawModeViewModel DrawModeViewModel
{
2023-03-18 21:44:58 +08:00
get
{
return _drawModeViewModel;
}
2021-07-23 09:42:22 +08:00
}
2023-03-11 22:27:23 +08:00
private IQuickThemeViewModel _quickThemeViewModel;
2021-07-23 09:42:22 +08:00
public IQuickThemeViewModel QuickThemeViewModel
{
2023-03-18 21:44:58 +08:00
get
{
return _quickThemeViewModel;
}
2021-07-23 09:42:22 +08:00
}
private ILockObjectViewModel _lockObjectViewModel;
public ILockObjectViewModel LockObjectViewModel
{
get
{
return _lockObjectViewModel;
}
set
{
SetProperty(ref _lockObjectViewModel, value);
}
}
public List<SelectableDesignerItemViewModelBase> SelectedItems
{
get; set;
}
private SelectableDesignerItemViewModelBase _selectedItemViewModel;
public SelectableDesignerItemViewModelBase SelectedItemViewModel
2021-07-23 09:42:22 +08:00
{
get
{
return _selectedItemViewModel;
2021-07-23 09:42:22 +08:00
}
set
2023-03-18 21:44:58 +08:00
{
if (_selectedItemViewModel != null)
{
_selectedItemViewModel.PropertyChanged -= ViewModel_PropertyChanged;
}
if (SetProperty(ref _selectedItemViewModel, value))
2021-07-23 09:42:22 +08:00
{
if (_selectedItemViewModel == null)
2021-07-23 09:42:22 +08:00
{
ColorViewModel = GetOldValue<ColorViewModel>(nameof(ColorViewModel));
FontViewModel = GetOldValue<FontViewModel>(nameof(FontViewModel));
ShapeViewModel = GetOldValue<ShapeViewModel>(nameof(ShapeViewModel));
2023-04-29 15:29:22 +08:00
AnimationViewModel = GetOldValue<AnimationViewModel>(nameof(AnimationViewModel));
2021-07-23 09:42:22 +08:00
LockObjectViewModel = GetOldValue<LockObjectViewModel>(nameof(LockObjectViewModel));
}
else
{
ColorViewModel = _selectedItemViewModel.ColorViewModel;
FontViewModel = _selectedItemViewModel.FontViewModel;
ShapeViewModel = _selectedItemViewModel.ShapeViewModel;
AnimationViewModel = _selectedItemViewModel.AnimationViewModel;
LockObjectViewModel = _selectedItemViewModel.LockObjectViewModel;
2021-07-23 09:42:22 +08:00
}
}
if (_selectedItemViewModel != null)
{
_selectedItemViewModel.PropertyChanged += ViewModel_PropertyChanged;
}
2021-07-23 09:42:22 +08:00
}
}
}
/// <summary>
/// Simple service locator helper
/// </summary>
public class DiagramServicesProvider
{
private static Lazy<DiagramServicesProvider> instance = new Lazy<DiagramServicesProvider>(() => new DiagramServicesProvider());
private IDiagramServiceProvider serviceProvider = new DiagramServiceProvider();
public void SetNewServiceProvider(IDiagramServiceProvider provider)
{
serviceProvider = provider;
}
public IDiagramServiceProvider Provider
{
2023-03-18 21:44:58 +08:00
get
{
return serviceProvider;
}
2021-07-23 09:42:22 +08:00
}
public static DiagramServicesProvider Instance
{
2023-03-18 21:44:58 +08:00
get
{
return instance.Value;
}
2021-07-23 09:42:22 +08:00
}
}
}