Add project files.
This commit is contained in:
735
Examples/Nodify.Playground/Editor/NodifyEditorView.xaml
Normal file
735
Examples/Nodify.Playground/Editor/NodifyEditorView.xaml
Normal file
@@ -0,0 +1,735 @@
|
||||
<UserControl x:Class="Nodify.Playground.NodifyEditorView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:Nodify.Playground"
|
||||
xmlns:nodify="https://miroiu.github.io/nodify"
|
||||
xmlns:shared="clr-namespace:Nodify;assembly=Nodify.Shared"
|
||||
mc:Ignorable="d"
|
||||
Background="{DynamicResource NodifyEditor.BackgroundBrush}"
|
||||
d:DesignHeight="450"
|
||||
d:DesignWidth="800">
|
||||
|
||||
<UserControl.DataContext>
|
||||
<local:NodifyEditorViewModel />
|
||||
</UserControl.DataContext>
|
||||
|
||||
<UserControl.Resources>
|
||||
<shared:RandomBrushConverter x:Key="RandomBrushConverter" />
|
||||
<local:FlowToDirectionConverter x:Key="FlowToDirectionConverter" />
|
||||
<local:FlowToConnectorPositionConverter x:Key="FlowToConnectorPositionConverter" />
|
||||
|
||||
<GeometryDrawing x:Key="SmallGridGeometry"
|
||||
Geometry="M0,0 L0,1 0.03,1 0.03,0.03 1,0.03 1,0 Z"
|
||||
Brush="{DynamicResource GridLinesBrush}" />
|
||||
|
||||
<GeometryDrawing x:Key="LargeGridGeometry"
|
||||
Geometry="M0,0 L0,1 0.015,1 0.015,0.015 1,0.015 1,0 Z"
|
||||
Brush="{DynamicResource GridLinesBrush}" />
|
||||
|
||||
<DrawingBrush x:Key="SmallGridLinesDrawingBrush"
|
||||
TileMode="Tile"
|
||||
ViewportUnits="Absolute"
|
||||
Viewport="{Binding GridSpacing, Source={x:Static local:EditorSettings.Instance}, Converter={local:UIntToRectConverter}}"
|
||||
Transform="{Binding ViewportTransform, ElementName=Editor}"
|
||||
Drawing="{StaticResource SmallGridGeometry}" />
|
||||
|
||||
<DrawingBrush x:Key="LargeGridLinesDrawingBrush"
|
||||
TileMode="Tile"
|
||||
ViewportUnits="Absolute"
|
||||
Opacity="0.5"
|
||||
Viewport="{Binding GridSpacing, Source={x:Static local:EditorSettings.Instance}, Converter={local:UIntToRectConverter Multiplier=10}}"
|
||||
Transform="{Binding ViewportTransform, ElementName=Editor}"
|
||||
Drawing="{StaticResource LargeGridGeometry}" />
|
||||
|
||||
<SolidColorBrush x:Key="SquareConnectorColor"
|
||||
Color="MediumSlateBlue" />
|
||||
<SolidColorBrush x:Key="TriangleConnectorColor"
|
||||
Color="MediumVioletRed" />
|
||||
<SolidColorBrush x:Key="SquareConnectorOutline"
|
||||
Color="MediumSlateBlue"
|
||||
Opacity="0.15" />
|
||||
<SolidColorBrush x:Key="TriangleConnectorOutline"
|
||||
Color="MediumVioletRed"
|
||||
Opacity="0.15" />
|
||||
|
||||
<UIElement x:Key="ConnectionAnimationPlaceholder"
|
||||
Opacity="1" />
|
||||
|
||||
<Storyboard x:Key="HighlightConnection">
|
||||
<DoubleAnimation Storyboard.Target="{StaticResource ConnectionAnimationPlaceholder}"
|
||||
Storyboard.TargetProperty="(UIElement.Opacity)"
|
||||
Duration="0:0:0.3"
|
||||
From="1"
|
||||
To="0.3" />
|
||||
</Storyboard>
|
||||
|
||||
<Style x:Key="ConnectionStyle"
|
||||
TargetType="{x:Type nodify:BaseConnection}"
|
||||
BasedOn="{StaticResource {x:Type nodify:BaseConnection}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Input.Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Square}">
|
||||
<Setter Property="Stroke"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
<Setter Property="OutlineBrush"
|
||||
Value="{StaticResource SquareConnectorOutline}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Input.Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Triangle}">
|
||||
<Setter Property="Stroke"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
<Setter Property="OutlineBrush"
|
||||
Value="{StaticResource TriangleConnectorOutline}" />
|
||||
</DataTrigger>
|
||||
<Trigger Property="IsMouseDirectlyOver"
|
||||
Value="True">
|
||||
<Trigger.EnterActions>
|
||||
<BeginStoryboard Name="HighlightConnection"
|
||||
Storyboard="{StaticResource HighlightConnection}" />
|
||||
</Trigger.EnterActions>
|
||||
<Trigger.ExitActions>
|
||||
<RemoveStoryboard BeginStoryboardName="HighlightConnection" />
|
||||
</Trigger.ExitActions>
|
||||
<Setter Property="Opacity"
|
||||
Value="1" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsSelectable"
|
||||
Value="True">
|
||||
<Setter Property="Cursor"
|
||||
Value="Hand" />
|
||||
</Trigger>
|
||||
<MultiTrigger>
|
||||
<MultiTrigger.Conditions>
|
||||
<Condition Property="IsMouseDirectlyOver"
|
||||
Value="False" />
|
||||
<Condition Property="IsSelected"
|
||||
Value="False" />
|
||||
</MultiTrigger.Conditions>
|
||||
<MultiTrigger.Setters>
|
||||
<Setter Property="OutlineBrush"
|
||||
Value="Transparent" />
|
||||
</MultiTrigger.Setters>
|
||||
</MultiTrigger>
|
||||
</Style.Triggers>
|
||||
<Setter Property="Opacity"
|
||||
Value="{Binding Source={StaticResource ConnectionAnimationPlaceholder}, Path=Opacity}" />
|
||||
<Setter Property="Stroke"
|
||||
Value="{DynamicResource Connection.StrokeBrush}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{DynamicResource Connection.StrokeBrush}" />
|
||||
<Setter Property="OutlineBrush">
|
||||
<Setter.Value>
|
||||
<SolidColorBrush Color="{DynamicResource Connection.StrokeColor}"
|
||||
Opacity="0.15" />
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter Property="ToolTip"
|
||||
Value="Double click to split" />
|
||||
<Setter Property="Source"
|
||||
Value="{Binding Output.Anchor}" />
|
||||
<Setter Property="Target"
|
||||
Value="{Binding Input.Anchor}" />
|
||||
<Setter Property="SplitCommand"
|
||||
Value="{Binding SplitCommand}" />
|
||||
<Setter Property="DisconnectCommand"
|
||||
Value="{Binding DisconnectCommand}" />
|
||||
<Setter Property="SourceOffsetMode"
|
||||
Value="{Binding ConnectionSourceOffsetMode, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="TargetOffsetMode"
|
||||
Value="{Binding ConnectionTargetOffsetMode, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="SourceOffset"
|
||||
Value="{Binding ConnectionSourceOffset.Size, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="TargetOffset"
|
||||
Value="{Binding ConnectionTargetOffset.Size, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="ArrowSize"
|
||||
Value="{Binding ConnectionArrowSize.Size, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="ArrowEnds"
|
||||
Value="{Binding ArrowHeadEnds, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="ArrowShape"
|
||||
Value="{Binding ArrowHeadShape, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="Spacing"
|
||||
Value="{Binding ConnectionSpacing, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="Direction"
|
||||
Value="{Binding Output.Flow, Converter={StaticResource FlowToDirectionConverter}}" />
|
||||
<Setter Property="SourceOrientation"
|
||||
Value="{Binding Output.Node.Orientation}" />
|
||||
<Setter Property="TargetOrientation"
|
||||
Value="{Binding Input.Node.Orientation}" />
|
||||
<Setter Property="DirectionalArrowsCount"
|
||||
Value="{Binding DirectionalArrowsCount, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="DirectionalArrowsOffset"
|
||||
Value="{Binding DirectionalArrowsOffset, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="IsAnimatingDirectionalArrows"
|
||||
Value="{Binding IsAnimatingConnections, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="DirectionalArrowsAnimationDuration"
|
||||
Value="{Binding DirectionalArrowsAnimationDuration, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="Text"
|
||||
Value="{Binding ConnectionText, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="IsSelectable"
|
||||
Value="{Binding SelectableConnections, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="IsSelected"
|
||||
Value="{Binding IsSelected}" />
|
||||
<Setter Property="StrokeThickness"
|
||||
Value="{Binding ConnectionStrokeThickness, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="OutlineThickness"
|
||||
Value="{Binding ConnectionOutlineThickness, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="FocusVisualPadding"
|
||||
Value="{Binding ConnectionFocusVisualPadding, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
</Style>
|
||||
|
||||
<DataTemplate x:Key="CircuitConnectionTemplate">
|
||||
<nodify:CircuitConnection Style="{StaticResource ConnectionStyle}"
|
||||
Angle="{Binding CircuitConnectionAngle, Source={x:Static local:EditorSettings.Instance}}"
|
||||
CornerRadius="{Binding ConnectionCornerRadius, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="StepConnectionTemplate">
|
||||
<nodify:StepConnection Style="{StaticResource ConnectionStyle}"
|
||||
CornerRadius="{Binding ConnectionCornerRadius, Source={x:Static local:EditorSettings.Instance}}"
|
||||
SourcePosition="{Binding ., Converter={StaticResource FlowToConnectorPositionConverter}, ConverterParameter=Output}"
|
||||
TargetPosition="{Binding ., Converter={StaticResource FlowToConnectorPositionConverter}, ConverterParameter=Input}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="LineConnectionTemplate">
|
||||
<nodify:LineConnection Style="{StaticResource ConnectionStyle}"
|
||||
CornerRadius="{Binding ConnectionCornerRadius, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="ConnectionTemplate">
|
||||
<nodify:Connection Style="{StaticResource ConnectionStyle}" />
|
||||
</DataTemplate>
|
||||
|
||||
<ControlTemplate x:Key="SquareConnector"
|
||||
TargetType="Control">
|
||||
<Rectangle Width="14"
|
||||
Height="14"
|
||||
StrokeDashCap="Round"
|
||||
StrokeLineJoin="Round"
|
||||
StrokeStartLineCap="Round"
|
||||
StrokeEndLineCap="Round"
|
||||
Stroke="{TemplateBinding BorderBrush}"
|
||||
Fill="{TemplateBinding Background}"
|
||||
StrokeThickness="2" />
|
||||
</ControlTemplate>
|
||||
|
||||
<ControlTemplate x:Key="TriangleConnector"
|
||||
TargetType="Control">
|
||||
<Polygon Width="14"
|
||||
Height="14"
|
||||
Points="1,13 13,13 7,1"
|
||||
StrokeDashCap="Round"
|
||||
StrokeLineJoin="Round"
|
||||
StrokeStartLineCap="Round"
|
||||
StrokeEndLineCap="Round"
|
||||
Stroke="{TemplateBinding BorderBrush}"
|
||||
Fill="{TemplateBinding Background}"
|
||||
StrokeThickness="2" />
|
||||
</ControlTemplate>
|
||||
|
||||
<Storyboard x:Key="MarchingAnts">
|
||||
<DoubleAnimation RepeatBehavior="Forever"
|
||||
Storyboard.TargetProperty="StrokeDashOffset"
|
||||
BeginTime="00:00:00"
|
||||
Duration="0:3:0"
|
||||
From="1000"
|
||||
To="0" />
|
||||
</Storyboard>
|
||||
|
||||
<Style x:Key="SelectionRectangleStyle"
|
||||
TargetType="Rectangle"
|
||||
BasedOn="{StaticResource NodifyEditor.SelectionRectangleStyle}">
|
||||
<Setter Property="StrokeDashArray"
|
||||
Value="4 4" />
|
||||
<Setter Property="StrokeThickness"
|
||||
Value="2" />
|
||||
<Style.Triggers>
|
||||
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
|
||||
<BeginStoryboard Storyboard="{StaticResource MarchingAnts}" />
|
||||
</EventTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="CuttingLineStyle"
|
||||
TargetType="{x:Type nodify:CuttingLine}"
|
||||
BasedOn="{StaticResource {x:Type nodify:CuttingLine}}">
|
||||
<Setter Property="StrokeDashArray"
|
||||
Value="1 1" />
|
||||
<Setter Property="StrokeThickness"
|
||||
Value="2" />
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
<nodify:NodifyEditor x:Name="Editor"
|
||||
ItemsSource="{Binding Nodes}"
|
||||
SelectedItem="{Binding SelectedNode}"
|
||||
SelectedItems="{Binding SelectedNodes}"
|
||||
CanSelectMultipleItems="{Binding CanSelectMultipleNodes, Source={x:Static local:EditorSettings.Instance}}"
|
||||
Connections="{Binding Connections}"
|
||||
SelectedConnection="{Binding SelectedConnection}"
|
||||
SelectedConnections="{Binding SelectedConnections}"
|
||||
CanSelectMultipleConnections="{Binding CanSelectMultipleConnections, Source={x:Static local:EditorSettings.Instance}}"
|
||||
PendingConnection="{Binding PendingConnection}"
|
||||
DisconnectConnectorCommand="{Binding DisconnectConnectorCommand}"
|
||||
ViewportLocation="{Binding Location.Value, Source={x:Static local:EditorSettings.Instance}}"
|
||||
ViewportSize="{Binding ViewportSize, Mode=OneWayToSource}"
|
||||
ViewportZoom="{Binding Zoom, Source={x:Static local:EditorSettings.Instance}}"
|
||||
MinViewportZoom="{Binding MinZoom, Source={x:Static local:EditorSettings.Instance}}"
|
||||
MaxViewportZoom="{Binding MaxZoom, Source={x:Static local:EditorSettings.Instance}}"
|
||||
AutoPanSpeed="{Binding AutoPanningSpeed, Source={x:Static local:EditorSettings.Instance}}"
|
||||
AutoPanEdgeDistance="{Binding AutoPanningEdgeDistance, Source={x:Static local:EditorSettings.Instance}}"
|
||||
GridCellSize="{Binding GridSpacing, Source={x:Static local:EditorSettings.Instance}}"
|
||||
EnableRealtimeSelection="{Binding EnableRealtimeSelection, Source={x:Static local:EditorSettings.Instance}}"
|
||||
DisableAutoPanning="{Binding DisableAutoPanning, Source={x:Static local:EditorSettings.Instance}}"
|
||||
DisablePanning="{Binding DisablePanning, Source={x:Static local:EditorSettings.Instance}}"
|
||||
DisableZooming="{Binding DisableZooming, Source={x:Static local:EditorSettings.Instance}}"
|
||||
DisplayConnectionsOnTop="{Binding DisplayConnectionsOnTop, Source={x:Static local:EditorSettings.Instance}}"
|
||||
BringIntoViewSpeed="{Binding BringIntoViewSpeed, Source={x:Static local:EditorSettings.Instance}}"
|
||||
BringIntoViewMaxDuration="{Binding BringIntoViewMaxDuration, Source={x:Static local:EditorSettings.Instance}}"
|
||||
SelectionRectangleStyle="{StaticResource SelectionRectangleStyle}"
|
||||
CuttingLineStyle="{StaticResource CuttingLineStyle}">
|
||||
<nodify:NodifyEditor.Style>
|
||||
<Style TargetType="{x:Type nodify:NodifyEditor}"
|
||||
BasedOn="{StaticResource {x:Type nodify:NodifyEditor}}">
|
||||
<Setter Property="ConnectionTemplate"
|
||||
Value="{StaticResource ConnectionTemplate}" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding ShowGridLines, Source={x:Static local:PlaygroundSettings.Instance}}"
|
||||
Value="True">
|
||||
<Setter Property="Background"
|
||||
Value="{StaticResource SmallGridLinesDrawingBrush}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding ConnectionStyle, Mode=TwoWay, Source={x:Static local:EditorSettings.Instance}}"
|
||||
Value="Line">
|
||||
<Setter Property="ConnectionTemplate"
|
||||
Value="{StaticResource LineConnectionTemplate}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding ConnectionStyle, Mode=TwoWay, Source={x:Static local:EditorSettings.Instance}}"
|
||||
Value="Circuit">
|
||||
<Setter Property="ConnectionTemplate"
|
||||
Value="{StaticResource CircuitConnectionTemplate}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding ConnectionStyle, Mode=TwoWay, Source={x:Static local:EditorSettings.Instance}}"
|
||||
Value="Step">
|
||||
<Setter Property="ConnectionTemplate"
|
||||
Value="{StaticResource StepConnectionTemplate}" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</nodify:NodifyEditor.Style>
|
||||
|
||||
<nodify:NodifyEditor.InputBindings>
|
||||
<KeyBinding Key="Delete"
|
||||
Command="{Binding DeleteSelectionCommand}" />
|
||||
<KeyBinding Key="C"
|
||||
Command="{Binding CommentSelectionCommand}" />
|
||||
</nodify:NodifyEditor.InputBindings>
|
||||
|
||||
<nodify:NodifyEditor.Resources>
|
||||
<Style TargetType="{x:Type nodify:PendingConnection}"
|
||||
BasedOn="{StaticResource {x:Type nodify:PendingConnection}}">
|
||||
<Setter Property="CompletedCommand"
|
||||
Value="{Binding Graph.CreateConnectionCommand}" />
|
||||
<Setter Property="Source"
|
||||
Value="{Binding Source, Mode=OneWayToSource}" />
|
||||
<Setter Property="Target"
|
||||
Value="{Binding PreviewTarget, Mode=OneWayToSource}" />
|
||||
<Setter Property="PreviewTarget"
|
||||
Value="{Binding PreviewTarget, Mode=OneWayToSource}" />
|
||||
<Setter Property="Content"
|
||||
Value="{Binding PreviewText}" />
|
||||
<Setter Property="EnablePreview"
|
||||
Value="{Binding EnablePendingConnectionPreview, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="EnableSnapping"
|
||||
Value="{Binding EnablePendingConnectionSnapping, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="AllowOnlyConnectors"
|
||||
Value="{Binding AllowConnectingToConnectorsOnly, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="Direction"
|
||||
Value="{Binding Source.Flow, Converter={StaticResource FlowToDirectionConverter}}" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type nodify:PendingConnection}">
|
||||
<Canvas>
|
||||
<nodify:Connection Source="{TemplateBinding SourceAnchor}"
|
||||
Target="{TemplateBinding TargetAnchor}"
|
||||
Direction="{TemplateBinding Direction}"
|
||||
SourceOrientation="{Binding Source.Node.Orientation}"
|
||||
TargetOrientation="{Binding TargetOrientation}"
|
||||
DirectionalArrowsCount="{Binding DirectionalArrowsCount, Source={x:Static local:EditorSettings.Instance}}"
|
||||
StrokeThickness="{TemplateBinding StrokeThickness}"
|
||||
SourceOffset="{Binding ConnectionSourceOffset.Size, Source={x:Static local:EditorSettings.Instance}}"
|
||||
TargetOffset="{Binding ConnectionTargetOffset.Size, Source={x:Static local:EditorSettings.Instance}}"
|
||||
SourceOffsetMode="{Binding ConnectionSourceOffsetMode, Source={x:Static local:EditorSettings.Instance}}"
|
||||
TargetOffsetMode="None"
|
||||
ArrowSize="{Binding ConnectionArrowSize.Size, Source={x:Static local:EditorSettings.Instance}}"
|
||||
ArrowEnds="{Binding ArrowHeadEnds, Source={x:Static local:EditorSettings.Instance}}"
|
||||
ArrowShape="{Binding ArrowHeadShape, Source={x:Static local:EditorSettings.Instance}}"
|
||||
Spacing="{Binding ConnectionSpacing, Source={x:Static local:EditorSettings.Instance}}">
|
||||
<nodify:Connection.Style>
|
||||
<Style TargetType="nodify:Connection"
|
||||
BasedOn="{StaticResource {x:Type nodify:Connection}}">
|
||||
<Setter Property="Stroke"
|
||||
Value="{DynamicResource Connection.StrokeBrush}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{DynamicResource Connection.StrokeBrush}" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Source.Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Square}">
|
||||
<Setter Property="Stroke"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Source.Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Triangle}">
|
||||
<Setter Property="Stroke"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
<Setter Property="Fill"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</nodify:Connection.Style>
|
||||
</nodify:Connection>
|
||||
<Border Background="{TemplateBinding Background}"
|
||||
Canvas.Left="{Binding TargetAnchor.X, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Canvas.Top="{Binding TargetAnchor.Y, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Visibility="{Binding PreviewText, Converter={shared:StringToVisibilityConverter}}"
|
||||
Padding="{TemplateBinding Padding}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
CornerRadius="3"
|
||||
Margin="15">
|
||||
<ContentPresenter />
|
||||
</Border>
|
||||
</Canvas>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style TargetType="{x:Type nodify:Connector}"
|
||||
BasedOn="{StaticResource {x:Type nodify:Connector}}">
|
||||
<Setter Property="Anchor"
|
||||
Value="{Binding Anchor, Mode=OneWayToSource}" />
|
||||
<Setter Property="IsConnected"
|
||||
Value="{Binding IsConnected}" />
|
||||
</Style>
|
||||
|
||||
<Style TargetType="{x:Type nodify:NodeInput}"
|
||||
BasedOn="{StaticResource {x:Type nodify:NodeInput}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Square}">
|
||||
<Setter Property="ConnectorTemplate"
|
||||
Value="{StaticResource SquareConnector}" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
<Setter Property="HeaderTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate DataType="{x:Type local:ConnectorViewModel}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding Title}"
|
||||
Margin="0 0 5 0" />
|
||||
<TextBox Text="{Binding MaxConnections}"
|
||||
MinWidth="30" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Triangle}">
|
||||
<Setter Property="ConnectorTemplate"
|
||||
Value="{StaticResource TriangleConnector}" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
<Setter Property="HeaderTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate DataType="{x:Type local:ConnectorViewModel}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding Title}"
|
||||
Margin="0 0 5 0"
|
||||
VerticalAlignment="Center" />
|
||||
<CheckBox />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
<Setter Property="HeaderTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate DataType="{x:Type local:ConnectorViewModel}">
|
||||
<TextBlock Text="{Binding Title}" />
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter Property="Header"
|
||||
Value="{Binding}" />
|
||||
<Setter Property="Anchor"
|
||||
Value="{Binding Anchor, Mode=OneWayToSource}" />
|
||||
<Setter Property="IsConnected"
|
||||
Value="{Binding IsConnected}" />
|
||||
<Setter Property="Background"
|
||||
Value="Transparent" />
|
||||
</Style>
|
||||
|
||||
<Style TargetType="{x:Type nodify:NodeOutput}"
|
||||
BasedOn="{StaticResource {x:Type nodify:NodeOutput}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Square}">
|
||||
<Setter Property="ConnectorTemplate"
|
||||
Value="{StaticResource SquareConnector}" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="{StaticResource SquareConnectorColor}" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Shape}"
|
||||
Value="{x:Static local:ConnectorShape.Triangle}">
|
||||
<Setter Property="ConnectorTemplate"
|
||||
Value="{StaticResource TriangleConnector}" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="{StaticResource TriangleConnectorColor}" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
<Setter Property="Header"
|
||||
Value="{Binding Title}" />
|
||||
<Setter Property="Anchor"
|
||||
Value="{Binding Anchor, Mode=OneWayToSource}" />
|
||||
<Setter Property="IsConnected"
|
||||
Value="{Binding IsConnected}" />
|
||||
<Setter Property="Background"
|
||||
Value="Transparent" />
|
||||
</Style>
|
||||
|
||||
<DataTemplate DataType="{x:Type local:KnotNodeViewModel}">
|
||||
<nodify:KnotNode Content="{Binding Connector}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate DataType="{x:Type local:CommentNodeViewModel}">
|
||||
<nodify:GroupingNode ActualSize="{Binding Size}"
|
||||
Header="{Binding Title}"
|
||||
MovementMode="{Binding GroupingNodeMovement, Mode=TwoWay, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate DataType="{x:Type local:FlowNodeViewModel}">
|
||||
<nodify:Node Input="{Binding Input}"
|
||||
Output="{Binding Output}"
|
||||
Header="{Binding Title}" />
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate DataType="{x:Type local:VerticalNodeViewModel}">
|
||||
<nodify:Node Header="{Binding Input}"
|
||||
Footer="{Binding Output}"
|
||||
Content="{Binding Title}">
|
||||
<nodify:Node.ContentTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding}"
|
||||
Margin="5" />
|
||||
</DataTemplate>
|
||||
</nodify:Node.ContentTemplate>
|
||||
<nodify:Node.HeaderTemplate>
|
||||
<DataTemplate>
|
||||
<ItemsControl ItemsSource="{Binding}"
|
||||
Focusable="False">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate DataType="{x:Type local:ConnectorViewModel}">
|
||||
<nodify:NodeInput Orientation="Vertical" />
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal"
|
||||
HorizontalAlignment="Center" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
</ItemsControl>
|
||||
</DataTemplate>
|
||||
</nodify:Node.HeaderTemplate>
|
||||
<nodify:Node.FooterTemplate>
|
||||
<DataTemplate>
|
||||
<ItemsControl ItemsSource="{Binding}"
|
||||
Focusable="False">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate DataType="{x:Type local:ConnectorViewModel}">
|
||||
<nodify:NodeOutput Orientation="Vertical" />
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal"
|
||||
HorizontalAlignment="Center" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
</ItemsControl>
|
||||
</DataTemplate>
|
||||
</nodify:Node.FooterTemplate>
|
||||
</nodify:Node>
|
||||
</DataTemplate>
|
||||
</nodify:NodifyEditor.Resources>
|
||||
|
||||
<nodify:NodifyEditor.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type nodify:ItemContainer}"
|
||||
BasedOn="{StaticResource {x:Type nodify:ItemContainer}}">
|
||||
<Setter Property="BorderThickness"
|
||||
Value="2" />
|
||||
<Setter Property="SelectedBorderThickness"
|
||||
Value="4" />
|
||||
<Setter Property="IsSelectable"
|
||||
Value="{Binding SelectableNodes, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="IsDraggable"
|
||||
Value="{Binding DraggableNodes, Source={x:Static local:EditorSettings.Instance}}" />
|
||||
<Setter Property="CacheMode">
|
||||
<Setter.Value>
|
||||
<BitmapCache RenderAtScale="{Binding MaxZoom, Source={x:Static local:EditorSettings.Instance}}"
|
||||
EnableClearType="True" />
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Setter Property="Location"
|
||||
Value="{Binding Location}" />
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected"
|
||||
Value="True">
|
||||
<Setter Property="Panel.ZIndex"
|
||||
Value="1" />
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</nodify:NodifyEditor.ItemContainerStyle>
|
||||
</nodify:NodifyEditor>
|
||||
|
||||
<Grid Background="{StaticResource LargeGridLinesDrawingBrush}"
|
||||
Visibility="{Binding ShowGridLines, Source={x:Static local:PlaygroundSettings.Instance}, Converter={shared:BooleanToVisibilityConverter}}"
|
||||
Panel.ZIndex="-2" />
|
||||
|
||||
<nodify:Minimap ItemsSource="{Binding ItemsSource, ElementName=Editor}"
|
||||
ViewportSize="{Binding ViewportSize, ElementName=Editor}"
|
||||
ViewportLocation="{Binding ViewportLocation, ElementName=Editor}"
|
||||
Visibility="{Binding ShowMinimap, Source={x:Static local:PlaygroundSettings.Instance}, Converter={shared:BooleanToVisibilityConverter}}"
|
||||
IsReadOnly="{Binding DisableMinimapControls, Source={x:Static local:PlaygroundSettings.Instance}}"
|
||||
ResizeToViewport="{Binding ResizeToViewport, Source={x:Static local:PlaygroundSettings.Instance}}"
|
||||
MaxViewportOffset="{Binding MinimapMaxViewportOffset.Size, Source={x:Static local:PlaygroundSettings.Instance}}"
|
||||
Zoom="Minimap_Zoom"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Bottom"
|
||||
Width="300"
|
||||
Height="200"
|
||||
Margin="5 40">
|
||||
<nodify:Minimap.ItemTemplate>
|
||||
<DataTemplate DataType="{x:Type local:NodeViewModel}">
|
||||
<Grid />
|
||||
</DataTemplate>
|
||||
</nodify:Minimap.ItemTemplate>
|
||||
<nodify:Minimap.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type nodify:MinimapItem}"
|
||||
BasedOn="{StaticResource {x:Type nodify:MinimapItem}}">
|
||||
<Setter Property="Location"
|
||||
Value="{Binding Location}" />
|
||||
<Setter Property="Width"
|
||||
Value="150" />
|
||||
<Setter Property="Height"
|
||||
Value="130" />
|
||||
</Style>
|
||||
</nodify:Minimap.ItemContainerStyle>
|
||||
</nodify:Minimap>
|
||||
|
||||
<StackPanel HorizontalAlignment="Right"
|
||||
VerticalAlignment="Top"
|
||||
Margin="5 60"
|
||||
Width="250">
|
||||
<Border CornerRadius="3"
|
||||
Visibility="{Binding SelectedConnection, Converter={shared:BooleanToVisibilityConverter}}"
|
||||
Background="{DynamicResource PanelBackgroundBrush}"
|
||||
BorderThickness="1"
|
||||
BorderBrush="{DynamicResource BorderBrush}"
|
||||
Margin="0 0 0 10">
|
||||
<StackPanel Margin="10">
|
||||
<StackPanel.Resources>
|
||||
<Style TargetType="{x:Type TextBlock}"
|
||||
BasedOn="{StaticResource {x:Type TextBlock}}">
|
||||
<Setter Property="Margin"
|
||||
Value="0 0 0 5" />
|
||||
</Style>
|
||||
</StackPanel.Resources>
|
||||
|
||||
<StackPanel Margin="0 0 0 14">
|
||||
<TextBlock Text="Selected connection"
|
||||
Foreground="{DynamicResource Node.ForegroundBrush}"
|
||||
FontWeight="Bold" />
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock TextWrapping="Wrap"
|
||||
Margin="0 0 0 14"
|
||||
Foreground="{DynamicResource Node.ForegroundBrush}">
|
||||
<Run>From</Run>
|
||||
<Run Text="{Binding SelectedConnection.Output.Node.Title}"
|
||||
Foreground="Red" />
|
||||
<Run> - </Run>
|
||||
<Run Text="{Binding SelectedConnection.Output.Title}"
|
||||
Foreground="Red" />
|
||||
<Run>to</Run>
|
||||
<Run Text="{Binding SelectedConnection.Input.Node.Title}"
|
||||
Foreground="Red" />
|
||||
<Run> - </Run>
|
||||
<Run Text="{Binding SelectedConnection.Input.Title}"
|
||||
Foreground="Red" />
|
||||
</TextBlock>
|
||||
|
||||
<Button Command="{Binding SelectedConnection.DisconnectCommand}"
|
||||
HorizontalAlignment="Left"
|
||||
Style="{StaticResource HollowButton}"
|
||||
Content="Delete" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border CornerRadius="3"
|
||||
Visibility="{Binding SelectedNode, Converter={shared:BooleanToVisibilityConverter}}"
|
||||
Background="{DynamicResource PanelBackgroundBrush}"
|
||||
BorderThickness="1"
|
||||
BorderBrush="{DynamicResource BorderBrush}">
|
||||
<StackPanel Margin="10">
|
||||
<StackPanel.Resources>
|
||||
<Style TargetType="{x:Type TextBlock}"
|
||||
BasedOn="{StaticResource {x:Type TextBlock}}">
|
||||
<Setter Property="Margin"
|
||||
Value="0 0 0 5" />
|
||||
</Style>
|
||||
</StackPanel.Resources>
|
||||
|
||||
<StackPanel Margin="0 0 0 14">
|
||||
<TextBlock Text="Selected node"
|
||||
Foreground="{DynamicResource Node.ForegroundBrush}"
|
||||
FontWeight="Bold" />
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock TextWrapping="Wrap"
|
||||
Margin="0 0 0 14"
|
||||
Foreground="{DynamicResource Node.ForegroundBrush}">
|
||||
<Run>Title: </Run>
|
||||
<Run Text="{Binding SelectedNode.Title}"
|
||||
Foreground="Red" />
|
||||
</TextBlock>
|
||||
<TextBlock TextWrapping="Wrap"
|
||||
Margin="0 0 0 14"
|
||||
Foreground="{DynamicResource Node.ForegroundBrush}">
|
||||
<Run>Location: </Run>
|
||||
<Run Text="{Binding SelectedNode.Location}"
|
||||
Foreground="Red" />
|
||||
</TextBlock>
|
||||
|
||||
<Button Command="{Binding SelectedNode.DeleteCommand}"
|
||||
HorizontalAlignment="Left"
|
||||
Style="{StaticResource HollowButton}"
|
||||
Content="Delete" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user