using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Media; namespace AIStudio.Wpf.DiagramDesigner.ViewModels.BaseViewModel { /// /// Simple service locator /// public class DiagramServiceProvider : BindableBase, IDiagramServiceProvider { public DiagramServiceProvider() { ColorViewModel = new ColorViewModel(); FontViewModel = new FontViewModel(); ShapeViewModel = new ShapeViewModel(); AnimationViewModel = new AnimationViewModel(); LockObjectViewModel = new LockObjectViewModel(); _drawModeViewModel = new DrawModeViewModel(); _quickThemeViewModel = new QuickThemeViewModel(); _drawModeViewModel.PropertyChanged += ViewModel_PropertyChanged; _quickThemeViewModel.PropertyChanged += ViewModel_PropertyChanged; SetOldValue(ColorViewModel, nameof(ColorViewModel)); SetOldValue(FontViewModel, nameof(FontViewModel)); SetOldValue(ShapeViewModel, nameof(ShapeViewModel)); SetOldValue(AnimationViewModel, nameof(AnimationViewModel)); SetOldValue(LockObjectViewModel, nameof(LockObjectViewModel)); } private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { RaisePropertyChanged(sender, e.PropertyName); } public IColorViewModel CopyDefaultColorViewModel() { var viewModel = GetOldValue(nameof(ColorViewModel)); return CopyHelper.Mapper(viewModel); } public IFontViewModel CopyDefaultFontViewModel() { var viewModel = GetOldValue(nameof(FontViewModel)); return CopyHelper.Mapper(viewModel); } public IShapeViewModel CopyDefaultShapeViewModel() { var viewModel = GetOldValue(nameof(ShapeViewModel)); return CopyHelper.Mapper(viewModel); } public IAnimationViewModel CopyDefaultAnimationViewModel() { var viewModel = GetOldValue(nameof(AnimationViewModel)); return CopyHelper.Mapper(viewModel); } private IColorViewModel _colorViewModel; public IColorViewModel ColorViewModel { get { return _colorViewModel; } set { SetProperty(ref _colorViewModel, value); } } private IFontViewModel _fontViewModel; public IFontViewModel FontViewModel { get { return _fontViewModel; } set { SetProperty(ref _fontViewModel, value); } } private IShapeViewModel _shapeViewModel; public IShapeViewModel ShapeViewModel { get { return _shapeViewModel; } set { SetProperty(ref _shapeViewModel, value); } } private IAnimationViewModel _animationViewModel; public IAnimationViewModel AnimationViewModel { get { return _animationViewModel; } set { SetProperty(ref _animationViewModel, value); } } private IDrawModeViewModel _drawModeViewModel; public IDrawModeViewModel DrawModeViewModel { get { return _drawModeViewModel; } } private IQuickThemeViewModel _quickThemeViewModel; public IQuickThemeViewModel QuickThemeViewModel { get { return _quickThemeViewModel; } } private ILockObjectViewModel _lockObjectViewModel; public ILockObjectViewModel LockObjectViewModel { get { return _lockObjectViewModel; } set { SetProperty(ref _lockObjectViewModel, value); } } public List SelectedItems { get; set; } private SelectableDesignerItemViewModelBase _selectedItemViewModel; public SelectableDesignerItemViewModelBase SelectedItemViewModel { get { return _selectedItemViewModel; } set { if (_selectedItemViewModel != null) { _selectedItemViewModel.PropertyChanged -= ViewModel_PropertyChanged; } if (SetProperty(ref _selectedItemViewModel, value)) { if (_selectedItemViewModel == null) { ColorViewModel = GetOldValue(nameof(ColorViewModel)); FontViewModel = GetOldValue(nameof(FontViewModel)); ShapeViewModel = GetOldValue(nameof(ShapeViewModel)); AnimationViewModel = GetOldValue(nameof(AnimationViewModel)); LockObjectViewModel = GetOldValue(nameof(LockObjectViewModel)); } else { ColorViewModel = _selectedItemViewModel.ColorViewModel; FontViewModel = _selectedItemViewModel.FontViewModel; ShapeViewModel = _selectedItemViewModel.ShapeViewModel; AnimationViewModel = _selectedItemViewModel.AnimationViewModel; LockObjectViewModel = _selectedItemViewModel.LockObjectViewModel; } } if (_selectedItemViewModel != null) { _selectedItemViewModel.PropertyChanged += ViewModel_PropertyChanged; } } } } /// /// Simple service locator helper /// public class DiagramServicesProvider { private static Lazy instance = new Lazy(() => new DiagramServicesProvider()); private IDiagramServiceProvider serviceProvider = new DiagramServiceProvider(); public void SetNewServiceProvider(IDiagramServiceProvider provider) { serviceProvider = provider; } public IDiagramServiceProvider Provider { get { return serviceProvider; } } public static DiagramServicesProvider Instance { get { return instance.Value; } } } }