工具栏整理

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,12 +1,15 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:AIStudio.Wpf.Mind.Controls">
xmlns:controls="clr-namespace:AIStudio.Wpf.Mind.Controls"
xmlns:dd="https://gitee.com/akwkevin/aistudio.-wpf.-diagram">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Styles/Button.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Styles/ContextMenu.xaml" />
</ResourceDictionary.MergedDictionaries>
<dd:BrushOpacityConverter x:Key="BrushOpacityConverter"/>
<Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}">
<Setter Property="Padding" Value="6"/>
<Setter Property="Background" Value="Transparent" />
@@ -151,22 +154,6 @@
</Button>
</Border>
<!--<Popup x:Name="PART_Popup"
Placement="Bottom"
IsOpen="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
AllowsTransparency="True"
Margin="0,0,-4,0">
<Border>
<ScrollViewer x:Name="PART_ScrollViewer"
IsTabStop="False"
Margin="1"
SnapsToDevicePixels="True"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Hidden">
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Local" />
</ScrollViewer>
</Border>
</Popup>-->
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Content" Value="{x:Null}">

View File

@@ -6,6 +6,8 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dd="https://gitee.com/akwkevin/aistudio.-wpf.-diagram"
xmlns:controls="clr-namespace:AIStudio.Wpf.Mind.Controls"
xmlns:models="clr-namespace:AIStudio.Wpf.Mind.Models"
xmlns:converter="clr-namespace:AIStudio.Wpf.Mind.Converters"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" >
<UserControl.Resources>
@@ -13,11 +15,14 @@
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Styles/Button.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Styles/ToggleButton.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Controls/DropDownButton.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Styles/ComboBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/AIStudio.Wpf.Mind;component/Controls/DropDownButton.xaml" />
<ResourceDictionary>
<dd:ColorBrushConverter x:Key="ColorBrushConverter"/>
<dd:EnumDescriptionConverter x:Key="EnumDescriptionConverter"/>
<dd:ObjectConverter x:Key="ObjectConverter"/>
<converter:MindThemeFillBrushConverter x:Key="MindThemeFillBrushConverter"/>
<converter:MindThemeFontBrushConverter x:Key="MindThemeFontBrushConverter"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
@@ -411,50 +416,33 @@
</TabItem>
<TabItem Header="外观" Height="30" Width="50">
<StackPanel Orientation="Horizontal">
<controls:DropDownButton>
<controls:DropDownButton.Content>
<Border CornerRadius="3">
<TextBlock Margin="5" Width="60" TextAlignment="Center" Text="{Binding MindType,Converter={StaticResource EnumDescriptionConverter}}"></TextBlock>
</Border>
</controls:DropDownButton.Content>
<controls:DropDownButton.Items>
<MenuItem Header="思维导图" IsCheckable="True" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='Mind'}, ConverterParameter='Mind'}" />
<MenuItem Header="目录组织图" IsCheckable="True" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='Directory'}, ConverterParameter='Directory'}" />
<MenuItem Header="鱼骨头图" IsCheckable="True" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='FishBone'}, ConverterParameter='FishBone'}" />
<MenuItem Header="逻辑结构图" IsCheckable="True" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='Logical'}, ConverterParameter='Logical'}" />
<MenuItem Header="组织结构图" IsCheckable="True" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='Organizational'}, ConverterParameter='Organizational'}" />
<MenuItem Header="天盘图" IsCheckable="True" IsEnabled="False" ToolTip="暂未完成" IsChecked="{Binding MindType,Converter={dd:ConverterValueMapToBool Parameter='Celestial'}, ConverterParameter='Celestial'}" />
</controls:DropDownButton.Items>
</controls:DropDownButton>
<ComboBox x:Name="mindtype" dd:EnumHelper.Enum="{x:Type models:MindType}" SelectedItem="{Binding MindType, Mode=OneWay}" Style="{StaticResource FlatComboBoxStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" VerticalAlignment="Center" />
</DataTemplate>
</ComboBox.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ChangeMindTypeCommand}" CommandParameter="{Binding ElementName=mindtype,Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
<Line Margin="2,0" X1="0" Y1="0" X2="0" Y2="100" StrokeDashArray="1" Stroke="Gray" StrokeThickness="1"></Line>
<controls:DropDownButton>
<controls:DropDownButton.Content>
<Border Background="{Binding MindThemeModel.MindThemeLevel1.FillColor,Converter={StaticResource ColorBrushConverter}}" CornerRadius="3">
<TextBlock Margin="5" Text="{Binding MindThemeModel.Name}"></TextBlock>
</Border>
</controls:DropDownButton.Content>
<controls:DropDownButton.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</controls:DropDownButton.ItemsPanel>
<controls:DropDownButton.Items>
<MenuItem Header="天空蓝" Background="#73a1bf" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="天空蓝"/>
<MenuItem Header="紧凑蓝" Background="#73a1bf" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑蓝"/>
<MenuItem Header="文艺绿" Background="#73bf76" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="文艺绿"/>
<MenuItem Header="紧凑绿" Background="#73bf76" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑绿"/>
<MenuItem Header="脑残粉" Background="#bf7394" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="脑残粉"/>
<MenuItem Header="紧凑粉" Background="#bf7394" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑粉"/>
<MenuItem Header="浪漫紫" Background="#7b73bf" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="浪漫紫"/>
<MenuItem Header="紧凑紫" Background="#7b73bf" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑紫"/>
<MenuItem Header="清新红" Background="#bf7373" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="清新红"/>
<MenuItem Header="紧凑红" Background="#bf7373" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑红"/>
<MenuItem Header="泥土黄" Background="#bf9373" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="泥土黄"/>
<MenuItem Header="紧凑黄" Background="#bf9373" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑黄"/>
<MenuItem Header="冷光黄" Background="#e9df98" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="冷光黄"/>
<MenuItem Header="紧凑黄" Background="#e9df98" Margin="1.5" Command="{Binding ChangeMindThemeCommand}" CommandParameter="紧凑冷"/>
</controls:DropDownButton.Items>
</controls:DropDownButton>
<ComboBox x:Name="mindtheme" dd:EnumHelper.Enum="{x:Type models:MindTheme}" SelectedItem="{Binding MindTheme, Mode=OneWay}" Style="{StaticResource FlatComboBox2ColumnStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="3" Background="{Binding .,Converter={StaticResource MindThemeFillBrushConverter}}" Padding="5">
<TextBlock Foreground="{Binding .,Converter={StaticResource MindThemeFontBrushConverter}}" Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" VerticalAlignment="Center" />
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ChangeMindThemeCommand}" CommandParameter="{Binding ElementName=mindtheme,Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
<Line Margin="2,0" X1="0" Y1="0" X2="0" Y2="100" StrokeDashArray="1" Stroke="Gray" StrokeThickness="1"></Line>
<Button Style="{StaticResource FlatButtonStyle}" Command="{Binding ResetLayoutCommand}">
<StackPanel>
@@ -499,12 +487,12 @@
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<ComboBox x:Name="comboBoxFontName"
Width="80"
BorderBrush="Gainsboro"
Width="100"
IsTextSearchEnabled="True"
ScrollViewer.CanContentScroll="False"
ItemsSource="{Binding SelectedItem.FontViewModel.FontFamilys}"
SelectedItem="{Binding SelectedItem.FontViewModel.FontFamily}">
SelectedItem="{Binding SelectedItem.FontViewModel.FontFamily}"
Style="{StaticResource FlatComboBoxStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"
@@ -515,10 +503,10 @@
<ComboBox x:Name="comboBoxFontSize"
Width="50"
HorizontalAlignment="Left"
BorderBrush="Gainsboro"
IsEditable="True"
ItemsSource="{Binding SelectedItem.FontViewModel.FontSizes}"
Text="{Binding SelectedItem.FontViewModel.FontSize}">
Text="{Binding SelectedItem.FontViewModel.FontSize}"
Style="{StaticResource FlatComboBoxStyle}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>

View File

@@ -0,0 +1,28 @@
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
namespace AIStudio.Wpf.Mind.Converters
{
public class MindThemeFillBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is MindTheme mindTheme)
{
var mindThemeModel = MindThemeHelper.GetTheme(mindTheme);
return new SolidColorBrush(mindThemeModel.MindThemeLevel0.FillColor);
}
return new SolidColorBrush();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
namespace AIStudio.Wpf.Mind.Converters
{
public class MindThemeFontBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is MindTheme mindTheme)
{
var mindThemeModel = MindThemeHelper.GetTheme(mindTheme);
return new SolidColorBrush(mindThemeModel.MindThemeLevel0.FontColor);
}
return new SolidColorBrush();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -7,6 +7,7 @@ using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Algorithms;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -15,10 +16,10 @@ namespace AIStudio.Wpf.Mind.Helpers
{
public void Appearance(MindNode mindNode)
{
Appearance(mindNode, null, false);
Appearance(mindNode, MindTheme.SkyBlue, false);
}
public void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance)
public void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance)
{
switch (mindNode.NodeLevel)
{
@@ -26,7 +27,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Bottom, true) { XRatio = 0.5, YRatio = 1 };
@@ -42,7 +43,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Top, true) { XRatio = 0.5, YRatio = 0 };
@@ -59,7 +60,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };

