diff --git a/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj b/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj index 4b6e5f1..e3a48d0 100644 --- a/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj +++ b/AIStudio.Wpf.DiagramApp/AIStudio.Wpf.DiagramApp.csproj @@ -124,6 +124,7 @@ + diff --git a/AIStudio.Wpf.DiagramApp/App.xaml b/AIStudio.Wpf.DiagramApp/App.xaml index 2f3f94d..8f026e9 100644 --- a/AIStudio.Wpf.DiagramApp/App.xaml +++ b/AIStudio.Wpf.DiagramApp/App.xaml @@ -12,6 +12,7 @@ + diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs index ec70c36..b453e2f 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/FlowchartViewModel.cs @@ -13,7 +13,7 @@ using AIStudio.Wpf.DiagramDesigner; namespace AIStudio.Wpf.Flowchart { - public class FlowchartViewModel : DiagramsViewModel + public class FlowchartViewModel : PageViewModel { public FlowchartViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType) { diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs index 3514f1f..1c2edff 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/LogicalViewModel.cs @@ -9,7 +9,7 @@ using AIStudio.Wpf.DiagramDesigner; namespace AIStudio.Wpf.Logical { - public class LogicalViewModel : DiagramsViewModel + public class LogicalViewModel : PageViewModel { public LogicalViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType) { diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs index c716752..605d051 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/MainWindowViewModel.cs @@ -29,9 +29,9 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels { ToolBoxViewModel = new ToolBoxViewModel(); - DiagramsViewModels = new ObservableCollection(); - DiagramsViewModels.Add(new DiagramsViewModel("新建-1", "*", DiagramType.Normal)); - DiagramsViewModel = DiagramsViewModels.FirstOrDefault(); + DiagramsViewModels = new ObservableCollection(); + DiagramsViewModels.Add(new PageViewModel("新建-1", "*", DiagramType.Normal)); + PageViewModel = DiagramsViewModels.FirstOrDefault(); StandardColor = GenerateStandardGradients(); @@ -50,8 +50,8 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels #region 属性 public ToolBoxViewModel ToolBoxViewModel { get; private set; } - private ObservableCollection _diagramsViewModels; - public ObservableCollection DiagramsViewModels + private ObservableCollection _diagramsViewModels; + public ObservableCollection DiagramsViewModels { get { @@ -63,8 +63,8 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels } } - private DiagramsViewModel _diagramsViewModel; - public DiagramsViewModel DiagramsViewModel + private PageViewModel _diagramsViewModel; + public PageViewModel PageViewModel { get { @@ -215,14 +215,14 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels } #endregion - public Func NewItemFactory + public Func NewItemFactory { get { return () => { - return new DiagramsViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", DiagramType.Normal); + return new PageViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", DiagramType.Normal); }; } } @@ -659,7 +659,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels //here's how you can cancel stuff: //args.Cancel(); - if (args.DragablzItem.DataContext is DiagramsViewModel viewModel) + if (args.DragablzItem.DataContext is PageViewModel viewModel) { viewModel.Dispose(); } @@ -683,22 +683,22 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels RaisePropertyChanged(e.PropertyName); } - if (DiagramsViewModel == null) return; + if (PageViewModel == null) return; if (sender is IFontViewModel) - DiagramsViewModel.SetFont(sender as IFontViewModel, e.PropertyName); + PageViewModel.SetFont(sender as IFontViewModel, e.PropertyName); if (sender is IColorViewModel) - DiagramsViewModel.SetColor(sender as IColorViewModel, e.PropertyName); + PageViewModel.SetColor(sender as IColorViewModel, e.PropertyName); if (sender is IShapeViewModel) - DiagramsViewModel.SetSharp(sender as IShapeViewModel, e.PropertyName); + PageViewModel.SetSharp(sender as IShapeViewModel, e.PropertyName); if (sender is IQuickThemeViewModel) - DiagramsViewModel.SetQuickItem(sender as IQuickThemeViewModel, e.PropertyName); + PageViewModel.SetQuickItem(sender as IQuickThemeViewModel, e.PropertyName); if (sender is LockObject) - DiagramsViewModel.LockAction(sender as LockObject, e.PropertyName); + PageViewModel.LockAction(sender as LockObject, e.PropertyName); if (sender is DesignerItemViewModelBase designer && (e.PropertyName == nameof(designer.Angle) @@ -707,14 +707,14 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels || e.PropertyName == nameof(designer.ScaleX) || e.PropertyName == nameof(designer.ScaleY))) { - DiagramsViewModel.SetPropertyValue(designer, e.PropertyName); + PageViewModel.SetPropertyValue(designer, e.PropertyName); } } public bool KeyExecuted(KeyEventArgs e) { - if (DiagramsViewModel?.DiagramViewModel?.ExecuteShortcut(e) == true) + if (PageViewModel?.DiagramViewModel?.ExecuteShortcut(e) == true) { return true; } @@ -734,17 +734,17 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private void UnDoExecuted() { - DiagramsViewModel?.DiagramViewModel?.UndoCommand.Execute(null); + PageViewModel?.DiagramViewModel?.UndoCommand.Execute(null); } private void ReDoExecuted() { - DiagramsViewModel?.DiagramViewModel?.RedoCommand.Execute(null); + PageViewModel?.DiagramViewModel?.RedoCommand.Execute(null); } private void SelectedAllExecuted() { - DiagramsViewModel?.DiagramViewModel?.SelectAllCommand.Execute(null); + PageViewModel?.DiagramViewModel?.SelectAllCommand.Execute(null); } private void OpenExecuted(string para = null) @@ -771,13 +771,13 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels var viewmodel = DiagramsViewModels.FirstOrDefault(p => p.FileName == filename); if (viewmodel != null) { - DiagramsViewModel = viewmodel; + PageViewModel = viewmodel; MessageBox.Show("文档已经打开"); return; } - var diagram = DiagramsViewModel.OpenFile(filename, Path.GetExtension(filename)); - DiagramsViewModel flow; + var diagram = PageViewModel.OpenFile(filename, Path.GetExtension(filename)); + PageViewModel flow; if (diagram.DiagramType == DiagramType.FlowChart) { flow = new FlowchartViewModel(filename, diagram); @@ -792,14 +792,14 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels } else { - flow = new DiagramsViewModel(filename, diagram); + flow = new PageViewModel(filename, diagram); } DiagramsViewModels.Add(flow); - DiagramsViewModel = flow; + PageViewModel = flow; if (string.IsNullOrEmpty(para)) { - SaveHistory(DiagramsViewModel); + SaveHistory(PageViewModel); } else { @@ -810,39 +810,39 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private void SaveExecuted() { - if (DiagramsViewModel == null) return; + if (PageViewModel == null) return; - if (DiagramsViewModel.SaveFile()) + if (PageViewModel.SaveFile()) { - SaveHistory(DiagramsViewModel); + SaveHistory(PageViewModel); } } private void SaveAsExecuted() { - if (DiagramsViewModel == null) return; + if (PageViewModel == null) return; - if (DiagramsViewModel.SaveFile(true)) + if (PageViewModel.SaveFile(true)) { - SaveHistory(DiagramsViewModel); + SaveHistory(PageViewModel); } } - private void SaveHistory(DiagramsViewModel diagramsViewModel) + private void SaveHistory(PageViewModel diagramsViewModel) { - HistoryList.Remove(DiagramsViewModel.FileName); - HistoryList.Insert(0, DiagramsViewModel.FileName); + HistoryList.Remove(PageViewModel.FileName); + HistoryList.Insert(0, PageViewModel.FileName); File.WriteAllText(_history, JsonConvert.SerializeObject(HistoryList)); } private bool Save_Enable() { - return DiagramsViewModel != null; + return PageViewModel != null; } private void PasteExecuted() { - DiagramsViewModel?.DiagramViewModel?.PasteCommand.Execute(null); + PageViewModel?.DiagramViewModel?.PasteCommand.Execute(null); } private bool Paste_Enabled() @@ -852,32 +852,32 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private void CopyExecuted() { - DiagramsViewModel?.DiagramViewModel?.CopyCommand.Execute(null); + PageViewModel?.DiagramViewModel?.CopyCommand.Execute(null); } private bool Copy_Enabled() { - return DiagramsViewModel != null && DiagramsViewModel.DiagramViewModel != null && DiagramsViewModel.DiagramViewModel.SelectedItems.Count() > 0; + return PageViewModel != null && PageViewModel.DiagramViewModel != null && PageViewModel.DiagramViewModel.SelectedItems.Count() > 0; } private void DeleteExecuted() { - DiagramsViewModel?.DiagramViewModel?.DeleteCommand.Execute(null); + PageViewModel?.DiagramViewModel?.DeleteCommand.Execute(null); } private bool Delete_Enabled() { - return DiagramsViewModel != null && DiagramsViewModel.DiagramViewModel != null && DiagramsViewModel.DiagramViewModel.SelectedItems.Count() > 0; + return PageViewModel != null && PageViewModel.DiagramViewModel != null && PageViewModel.DiagramViewModel.SelectedItems.Count() > 0; } private void CutExecuted() { - DiagramsViewModel?.DiagramViewModel?.CutCommand.Execute(null); + PageViewModel?.DiagramViewModel?.CutCommand.Execute(null); } private bool Cut_Enabled() { - return DiagramsViewModel != null && DiagramsViewModel.DiagramViewModel != null && DiagramsViewModel.DiagramViewModel.SelectedItems.Count() > 0; + return PageViewModel != null && PageViewModel.DiagramViewModel != null && PageViewModel.DiagramViewModel.SelectedItems.Count() > 0; } private void FormatExecuted() @@ -887,7 +887,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private bool Format_Enabled() { - return DiagramsViewModel != null && DiagramsViewModel.DiagramViewModel != null && DiagramsViewModel.DiagramViewModel.SelectedItems.Count() == 1; + return PageViewModel != null && PageViewModel.DiagramViewModel != null && PageViewModel.DiagramViewModel.SelectedItems.Count() == 1; } private void New_Executed(string type = "Normal") @@ -895,22 +895,26 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels IsOpenBackstage = false; if (type == DiagramType.FlowChart.ToString()) { - DiagramsViewModel = new FlowchartViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + PageViewModel = new FlowchartViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); } else if (type == DiagramType.Logical.ToString()) { - DiagramsViewModel = new LogicalViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + PageViewModel = new LogicalViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); } else if (type == DiagramType.SFC.ToString()) { - DiagramsViewModel = new SFCViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + PageViewModel = new SFCViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + } + else if (type == DiagramType.Mind.ToString()) + { + PageViewModel = new MindViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); } else { - DiagramsViewModel = new DiagramsViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); + PageViewModel = new PageViewModel(NewNameHelper.GetNewName(DiagramsViewModels.Select(p => p.Title), "新建-"), "*", (DiagramType)Enum.Parse(typeof(DiagramType), type)); } - DiagramsViewModels.Add(DiagramsViewModel); + DiagramsViewModels.Add(PageViewModel); } private void ExitExecuted() @@ -920,112 +924,112 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private void GroupExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.GroupCommand.Execute(para); + PageViewModel?.DiagramViewModel?.GroupCommand.Execute(para); } private void UngroupExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.UngroupCommand.Execute(para); + PageViewModel?.DiagramViewModel?.UngroupCommand.Execute(para); } #region 布局 private void AlignTopExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignTopCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignTopCommand.Execute(para); } private void AlignVerticalCentersExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignVerticalCentersCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignVerticalCentersCommand.Execute(para); } private void AlignBottomExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignBottomCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignBottomCommand.Execute(para); } private void AlignLeftExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignLeftCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignLeftCommand.Execute(para); } private void AlignHorizontalCentersExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignHorizontalCentersCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignHorizontalCentersCommand.Execute(para); } private void AlignRightExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.AlignRightCommand.Execute(para); + PageViewModel?.DiagramViewModel?.AlignRightCommand.Execute(para); } private void BringForwardExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.BringForwardCommand.Execute(para); + PageViewModel?.DiagramViewModel?.BringForwardCommand.Execute(para); } private void BringToFrontExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.BringToFrontCommand.Execute(para); + PageViewModel?.DiagramViewModel?.BringToFrontCommand.Execute(para); } private void SendBackwardExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SendBackwardCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SendBackwardCommand.Execute(para); } private void SendToBackExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SendBackwardCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SendBackwardCommand.Execute(para); } private void DistributeHorizontalExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.DistributeHorizontalCommand.Execute(para); + PageViewModel?.DiagramViewModel?.DistributeHorizontalCommand.Execute(para); } private void DistributeVerticalExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.DistributeVerticalCommand.Execute(para); + PageViewModel?.DiagramViewModel?.DistributeVerticalCommand.Execute(para); } private void SelectAllExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SelectAllCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SelectAllCommand.Execute(para); } #endregion private void CenterMoveExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.CenterMoveCommand.Execute(para); + PageViewModel?.DiagramViewModel?.CenterMoveCommand.Execute(para); } private void LeftMoveExecuted(object para = null) { - DiagramsViewModel?.DiagramViewModel?.LeftMoveCommand.Execute(para); + PageViewModel?.DiagramViewModel?.LeftMoveCommand.Execute(para); } private void RightMoveExecuted(object para = null) { - DiagramsViewModel?.DiagramViewModel?.RightMoveCommand.Execute(para); + PageViewModel?.DiagramViewModel?.RightMoveCommand.Execute(para); } private void UpMoveExecuted(object para = null) { - DiagramsViewModel?.DiagramViewModel?.UpMoveCommand.Execute(para); + PageViewModel?.DiagramViewModel?.UpMoveCommand.Execute(para); } private void DownMoveExecuted(object para = null) { - DiagramsViewModel?.DiagramViewModel?.DownMoveCommand.Execute(para); + PageViewModel?.DiagramViewModel?.DownMoveCommand.Execute(para); } private void SameWidthExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SameWidthCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SameWidthCommand.Execute(para); } private void SameHeightExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SameHeightCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SameHeightCommand.Execute(para); } private void SameSizeExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SameSizeCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SameSizeCommand.Execute(para); } private void SameAngleExecuted(object para) { - DiagramsViewModel?.DiagramViewModel?.SameAngleCommand.Execute(para); + PageViewModel?.DiagramViewModel?.SameAngleCommand.Execute(para); } private void LockExecuted(object para) @@ -1040,62 +1044,62 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels private void AddPageExecuted(object para) { - DiagramsViewModel?.AddPageExecuted(para); + PageViewModel?.AddPageExecuted(para); } private void AddCopyPageExecuted(object para) { - DiagramsViewModel?.AddCopyPageExecuted(para); + PageViewModel?.AddCopyPageExecuted(para); } private void RenamePageExecuted(object para) { - DiagramsViewModel?.RenamePageExecuted(para); + PageViewModel?.RenamePageExecuted(para); } private void EndRenamePageExecuted(object para) { - DiagramsViewModel?.EndRenamePageExecuted(para); + PageViewModel?.EndRenamePageExecuted(para); } private void DeletePageExecuted(object para) { - DiagramsViewModel?.DeletePageExecuted(para); + PageViewModel?.DeletePageExecuted(para); } private void AddImageExecuted(object para) { - DiagramsViewModel?.AddImageExecuted(para); + PageViewModel?.AddImageExecuted(para); } private void EditImageExecuted(object para) { - DiagramsViewModel?.EditImageExecuted(DiagramsViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); + PageViewModel?.EditImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); } private void ResizeImageExecuted(object para) { - DiagramsViewModel?.ResizeImageExecuted(DiagramsViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); + PageViewModel?.ResizeImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); } private void ResetImageExecuted(object para) { - DiagramsViewModel?.ResetImageExecuted(DiagramsViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); + PageViewModel?.ResetImageExecuted(PageViewModel.DiagramViewModel.SelectedItems?.FirstOrDefault()); } private void AddVideoExectued(object para) { - DiagramsViewModel?.AddVideoExecuted(para); + PageViewModel?.AddVideoExecuted(para); } private void AddOutLineTextExecuted(object para) { - DiagramsViewModel?.AddOutLineTextExecuted(para); + PageViewModel?.AddOutLineTextExecuted(para); } private void AddBarcodeExecuted(object para) { - DiagramsViewModel?.AddBarcodeExecuted(para); + PageViewModel?.AddBarcodeExecuted(para); } private void SelectedColorExecuted(object para) @@ -1104,9 +1108,9 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels switch (ColorType) { - case Models.ColorType.Text: DiagramsViewModel?.SetFont(new FontViewModel() { FontColor = (Color)para }, "FontColor"); break; - case Models.ColorType.Fill: DiagramsViewModel?.SetColor(new ColorViewModel() { FillColor = new ColorObject() { Color = (Color)para } }, "FillColor"); break; - case Models.ColorType.Line: DiagramsViewModel?.SetColor(new ColorViewModel() { LineColor = new ColorObject() { Color = (Color)para } }, "LineColor"); break; + case Models.ColorType.Text: PageViewModel?.SetFont(new FontViewModel() { FontColor = (Color)para }, "FontColor"); break; + case Models.ColorType.Fill: PageViewModel?.SetColor(new ColorViewModel() { FillColor = new ColorObject() { Color = (Color)para } }, "FillColor"); break; + case Models.ColorType.Line: PageViewModel?.SetColor(new ColorViewModel() { LineColor = new ColorObject() { Color = (Color)para } }, "LineColor"); break; } } diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs new file mode 100644 index 0000000..25012a8 --- /dev/null +++ b/AIStudio.Wpf.DiagramApp/ViewModels/MindViewModel.cs @@ -0,0 +1,59 @@ +using AIStudio.Wpf.DiagramApp.Models; +using AIStudio.Wpf.DiagramApp.ViewModels; +using AIStudio.Wpf.Flowchart.ViewModels; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.Mind.ViewModels; + +namespace AIStudio.Wpf.Flowchart +{ + public class MindViewModel : PageViewModel + { + public MindViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType) + { + + } + public MindViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument) + { + _service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth; + } + + protected override void InitDiagramViewModel() + { + base.InitDiagramViewModel(); + + DiagramViewModel.GridCellSize = new Size(100, 100); + _service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth; + DiagramViewModel.AllowDrop = false; + } + + protected override void Init() + { + base.Init(); + + DesignerItemViewModelBase start = new MindLevel1Node() { Left = 100, Top = 0, ItemWidth = 80, ItemHeight = 40, Text = "思维导图" }; + DiagramViewModel.DirectAddItemCommand.Execute(start); + DiagramViewModel?.CenterMoveCommand.Execute(start); + + DiagramViewModel.ClearSelectedItemsCommand.Execute(null); + + } + + public override void Dispose() + { + base.Dispose(); + + foreach (var viewModel in DiagramViewModels) + { + FlowchartService.DisposeData(viewModel); + } + } + } +} diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/PageViewModel.cs similarity index 98% rename from AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs rename to AIStudio.Wpf.DiagramApp/ViewModels/PageViewModel.cs index c803081..3ef6179 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/PageViewModel.cs @@ -21,11 +21,11 @@ using AIStudio.Wpf.DiagramDesigner.Helpers; namespace AIStudio.Wpf.DiagramApp.ViewModels { - public partial class DiagramsViewModel : BindableBase + public partial class PageViewModel : BindableBase { protected IDiagramServiceProvider _service { get { return DiagramServicesProvider.Instance.Provider; } } - public DiagramsViewModel(string title, string status, DiagramType diagramType) + public PageViewModel(string title, string status, DiagramType diagramType) { Title = title; Status = status; @@ -39,7 +39,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels Init(); } - public DiagramsViewModel(string filename) + public PageViewModel(string filename) { FileName = filename; string ext = Path.GetExtension(filename); @@ -47,7 +47,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels OpenFile(diagramDocument, ext); } - public DiagramsViewModel(string filename, DiagramDocument diagramDocument) + public PageViewModel(string filename, DiagramDocument diagramDocument) { FileName = filename; string ext = Path.GetExtension(filename); @@ -253,6 +253,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels viewModel.PageSizeType = diagramItem.PageSizeType; viewModel.PhysicalGridMarginSize = diagramItem.PhysicalGridMarginSize; viewModel.GridColor = diagramItem.GridColor; + viewModel.AllowDrop = diagramItem.AllowDrop; foreach (var diagramItemData in diagramItem.DesignerItems) { diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs index eb2bf87..3b89ef7 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/SFCViewModel.cs @@ -16,7 +16,7 @@ using AIStudio.Wpf.DiagramDesigner; namespace AIStudio.Wpf.Flowchart { - public class SFCViewModel : DiagramsViewModel + public class SFCViewModel : PageViewModel { public SFCViewModel(string title, string status, DiagramType diagramType) : base(title, status, diagramType) { diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index cb8752b..8038250 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -94,6 +94,9 @@ + @@ -309,7 +312,7 @@ Header="撤销" Icon="pack://application:,,,/AIStudio.Wpf.DiagramApp;component/Images/undo.png" SizeDefinition="Middle,Small" - Command="{Binding DiagramsViewModel.DiagramViewModel.UndoCommand}"> + Command="{Binding PageViewModel.DiagramViewModel.UndoCommand}"> + Command="{Binding PageViewModel.DiagramViewModel.RedoCommand}"> - + @@ -1478,7 +1481,7 @@ - + @@ -1495,7 +1498,7 @@ - + @@ -1518,21 +1521,21 @@ Width="190" /> - + - + - + - + - + @@ -1543,28 +1546,28 @@ - + - + - + - + @@ -1587,7 +1590,7 @@ - + @@ -1596,7 +1599,7 @@ - + @@ -1605,7 +1608,7 @@ - + @@ -1614,7 +1617,7 @@ - + @@ -1629,28 +1632,28 @@ - + - + - + - + @@ -1668,7 +1671,7 @@ - + @@ -1677,7 +1680,7 @@ - + @@ -1686,7 +1689,7 @@ - + @@ -1695,7 +1698,7 @@ - + @@ -1734,7 +1737,7 @@ - - 鼠标位置(mm): - + , - + - + - + @@ -2051,7 +2054,7 @@ HorizontalAlignment="Right"> DesignerItems { get; set; } = new List(); diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml index b2e3ca1..cfdcfb9 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml @@ -836,7 +836,7 @@ GridMarginSize="{Binding GridMarginSize}" GridColor="{Binding GridColor}" Background="{Binding PageBackground,Converter={StaticResource ColorBrushConverter}}" - AllowDrop="True"> + AllowDrop="{Binding AllowDrop}"> diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs index 59f0fce..345e3e0 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/ConnectionViewModel.cs @@ -13,6 +13,9 @@ using SvgPathProperties; namespace AIStudio.Wpf.DiagramDesigner { + /// + /// DefaultLink + /// public class ConnectionViewModel : SelectableDesignerItemViewModelBase { public ConnectionViewModel(FullyCreatedConnectorInfo sourceConnectorInfo, ConnectorInfoBase sinkConnectorInfo, DrawMode drawMode = DrawMode.ConnectingLineSmooth, RouterMode routerMode = AIStudio.Wpf.DiagramDesigner.RouterMode.RouterNormal) : this(null, sourceConnectorInfo, sinkConnectorInfo, drawMode, routerMode) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs index 3ccb3ff..dd4d056 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs @@ -199,6 +199,9 @@ namespace AIStudio.Wpf.DiagramDesigner { menuOptions.Clear(); var orientation = new CinchMenuItem("方向"); + var none = new CinchMenuItem("无"); + none.Command = MenuItemCommand; + none.CommandParameter = ConnectorOrientation.None; var top = new CinchMenuItem("上"); top.Command = MenuItemCommand; top.CommandParameter = ConnectorOrientation.Top; @@ -211,6 +214,7 @@ namespace AIStudio.Wpf.DiagramDesigner var right = new CinchMenuItem("右"); right.Command = MenuItemCommand; right.CommandParameter = ConnectorOrientation.Right; + orientation.Children.Add(none); orientation.Children.Add(top); orientation.Children.Add(bottom); orientation.Children.Add(left); diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs index c2a87bd..6552ddc 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramOption.cs @@ -8,12 +8,22 @@ namespace AIStudio.Wpf.DiagramDesigner { public class DiagramOption { + public LayoutOption LayoutOption + { + get; set; + } = new LayoutOption(); + public ShortcutOption ShortcutOption { get; set; } = new ShortcutOption(); } + public class LayoutOption + { + + } + public class ShortcutOption { [Description("Select All shortcut (CTRL+A by default)")] diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 0c43f77..c520068 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -503,6 +503,11 @@ namespace AIStudio.Wpf.DiagramDesigner get; set; } = new DiagramOption(); + public bool AllowDrop + { + get; set; + } = true; + private double OffsetX = 10; private double OffsetY = 10; #endregion @@ -742,6 +747,7 @@ namespace AIStudio.Wpf.DiagramDesigner PageSizeType = diagramItem.PageSizeType; PhysicalGridMarginSize = diagramItem.PhysicalGridMarginSize; GridColor = diagramItem.GridColor; + AllowDrop = diagramItem.AllowDrop; } public bool ExecuteEnable(object para) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs index 5713e0c..9bf13c8 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/GroupDesignerItemViewModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,6 +11,9 @@ using AIStudio.Wpf.DiagramDesigner.Models; namespace AIStudio.Wpf.DiagramDesigner { + /// + /// DefaultGroup + /// public class GroupDesignerItemViewModel : DesignerItemViewModelBase { public GroupDesignerItemViewModel() : this(null) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs index b4382e2..31b3c4b 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs @@ -257,6 +257,10 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + bool AllowDrop + { + get; set; + } System.Windows.Point CurrentPoint { get; set; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs index 20e8f0f..7f790e8 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/DefaultDesignerItemViewModel.cs @@ -1,10 +1,14 @@ using System; +using System.ComponentModel; using AIStudio.Wpf.DiagramDesigner; using AIStudio.Wpf.DiagramDesigner.Models; using AIStudio.Wpf.DiagramDesigner.Services; namespace AIStudio.Wpf.DiagramDesigner { + /// + /// DefaultNode + /// public class DefaultDesignerItemViewModel : DesignerItemViewModelBase { public DefaultDesignerItemViewModel() : this(null) diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs index 702ed8f..c702b5f 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/GifImageItemViewModel.cs @@ -114,7 +114,7 @@ namespace AIStudio.Wpf.DiagramDesigner private void ExecuteAddItemCommand(object parameter) { - FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Top, true); + FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true); MouseButtonEventArgs mosueArg = ((EventToCommandArgs)parameter).EventArgs as MouseButtonEventArgs; var position = mosueArg.GetPosition(((EventToCommandArgs)parameter).Sender as IInputElement); connector.XRatio = (position.X - connector.ConnectorWidth / 2) / connector.DataItem.ItemWidth; diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs index bd1bc40..3231918 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/TextDesignerItemViewModel.cs @@ -5,6 +5,9 @@ using System.Windows.Media; namespace AIStudio.Wpf.DiagramDesigner { + /// + /// DefaultTextNode + /// public class TextDesignerItemViewModel : DesignerItemViewModelBase { public TextDesignerItemViewModel() : this(null) diff --git a/AIStudio.Wpf.Mind/AIStudio.Wpf.Mind.csproj b/AIStudio.Wpf.Mind/AIStudio.Wpf.Mind.csproj index 536b337..208a974 100644 --- a/AIStudio.Wpf.Mind/AIStudio.Wpf.Mind.csproj +++ b/AIStudio.Wpf.Mind/AIStudio.Wpf.Mind.csproj @@ -19,4 +19,17 @@ + + + + + + + $(DefaultXamlRuntime) + + + $(DefaultXamlRuntime) + + + diff --git a/AIStudio.Wpf.Mind/NodeLevel.cs b/AIStudio.Wpf.Mind/NodeLevel.cs new file mode 100644 index 0000000..af1fd22 --- /dev/null +++ b/AIStudio.Wpf.Mind/NodeLevel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AIStudio.Wpf.Mind +{ + public enum NodeLevel + { + Level1, + Level2, + Level3 + } +} diff --git a/AIStudio.Wpf.Mind/Themes/Generic.xaml b/AIStudio.Wpf.Mind/Themes/Generic.xaml new file mode 100644 index 0000000..1e2dd45 --- /dev/null +++ b/AIStudio.Wpf.Mind/Themes/Generic.xaml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/AIStudio.Wpf.Mind/Themes/MindNode.xaml b/AIStudio.Wpf.Mind/Themes/MindNode.xaml new file mode 100644 index 0000000..bde512e --- /dev/null +++ b/AIStudio.Wpf.Mind/Themes/MindNode.xaml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AIStudio.Wpf.Mind/ViewModels/MindNode.cs b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs new file mode 100644 index 0000000..8ea1976 --- /dev/null +++ b/AIStudio.Wpf.Mind/ViewModels/MindNode.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using AIStudio.Wpf.DiagramDesigner; +using AIStudio.Wpf.DiagramDesigner.Models; + +namespace AIStudio.Wpf.Mind.ViewModels +{ + public class MindNode : DesignerItemViewModelBase + { + public MindNode(NodeLevel nodeLevel) : this(null, nodeLevel) + { + + } + + public MindNode(IDiagramViewModel root, NodeLevel nodeLevel) : base(root) + { + NodeLevel = nodeLevel; + } + + public MindNode(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + } + + public MindNode(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + } + + [Browsable(false)] + public NodeLevel NodeLevel + { + get; set; + } + + private double _cornerRadius = 3; + public double CornerRadius + { + get + { + return _cornerRadius; + } + set + { + SetProperty(ref _cornerRadius, value); + } + } + } + + public class MindLevel1Node : MindNode + { + public MindLevel1Node() : this(null) + { + + } + + public MindLevel1Node(IDiagramViewModel root) : base(root, NodeLevel.Level1) + { + + } + + public MindLevel1Node(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + + } + + public MindLevel1Node(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + + } + } + + public class MindLevel2Node : MindNode + { + public MindLevel2Node() : this(null) + { + + } + + public MindLevel2Node(IDiagramViewModel root) : base(root, NodeLevel.Level2) + { + + } + + public MindLevel2Node(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + + } + + public MindLevel2Node(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + + } + } + + public class MindLevel3Node : MindNode + { + public MindLevel3Node() : this(null) + { + + } + + public MindLevel3Node(IDiagramViewModel root) : base(root, NodeLevel.Level2) + { + + } + + public MindLevel3Node(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer) + { + + } + + public MindLevel3Node(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType) + { + + } + } +}