工具栏整理

This commit is contained in:
艾竹
2023-04-02 12:01:46 +08:00
parent 02ebd056b3
commit 0701f25519
30 changed files with 1730 additions and 923 deletions

View File

@@ -1,11 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Windows.Input;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
namespace AIStudio.Wpf.Mind.ViewModels
{
@@ -16,7 +12,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
get; set;
}
MindThemeModel MindThemeModel
MindTheme MindTheme
{
get; set;
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Windows.Input;
@@ -7,13 +8,14 @@ using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
namespace AIStudio.Wpf.Mind.ViewModels
{
public class MindDiagramViewModel : DiagramViewModel, IMindDiagramViewModel
{
#region
private MindType _mindType = Mind.MindType.Mind;
private MindType _mindType = MindType.Mind;
public MindType MindType
{
get
@@ -22,26 +24,23 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
set
{
var oldvalue = _mindType;
if (SetProperty(ref _mindType, value))
{
ExecutedChangeMindType(oldvalue, value);
}
SetProperty(ref _mindType, value);
}
}
private MindThemeModel _mindThemeModel = MindThemeHelper.GetTheme("天空蓝");
public MindThemeModel MindThemeModel
private MindTheme _mindTheme;
public MindTheme MindTheme
{
get
{
return _mindThemeModel;
return _mindTheme;
}
set
{
SetProperty(ref _mindThemeModel, value);
SetProperty(ref _mindTheme, value);
}
}
public List<MindNode> RootItems
{
get
@@ -58,6 +57,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
public List<MindNode> MindSelectedItems
{
get
{
return SelectedItems.OfType<MindNode>().ToList();
}
}
private LinkInfo _linkInfo = new LinkInfo();
public LinkInfo LinkInfo
{
@@ -354,7 +361,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
private MindNode AddRootItem()
{
ClearSelectedItems();
MindNode level1node = new MindNode(this) { Root = this, Id = Guid.NewGuid(), Text = "思维导图" };
MindNode level1node = new MindNode(this) { Root = this, Id = Guid.NewGuid(), Text = "思维导图", MindType = MindType, MindTheme = MindTheme };
level1node.InitLayout(true);
Items.Add(level1node);
level1node.IsSelected = true;
@@ -422,6 +429,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
LinkInfo = new LinkInfo(MindSelectedItem?.LinkInfo);
ImageInfo = new ImageInfo(MindSelectedItem?.ImageInfo);
Remark = MindSelectedItem?.Remark;
if (MindSelectedItem != null)
{
MindType = MindSelectedItem.MindType;
MindTheme = MindSelectedItem.MindTheme;
}
}
}
}
@@ -975,37 +987,42 @@ namespace AIStudio.Wpf.Mind.ViewModels
#region
private void ExecutedChangeMindTypeCommand(object obj)
{
if (obj is MindType mindType)
var oldMindType = MindType;
if (obj is MindType mindType && mindType != oldMindType)
{
MindType = mindType;
var roots = MindSelectedItems.Select(p => p.RootNode).Distinct().ToList();
if (roots.Count > 0)
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
roots.ForEach(p => p.MindType = mindType);
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
roots.ForEach(p => p.LayoutUpdated());
},
() => {
roots.ForEach(p => p.MindType = oldMindType);
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
roots.ForEach(p => p.LayoutUpdated());
});
}
}
}
private void ExecutedChangeMindType(MindType oldvalue, MindType newvalue)
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
RootItems?.ForEach(p => p.LayoutUpdated());
},
() => {
_mindType = oldvalue;
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
RootItems?.ForEach(p => p.LayoutUpdated());
});
}
private void ExecutedChangeMindThemeCommand(object obj)
{
string oldmindThemeModel = MindThemeModel.Name;
if (obj is string mindThemeModel && mindThemeModel != oldmindThemeModel)
var oldmindTheme = MindTheme;
if (obj is MindTheme mindTheme && mindTheme != oldmindTheme)
{
DoCommandManager.DoNewCommand(this.ToString(),
var roots = MindSelectedItems.Select(p => p.RootNode).Distinct().ToList();
if (roots.Count > 0)
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
MindThemeModel = MindThemeHelper.GetTheme(mindThemeModel);
if (MindThemeModel?.Dark == true)
var mindThemeModel = MindThemeHelper.GetTheme(mindTheme);
if (mindThemeModel?.Dark == true)
{
PageBackground = Colors.Black;
}
@@ -1013,11 +1030,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
PageBackground = Colors.White;
}
Items.OfType<MindNode>().ToList().ForEach(item => { item.ThemeChange(); });
MindTheme = mindTheme;
roots.ForEach(p => p.MindTheme = MindTheme);
roots.SelectMany(p => p.GetChildren(true)).ToList().ForEach(item => { item.ThemeChange(); });
roots.ForEach(p => p.LayoutUpdated());
},
() => {
MindThemeModel = MindThemeHelper.GetTheme(oldmindThemeModel);
if (MindThemeModel?.Dark == true)
var mindThemeModel = MindThemeHelper.GetTheme(oldmindTheme);
if (mindThemeModel?.Dark == true)
{
PageBackground = Colors.Black;
}
@@ -1025,8 +1045,12 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
PageBackground = Colors.White;
}
Items.OfType<MindNode>().ToList().ForEach(item => { item.ThemeChange(); });
MindTheme = oldmindTheme;
roots.ForEach(p => p.MindTheme = MindTheme);
roots.SelectMany(p => p.GetChildren(true)).ToList().ForEach(item => { item.ThemeChange(); });
roots.ForEach(p => p.LayoutUpdated());
});
}
}
}
@@ -1048,7 +1072,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
if (items.Any())
{
Dictionary<MindNode, MindThemeModel> infos = items.OfType<MindNode>().ToDictionary(p => p, p => MindThemeHelper.GetThemeModel(p));
Dictionary<MindNode, MindThemeModel> infos = items.OfType<MindNode>().ToDictionary(p => p, p => MindThemeHelper.GetNodeTheme(p));
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in items)
@@ -1144,7 +1168,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
private void Move(MindNode rootitem, double? left, double? top)
{
if (left == null)
left = (PageSize.Width - rootitem.ItemWidth) / 2;
if (top == null)

View File

@@ -18,7 +18,7 @@ using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.DiagramDesigner.Models;
using AIStudio.Wpf.DiagramModels;
using AIStudio.Wpf.DiagramModels.ViewModels;
using AIStudio.Wpf.Flowchart.Models;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
@@ -96,18 +96,18 @@ namespace AIStudio.Wpf.Mind.ViewModels
public void InitLayout(bool initAppearance)
{
var layout = TypeHelper.GetType(MindType.ToString() + "Layout");
var layout = TypeHelper.GetType(this.MindType.ToString() + "Layout");
MindLayout = layout != null ? (System.Activator.CreateInstance(layout) as IMindLayout) : new MindLayout();
this.PropertyChanged -= this.Item_PropertyChanged;
IsInnerConnector = true;
MindLayout.Appearance(this, MindThemeModel, initAppearance);
MindLayout.Appearance(this, MindTheme, initAppearance);
this.PropertyChanged += this.Item_PropertyChanged;
}
public void ThemeChange()
{
MindThemeHelper.ThemeChange(this, MindThemeModel);
MindThemeHelper.ThemeChange(this, MindTheme);
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -145,6 +145,32 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
#region
private MindType _mindType = MindType.Mind;
public MindType MindType
{
get
{
return GetLevel0Node()._mindType;
}
set
{
GetLevel0Node()._mindType = value;
}
}
private MindTheme _mindTheme;
public MindTheme MindTheme
{
get
{
return GetLevel0Node()._mindTheme;
}
set
{
GetLevel0Node()._mindTheme = value;
}
}
public IMindLayout MindLayout
{
get; set;
@@ -181,22 +207,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
public MindType MindType
{
get
{
return (Root as IMindDiagramViewModel)?.MindType ?? MindType.Mind;
}
}
public MindThemeModel MindThemeModel
{
get
{
return (Root as IMindDiagramViewModel)?.MindThemeModel ?? MindThemeHelper.GetTheme("天空蓝");
}
}
private bool _isExpanded = true;
public bool IsExpanded
{
@@ -560,62 +570,54 @@ namespace AIStudio.Wpf.Mind.ViewModels
case nameof(NodeLevel):
MindLayout?.Appearance(this);
break;
case nameof(Text):
{
ItemWidth = Math.Max(ItemWidth, GetTextDisplayWidthHelper.GetTextDisplayWidth(Text, new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch, FontViewModel.FontSize) + 30);
break;
}
case nameof(Text):
case nameof(Rate):
case nameof(Priority):
case nameof(Remark):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (string.IsNullOrEmpty(valuePropertyChangedEventArgs.OldValue?.ToString()) && !string.IsNullOrEmpty(valuePropertyChangedEventArgs.NewValue?.ToString()))
{
ItemWidth += 24;
}
else if (!string.IsNullOrEmpty(valuePropertyChangedEventArgs.OldValue?.ToString()) && string.IsNullOrEmpty(valuePropertyChangedEventArgs.NewValue?.ToString()))
{
ItemWidth -= 24;
}
}
break;
}
case nameof(LinkInfo):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (valuePropertyChangedEventArgs.OldValue == null && valuePropertyChangedEventArgs.NewValue != null)
{
ItemWidth += 24;
}
else if (valuePropertyChangedEventArgs.OldValue != null && valuePropertyChangedEventArgs.NewValue == null)
{
ItemWidth -= 24;
}
}
break;
}
case nameof(ImageInfo):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (valuePropertyChangedEventArgs.OldValue == null && valuePropertyChangedEventArgs.NewValue != null)
{
ItemWidth = Math.Max(ItemWidth, 160);
ItemHeight += 135;
}
else if (valuePropertyChangedEventArgs.OldValue != null && valuePropertyChangedEventArgs.NewValue == null)
{
ItemHeight -= 135;
}
}
SetItemWidthHeight();
break;
}
}
}
private void SetItemWidthHeight()
{
double width = 0;
double height = 0;
width += GetTextDisplayWidthHelper.GetTextDisplayWidth(Text, new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch, FontViewModel.FontSize) + 30;
width += Rate == null ? 0 : 24;
width += Priority == null ? 0 : 24;
width += Remark == null ? 0 : 24;
width += LinkInfo == null ? 0 : 24;
var defaultTheme = MindThemeHelper.GetNodeDefaultTheme(this);
if (ImageInfo != null)
{
width = Math.Max(width, 160);
height = defaultTheme.ItemHeight / defaultTheme.FontSize * FontViewModel.FontSize + 135;
}
else
{
height = defaultTheme.ItemHeight / defaultTheme.FontSize * FontViewModel.FontSize;
}
ItemWidth = width;
ItemHeight = height;
}
protected override void FontViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(FontViewModel.FontSize))
{
SetItemWidthHeight();
}
}
public override void AddToSelection(bool selected)
{
foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList())
@@ -661,9 +663,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
return mindnode;
}
public List<MindNode> GetChildren()
public List<MindNode> GetChildren(bool self = false)
{
List<MindNode> mindnode = new List<MindNode>();
if (self)
{
mindnode.Add(this);
}
if (this.Children != null)
{
foreach (var child in this.Children)