View File

@@ -7,6 +7,7 @@ using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Algorithms;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -15,10 +16,10 @@ namespace AIStudio.Wpf.Mind.Helpers
{
public void Appearance(MindNode mindNode)
{
Appearance(mindNode, null, false);
Appearance(mindNode, MindTheme.SkyBlue, false);
}
public void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance)
public void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance)
{
if (mindNode == null) return;
@@ -30,7 +31,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Right, true) { XRatio = 1, YRatio = 0.5 };
@@ -45,7 +46,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.BottomLeft, true) { XRatio = 0, YRatio = 1 };
@@ -62,8 +63,8 @@ namespace AIStudio.Wpf.Mind.Helpers
default:
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
{
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -10,7 +11,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public interface IMindLayout
{
void Appearance(MindNode mindNode);
void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance);
void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance);
ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null);
void LayoutUpdated(MindNode mindNode);

View File

@@ -7,6 +7,7 @@ using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Algorithms;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -15,10 +16,10 @@ namespace AIStudio.Wpf.Mind.Helpers
{
public void Appearance(MindNode mindNode)
{
Appearance(mindNode, null, false);
Appearance(mindNode, MindTheme.SkyBlue, false);
}
public void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance)
public void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance)
{
switch (mindNode.NodeLevel)
{
@@ -26,7 +27,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.None, true) { XRatio = 0.5, YRatio = 0.5 };
@@ -41,7 +42,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };
@@ -58,7 +59,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 1 };

