OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / Views / Node.xaml

146 lines · xaml ref:
<UserControl x:Class="WpfDisplay.Views.Node"
             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:WpfDisplay.Views"
             xmlns:vm="clr-namespace:WpfDisplay.ViewModels"
             mc:Ignorable="d" 
             d:DesignHeight="150" d:DesignWidth="150"
             x:Name="root"
             d:DataContext="{d:DesignInstance Type=vm:IteratorViewModel}"
             Width="{Binding NodeSize}" Height="{Binding NodeSize}"
             Focusable="False"
             >
    <UserControl.Resources>
        <BooleanToVisibilityConverter x:Key="visibilityConverter"/>
    </UserControl.Resources>
    <UserControl.RenderTransform>
        <TranslateTransform X="{Binding RenderTranslateValue}" Y="{Binding RenderTranslateValue}"/>
    </UserControl.RenderTransform>
    <Grid x:Name="grid">
        <Ellipse x:Name="ellipseBody"
                 Stretch="UniformToFill" Cursor="Hand"
                 Stroke="{DynamicResource borderBrush}"
                 MouseDown="ellipseBody_MouseDown" Focusable="True" GotKeyboardFocus="UserControl_GotFocus">
            <Ellipse.Resources>
                <SolidColorBrush x:Key="borderBrush" Color="{Binding ColorRGB}"/>
                <Style TargetType="Ellipse">
                    <Style.Triggers>
                        <!--Grow border on node hover-->
                        <DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=grid}" Value="True">
                            <Setter Property="StrokeThickness" Value="8"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=grid}" Value="False">
                            <Setter Property="StrokeThickness" Value="4"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsSelected}" Value="True">
                            <Setter Property="StrokeThickness" Value="8"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsMouseDown, ElementName=root}" Value="True">
                            <Setter Property="StrokeThickness" Value="4"/>
                        </DataTrigger>
                        <!--Shadow effect when selected-->
                        <DataTrigger Binding="{Binding IsSelected}" Value="True">
                            <Setter Property="Effect">
                                <Setter.Value>
                                    <DropShadowEffect ShadowDepth="5" Direction="-90" BlurRadius="20"/>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Ellipse.Resources>
            <Ellipse.Fill>
                <RadialGradientBrush>
                    <GradientStop Color="{Binding OpacityColor, UpdateSourceTrigger=PropertyChanged}" Offset="0.98"/>
                    <GradientStop Color="LightGray" Offset="1"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <Label IsHitTestVisible="False"
            Content="{Binding NodeLabel, UpdateSourceTrigger=PropertyChanged}" 
            HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="Hand"
            Foreground="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Grid d:Visibility="Visible">
            <Grid.Resources>
                <Style TargetType="Grid">
                    <Style.Triggers>
                        <!--Show action buttons on hover-->
                        <DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=grid}" Value="True">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=grid}" Value="False">
                            <Setter Property="Visibility" Value="{Binding IsSelected, Converter={StaticResource visibilityConverter}}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Resources>
            <Label
                Width="30" Height="25" Padding="0"
                VerticalAlignment="Top" HorizontalAlignment="Center"
                HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
                FontSize="18" Foreground="LightGray" Cursor="SizeAll"
                MouseMove="dragHandle_MouseMove" MouseDown="Label_MouseDown">
                ══
                <Label.Effect>
                    <DropShadowEffect Color="Black" ShadowDepth="1.0" BlurRadius="0.5"/>
                </Label.Effect>
            </Label>
            <Button
                Command="{Binding FlipOpacityCommand}"
                Width="30" Height="30" FontSize="18"
                VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5"
                FontWeight="Bold" ToolTip="Show/Hide (Ctrl+O)"
                IsTabStop="False"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                👁️
            </Button>
            <Button
                Command="{Binding FlipWeightCommand}"
                Width="30" Height="30" FontSize="18"
                VerticalAlignment="Top" HorizontalAlignment="Right" Margin="5"
                ToolTip="Enable/Disable (Ctrl+W)"
                IsTabStop="False"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                ⚖
            </Button>
            <Button
                Command="{Binding DuplicateCommand}" CommandParameter="{Binding}"
                Width="30" Height="30" FontSize="18"
                VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5"
                FontWeight="Bold" ToolTip="Duplicate (Ctrl+D)"
                IsTabStop="False"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                🗎🗎
            </Button>
            <Button
                Command="{Binding SplitCommand}" CommandParameter="{Binding}"
                Width="30" Height="30" FontSize="14"
                VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"
                FontWeight="Bold" ToolTip="Split (Ctrl+Shift+D)"
                IsTabStop="False"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                🗎|🗎
            </Button>
            <!--<Button
                Command="{Binding RemoveCommand}" CommandParameter="{Binding}"
                Width="30" Height="30" FontSize="18"
                VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"
                ToolTip="Remove (Delete)"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                🗑️
            </Button>-->
            <Button
                Command="{Binding ConnectSelfCommand}"
                Width="35" Height="35" FontSize="22"
                VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="-15"
                ToolTip="Connect self"
                IsTabStop="False"
                Style="{DynamicResource MaterialDesignFloatingActionButton}">
                Ꝍ
            </Button>
        </Grid>
    </Grid>
</UserControl>