View File

@@ -7,6 +7,7 @@ using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Algorithms;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -15,10 +16,10 @@ namespace AIStudio.Wpf.Mind.Helpers
{
public void Appearance(MindNode mindNode)
{
Appearance(mindNode, null, false);
Appearance(mindNode, MindTheme.SkyBlue, false);
}
public void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance)
public void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance)
{
switch (mindNode.NodeLevel)
{
@@ -26,7 +27,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.None, true) { XRatio = 0.5, YRatio = 0.5 };
@@ -41,7 +42,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 0.5 };
@@ -58,7 +59,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Left, true) { XRatio = 0, YRatio = 1 };

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Algorithms;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using AIStudio.Wpf.Mind.Models;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Mind.Helpers
@@ -15,10 +16,10 @@ namespace AIStudio.Wpf.Mind.Helpers
{
public void Appearance(MindNode mindNode)
{
Appearance(mindNode, null, false);
Appearance(mindNode, MindTheme.SkyBlue, false);
}
public void Appearance(MindNode mindNode, MindThemeModel mindThemeModel, bool initAppearance)
public void Appearance(MindNode mindNode, MindTheme mindTheme, bool initAppearance)
{
switch (mindNode.NodeLevel)
{
@@ -26,7 +27,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Bottom, true) { XRatio = 0.5, YRatio = 1 };
@@ -41,7 +42,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Top, true) { XRatio = 0.5, YRatio = 0 };
@@ -59,7 +60,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
if (initAppearance)
{
MindThemeHelper.ThemeChange(mindNode, mindThemeModel, initAppearance);
MindThemeHelper.ThemeChange(mindNode, mindTheme, initAppearance);
mindNode.ClearConnectors();
var port1 = new FullyCreatedConnectorInfo(mindNode.Root, mindNode, ConnectorOrientation.Top, true) { XRatio = 0.5, YRatio = 0 };

View File

@@ -9,7 +9,7 @@ using AIStudio.Wpf.DiagramModels.ViewModels;
using AIStudio.Wpf.Mind;
using AIStudio.Wpf.Mind.ViewModels;
namespace AIStudio.Wpf.Flowchart.Models
namespace AIStudio.Wpf.Mind.Models
{
public class MindNodeModel : DiagramNode

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AIStudio.Wpf.Mind.Models
{
public enum MindTheme
{
[Description("天空蓝")]
SkyBlue,
[Description("紧凑蓝")]
SkyBlueMini,
[Description("文艺绿")]
LiteratureGreen,
[Description("紧凑绿")]
LiteratureGreenMini,
[Description("脑残粉")]
BrainDeadPink,
[Description("紧凑粉")]
BrainDeadPinkMini,
[Description("浪漫紫")]
RomanticPurple,
[Description("紧凑紫")]
RomanticPurpleMini,
[Description("清新红")]
FreshRed,
[Description("紧凑红")]
FreshRedMini,
[Description("泥土黄")]
EarthyYellow,
[Description("紧凑黄")]
EarthyYellowMini,
[Description("冷光黄")]
CoolLightYellow,
[Description("紧凑黄")]
CoolLightYellowMini,
}
}

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace AIStudio.Wpf.Mind
namespace AIStudio.Wpf.Mind.Models
{
public enum MindType
{
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind
Logical,
[Description("组织结构图")]
Organizational,
[Description("天盘图")]
[Description("天盘图(暂未完成)")]
Celestial
}
}

View File

@@ -12,6 +12,7 @@ using System.Windows.Markup;
[assembly: XmlnsDefinition("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "AIStudio.Wpf.Mind")]
[assembly: XmlnsDefinition("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "AIStudio.Wpf.Mind.Controls")]
[assembly: XmlnsDefinition("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "AIStudio.Wpf.Mind.Controls")]
[assembly: XmlnsDefinition("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "AIStudio.Wpf.Mind.Models")]
[assembly: XmlnsDefinition("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "AIStudio.Wpf.Mind.Converters")]
[assembly: XmlnsPrefix("https://gitee.com/akwkevin/aistudio.-wpf.-diagram", "dd")]

View File

@@ -0,0 +1,160 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dd="https://gitee.com/akwkevin/aistudio.-wpf.-diagram">
<dd:BrushOpacityConverter x:Key="BrushOpacityConverter"/>
<Geometry x:Key="DownArrowGeometry">M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z</Geometry>
<Style x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentPresenter Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
<Grid x:Name="arrowGlyph" Grid.Column="1">
<Path x:Name="Arrow"
Width="9"
Height="6"
Margin="0 0 3 0"
Stretch="Fill"
Data="{StaticResource DownArrowGeometry}"
Fill="#FF000000"/>
</Grid>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Arrow" Property="Fill" Value="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent},
Converter={StaticResource BrushOpacityConverter}, ConverterParameter=0.16}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="FlatComboBoxStyle" TargetType="{x:Type ComboBox}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="3" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15" />
</Grid.ColumnDefinitions>
<Border x:Name="border" Grid.Column="0" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="3"/>
<ContentPresenter HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="ContentSite" VerticalAlignment="Center" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" IsHitTestVisible="False"/>
<!--ToggleButton 已数据绑定到 ComboBox 本身以切换 IsDropDownOpen-->
<ToggleButton Grid.Column="0" Grid.ColumnSpan="2" x:Name="ToggleButton" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press" Style="{StaticResource ComboBoxToggleButton}"/>
<!--必须将 TextBox 命名为 PART_EditableTextBox否则 ComboBox 将无法识别它-->
<TextBox Visibility="Hidden" BorderThickness="0" Margin="2 0 0 0" x:Name="PART_EditableTextBox" VerticalAlignment="Center" Focusable="True" Background="Transparent" IsReadOnly="{TemplateBinding IsReadOnly}"/>
<!--Popup 可显示 ComboBox 中的项列表。IsOpen 已数据绑定到通过 ComboBoxToggleButton 来切换的 IsDropDownOpen-->
<Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide">
<Grid MaxHeight="400" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True">
<Border x:Name="DropDownBorder" BorderBrush="#e8e8e8" BorderThickness="1 0 1 1"/>
<ScrollViewer Margin="1" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True">
<!--StackPanel 用于显示子级,方法是将 IsItemsHost 设置为 True-->
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" Background="White"/>
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />
</Trigger>
<!--设置鼠标进入时的背景、前景样式-->
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{Binding Foreground,
RelativeSource={RelativeSource Mode=TemplatedParent},
Converter={StaticResource BrushOpacityConverter},
ConverterParameter=0.16}" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="FlatComboBox2ColumnStyle" TargetType="{x:Type ComboBox}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="3" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15" />
</Grid.ColumnDefinitions>
<Border x:Name="border" Grid.Column="0" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="3"/>
<ContentPresenter HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="ContentSite" VerticalAlignment="Center" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" IsHitTestVisible="False"/>
<!--ToggleButton 已数据绑定到 ComboBox 本身以切换 IsDropDownOpen-->
<ToggleButton Grid.Column="0" Grid.ColumnSpan="2" x:Name="ToggleButton" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press" Style="{StaticResource ComboBoxToggleButton}"/>
<!--必须将 TextBox 命名为 PART_EditableTextBox否则 ComboBox 将无法识别它-->
<TextBox Visibility="Hidden" BorderThickness="0" Margin="2 0 0 0" x:Name="PART_EditableTextBox" VerticalAlignment="Center" Focusable="True" Background="Transparent" IsReadOnly="{TemplateBinding IsReadOnly}"/>
<!--Popup 可显示 ComboBox 中的项列表。IsOpen 已数据绑定到通过 ComboBoxToggleButton 来切换的 IsDropDownOpen-->
<Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide">
<Grid MaxHeight="400" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True">
<Border x:Name="DropDownBorder" BorderBrush="#e8e8e8" BorderThickness="1 0 1 1"/>
<ScrollViewer Margin="1" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True">
<!--StackPanel 用于显示子级,方法是将 IsItemsHost 设置为 True-->
<UniformGrid Columns="2" IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" Background="White"/>
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />
</Trigger>
<!--设置鼠标进入时的背景、前景样式-->
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{Binding Foreground,
RelativeSource={RelativeSource Mode=TemplatedParent},
Converter={StaticResource BrushOpacityConverter},
ConverterParameter=0.16}" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

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)