1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Merge remote-tracking branch 'origin/feature/compiled-bindings' into feature/avalonia-preview7

This commit is contained in:
Robert 2023-05-06 13:12:07 +02:00
commit 2e88b438f0
65 changed files with 415 additions and 298 deletions

View File

@ -1,6 +1,8 @@
<Application xmlns="https://github.com/avaloniaui" <Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI" xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
xmlns:root="clr-namespace:Artemis.UI.Screens.Root;assembly=Artemis.UI"
x:DataType="root:RootViewModel"
x:Class="Artemis.UI.Linux.App"> x:Class="Artemis.UI.Linux.App">
<Application.DataTemplates> <Application.DataTemplates>
<ui:ViewLocator /> <ui:ViewLocator />
@ -12,16 +14,16 @@
<TrayIcon.Icons> <TrayIcon.Icons>
<TrayIcons> <TrayIcons>
<TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{Binding OpenScreen}" CommandParameter="Home"> <TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{CompiledBinding OpenScreen}" CommandParameter="Home">
<TrayIcon.Menu> <TrayIcon.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Home" Command="{Binding OpenScreen}" CommandParameter="Home" /> <NativeMenuItem Header="Home" Command="{CompiledBinding OpenScreen}" CommandParameter="Home" />
<!-- <NativeMenuItem Header="Workshop" Command="{Binding OpenScreen}" CommandParameter="Workshop" /> --> <!-- <NativeMenuItem Header="Workshop" Command="{CompiledBinding OpenScreen}" CommandParameter="Workshop" /> -->
<NativeMenuItem Header="Surface Editor" Command="{Binding OpenScreen}" CommandParameter="Surface Editor" /> <NativeMenuItem Header="Surface Editor" Command="{CompiledBinding OpenScreen}" CommandParameter="Surface Editor" />
<NativeMenuItem Header="Settings" Command="{Binding OpenScreen}" CommandParameter="Settings" /> <NativeMenuItem Header="Settings" Command="{CompiledBinding OpenScreen}" CommandParameter="Settings" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem Header="Debugger" Command="{Binding OpenDebugger}" /> <NativeMenuItem Header="Debugger" Command="{CompiledBinding OpenDebugger}" />
<NativeMenuItem Header="Exit" Command="{Binding Exit}" /> <NativeMenuItem Header="Exit" Command="{CompiledBinding Exit}" />
</NativeMenu> </NativeMenu>
</TrayIcon.Menu> </TrayIcon.Menu>
</TrayIcon> </TrayIcon>

View File

@ -1,6 +1,8 @@
<Application xmlns="https://github.com/avaloniaui" <Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI" xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
xmlns:root="clr-namespace:Artemis.UI.Screens.Root;assembly=Artemis.UI"
x:DataType="root:RootViewModel"
x:Class="Artemis.UI.MacOS.App"> x:Class="Artemis.UI.MacOS.App">
<Application.DataTemplates> <Application.DataTemplates>
<ui:ViewLocator /> <ui:ViewLocator />
@ -12,16 +14,16 @@
<TrayIcon.Icons> <TrayIcon.Icons>
<TrayIcons> <TrayIcons>
<TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{Binding OpenScreen}" CommandParameter="Home"> <TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{CompiledBinding OpenScreen}" CommandParameter="Home">
<TrayIcon.Menu> <TrayIcon.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Home" Command="{Binding OpenScreen}" CommandParameter="Home" /> <NativeMenuItem Header="Home" Command="{CompiledBinding OpenScreen}" CommandParameter="Home" />
<!-- <NativeMenuItem Header="Workshop" Command="{Binding OpenScreen}" CommandParameter="Workshop" /> --> <!-- <NativeMenuItem Header="Workshop" Command="{CompiledBinding OpenScreen}" CommandParameter="Workshop" /> -->
<NativeMenuItem Header="Surface Editor" Command="{Binding OpenScreen}" CommandParameter="Surface Editor" /> <NativeMenuItem Header="Surface Editor" Command="{CompiledBinding OpenScreen}" CommandParameter="Surface Editor" />
<NativeMenuItem Header="Settings" Command="{Binding OpenScreen}" CommandParameter="Settings" /> <NativeMenuItem Header="Settings" Command="{CompiledBinding OpenScreen}" CommandParameter="Settings" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem Header="Debugger" Command="{Binding OpenDebugger}" /> <NativeMenuItem Header="Debugger" Command="{CompiledBinding OpenDebugger}" />
<NativeMenuItem Header="Exit" Command="{Binding Exit}" /> <NativeMenuItem Header="Exit" Command="{CompiledBinding Exit}" />
</NativeMenu> </NativeMenu>
</TrayIcon.Menu> </TrayIcon.Menu>
</TrayIcon> </TrayIcon>

View File

@ -1,4 +1,4 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@ -25,14 +25,14 @@
<Panel> <Panel>
<controls:NumberBox Name="InnerNumberBox" <controls:NumberBox Name="InnerNumberBox"
AcceptsExpression="True" AcceptsExpression="True"
LargeChange="{Binding $parent[sharedControls:DraggableNumberBox].LargeChange}" LargeChange="{CompiledBinding $parent[sharedControls:DraggableNumberBox].LargeChange}"
SmallChange="{Binding $parent[sharedControls:DraggableNumberBox].SmallChange}" SmallChange="{CompiledBinding $parent[sharedControls:DraggableNumberBox].SmallChange}"
Minimum="{Binding $parent[sharedControls:DraggableNumberBox].Minimum}" Minimum="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Minimum}"
Maximum="{Binding $parent[sharedControls:DraggableNumberBox].Maximum}" Maximum="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Maximum}"
SimpleNumberFormat="{Binding $parent[sharedControls:DraggableNumberBox].SimpleNumberFormat}" SimpleNumberFormat="{CompiledBinding $parent[sharedControls:DraggableNumberBox].SimpleNumberFormat}"
attachedProperties:NumberBoxAssist.PrefixText="{Binding $parent[sharedControls:DraggableNumberBox].Prefix}" attachedProperties:NumberBoxAssist.PrefixText="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Prefix}"
attachedProperties:NumberBoxAssist.SuffixText="{Binding $parent[sharedControls:DraggableNumberBox].Suffix}" attachedProperties:NumberBoxAssist.SuffixText="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Suffix}"
HorizontalAlignment="{Binding $parent[sharedControls:DraggableNumberBox].HorizontalAlignment}" HorizontalAlignment="{CompiledBinding $parent[sharedControls:DraggableNumberBox].HorizontalAlignment}"
ValueChanged="NumberBox_OnValueChanged"/> ValueChanged="NumberBox_OnValueChanged"/>
<Rectangle Name="DragCollider" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="Transparent"></Rectangle> <Rectangle Name="DragCollider" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="Transparent"></Rectangle>
</Panel> </Panel>

View File

@ -3,11 +3,12 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:local="clr-namespace:Artemis.UI.Shared"
x:Class="Artemis.UI.Shared.EnumComboBox"> x:Class="Artemis.UI.Shared.EnumComboBox">
<ComboBox x:Name="ChildEnumComboBox" HorizontalAlignment="Stretch"> <ComboBox x:Name="ChildEnumComboBox" HorizontalAlignment="Stretch">
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="local:EnumComboBoxItem">
<TextBlock Text="{Binding [1]}" /> <TextBlock Text="{CompiledBinding Value}" />
</DataTemplate> </DataTemplate>
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>

View File

@ -20,11 +20,9 @@ public partial class EnumComboBox : UserControl
/// </summary> /// </summary>
public static readonly StyledProperty<object?> ValueProperty = AvaloniaProperty.Register<EnumComboBox, object?>(nameof(Value), defaultBindingMode: BindingMode.TwoWay); public static readonly StyledProperty<object?> ValueProperty = AvaloniaProperty.Register<EnumComboBox, object?>(nameof(Value), defaultBindingMode: BindingMode.TwoWay);
private readonly ObservableCollection<(Enum, string)> _currentValues = new(); private readonly ObservableCollection<EnumComboBoxItem> _currentValues = new();
private Type? _currentType; private Type? _currentType;
private ComboBox? _enumComboBox;
/// <summary> /// <summary>
/// Creates a new instance of the <see cref="EnumComboBox" /> class. /// Creates a new instance of the <see cref="EnumComboBox" /> class.
/// </summary> /// </summary>
@ -54,35 +52,35 @@ public partial class EnumComboBox : UserControl
private void OnSelectionChanged(object? sender, SelectionChangedEventArgs e) private void OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{ {
if (_enumComboBox == null || _enumComboBox.SelectedIndex == -1) if (ChildEnumComboBox == null || ChildEnumComboBox.SelectedIndex == -1)
return; return;
(Enum enumValue, _) = _currentValues[_enumComboBox.SelectedIndex]; EnumComboBoxItem v = _currentValues[ChildEnumComboBox.SelectedIndex];
if (!Equals(Value, enumValue)) if (!Equals(Value, v.Value))
Value = enumValue; Value = v.Value;
} }
private void UpdateValues() private void UpdateValues()
{ {
Type? newType = Value?.GetType(); Type? newType = Value?.GetType();
if (_enumComboBox == null || newType == null || _currentType == newType) if (ChildEnumComboBox == null || newType == null || _currentType == newType)
return; return;
_currentValues.Clear(); _currentValues.Clear();
foreach ((Enum, string) valueDesc in EnumUtilities.GetAllValuesAndDescriptions(newType)) foreach ((Enum, string) valueDesc in EnumUtilities.GetAllValuesAndDescriptions(newType))
_currentValues.Add(valueDesc); _currentValues.Add(new EnumComboBoxItem(value: valueDesc.Item1, description: valueDesc.Item2));
_currentType = newType; _currentType = newType;
} }
private void UpdateSelection() private void UpdateSelection()
{ {
if (_enumComboBox == null || Value is not Enum) if (ChildEnumComboBox == null || Value is not Enum)
return; return;
(Enum, string) value = _currentValues.FirstOrDefault(v => v.Item1.Equals(Value)); EnumComboBoxItem? value = _currentValues.FirstOrDefault(v => v.Value.Equals(Value));
if (!Equals(value.Item1, _enumComboBox.SelectedItem)) if (!Equals(value?.Value, ChildEnumComboBox.SelectedItem))
_enumComboBox.SelectedItem = value; ChildEnumComboBox.SelectedItem = value;
} }
#region Overrides of TemplatedControl #region Overrides of TemplatedControl
@ -90,12 +88,11 @@ public partial class EnumComboBox : UserControl
/// <inheritdoc /> /// <inheritdoc />
protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e)
{ {
_enumComboBox = this.Get<ComboBox>("ChildEnumComboBox"); ChildEnumComboBox.ItemsSource = _currentValues;
_enumComboBox.ItemsSource = _currentValues;
UpdateValues(); UpdateValues();
UpdateSelection(); UpdateSelection();
_enumComboBox.SelectionChanged += OnSelectionChanged; ChildEnumComboBox.SelectionChanged += OnSelectionChanged;
base.OnAttachedToLogicalTree(e); base.OnAttachedToLogicalTree(e);
} }
@ -103,11 +100,36 @@ public partial class EnumComboBox : UserControl
/// <inheritdoc /> /// <inheritdoc />
protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e)
{ {
if (_enumComboBox != null) if (ChildEnumComboBox != null)
_enumComboBox.SelectionChanged -= OnSelectionChanged; ChildEnumComboBox.SelectionChanged -= OnSelectionChanged;
base.OnDetachedFromLogicalTree(e); base.OnDetachedFromLogicalTree(e);
} }
#endregion #endregion
} }
/// <summary>
/// Represents an item in the <see cref="EnumComboBox" />
/// </summary>
public class EnumComboBoxItem
{
/// <summary>
/// Creates a new instance of the <see cref="EnumComboBoxItem" /> class.
/// </summary>
public EnumComboBoxItem(Enum value, string description)
{
Value = value;
Description = description;
}
/// <summary>
/// Gets or sets the value of the item
/// </summary>
public Enum Value { get; set; }
/// <summary>
/// Gets or sets the description of the item
/// </summary>
public string Description { get; set; }
}

View File

@ -26,8 +26,8 @@
</UserControl.Styles> </UserControl.Styles>
<shared:NoInputTextBox x:Name="DisplayTextBox" <shared:NoInputTextBox x:Name="DisplayTextBox"
Watermark="{Binding $parent.Watermark}" Watermark="{CompiledBinding $parent.Watermark}"
UseFloatingWatermark="{Binding $parent.UseFloatingWatermark}" UseFloatingWatermark="{CompiledBinding $parent.UseFloatingWatermark}"
Classes="clearButton" Classes="clearButton"
IsReadOnly="True" IsReadOnly="True"
HorizontalAlignment="Stretch" /> HorizontalAlignment="Stretch" />

View File

@ -35,6 +35,7 @@ public partial class HotkeyBox : UserControl
UpdateDisplayTextBox(); UpdateDisplayTextBox();
} }
/// <inheritdoc />
protected override void OnGotFocus(GotFocusEventArgs e) protected override void OnGotFocus(GotFocusEventArgs e)
{ {
_inputService.KeyboardKeyDown += InputServiceOnKeyboardKeyDown; _inputService.KeyboardKeyDown += InputServiceOnKeyboardKeyDown;
@ -43,6 +44,7 @@ public partial class HotkeyBox : UserControl
base.OnGotFocus(e); base.OnGotFocus(e);
} }
/// <inheritdoc />
protected override void OnLostFocus(RoutedEventArgs e) protected override void OnLostFocus(RoutedEventArgs e)
{ {
_inputService.KeyboardKeyDown -= InputServiceOnKeyboardKeyDown; _inputService.KeyboardKeyDown -= InputServiceOnKeyboardKeyDown;

View File

@ -3,22 +3,24 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:local="clr-namespace:Artemis.UI.Shared.DefaultTypes.DataModel.Display"
x:DataType="local:DefaultDataModelDisplayViewModel"
x:Class="Artemis.UI.Shared.DefaultTypes.DataModel.Display.DefaultDataModelDisplayView"> x:Class="Artemis.UI.Shared.DefaultTypes.DataModel.Display.DefaultDataModelDisplayView">
<Grid ColumnDefinitions="*,Auto,Auto"> <Grid ColumnDefinitions="*,Auto,Auto">
<!-- Prefix --> <!-- Prefix -->
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Text="{Binding PropertyDescription.Prefix}" Text="{CompiledBinding PropertyDescription.Prefix}"
IsVisible="{Binding PropertyDescription.Prefix, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{CompiledBinding PropertyDescription.Prefix, Converter={x:Static ObjectConverters.IsNotNull}}"
TextAlignment="Right" TextAlignment="Right"
Margin="0 0 5 0" /> Margin="0 0 5 0" />
<!-- Value --> <!-- Value -->
<TextBlock Grid.Column="1" Text="{Binding Display, Mode=OneWay}" HorizontalAlignment="Right"/> <TextBlock Grid.Column="1" Text="{CompiledBinding Display, Mode=OneWay}" HorizontalAlignment="Right"/>
<!-- Affix --> <!-- Affix -->
<TextBlock Grid.Column="2" <TextBlock Grid.Column="2"
Text="{Binding PropertyDescription.Affix}" Text="{CompiledBinding PropertyDescription.Affix}"
IsVisible="{Binding PropertyDescription.Affix, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{CompiledBinding PropertyDescription.Affix, Converter={x:Static ObjectConverters.IsNotNull}}"
Margin="5 0 0 0" /> Margin="5 0 0 0" />
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -2,9 +2,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Artemis.UI.Shared.Services"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="800" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="800"
x:Class="Artemis.UI.Shared.Services.ExceptionDialogView" x:Class="Artemis.UI.Shared.Services.ExceptionDialogView"
Title="{Binding Title}" x:DataType="local:ExceptionDialogViewModel"
Title="{CompiledBinding Title}"
ExtendClientAreaToDecorationsHint="True" ExtendClientAreaToDecorationsHint="True"
Width="800" Width="800"
Height="800" Height="800"
@ -16,7 +18,7 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Margin="10" Grid.Row="1" IsHitTestVisible="False" Text="{Binding Title}" /> <TextBlock Margin="10" Grid.Row="1" IsHitTestVisible="False" Text="{CompiledBinding Title}" />
<StackPanel Grid.Row="2" Margin="20"> <StackPanel Grid.Row="2" Margin="20">
<TextBlock Classes="h3">Awww :(</TextBlock> <TextBlock Classes="h3">Awww :(</TextBlock>
@ -27,7 +29,7 @@
<Grid Grid.Row="3" ColumnDefinitions="*,Auto" RowDefinitions="*,Auto"> <Grid Grid.Row="3" ColumnDefinitions="*,Auto" RowDefinitions="*,Auto">
<ScrollViewer Grid.Row="0" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="20 0"> <ScrollViewer Grid.Row="0" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="20 0">
<TextBox Text="{Binding Exception, Mode=OneTime}" <TextBox Text="{CompiledBinding Exception, Mode=OneTime}"
AcceptsReturn="True" AcceptsReturn="True"
IsReadOnly="True" IsReadOnly="True"
FontFamily="Consolas" FontFamily="Consolas"
@ -39,10 +41,10 @@
When reporting errors please don't take a screenshot of the error, instead copy the text, thanks! When reporting errors please don't take a screenshot of the error, instead copy the text, thanks!
</TextBlock> </TextBlock>
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="15"> <StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="15">
<Button Command="{Binding CopyException}" Classes="AppBarButton" Width="150" Margin="0 0 5 0"> <Button Command="{CompiledBinding CopyException}" Classes="AppBarButton" Width="150" Margin="0 0 5 0">
Copy exception Copy exception
</Button> </Button>
<Button Command="{Binding Close}" Width="150" Margin="5 0 0 0"> <Button Command="{CompiledBinding Close}" Width="150" Margin="5 0 0 0">
Close Close
</Button> </Button>
</StackPanel> </StackPanel>

View File

@ -19,7 +19,7 @@
<Grid ColumnDefinitions="Auto,*" <Grid ColumnDefinitions="Auto,*"
RowDefinitions="*" RowDefinitions="*"
MinHeight="38" MinHeight="38"
IsVisible="{Binding DataModelPath, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static ObjectConverters.IsNotNull}}"> IsVisible="{CompiledBinding DataModelPath, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static ObjectConverters.IsNotNull}}">
<avalonia:MaterialIcon Grid.Column="0" <avalonia:MaterialIcon Grid.Column="0"
Grid.Row="0" Grid.Row="0"
Name="CurrentPathIcon" Name="CurrentPathIcon"
@ -27,7 +27,7 @@
Height="22" Height="22"
Width="22" Width="22"
Margin="5 0 15 0" Margin="5 0 15 0"
IsVisible="{Binding !IsEventPicker, RelativeSource={RelativeSource TemplatedParent}}"/> IsVisible="{CompiledBinding !IsEventPicker, RelativeSource={RelativeSource TemplatedParent}}"/>
<avalonia:MaterialIcon Grid.Column="0" <avalonia:MaterialIcon Grid.Column="0"
Grid.Row="0" Grid.Row="0"
Name="EventIcon" Name="EventIcon"
@ -35,14 +35,14 @@
Height="22" Height="22"
Width="22" Width="22"
Margin="5 0 15 0" Margin="5 0 15 0"
IsVisible="{Binding IsEventPicker, RelativeSource={RelativeSource TemplatedParent}}"/> IsVisible="{CompiledBinding IsEventPicker, RelativeSource={RelativeSource TemplatedParent}}"/>
<StackPanel Grid.Column="1" Grid.Row="0" VerticalAlignment="Center"> <StackPanel Grid.Column="1" Grid.Row="0" VerticalAlignment="Center">
<TextBlock Name="CurrentPathDisplay" Classes="BodyStrongTextBlockStyle" MaxHeight="50" /> <TextBlock Name="CurrentPathDisplay" Classes="BodyStrongTextBlockStyle" MaxHeight="50" />
<TextBlock Name="CurrentPathDescription" Classes="BodyTextBlockStyle" Foreground="{DynamicResource TextFillColorSecondary}" MaxHeight="50" /> <TextBlock Name="CurrentPathDescription" Classes="BodyTextBlockStyle" Foreground="{DynamicResource TextFillColorSecondary}" MaxHeight="50" />
</StackPanel> </StackPanel>
</Grid> </Grid>
<Grid MinHeight="38" <Grid MinHeight="38"
IsVisible="{Binding DataModelPath, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static ObjectConverters.IsNull}}" ColumnDefinitions="*,Auto" IsVisible="{CompiledBinding DataModelPath, RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static ObjectConverters.IsNull}}" ColumnDefinitions="*,Auto"
RowDefinitions="*,*"> RowDefinitions="*,*">
<TextBlock Grid.Column="0" Grid.Row="0" Classes="BodyStrongTextBlockStyle">Welcome to the data model picker</TextBlock> <TextBlock Grid.Column="0" Grid.Row="0" Classes="BodyStrongTextBlockStyle">Welcome to the data model picker</TextBlock>
<TextBlock Grid.Column="0" Grid.Row="1" Foreground="{DynamicResource TextFillColorSecondary}">Select a value from the data model below</TextBlock> <TextBlock Grid.Column="0" Grid.Row="1" Foreground="{DynamicResource TextFillColorSecondary}">Select a value from the data model below</TextBlock>
@ -53,19 +53,19 @@
<TreeView Grid.Row="2" <TreeView Grid.Row="2"
Name="DataModelTreeView" Name="DataModelTreeView"
ItemsSource="{Binding DataModelViewModel.Children, RelativeSource={RelativeSource TemplatedParent}}"> ItemsSource="{CompiledBinding DataModelViewModel.Children, RelativeSource={RelativeSource TemplatedParent}}">
<TreeView.Styles> <TreeView.Styles>
<Style Selector="TreeViewItem"> <Style Selector="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsVisualizationExpanded, Mode=TwoWay}" /> <Setter Property="IsExpanded" Value="{CompiledBinding IsVisualizationExpanded, Mode=TwoWay, DataType=dataModel:DataModelVisualizationViewModel}" />
<Setter Property="IsEnabled" Value="{Binding IsMatchingFilteredTypes, Mode=OneWay}" /> <Setter Property="IsEnabled" Value="{CompiledBinding IsMatchingFilteredTypes, Mode=OneWay, DataType=dataModel:DataModelVisualizationViewModel}" />
</Style> </Style>
</TreeView.Styles> </TreeView.Styles>
<TreeView.DataTemplates> <TreeView.DataTemplates>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertiesViewModel}" ItemsSource="{Binding Children}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertiesViewModel}" ItemsSource="{CompiledBinding Children}">
<Grid ColumnDefinitions="Auto,*"> <Grid ColumnDefinitions="Auto,*">
<TextBlock Grid.Column="0" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="0" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Text="{Binding DisplayValue}" Text="{CompiledBinding DisplayValue}"
FontFamily="Consolas" FontFamily="Consolas"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="0 0 10 0" /> Margin="0 0 10 0" />
@ -75,29 +75,29 @@
<TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertyViewModel}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertyViewModel}">
<Grid ColumnDefinitions="Auto,*"> <Grid ColumnDefinitions="Auto,*">
<StackPanel Grid.Column="0" Orientation="Horizontal"> <StackPanel Grid.Column="0" Orientation="Horizontal">
<TextBlock Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Text=" changed" <TextBlock Text=" changed"
ToolTip.Tip="{Binding PropertyDescription.Description}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}"
IsVisible="{Binding IsEventPicker, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dataModelPicker:DataModelPicker}}}"/> IsVisible="{CompiledBinding IsEventPicker, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dataModelPicker:DataModelPicker}}}"/>
</StackPanel> </StackPanel>
<ContentControl Grid.Column="1" Content="{Binding DisplayViewModel}" FontFamily="Consolas" Margin="0 0 10 0" /> <ContentControl Grid.Column="1" Content="{CompiledBinding DisplayViewModel}" FontFamily="Consolas" Margin="0 0 10 0" />
</Grid> </Grid>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelListViewModel}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelListViewModel}">
<Grid ColumnDefinitions="Auto,*"> <Grid ColumnDefinitions="Auto,*">
<TextBlock Grid.Column="0" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="0" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Text="{Binding CountDisplay, Mode=OneWay}" Text="{CompiledBinding CountDisplay, Mode=OneWay}"
FontFamily="Consolas" FontFamily="Consolas"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="0 0 10 0" /> Margin="0 0 10 0" />
</Grid> </Grid>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelEventViewModel}" ItemsSource="{Binding Children}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelEventViewModel}" ItemsSource="{CompiledBinding Children}">
<TextBlock Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
</TreeDataTemplate> </TreeDataTemplate>
</TreeView.DataTemplates> </TreeView.DataTemplates>
</TreeView> </TreeView>

View File

@ -103,10 +103,10 @@
</ItemsControl.Styles> </ItemsControl.Styles>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate DataType="core:ColorGradientStop"> <DataTemplate DataType="core:ColorGradientStop">
<gradientPicker:GradientPickerColorStop ColorStop="{Binding}" <gradientPicker:GradientPickerColorStop ColorStop="{CompiledBinding}"
PositionReference="{Binding $parent[Border]}" PositionReference="{CompiledBinding $parent[Border]}"
Classes="gradient-handle" Classes="gradient-handle"
GradientPicker="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type gradientPicker:GradientPicker}}}"> GradientPicker="{CompiledBinding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type gradientPicker:GradientPicker}}}">
</gradientPicker:GradientPickerColorStop> </gradientPicker:GradientPickerColorStop>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
@ -152,7 +152,7 @@
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate DataType="core:ColorGradientStop"> <DataTemplate DataType="core:ColorGradientStop">
<Border Classes="stop-position"> <Border Classes="stop-position">
<TextBlock Text="{Binding Position}"></TextBlock> <TextBlock Text="{CompiledBinding Position}"></TextBlock>
</Border> </Border>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
@ -174,8 +174,8 @@
UseColorTriangle="True" UseColorTriangle="True"
IsMoreButtonVisible="True" IsMoreButtonVisible="True"
IsVisible="{TemplateBinding SelectedColorStop, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{TemplateBinding SelectedColorStop, Converter={x:Static ObjectConverters.IsNotNull}}"
IsCompact="{Binding IsCompact, RelativeSource={RelativeSource TemplatedParent}}" IsCompact="{CompiledBinding IsCompact, RelativeSource={RelativeSource TemplatedParent}}"
Color="{Binding SelectedColorStop.Color, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource SKColorToColorConverter}}" /> Color="{CompiledBinding SelectedColorStop.Color, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource SKColorToColorConverter}}" />
</Border> </Border>
<Grid Grid.Row="2" Grid.Column="1" RowDefinitions="*,Auto"> <Grid Grid.Row="2" Grid.Column="1" RowDefinitions="*,Auto">
@ -196,19 +196,19 @@
BorderBrush="{DynamicResource ButtonBorderBrush}" BorderBrush="{DynamicResource ButtonBorderBrush}"
ClipToBounds="True" ClipToBounds="True"
Background="{DynamicResource LightCheckerboardBrush}"> Background="{DynamicResource LightCheckerboardBrush}">
<Border CornerRadius="4" Margin="-2" Background="{Binding Color, Converter={StaticResource SKColorToBrushConverter}}" /> <Border CornerRadius="4" Margin="-2" Background="{CompiledBinding Color, Converter={StaticResource SKColorToBrushConverter}}" />
</Border> </Border>
<TextBox Grid.Column="1" Text="{Binding Color, Converter={StaticResource SKColorToStringConverter}}" /> <TextBox Grid.Column="1" Text="{CompiledBinding Color, Converter={StaticResource SKColorToStringConverter}}" />
<NumericUpDown Grid.Column="2" FormatString="F3" ShowButtonSpinner="False" Margin="5 0" Minimum="0" Maximum="1" Increment="0.01"> <NumericUpDown Grid.Column="2" FormatString="F3" ShowButtonSpinner="False" Margin="5 0" Minimum="0" Maximum="1" Increment="0.01">
<Interaction.Behaviors> <Interaction.Behaviors>
<behaviors:LostFocusNumericUpDownBindingBehavior Value="{Binding Position}" /> <behaviors:LostFocusNumericUpDownBindingBehavior Value="{CompiledBinding Position}" />
</Interaction.Behaviors> </Interaction.Behaviors>
</NumericUpDown> </NumericUpDown>
<Button Name="DeleteButton" <Button Name="DeleteButton"
Grid.Column="3" Grid.Column="3"
Classes="icon-button" Classes="icon-button"
Command="{Binding DeleteStop, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type gradientPicker:GradientPicker}}}" Command="{CompiledBinding DeleteStop, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type gradientPicker:GradientPicker}}}"
CommandParameter="{Binding}"> CommandParameter="{CompiledBinding}">
<avalonia:MaterialIcon Kind="Close" /> <avalonia:MaterialIcon Kind="Close" />
</Button> </Button>
</Grid> </Grid>

View File

@ -1,6 +1,8 @@
<Application xmlns="https://github.com/avaloniaui" <Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI" xmlns:ui="clr-namespace:Artemis.UI;assembly=Artemis.UI"
xmlns:root="clr-namespace:Artemis.UI.Screens.Root;assembly=Artemis.UI"
x:DataType="root:RootViewModel"
x:Class="Artemis.UI.Windows.App"> x:Class="Artemis.UI.Windows.App">
<Application.DataTemplates> <Application.DataTemplates>
<ui:ViewLocator /> <ui:ViewLocator />
@ -12,16 +14,16 @@
<TrayIcon.Icons> <TrayIcon.Icons>
<TrayIcons> <TrayIcons>
<TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{Binding OpenScreen}" CommandParameter="Home"> <TrayIcon Icon="avares://Artemis.UI/Assets/Images/Logo/application.ico" ToolTipText="Artemis" Command="{CompiledBinding OpenScreen}" CommandParameter="Home">
<TrayIcon.Menu> <TrayIcon.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Home" Command="{Binding OpenScreen}" CommandParameter="Home" /> <NativeMenuItem Header="Home" Command="{CompiledBinding OpenScreen}" CommandParameter="Home" />
<!-- <NativeMenuItem Header="Workshop" Command="{Binding OpenScreen}" CommandParameter="Workshop" /> --> <!-- <NativeMenuItem Header="Workshop" Command="{CompiledBinding OpenScreen}" CommandParameter="Workshop" /> -->
<NativeMenuItem Header="Surface Editor" Command="{Binding OpenScreen}" CommandParameter="Surface Editor" /> <NativeMenuItem Header="Surface Editor" Command="{CompiledBinding OpenScreen}" CommandParameter="Surface Editor" />
<NativeMenuItem Header="Settings" Command="{Binding OpenScreen}" CommandParameter="Settings" /> <NativeMenuItem Header="Settings" Command="{CompiledBinding OpenScreen}" CommandParameter="Settings" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem Header="Debugger" Command="{Binding OpenDebugger}" /> <NativeMenuItem Header="Debugger" Command="{CompiledBinding OpenDebugger}" />
<NativeMenuItem Header="Exit" Command="{Binding Exit}" /> <NativeMenuItem Header="Exit" Command="{CompiledBinding Exit}" />
</NativeMenu> </NativeMenu>
</TrayIcon.Menu> </TrayIcon.Menu>
</TrayIcon> </TrayIcon>

View File

@ -34,7 +34,7 @@
<Grid ColumnDefinitions="30,*" RowDefinitions="Auto,Auto"> <Grid ColumnDefinitions="30,*" RowDefinitions="Auto,Auto">
<avalonia:MaterialIcon Grid.Row="0" <avalonia:MaterialIcon Grid.Row="0"
Grid.RowSpan="2" Grid.RowSpan="2"
Kind="{Binding Icon}" Kind="{CompiledBinding Icon}"
Height="20" Height="20"
Width="20" Width="20"
VerticalAlignment="Center" VerticalAlignment="Center"

View File

@ -23,11 +23,11 @@
<Style.Resources> <Style.Resources>
<ControlTemplate x:Key="TooltipDataValidationLeftContentTemplate" TargetType="DataValidationErrors"> <ControlTemplate x:Key="TooltipDataValidationLeftContentTemplate" TargetType="DataValidationErrors">
<DockPanel LastChildFill="True"> <DockPanel LastChildFill="True">
<ContentControl Content="{Binding (DataValidationErrors.Errors)}" <ContentControl Content="{CompiledBinding (DataValidationErrors.Errors)}"
ContentTemplate="{TemplateBinding ErrorTemplate}" ContentTemplate="{TemplateBinding ErrorTemplate}"
DataContext="{TemplateBinding Owner}" DataContext="{TemplateBinding Owner}"
DockPanel.Dock="Left" DockPanel.Dock="Left"
IsVisible="{Binding (DataValidationErrors.HasErrors)}" /> IsVisible="{CompiledBinding (DataValidationErrors.HasErrors)}" />
<ContentPresenter Name="PART_ContentPresenter" <ContentPresenter Name="PART_ContentPresenter"
Padding="{TemplateBinding Padding}" Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"

View File

@ -2,10 +2,11 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia" xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia"
xmlns:vm="clr-namespace:Artemis.UI.Screens.Root"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.MainWindow" x:Class="Artemis.UI.MainWindow"
x:DataType="vm:RootViewModel"
Icon="/Assets/Images/Logo/application.ico" Icon="/Assets/Images/Logo/application.ico"
Title="Artemis 2.0" Title="Artemis 2.0"
MinWidth="600" MinWidth="600"
@ -22,7 +23,7 @@
</windowing:AppWindow.Styles> </windowing:AppWindow.Styles>
<Panel Name="RootPanel"> <Panel Name="RootPanel">
<DockPanel> <DockPanel>
<ContentControl Name="SidebarContentControl" Content="{Binding SidebarViewModel}" DockPanel.Dock="Left" Width="240"> <ContentControl Name="SidebarContentControl" Content="{CompiledBinding SidebarViewModel}" DockPanel.Dock="Left" Width="240">
<ContentControl.Transitions> <ContentControl.Transitions>
<Transitions> <Transitions>
<DoubleTransition Property="Width" Duration="0:0:0.2" Easing="CubicEaseOut"></DoubleTransition> <DoubleTransition Property="Width" Duration="0:0:0.2" Easing="CubicEaseOut"></DoubleTransition>
@ -30,9 +31,9 @@
</ContentControl.Transitions> </ContentControl.Transitions>
</ContentControl> </ContentControl>
<Border Name="TitleBarContainer" DockPanel.Dock="Top"> <Border Name="TitleBarContainer" DockPanel.Dock="Top">
<ContentControl Content="{Binding TitleBarViewModel}"/> <ContentControl Content="{CompiledBinding TitleBarViewModel}"/>
</Border> </Border>
<ContentControl Content="{Binding}" /> <ContentControl Content="{CompiledBinding}" />
</DockPanel> </DockPanel>
<StackPanel Classes="notification-container" Name="NotificationContainer" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> <StackPanel Classes="notification-container" Name="NotificationContainer" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
</Panel> </Panel>

View File

@ -5,7 +5,9 @@
xmlns:dataModel="clr-namespace:Artemis.UI.Shared.DataModelVisualization.Shared;assembly=Artemis.UI.Shared" xmlns:dataModel="clr-namespace:Artemis.UI.Shared.DataModelVisualization.Shared;assembly=Artemis.UI.Shared"
xmlns:converters="clr-namespace:Artemis.UI.Shared.Converters;assembly=Artemis.UI.Shared" xmlns:converters="clr-namespace:Artemis.UI.Shared.Converters;assembly=Artemis.UI.Shared"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:local="clr-namespace:Artemis.UI.Screens.Debugger.DataModel"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="local:DataModelDebugViewModel"
x:Class="Artemis.UI.Screens.Debugger.DataModel.DataModelDebugView"> x:Class="Artemis.UI.Screens.Debugger.DataModel.DataModelDebugView">
<UserControl.Resources> <UserControl.Resources>
<converters:TypeToStringConverter x:Key="TypeToStringConverter" /> <converters:TypeToStringConverter x:Key="TypeToStringConverter" />
@ -21,14 +23,14 @@
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
<TreeView Grid.Row="1" ItemsSource="{Binding MainDataModel.Children}"> <TreeView Grid.Row="1" ItemsSource="{CompiledBinding MainDataModel.Children}">
<TreeView.Styles> <TreeView.Styles>
<Style Selector="TreeViewItem"> <Style Selector="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsVisualizationExpanded, Mode=TwoWay}" /> <Setter Property="IsExpanded" Value="{CompiledBinding IsVisualizationExpanded, Mode=TwoWay,DataType=dataModel:DataModelVisualizationViewModel}" />
<Setter Property="ContextFlyout"> <Setter Property="ContextFlyout">
<Setter.Value> <Setter.Value>
<MenuFlyout> <MenuFlyout>
<MenuItem Header="Copy path" Command="{Binding CopyPath}"> <MenuItem Header="Copy path" Command="{CompiledBinding CopyPath, DataType=dataModel:DataModelVisualizationViewModel}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="ContentCopy" /> <avalonia:MaterialIcon Kind="ContentCopy" />
</MenuItem.Icon> </MenuItem.Icon>
@ -39,32 +41,32 @@
</Style> </Style>
</TreeView.Styles> </TreeView.Styles>
<TreeView.DataTemplates> <TreeView.DataTemplates>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertiesViewModel}" ItemsSource="{Binding Children}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelPropertiesViewModel}" ItemsSource="{CompiledBinding Children}">
<Grid ColumnDefinitions="Auto,Auto,*"> <Grid ColumnDefinitions="Auto,Auto,*">
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock FontWeight="Bold">[</TextBlock> <TextBlock FontWeight="Bold">[</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" />
<TextBlock FontWeight="Bold">]</TextBlock> <TextBlock FontWeight="Bold">]</TextBlock>
</StackPanel> </StackPanel>
<TextBlock Grid.Column="1" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="1" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Grid.Column="2" <TextBlock Grid.Column="2"
Text="{Binding DisplayValue}" Text="{CompiledBinding DisplayValue}"
FontFamily="Consolas" FontFamily="Consolas"
HorizontalAlignment="Right" /> HorizontalAlignment="Right" />
</Grid> </Grid>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelListViewModel}" ItemsSource="{Binding ListChildren}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelListViewModel}" ItemsSource="{CompiledBinding ListChildren}">
<Grid ColumnDefinitions="Auto,Auto,*"> <Grid ColumnDefinitions="Auto,Auto,*">
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock FontWeight="Bold">[</TextBlock> <TextBlock FontWeight="Bold">[</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" />
<TextBlock FontWeight="Bold">]</TextBlock> <TextBlock FontWeight="Bold">]</TextBlock>
</StackPanel> </StackPanel>
<TextBlock Grid.Column="1" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="1" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Grid.Column="2" <TextBlock Grid.Column="2"
Text="{Binding CountDisplay, Mode=OneWay}" Text="{CompiledBinding CountDisplay, Mode=OneWay}"
FontFamily="Consolas" FontFamily="Consolas"
HorizontalAlignment="Right" /> HorizontalAlignment="Right" />
</Grid> </Grid>
@ -74,13 +76,13 @@
<!-- Value description --> <!-- Value description -->
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock FontWeight="Bold">[</TextBlock> <TextBlock FontWeight="Bold">[</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" />
<TextBlock FontWeight="Bold">]</TextBlock> <TextBlock FontWeight="Bold">]</TextBlock>
</StackPanel> </StackPanel>
<TextBlock Grid.Column="1" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="1" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<!-- Value display --> <!-- Value display -->
<ContentControl Grid.Column="2" Content="{Binding DisplayViewModel}" FontFamily="Consolas" /> <ContentControl Grid.Column="2" Content="{CompiledBinding DisplayViewModel}" FontFamily="Consolas" />
</Grid> </Grid>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelListItemViewModel}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelListItemViewModel}">
@ -88,29 +90,29 @@
<!-- Value description --> <!-- Value description -->
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock FontWeight="Bold">[</TextBlock> <TextBlock FontWeight="Bold">[</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding ListType, Converter={StaticResource TypeToStringConverter}}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding ListType, Converter={StaticResource TypeToStringConverter}}" />
<TextBlock FontWeight="Bold">]</TextBlock> <TextBlock FontWeight="Bold">]</TextBlock>
</StackPanel> </StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="1" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock>List item #</TextBlock> <TextBlock>List item #</TextBlock>
<TextBlock Text="{Binding Index, Mode=OneWay}" /> <TextBlock Text="{CompiledBinding Index, Mode=OneWay}" />
</StackPanel> </StackPanel>
<!-- Value display --> <!-- Value display -->
<ContentControl Grid.Column="2" Content="{Binding DisplayViewModel}" FontFamily="Consolas" /> <ContentControl Grid.Column="2" Content="{CompiledBinding DisplayViewModel}" FontFamily="Consolas" />
</Grid> </Grid>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="{x:Type dataModel:DataModelEventViewModel}" ItemsSource="{Binding Children}"> <TreeDataTemplate DataType="{x:Type dataModel:DataModelEventViewModel}" ItemsSource="{CompiledBinding Children}">
<Grid ColumnDefinitions="Auto,Auto,*"> <Grid ColumnDefinitions="Auto,Auto,*">
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0"> <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0 0 5 0">
<TextBlock FontWeight="Bold">[</TextBlock> <TextBlock FontWeight="Bold">[</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding DisplayValueType, Converter={StaticResource TypeToStringConverter}, Mode=OneWay}" />
<TextBlock FontWeight="Bold">]</TextBlock> <TextBlock FontWeight="Bold">]</TextBlock>
</StackPanel> </StackPanel>
<TextBlock Grid.Column="1" Text="{Binding PropertyDescription.Name}" ToolTip.Tip="{Binding PropertyDescription.Description}" /> <TextBlock Grid.Column="1" Text="{CompiledBinding PropertyDescription.Name}" ToolTip.Tip="{CompiledBinding PropertyDescription.Description}" />
<TextBlock Grid.Column="2" <TextBlock Grid.Column="2"
Text="{Binding CountDisplay, Mode=OneWay}" Text="{CompiledBinding Path=CountDisplay, DataType=dataModel:DataModelListViewModel ,Mode=OneWay}"
FontFamily="Consolas" FontFamily="Consolas"
HorizontalAlignment="Right" /> HorizontalAlignment="Right" />
</Grid> </Grid>

View File

@ -4,15 +4,17 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared" xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:vm="clr-namespace:Artemis.UI.Screens.Debugger.Performance"
x:DataType="vm:PerformanceDebugPluginViewModel"
x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugPluginView"> x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugPluginView">
<Border Classes="card-condensed" Margin="0 5"> <Border Classes="card-condensed" Margin="0 5">
<StackPanel> <StackPanel>
<Grid ColumnDefinitions="40,*"> <Grid ColumnDefinitions="40,*">
<shared:ArtemisIcon Grid.Column="0" Icon="{Binding Plugin.Info.ResolvedIcon}" Width="24" Height="24" /> <shared:ArtemisIcon Grid.Column="0" Icon="{CompiledBinding Plugin.Info.ResolvedIcon}" Width="24" Height="24" />
<TextBlock Grid.Column="1" VerticalAlignment="Center" Classes="h5" Text="{Binding Plugin.Info.Name}" /> <TextBlock Grid.Column="1" VerticalAlignment="Center" Classes="h5" Text="{CompiledBinding Plugin.Info.Name}" />
</Grid> </Grid>
<ItemsControl ItemsSource="{Binding Profilers}" /> <ItemsControl ItemsSource="{CompiledBinding Profilers}" />
</StackPanel> </StackPanel>
</Border> </Border>
</UserControl> </UserControl>

View File

@ -4,11 +4,12 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Artemis.UI.Screens.Debugger.Performance" xmlns:local="clr-namespace:Artemis.UI.Screens.Debugger.Performance"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="local:PerformanceDebugProfilerViewModel"
x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugProfilerView"> x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugProfilerView">
<StackPanel> <StackPanel>
<TextBlock Classes="subtitle" Text="{Binding Profiler.Name}" Margin="10 10 0 0" /> <TextBlock Classes="subtitle" Text="{CompiledBinding Profiler.Name}" Margin="10 10 0 0" />
<DataGrid ItemsSource="{Binding Measurements}" <DataGrid ItemsSource="{CompiledBinding Measurements}"
CanUserSortColumns="True" CanUserSortColumns="True"
IsReadOnly="True" IsReadOnly="True"
AutoGenerateColumns="False" AutoGenerateColumns="False"
@ -16,12 +17,12 @@
CanUserResizeColumns="False" CanUserResizeColumns="False"
Margin="10 5 10 10"> Margin="10 5 10 10">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Measurement.Identifier}" Header="Identifier" /> <DataGridTextColumn Binding="{CompiledBinding Measurement.Identifier}" Header="Identifier" />
<DataGridTextColumn Binding="{Binding Last}" Header="Last" /> <DataGridTextColumn Binding="{CompiledBinding Last}" Header="Last" />
<DataGridTextColumn Binding="{Binding Min}" Header="Min" /> <DataGridTextColumn Binding="{CompiledBinding Min}" Header="Min" />
<DataGridTextColumn Binding="{Binding Max}" Header="Max" /> <DataGridTextColumn Binding="{CompiledBinding Max}" Header="Max" />
<DataGridTextColumn Binding="{Binding Average}" Header="Average" /> <DataGridTextColumn Binding="{CompiledBinding Average}" Header="Average" />
<DataGridTextColumn Binding="{Binding Percentile}" Header="95th percentile" /> <DataGridTextColumn Binding="{CompiledBinding Percentile}" Header="95th percentile" />
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</StackPanel> </StackPanel>

View File

@ -3,7 +3,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:debugger="clr-namespace:Artemis.UI.Screens.Debugger.Performance;assembly=Artemis.UI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="debugger:PerformanceDebugViewModel"
x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugView"> x:Class="Artemis.UI.Screens.Debugger.Performance.PerformanceDebugView">
<Grid RowDefinitions="Auto,Auto,*"> <Grid RowDefinitions="Auto,Auto,*">
<StackPanel Grid.Row="0"> <StackPanel Grid.Row="0">
@ -23,18 +25,18 @@
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="10 0"> <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="10 0">
<TextBlock Text="FPS: " /> <TextBlock Text="FPS: " />
<TextBlock FontWeight="Bold" Text="{Binding CurrentFps}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding CurrentFps}" />
<TextBlock Text=" at " /> <TextBlock Text=" at " />
<TextBlock Text="{Binding RenderWidth}" /> <TextBlock Text="{CompiledBinding RenderWidth}" />
<TextBlock Text="x" /> <TextBlock Text="x" />
<TextBlock Text="{Binding RenderHeight}" /> <TextBlock Text="{CompiledBinding RenderHeight}" />
<TextBlock Text=" - Renderer: " /> <TextBlock Text=" - Renderer: " />
<TextBlock Text="{Binding Renderer}" /> <TextBlock Text="{CompiledBinding Renderer}" />
</StackPanel> </StackPanel>
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto"> <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0" /> <ItemsControl ItemsSource="{CompiledBinding Items}" Margin="0 0 10 0" />
</ScrollViewer> </ScrollViewer>
</Grid> </Grid>

View File

@ -2,7 +2,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Artemis.UI.Screens.Debugger.Render"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="local:RenderDebugViewModel"
x:Class="Artemis.UI.Screens.Debugger.Render.RenderDebugView"> x:Class="Artemis.UI.Screens.Debugger.Render.RenderDebugView">
<StackPanel> <StackPanel>
<TextBlock Classes="h3">Render</TextBlock> <TextBlock Classes="h3">Render</TextBlock>
@ -15,17 +17,17 @@
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Text="FPS: " /> <TextBlock Text="FPS: " />
<TextBlock FontWeight="Bold" Text="{Binding CurrentFps}" /> <TextBlock FontWeight="Bold" Text="{CompiledBinding CurrentFps}" />
<TextBlock Text=" at " /> <TextBlock Text=" at " />
<TextBlock Text="{Binding RenderWidth}" /> <TextBlock Text="{CompiledBinding RenderWidth}" />
<TextBlock Text="x" /> <TextBlock Text="x" />
<TextBlock Text="{Binding RenderHeight}" /> <TextBlock Text="{CompiledBinding RenderHeight}" />
<TextBlock Text=" - Renderer: " /> <TextBlock Text=" - Renderer: " />
<TextBlock Text="{Binding Renderer}" /> <TextBlock Text="{CompiledBinding Renderer}" />
</StackPanel> </StackPanel>
<Border Classes="card" Padding="10"> <Border Classes="card" Padding="10">
<Image Name="Visualization" Source="{Binding CurrentFrame}"> <Image Name="Visualization" Source="{CompiledBinding CurrentFrame}">
<Image.Transitions> <Image.Transitions>
<Transitions> <Transitions>
<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.2" Easing="CubicEaseOut" /> <TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.2" Easing="CubicEaseOut" />

View File

@ -4,6 +4,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="1050" mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="1050"
xmlns:devicedetectinput="clr-namespace:Artemis.UI.Screens.Device;assembly=Artemis.UI"
x:DataType="devicedetectinput:DeviceDetectInputViewModel"
x:Class="Artemis.UI.Screens.Device.DeviceDetectInputView"> x:Class="Artemis.UI.Screens.Device.DeviceDetectInputView">
<StackPanel Width="500"> <StackPanel Width="500">
<!-- TODO: Replace with Text.Run stuff once available --> <!-- TODO: Replace with Text.Run stuff once available -->
@ -15,12 +17,12 @@
Width="300" Width="300"
Height="300" Height="300"
HorizontalAlignment="Center" HorizontalAlignment="Center"
IsVisible="{Binding !IsMouse}" /> IsVisible="{CompiledBinding !IsMouse}" />
<avalonia:MaterialIcon Kind="Mouse" <avalonia:MaterialIcon Kind="Mouse"
Width="300" Width="300"
Height="300" Height="300"
HorizontalAlignment="Center" HorizontalAlignment="Center"
IsVisible="{Binding IsMouse}" /> IsVisible="{CompiledBinding IsMouse}" />
<TextBlock TextWrapping="Wrap" Margin="0 10"> <TextBlock TextWrapping="Wrap" Margin="0 10">
This will teach Artemis to associate button/key presses with this specific device. This will teach Artemis to associate button/key presses with this specific device.

View File

@ -5,7 +5,9 @@
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared" xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
xmlns:local="clr-namespace:Artemis.UI.Screens.Device"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="local:DeviceSettingsViewModel"
x:Class="Artemis.UI.Screens.Device.DeviceSettingsView"> x:Class="Artemis.UI.Screens.Device.DeviceSettingsView">
<Border Classes="card" Padding="0" Width="200" ClipToBounds="True" Margin="5"> <Border Classes="card" Padding="0" Width="200" ClipToBounds="True" Margin="5">
<Grid RowDefinitions="140,*,Auto"> <Grid RowDefinitions="140,*,Auto">
@ -14,7 +16,7 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
Margin="5" Margin="5"
ShowColors="False" ShowColors="False"
Device="{Binding Device}" Device="{CompiledBinding Device}"
Grid.Row="0" /> Grid.Row="0" />
<Button Grid.Row="0" <Button Grid.Row="0"
Classes="icon-button icon-button-large" Classes="icon-button icon-button-large"
@ -22,29 +24,29 @@
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="5" Margin="5"
ToolTip.Tip="Identify" ToolTip.Tip="Identify"
Command="{Binding IdentifyDevice}"> Command="{CompiledBinding IdentifyDevice}">
<avalonia:MaterialIcon Kind="AlarmLight" /> <avalonia:MaterialIcon Kind="AlarmLight" />
</Button> </Button>
<StackPanel Grid.Row="1" Margin="8 24 8 0"> <StackPanel Grid.Row="1" Margin="8 24 8 0">
<TextBlock Text="{Binding Device.RgbDevice.DeviceInfo.Model}" /> <TextBlock Text="{CompiledBinding Device.RgbDevice.DeviceInfo.Model}" />
<StackPanel> <StackPanel>
<TextBlock TextWrapping="Wrap" Classes="subtitle" Text="{Binding Device.RgbDevice.DeviceInfo.Manufacturer, Mode=OneWay}" /> <TextBlock TextWrapping="Wrap" Classes="subtitle" Text="{CompiledBinding Device.RgbDevice.DeviceInfo.Manufacturer, Mode=OneWay}" />
<TextBlock TextWrapping="Wrap" Classes="subtitle" Text="{Binding Device.DeviceType, Mode=OneWay}" /> <TextBlock TextWrapping="Wrap" Classes="subtitle" Text="{CompiledBinding Device.DeviceType, Mode=OneWay}" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Grid Grid.Row="2" Margin="10" ColumnDefinitions="25,*"> <Grid Grid.Row="2" Margin="10" ColumnDefinitions="25,*">
<CheckBox IsChecked="{Binding IsDeviceEnabled}" /> <CheckBox IsChecked="{CompiledBinding IsDeviceEnabled}" />
<SplitButton Grid.Column="1" Content="Properties" Command="{Binding ViewProperties}" HorizontalAlignment="Right"> <SplitButton Grid.Column="1" Content="Properties" Command="{CompiledBinding ViewProperties}" HorizontalAlignment="Right">
<SplitButton.Flyout> <SplitButton.Flyout>
<MenuFlyout Placement="Bottom"> <MenuFlyout Placement="Bottom">
<MenuItem Header="Open plugin directory" Command="{Binding OpenPluginDirectory}"> <MenuItem Header="Open plugin directory" Command="{CompiledBinding OpenPluginDirectory}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="FolderOpen" /> <avalonia:MaterialIcon Kind="FolderOpen" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Identity input" Command="{Binding DetectInput}"> <MenuItem Header="Identity input" Command="{CompiledBinding DetectInput}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="GestureDoubleTap" /> <avalonia:MaterialIcon Kind="GestureDoubleTap" />
</MenuItem.Icon> </MenuItem.Icon>

View File

@ -18,17 +18,17 @@
<DataGridTemplateColumn CanUserSort="False" CanUserReorder="False" Header="Highlight"> <DataGridTemplateColumn CanUserSort="False" CanUserReorder="False" Header="Highlight">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" /> <CheckBox IsChecked="{CompiledBinding IsSelected, Mode=TwoWay}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.Id, Converter={StaticResource LedIdToStringConverter}, Mode=OneWay}" Header="LED ID" Width="Auto" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.Id, Converter={StaticResource LedIdToStringConverter}, Mode=OneWay}" Header="LED ID" Width="Auto" />
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.Color, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Color (ARGB)" Width="Auto" CanUserSort="False" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.Color, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Color (ARGB)" Width="Auto" CanUserSort="False" />
<DataGridTextColumn Binding="{Binding ArtemisLed.Layout.Image, Converter={StaticResource UriToFileNameConverter}, Mode=OneWay}" Header="Image file" CanUserSort="False" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.Layout.Image, Converter={StaticResource UriToFileNameConverter}, Mode=OneWay}" Header="Image file" CanUserSort="False" />
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.Shape}" Header="Shape" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.Shape}" Header="Shape" />
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.Location, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Location" Width="Auto" CanUserSort="False" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.Location, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Location" Width="Auto" CanUserSort="False" />
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.Size, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Size" Width="Auto" CanUserSort="False" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.Size, Converter={StaticResource ToStringConverter}, Mode=OneWay}" Header="Size" Width="Auto" CanUserSort="False" />
<DataGridTextColumn Binding="{Binding ArtemisLed.RgbLed.CustomData}" Header="LED data" Width="Auto" /> <DataGridTextColumn Binding="{CompiledBinding ArtemisLed.RgbLed.CustomData}" Header="LED data" Width="Auto" />
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</UserControl> </UserControl>

View File

@ -18,7 +18,7 @@
<AutoCompleteBox HorizontalAlignment="Stretch" <AutoCompleteBox HorizontalAlignment="Stretch"
ItemsSource="{CompiledBinding Regions}" ItemsSource="{CompiledBinding Regions}"
SelectedItem="{CompiledBinding SelectedRegion}" SelectedItem="{CompiledBinding SelectedRegion}"
ValueMemberBinding="{Binding EnglishName}" ValueMemberBinding="{CompiledBinding EnglishName, DataType=globalization:RegionInfo}"
Watermark="Enter keyboard country name" Watermark="Enter keyboard country name"
FilterMode="Custom" FilterMode="Custom"
MaxDropDownHeight="200" MaxDropDownHeight="200"

View File

@ -157,7 +157,7 @@
The device layout is used to determine the position of LEDs and to create the visual representation of the device you see on the left side of this window. The device layout is used to determine the position of LEDs and to create the visual representation of the device you see on the left side of this window.
</TextBlock> </TextBlock>
<CheckBox Margin="0 0 0 5" IsChecked="{Binding Device.DisableDefaultLayout}"> <CheckBox Margin="0 0 0 5" IsChecked="{CompiledBinding Device.DisableDefaultLayout}">
<CheckBox.Content> <CheckBox.Content>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock>Don't load default layout</TextBlock> <TextBlock>Don't load default layout</TextBlock>
@ -169,13 +169,13 @@
</CheckBox> </CheckBox>
<Grid> <Grid>
<TextBox Text="{Binding Device.CustomLayoutPath}" <TextBox Text="{CompiledBinding Device.CustomLayoutPath}"
Watermark="Custom layout path" Watermark="Custom layout path"
UseFloatingWatermark="True" UseFloatingWatermark="True"
IsReadOnly="True" IsReadOnly="True"
PointerReleased="InputElement_OnPointerReleased" PointerReleased="InputElement_OnPointerReleased"
Padding="10 5 36 6" /> Padding="10 5 36 6" />
<Button Classes="AppBarButton" HorizontalAlignment="Right" Command="{Binding ClearCustomLayout}" Padding="6" Margin="5 0"> <Button Classes="AppBarButton" HorizontalAlignment="Right" Command="{CompiledBinding ClearCustomLayout}" Padding="6" Margin="5 0">
<avalonia:MaterialIcon Kind="CloseCircle" /> <avalonia:MaterialIcon Kind="CloseCircle" />
</Button> </Button>
</Grid> </Grid>
@ -189,14 +189,14 @@
<Grid Grid.Row="1" ColumnDefinitions="Auto,*"> <Grid Grid.Row="1" ColumnDefinitions="Auto,*">
<Button Grid.Column="0" <Button Grid.Column="0"
IsVisible="{CompiledBinding RequiresManualSetup}" IsVisible="{CompiledBinding RequiresManualSetup}"
Command="{Binding RestartSetup}" Command="{CompiledBinding RestartSetup}"
ToolTip.Tip="Restart device setup, allowing you to select a new physical and logical layout"> ToolTip.Tip="Restart device setup, allowing you to select a new physical and logical layout">
Restart setup Restart setup
</Button> </Button>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
<Button IsCancel="True" Command="{Binding Reset}" Margin="0 0 5 0">Reset</Button> <Button IsCancel="True" Command="{CompiledBinding Reset}" Margin="0 0 5 0">Reset</Button>
<Button Classes="accent" IsDefault="True" Command="{Binding Apply}">Apply</Button> <Button Classes="accent" IsDefault="True" Command="{CompiledBinding Apply}">Apply</Button>
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>

View File

@ -48,8 +48,8 @@
AutoGenerateColumns="False" AutoGenerateColumns="False"
Margin="10"> Margin="10">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Binding="{Binding [0].RgbLed.Id}" Header="Original LED ID" Width="*" /> <DataGridTextColumn Binding="{CompiledBinding Path=Original.RgbLed.Id}" Header="Original LED ID" Width="*" />
<DataGridTextColumn Binding="{Binding [1].RgbLed.Id}" Header="Remapped LED ID" Width="*" /> <DataGridTextColumn Binding="{CompiledBinding Path=Replacement.RgbLed.Id}" Header="Remapped LED ID" Width="*" />
<DataGridTemplateColumn Width="Auto" IsReadOnly="True"> <DataGridTemplateColumn Width="Auto" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>

View File

@ -1,4 +1,4 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Linq; using System.Linq;
using System.Reactive.Disposables; using System.Reactive.Disposables;
@ -31,8 +31,8 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
Device = device; Device = device;
DisplayName = "Input Mappings"; DisplayName = "Input Mappings";
InputMappings = new ObservableCollection<(ArtemisLed, ArtemisLed)>(); InputMappings = new ObservableCollection<ArtemisInputMapping>();
DeleteMapping = ReactiveCommand.Create<(ArtemisLed, ArtemisLed)>(ExecuteDeleteMapping); DeleteMapping = ReactiveCommand.Create<ArtemisInputMapping>(ExecuteDeleteMapping);
this.WhenActivated(d => this.WhenActivated(d =>
{ {
@ -48,7 +48,7 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
}); });
} }
public ReactiveCommand<(ArtemisLed, ArtemisLed), Unit> DeleteMapping { get; } public ReactiveCommand<ArtemisInputMapping, Unit> DeleteMapping { get; }
public ArtemisDevice Device { get; } public ArtemisDevice Device { get; }
@ -58,11 +58,11 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
set => RaiseAndSetIfChanged(ref _selectedLed, value); set => RaiseAndSetIfChanged(ref _selectedLed, value);
} }
public ObservableCollection<(ArtemisLed, ArtemisLed)> InputMappings { get; } public ObservableCollection<ArtemisInputMapping> InputMappings { get; }
private void ExecuteDeleteMapping((ArtemisLed, ArtemisLed) inputMapping) private void ExecuteDeleteMapping(ArtemisInputMapping inputMapping)
{ {
Device.InputMappings.Remove(inputMapping.Item1); Device.InputMappings.Remove(inputMapping.Original);
UpdateInputMappings(); UpdateInputMappings();
} }
@ -92,7 +92,7 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
if (InputMappings.Any()) if (InputMappings.Any())
InputMappings.Clear(); InputMappings.Clear();
foreach ((ArtemisLed, ArtemisLed) tuple in Device.InputMappings.Select(m => (m.Key, m.Value))) foreach (ArtemisInputMapping tuple in Device.InputMappings.Select(m => new ArtemisInputMapping(m.Key, m.Value)))
InputMappings.Add(tuple); InputMappings.Add(tuple);
} }
@ -101,3 +101,28 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
SelectedLed = _selectedLeds.FirstOrDefault(); SelectedLed = _selectedLeds.FirstOrDefault();
} }
} }
/// <summary>
/// Represents a pair of LEDs, the original and the replacement
/// </summary>
public class ArtemisInputMapping
{
/// <summary>
/// Creates a new instance of the <see cref="ArtemisInputMapping" /> class
/// </summary>
public ArtemisInputMapping(ArtemisLed original, ArtemisLed replacement)
{
Original = original;
Replacement = replacement;
}
/// <summary>
/// The original LED
/// </summary>
public ArtemisLed Original { get; set; }
/// <summary>
/// The replacement LED
/// </summary>
public ArtemisLed Replacement { get; set; }
}

View File

@ -38,7 +38,7 @@
IsVisible="{CompiledBinding LoadException, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{CompiledBinding LoadException, Converter={x:Static ObjectConverters.IsNotNull}}"
Foreground="#E74C4C" Foreground="#E74C4C"
ToolTip.Tip="An exception occurred while enabling this feature, click to view" ToolTip.Tip="An exception occurred while enabling this feature, click to view"
Command="{Binding ViewLoadException}"> Command="{CompiledBinding ViewLoadException}">
<avalonia:MaterialIcon Kind="AlertCircle" /> <avalonia:MaterialIcon Kind="AlertCircle" />
</Button> </Button>

View File

@ -13,7 +13,7 @@
Height="800" Height="800"
WindowStartupLocation="CenterOwner"> WindowStartupLocation="CenterOwner">
<Panel> <Panel>
<ContentControl Content="{Binding ConfigurationViewModel}"></ContentControl> <ContentControl Content="{CompiledBinding ConfigurationViewModel}"></ContentControl>
<StackPanel Classes="notification-container" Name="NotificationContainer" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> <StackPanel Classes="notification-container" Name="NotificationContainer" VerticalAlignment="Bottom" HorizontalAlignment="Right" />
</Panel> </Panel>
</windowing:AppWindow> </windowing:AppWindow>

View File

@ -46,7 +46,7 @@
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<Border Classes="card-condensed"> <Border Classes="card-condensed">
<ContentControl Content="{Binding}"></ContentControl> <ContentControl Content="{CompiledBinding}"></ContentControl>
</Border> </Border>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
@ -67,22 +67,22 @@
</Border> </Border>
<Grid Grid.Row="2" ColumnDefinitions="*,Auto"> <Grid Grid.Row="2" ColumnDefinitions="*,Auto">
<Button Grid.Row="0" Grid.Column="0" Command="{Binding AutoDetermineHints}">Auto-determine hints</Button> <Button Grid.Row="0" Grid.Column="0" Command="{CompiledBinding AutoDetermineHints}">Auto-determine hints</Button>
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Spacing="5"> <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Spacing="5">
<DropDownButton> <DropDownButton>
<DropDownButton.Flyout> <DropDownButton.Flyout>
<MenuFlyout Placement="Top"> <MenuFlyout Placement="Top">
<MenuItem Header="Category hint" Command="{Binding AddCategoryHint}"> <MenuItem Header="Category hint" Command="{CompiledBinding AddCategoryHint}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Desk" /> <avalonia:MaterialIcon Kind="Desk" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Device type hint" Command="{Binding AddDeviceHint}"> <MenuItem Header="Device type hint" Command="{CompiledBinding AddDeviceHint}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Devices" /> <avalonia:MaterialIcon Kind="Devices" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Keyboard-section hint" Command="{Binding AddKeyboardSectionHint}"> <MenuItem Header="Keyboard-section hint" Command="{CompiledBinding AddKeyboardSectionHint}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Keyboard" /> <avalonia:MaterialIcon Kind="Keyboard" />
</MenuItem.Icon> </MenuItem.Icon>
@ -91,7 +91,7 @@
</DropDownButton.Flyout> </DropDownButton.Flyout>
Add hint Add hint
</DropDownButton> </DropDownButton>
<Button Command="{Binding Finish}">Close</Button> <Button Command="{CompiledBinding Finish}">Close</Button>
</StackPanel> </StackPanel>
</Grid> </Grid>

View File

@ -20,11 +20,11 @@
<avalonia:MaterialIcon Grid.Column="1" <avalonia:MaterialIcon Grid.Column="1"
Kind="Folder" Kind="Folder"
Margin="0 0 5 0" Margin="0 0 5 0"
IsVisible="{Binding !IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" /> IsVisible="{CompiledBinding !IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" />
<avalonia:MaterialIcon Grid.Column="1" <avalonia:MaterialIcon Grid.Column="1"
Kind="FolderOpen" Kind="FolderOpen"
Margin="0 0 5 0" Margin="0 0 5 0"
IsVisible="{Binding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" /> IsVisible="{CompiledBinding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}}" />
<TextBlock Grid.Column="2" Text="{CompiledBinding Folder.Name}" VerticalAlignment="Center" /> <TextBlock Grid.Column="2" Text="{CompiledBinding Folder.Name}" VerticalAlignment="Center" />

View File

@ -54,8 +54,8 @@
<LinearGradientBrush StartPoint="0,0" EndPoint="0,28"> <LinearGradientBrush StartPoint="0,0" EndPoint="0,28">
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" />
</LinearGradientBrush> </LinearGradientBrush>
</Setter.Value> </Setter.Value>
</Setter> </Setter>
@ -66,10 +66,10 @@
<LinearGradientBrush StartPoint="0,0" EndPoint="0,28"> <LinearGradientBrush StartPoint="0,0" EndPoint="0,28">
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" />
</LinearGradientBrush> </LinearGradientBrush>
@ -80,8 +80,8 @@
<Setter Property="Background"> <Setter Property="Background">
<Setter.Value> <Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,28"> <LinearGradientBrush StartPoint="0,0" EndPoint="0,28">
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" />
</LinearGradientBrush> </LinearGradientBrush>
@ -96,12 +96,12 @@
SelectionChanged="ProfileTreeView_OnSelectionChanged"> SelectionChanged="ProfileTreeView_OnSelectionChanged">
<TreeView.Styles> <TreeView.Styles>
<Style Selector="TreeViewItem"> <Style Selector="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> <Setter Property="IsExpanded" Value="{CompiledBinding IsExpanded, Mode=TwoWay}" />
</Style> </Style>
</TreeView.Styles> </TreeView.Styles>
<TreeView.ItemTemplate> <TreeView.ItemTemplate>
<TreeDataTemplate ItemsSource="{Binding Children}"> <TreeDataTemplate ItemsSource="{CompiledBinding Children}">
<ContentControl Content="{Binding}" x:DataType="profileTree:TreeItemViewModel" Background="Transparent"> <ContentControl Content="{CompiledBinding}" x:DataType="profileTree:TreeItemViewModel" Background="Transparent">
<ContentControl.ContextFlyout> <ContentControl.ContextFlyout>
<MenuFlyout IsOpen="{CompiledBinding IsFlyoutOpen, Mode=OneWayToSource}"> <MenuFlyout IsOpen="{CompiledBinding IsFlyoutOpen, Mode=OneWayToSource}">
<MenuItem Header="Add new folder" Command="{CompiledBinding AddFolder}"> <MenuItem Header="Add new folder" Command="{CompiledBinding AddFolder}">

View File

@ -26,7 +26,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Margin="10" Margin="10"
Command="{Binding OpenEditor}"> Command="{CompiledBinding OpenEditor}">
<avalonia:MaterialIcon Kind="OpenInNew" /> <avalonia:MaterialIcon Kind="OpenInNew" />
</Button> </Button>
</Grid> </Grid>

View File

@ -22,7 +22,7 @@
<avalonia:MaterialIcon Kind="Edit" /> <avalonia:MaterialIcon Kind="Edit" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Remove segment" Command="{Binding RemoveSegment}"> <MenuItem Header="Remove segment" Command="{CompiledBinding RemoveSegment}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Remove" /> <avalonia:MaterialIcon Kind="Remove" />
</MenuItem.Icon> </MenuItem.Icon>
@ -38,7 +38,7 @@
Name="AddMainSegment" Name="AddMainSegment"
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
ToolTip.Tip="Add main segment" ToolTip.Tip="Add main segment"
Command="{Binding AddMainSegment}" Command="{CompiledBinding AddMainSegment}"
IsVisible="{CompiledBinding ShowAddMain}"> IsVisible="{CompiledBinding ShowAddMain}">
<avalonia:MaterialIcon Kind="PlusCircle" /> <avalonia:MaterialIcon Kind="PlusCircle" />
</Button> </Button>
@ -52,7 +52,7 @@
<Button Name="SegmentClose" <Button Name="SegmentClose"
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
ToolTip.Tip="Remove this segment" ToolTip.Tip="Remove this segment"
Command="{Binding RemoveSegment}"> Command="{CompiledBinding RemoveSegment}">
<avalonia:MaterialIcon Kind="CloseCircle" /> <avalonia:MaterialIcon Kind="CloseCircle" />
</Button> </Button>
</StackPanel> </StackPanel>

View File

@ -22,7 +22,7 @@
<avalonia:MaterialIcon Kind="Edit" /> <avalonia:MaterialIcon Kind="Edit" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Remove segment" Command="{Binding RemoveSegment}"> <MenuItem Header="Remove segment" Command="{CompiledBinding RemoveSegment}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Remove" /> <avalonia:MaterialIcon Kind="Remove" />
</MenuItem.Icon> </MenuItem.Icon>
@ -39,7 +39,7 @@
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
VerticalAlignment="Center" VerticalAlignment="Center"
ToolTip.Tip="Add a start segment" ToolTip.Tip="Add a start segment"
Command="{Binding AddStartSegment}" Command="{CompiledBinding AddStartSegment}"
IsVisible="{CompiledBinding ShowAddStart}"> IsVisible="{CompiledBinding ShowAddStart}">
<avalonia:MaterialIcon Kind="PlusCircle" /> <avalonia:MaterialIcon Kind="PlusCircle" />
</Button> </Button>
@ -56,7 +56,7 @@
<Button Name="SegmentClose" <Button Name="SegmentClose"
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
ToolTip.Tip="Remove this segment" ToolTip.Tip="Remove this segment"
Command="{Binding RemoveSegment}"> Command="{CompiledBinding RemoveSegment}">
<avalonia:MaterialIcon Kind="CloseCircle" /> <avalonia:MaterialIcon Kind="CloseCircle" />
</Button> </Button>
</StackPanel> </StackPanel>
@ -66,7 +66,7 @@
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
VerticalAlignment="Center" VerticalAlignment="Center"
ToolTip.Tip="Add an end segment" ToolTip.Tip="Add an end segment"
Command="{Binding AddEndSegment}" Command="{CompiledBinding AddEndSegment}"
IsVisible="{CompiledBinding ShowAddEnd}"> IsVisible="{CompiledBinding ShowAddEnd}">
<avalonia:MaterialIcon Kind="PlusCircle" /> <avalonia:MaterialIcon Kind="PlusCircle" />
</Button> </Button>

View File

@ -22,7 +22,7 @@
<avalonia:MaterialIcon Kind="Edit" /> <avalonia:MaterialIcon Kind="Edit" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Remove segment" Command="{Binding RemoveSegment}"> <MenuItem Header="Remove segment" Command="{CompiledBinding RemoveSegment}">
<MenuItem.Icon> <MenuItem.Icon>
<avalonia:MaterialIcon Kind="Remove" /> <avalonia:MaterialIcon Kind="Remove" />
</MenuItem.Icon> </MenuItem.Icon>
@ -39,7 +39,7 @@
<Button Name="SegmentClose" <Button Name="SegmentClose"
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
ToolTip.Tip="Remove this segment" ToolTip.Tip="Remove this segment"
Command="{Binding RemoveSegment}"> Command="{CompiledBinding RemoveSegment}">
<avalonia:MaterialIcon Kind="CloseCircle" /> <avalonia:MaterialIcon Kind="CloseCircle" />
</Button> </Button>
</StackPanel> </StackPanel>
@ -48,7 +48,7 @@
Name="AddMainSegment" Name="AddMainSegment"
Classes="AppBarButton icon-button icon-button-small" Classes="AppBarButton icon-button icon-button-small"
ToolTip.Tip="Add main segment" ToolTip.Tip="Add main segment"
Command="{Binding AddMainSegment}" Command="{CompiledBinding AddMainSegment}"
IsVisible="{CompiledBinding ShowAddMain}"> IsVisible="{CompiledBinding ShowAddMain}">
<avalonia:MaterialIcon Kind="PlusCircle" /> <avalonia:MaterialIcon Kind="PlusCircle" />
</Button> </Button>

View File

@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:properties="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties" xmlns:properties="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties"
xmlns:timeline="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties.Timeline" xmlns:timeline="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties.Timeline"
xmlns:system="clr-namespace:System;assembly=netstandard"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Timeline.TimelineGroupView" x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Timeline.TimelineGroupView"
x:DataType="timeline:TimelineGroupViewModel"> x:DataType="timeline:TimelineGroupViewModel">
@ -19,8 +20,8 @@
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.Styles> <ItemsControl.Styles>
<Style Selector="ContentPresenter"> <Style Selector="ContentPresenter" x:DataType="system:Double">
<Setter Property="Canvas.Left" Value="{Binding}" /> <Setter Property="Canvas.Left" Value="{CompiledBinding}" />
<Setter Property="Canvas.Top" Value="9" /> <Setter Property="Canvas.Top" Value="9" />
</Style> </Style>
</ItemsControl.Styles> </ItemsControl.Styles>

View File

@ -10,7 +10,7 @@
x:DataType="timeline:TimelineViewModel"> x:DataType="timeline:TimelineViewModel">
<UserControl.Resources> <UserControl.Resources>
</UserControl.Resources> </UserControl.Resources>
<Grid Background="Transparent" PointerReleased="InputElement_OnPointerReleased" Focusable="True" MinWidth="{Binding MinWidth}"> <Grid Background="Transparent" PointerReleased="InputElement_OnPointerReleased" Focusable="True" MinWidth="{CompiledBinding MinWidth}">
<Grid.KeyBindings> <Grid.KeyBindings>
<KeyBinding Command="{CompiledBinding CopySelectedKeyframes}" Gesture="Ctrl+C" /> <KeyBinding Command="{CompiledBinding CopySelectedKeyframes}" Gesture="Ctrl+C" />
<KeyBinding Command="{CompiledBinding DuplicateSelectedKeyframes}" Gesture="Ctrl+D" /> <KeyBinding Command="{CompiledBinding DuplicateSelectedKeyframes}" Gesture="Ctrl+D" />

View File

@ -25,7 +25,7 @@
BorderBrush="{DynamicResource ButtonBorderBrush}" BorderBrush="{DynamicResource ButtonBorderBrush}"
BorderThickness="0,0,0,1" BorderThickness="0,0,0,1"
Height="29"> Height="29">
<Grid Margin="{Binding Converter={StaticResource PropertyTreeMarginConverter}}" ColumnDefinitions="19,*"> <Grid Margin="{CompiledBinding Converter={StaticResource PropertyTreeMarginConverter}}" ColumnDefinitions="19,*">
<avalonia:MaterialIcon Classes.chevron-collapsed="{CompiledBinding !PropertyGroupViewModel.IsExpanded}" <avalonia:MaterialIcon Classes.chevron-collapsed="{CompiledBinding !PropertyGroupViewModel.IsExpanded}"
IsVisible="{CompiledBinding PropertyGroupViewModel.HasChildren}" IsVisible="{CompiledBinding PropertyGroupViewModel.HasChildren}"

View File

@ -15,7 +15,7 @@
BorderBrush="{DynamicResource ButtonBorderBrush}" BorderBrush="{DynamicResource ButtonBorderBrush}"
BorderThickness="0,0,0,1" BorderThickness="0,0,0,1"
Height="29"> Height="29">
<Grid Margin="{Binding Converter={StaticResource PropertyTreeMarginConverter}}" ColumnDefinitions="Auto,*,Auto,Auto,Auto"> <Grid Margin="{CompiledBinding Converter={StaticResource PropertyTreeMarginConverter}}" ColumnDefinitions="Auto,*,Auto,Auto,Auto">
<ToggleButton Grid.Column="0" <ToggleButton Grid.Column="0"
Classes="icon-button" Classes="icon-button"
ToolTip.Tip="Toggle key-framing" ToolTip.Tip="Toggle key-framing"

View File

@ -3,16 +3,18 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia" xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia"
xmlns:local="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties.Windows"
x:DataType="local:BrushConfigurationWindowViewModel"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignWidth="800" d:DesignWidth="800"
d:DesignHeight="450" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Windows.BrushConfigurationWindowView" x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Windows.BrushConfigurationWindowView"
Icon="/Assets/Images/Logo/application.ico" Icon="/Assets/Images/Logo/application.ico"
Title="Artemis | Brush configuration" Title="Artemis | Brush configuration"
Width="{Binding Configuration.DialogWidth}" Width="{CompiledBinding Configuration.DialogWidth}"
Height="{Binding Configuration.DialogHeight}" Height="{CompiledBinding Configuration.DialogHeight}"
WindowStartupLocation="CenterOwner"> WindowStartupLocation="CenterOwner">
<Panel> <Panel>
<ContentControl Content="{Binding ConfigurationViewModel}" /> <ContentControl Content="{CompiledBinding ConfigurationViewModel}" />
</Panel> </Panel>
</windowing:AppWindow> </windowing:AppWindow>

View File

@ -3,16 +3,18 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia" xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia"
xmlns:local="clr-namespace:Artemis.UI.Screens.ProfileEditor.Properties.Windows"
x:DataType="local:EffectConfigurationWindowViewModel"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignWidth="800" d:DesignWidth="800"
d:DesignHeight="450" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Windows.EffectConfigurationWindowView" x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Windows.EffectConfigurationWindowView"
Icon="/Assets/Images/Logo/application.ico" Icon="/Assets/Images/Logo/application.ico"
Title="Artemis | Effect configuration" Title="Artemis | Effect configuration"
Width="{Binding Configuration.DialogWidth}" Width="{CompiledBinding Configuration.DialogWidth}"
Height="{Binding Configuration.DialogHeight}" Height="{CompiledBinding Configuration.DialogHeight}"
WindowStartupLocation="CenterOwner"> WindowStartupLocation="CenterOwner">
<Panel> <Panel>
<ContentControl Content="{Binding ConfigurationViewModel}" /> <ContentControl Content="{CompiledBinding ConfigurationViewModel}" />
</Panel> </Panel>
</windowing:AppWindow> </windowing:AppWindow>

View File

@ -5,6 +5,8 @@
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:core="clr-namespace:Artemis.Core;assembly=Artemis.Core" xmlns:core="clr-namespace:Artemis.Core;assembly=Artemis.Core"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="23" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="23"
xmlns:vm="clr-namespace:Artemis.UI.Screens.ProfileEditor.StatusBar;assembly=Artemis.UI"
x:DataType="vm:StatusBarViewModel"
x:Class="Artemis.UI.Screens.ProfileEditor.StatusBar.StatusBarView"> x:Class="Artemis.UI.Screens.ProfileEditor.StatusBar.StatusBarView">
<UserControl.Styles> <UserControl.Styles>
<Style Selector="Border.status-message-border"> <Style Selector="Border.status-message-border">
@ -24,21 +26,21 @@
</Style> </Style>
</UserControl.Styles> </UserControl.Styles>
<Grid ColumnDefinitions="Auto, Auto,*,*" Height="23" Margin="5 0"> <Grid ColumnDefinitions="Auto, Auto,*,*" Height="23" Margin="5 0">
<ContentControl Grid.Column="0" Content="{Binding ProfileElement}"> <ContentControl Grid.Column="0" Content="{CompiledBinding ProfileElement}">
<ContentControl.DataTemplates> <ContentControl.DataTemplates>
<DataTemplate DataType="core:Folder"> <DataTemplate DataType="core:Folder">
<avalonia:MaterialIcon Kind="Folder" Margin="0 0 5 0" /> <avalonia:MaterialIcon Kind="Folder" Margin="0 0 5 0" />
</DataTemplate> </DataTemplate>
<DataTemplate DataType="core:Layer"> <DataTemplate DataType="core:Layer">
<avalonia:MaterialIcon Kind="{Binding LayerBrush.Descriptor.Icon}" Margin="0 0 5 0" /> <avalonia:MaterialIcon Kind="{CompiledBinding LayerBrush.Descriptor.Icon}" Margin="0 0 5 0" />
</DataTemplate> </DataTemplate>
</ContentControl.DataTemplates> </ContentControl.DataTemplates>
</ContentControl> </ContentControl>
<TextBlock Grid.Column="1" Text="{Binding ProfileElement.Name, FallbackValue=Select a layer to get started}" VerticalAlignment="Center" /> <TextBlock Grid.Column="1" Text="{CompiledBinding ProfileElement.Name, FallbackValue=Select a layer to get started}" VerticalAlignment="Center" />
<Border Grid.Column="2" Classes="status-message-border" Classes.hidden="{Binding !ShowStatusMessage}"> <Border Grid.Column="2" Classes="status-message-border" Classes.hidden="{CompiledBinding !ShowStatusMessage}">
<TextBlock Margin="5 0 0 0" Text="{Binding StatusMessage}" /> <TextBlock Margin="5 0 0 0" Text="{CompiledBinding StatusMessage}" />
</Border> </Border>
<Slider Grid.Column="3" <Slider Grid.Column="3"
@ -46,7 +48,7 @@
Minimum="31" Minimum="31"
Maximum="350" Maximum="350"
Width="319" Width="319"
Value="{Binding PixelsPerSecond}" Value="{CompiledBinding PixelsPerSecond}"
HorizontalAlignment="Right" /> HorizontalAlignment="Right" />
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -6,12 +6,12 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools.SelectionAddToolView" ClipToBounds="False"> x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools.SelectionAddToolView" ClipToBounds="False">
<Grid> <Grid>
<shared:SelectionRectangle InputElement="{Binding $parent[ZoomBorder]}" <shared:SelectionRectangle InputElement="{CompiledBinding $parent[ZoomBorder]}"
BorderBrush="{DynamicResource SystemAccentColor}" BorderBrush="{DynamicResource SystemAccentColor}"
BorderRadius="8" BorderRadius="8"
BorderThickness="1" BorderThickness="1"
SelectionFinished="SelectionRectangle_OnSelectionFinished" SelectionFinished="SelectionRectangle_OnSelectionFinished"
ZoomRatio="{Binding $parent[ZoomBorder].ZoomX}"> ZoomRatio="{CompiledBinding $parent[ZoomBorder].ZoomX}">
<shared:SelectionRectangle.Background> <shared:SelectionRectangle.Background>
<SolidColorBrush Color="{DynamicResource SystemAccentColorLight1}" Opacity="0.2" /> <SolidColorBrush Color="{DynamicResource SystemAccentColorLight1}" Opacity="0.2" />
</shared:SelectionRectangle.Background> </shared:SelectionRectangle.Background>

View File

@ -8,12 +8,12 @@
x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools.SelectionRemoveToolView" x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools.SelectionRemoveToolView"
ClipToBounds="False"> ClipToBounds="False">
<Grid> <Grid>
<shared:SelectionRectangle InputElement="{Binding $parent[paz:ZoomBorder]}" <shared:SelectionRectangle InputElement="{CompiledBinding $parent[paz:ZoomBorder]}"
BorderBrush="{DynamicResource SystemAccentColor}" BorderBrush="{DynamicResource SystemAccentColor}"
BorderRadius="8" BorderRadius="8"
BorderThickness="1" BorderThickness="1"
SelectionFinished="SelectionRectangle_OnSelectionFinished" SelectionFinished="SelectionRectangle_OnSelectionFinished"
ZoomRatio="{Binding $parent[ZoomBorder].ZoomX}"> ZoomRatio="{CompiledBinding $parent[ZoomBorder].ZoomX}">
<shared:SelectionRectangle.Background> <shared:SelectionRectangle.Background>
<SolidColorBrush Color="{DynamicResource SystemAccentColorLight1}" Opacity="0.2" /> <SolidColorBrush Color="{DynamicResource SystemAccentColorLight1}" Opacity="0.2" />
</shared:SelectionRectangle.Background> </shared:SelectionRectangle.Background>

View File

@ -5,6 +5,7 @@
xmlns:paz="clr-namespace:Avalonia.Controls.PanAndZoom;assembly=Avalonia.Controls.PanAndZoom" xmlns:paz="clr-namespace:Avalonia.Controls.PanAndZoom;assembly=Avalonia.Controls.PanAndZoom"
xmlns:core="clr-namespace:Artemis.Core;assembly=Artemis.Core" xmlns:core="clr-namespace:Artemis.Core;assembly=Artemis.Core"
xmlns:visualEditor="clr-namespace:Artemis.UI.Screens.ProfileEditor.VisualEditor" xmlns:visualEditor="clr-namespace:Artemis.UI.Screens.ProfileEditor.VisualEditor"
xmlns:vis="clr-namespace:Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers"
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared" xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.VisualEditorView" x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.VisualEditorView"
@ -40,9 +41,9 @@
<!-- The bottom layer consists of devices --> <!-- The bottom layer consists of devices -->
<ItemsControl Name="DevicesContainer" ItemsSource="{CompiledBinding Devices}" ClipToBounds="False"> <ItemsControl Name="DevicesContainer" ItemsSource="{CompiledBinding Devices}" ClipToBounds="False">
<ItemsControl.Styles> <ItemsControl.Styles>
<Style Selector="ContentPresenter"> <Style Selector="ContentPresenter" x:DataType="core:ArtemisDevice">
<Setter Property="Canvas.Left" Value="{Binding X}" /> <Setter Property="Canvas.Left" Value="{CompiledBinding X}" />
<Setter Property="Canvas.Top" Value="{Binding Y}" /> <Setter Property="Canvas.Top" Value="{CompiledBinding Y}" />
</Style> </Style>
</ItemsControl.Styles> </ItemsControl.Styles>
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
@ -52,7 +53,7 @@
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate DataType="core:ArtemisDevice"> <DataTemplate DataType="core:ArtemisDevice">
<shared:DeviceVisualizer Device="{Binding}" ShowColors="True" /> <shared:DeviceVisualizer Device="{CompiledBinding}" ShowColors="True" />
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>
@ -60,9 +61,9 @@
<!-- The middle layer contains visualizers --> <!-- The middle layer contains visualizers -->
<ItemsControl ItemsSource="{CompiledBinding Visualizers}" ClipToBounds="False" IsVisible="{CompiledBinding !SuspendedEditing}"> <ItemsControl ItemsSource="{CompiledBinding Visualizers}" ClipToBounds="False" IsVisible="{CompiledBinding !SuspendedEditing}">
<ItemsControl.Styles> <ItemsControl.Styles>
<Style Selector="ContentPresenter"> <Style Selector="ContentPresenter" x:DataType="vis:IVisualizerViewModel">
<Setter Property="Canvas.Left" Value="{Binding X}" /> <Setter Property="Canvas.Left" Value="{CompiledBinding X}" />
<Setter Property="Canvas.Top" Value="{Binding Y}" /> <Setter Property="Canvas.Top" Value="{CompiledBinding Y}" />
</Style> </Style>
</ItemsControl.Styles> </ItemsControl.Styles>
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>

View File

@ -4,9 +4,11 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia" xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia"
xmlns:root="clr-namespace:Artemis.UI.Screens.Root;assembly=Artemis.UI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="root:DefaultTitleBarViewModel"
x:Class="Artemis.UI.Screens.Root.DefaultTitleBarView"> x:Class="Artemis.UI.Screens.Root.DefaultTitleBarView">
<Button Classes="title-bar-button" Command="{Binding ShowDebugger}" VerticalAlignment="Top" HorizontalAlignment="Right" windowing:AppWindow.AllowInteractionInTitleBar="True" > <Button Classes="title-bar-button" Command="{CompiledBinding ShowDebugger}" VerticalAlignment="Top" HorizontalAlignment="Right" windowing:AppWindow.AllowInteractionInTitleBar="True" >
<avalonia:MaterialIcon Kind="Bug"></avalonia:MaterialIcon> <avalonia:MaterialIcon Kind="Bug"></avalonia:MaterialIcon>
</Button> </Button>
</UserControl> </UserControl>

View File

@ -4,8 +4,10 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:reactiveUi="http://reactiveui.net" xmlns:reactiveUi="http://reactiveui.net"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:vm="clr-namespace:Artemis.UI.Screens.Root;assembly=Artemis.UI"
x:DataType="vm:RootViewModel"
x:Class="Artemis.UI.Screens.Root.RootView"> x:Class="Artemis.UI.Screens.Root.RootView">
<reactiveUi:RoutedViewHost Router="{Binding Router}"> <reactiveUi:RoutedViewHost Router="{CompiledBinding Router}">
<reactiveUi:RoutedViewHost.PageTransition> <reactiveUi:RoutedViewHost.PageTransition>
<CompositePageTransition></CompositePageTransition> <CompositePageTransition></CompositePageTransition>
</reactiveUi:RoutedViewHost.PageTransition> </reactiveUi:RoutedViewHost.PageTransition>

View File

@ -10,7 +10,7 @@
<TabControl Margin="12" ItemsSource="{CompiledBinding SettingTabs}" SelectedItem="{CompiledBinding SelectedTab}"> <TabControl Margin="12" ItemsSource="{CompiledBinding SettingTabs}" SelectedItem="{CompiledBinding SelectedTab}">
<TabControl.ItemTemplate> <TabControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding DisplayName}" /> <TextBlock Text="{CompiledBinding DisplayName}" />
</DataTemplate> </DataTemplate>
</TabControl.ItemTemplate> </TabControl.ItemTemplate>
</TabControl> </TabControl>

View File

@ -4,6 +4,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:vm="clr-namespace:Artemis.UI.Screens.Settings;assembly=Artemis.UI"
x:DataType="vm:AboutTabViewModel"
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1400" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1400"
x:Class="Artemis.UI.Screens.Settings.AboutTabView"> x:Class="Artemis.UI.Screens.Settings.AboutTabView">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
@ -30,7 +32,7 @@
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Top" VerticalAlignment="Top"
Classes="subtitle" Classes="subtitle"
Text="{Binding Version}" /> Text="{CompiledBinding Version}" />
<controls:HyperlinkButton Grid.Row="1" <controls:HyperlinkButton Grid.Row="1"
Grid.Column="2" Grid.Column="2"
@ -50,9 +52,9 @@
Height="75" Height="75"
Width="75" Width="75"
Margin="0 0 15 0" Margin="0 0 15 0"
IsVisible="{Binding RobertProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"> IsVisible="{CompiledBinding RobertProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
<Ellipse.Fill> <Ellipse.Fill>
<ImageBrush Source="{Binding RobertProfileImage}" BitmapInterpolationMode="HighQuality" /> <ImageBrush Source="{CompiledBinding RobertProfileImage}" BitmapInterpolationMode="HighQuality" />
</Ellipse.Fill> </Ellipse.Fill>
</Ellipse> </Ellipse>
<TextBlock Grid.Row="0" Grid.Column="1" Padding="0"> <TextBlock Grid.Row="0" Grid.Column="1" Padding="0">
@ -78,9 +80,9 @@
Height="75" Height="75"
Width="75" Width="75"
Margin="0 0 15 0" Margin="0 0 15 0"
IsVisible="{Binding DarthAffeProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"> IsVisible="{CompiledBinding DarthAffeProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
<Ellipse.Fill> <Ellipse.Fill>
<ImageBrush Source="{Binding DarthAffeProfileImage}" BitmapInterpolationMode="HighQuality" /> <ImageBrush Source="{CompiledBinding DarthAffeProfileImage}" BitmapInterpolationMode="HighQuality" />
</Ellipse.Fill> </Ellipse.Fill>
</Ellipse> </Ellipse>
<TextBlock Grid.Row="0" Grid.Column="1" Padding="0"> <TextBlock Grid.Row="0" Grid.Column="1" Padding="0">
@ -106,9 +108,9 @@
Height="75" Height="75"
Width="75" Width="75"
Margin="0 0 15 0" Margin="0 0 15 0"
IsVisible="{Binding DrMeteorProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"> IsVisible="{CompiledBinding DrMeteorProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
<Ellipse.Fill> <Ellipse.Fill>
<ImageBrush Source="{Binding DrMeteorProfileImage}" BitmapInterpolationMode="HighQuality" /> <ImageBrush Source="{CompiledBinding DrMeteorProfileImage}" BitmapInterpolationMode="HighQuality" />
</Ellipse.Fill> </Ellipse.Fill>
</Ellipse> </Ellipse>
<TextBlock Grid.Row="0" Grid.Column="1" Padding="0"> <TextBlock Grid.Row="0" Grid.Column="1" Padding="0">
@ -134,9 +136,9 @@
Height="75" Height="75"
Width="75" Width="75"
Margin="0 0 15 0" Margin="0 0 15 0"
IsVisible="{Binding KaiProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"> IsVisible="{CompiledBinding KaiProfileImage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
<Ellipse.Fill> <Ellipse.Fill>
<ImageBrush Source="{Binding KaiProfileImage}" BitmapInterpolationMode="HighQuality" /> <ImageBrush Source="{CompiledBinding KaiProfileImage}" BitmapInterpolationMode="HighQuality" />
</Ellipse.Fill> </Ellipse.Fill>
</Ellipse> </Ellipse>
<TextBlock Grid.Row="0" Grid.Column="1" Padding="0"> <TextBlock Grid.Row="0" Grid.Column="1" Padding="0">

View File

@ -115,8 +115,8 @@
<LinearGradientBrush StartPoint="0,0" EndPoint="0,30"> <LinearGradientBrush StartPoint="0,0" EndPoint="0,30">
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.0" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.05" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.25" />
</LinearGradientBrush> </LinearGradientBrush>
</Setter.Value> </Setter.Value>
</Setter> </Setter>
@ -125,8 +125,8 @@
<Setter Property="Background"> <Setter Property="Background">
<Setter.Value> <Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,32"> <LinearGradientBrush StartPoint="0,0" EndPoint="0,32">
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0}" Offset="0.75" />
<GradientStop Color="{Binding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" /> <GradientStop Color="{CompiledBinding Source={StaticResource SystemAccentColorLight3}, Converter={StaticResource ColorOpacityConverter}, ConverterParameter=0.25}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="0.95" />
<GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" /> <GradientStop Color="{StaticResource SystemAccentColorLight3}" Offset="1" />
</LinearGradientBrush> </LinearGradientBrush>
@ -139,8 +139,8 @@
Margin="0 8 0 0" Margin="0 8 0 0"
RowDefinitions="Auto,*" RowDefinitions="Auto,*"
ContextFlyout="{StaticResource CategoryMenuFlyout}" ContextFlyout="{StaticResource CategoryMenuFlyout}"
Classes.flyout-open="{Binding IsOpen, Source={StaticResource CategoryMenuFlyout}}" Classes.flyout-open="{CompiledBinding IsOpen, Source={StaticResource CategoryMenuFlyout}}"
Classes.plus-flyout-open="{Binding IsOpen, Source={StaticResource PlusMenuFlyout}}"> Classes.plus-flyout-open="{CompiledBinding IsOpen, Source={StaticResource PlusMenuFlyout}}">
<Grid Grid.Row="0" Background="Transparent" Margin="0 0 6 0" ColumnDefinitions="Auto,*,Auto,Auto,Auto"> <Grid Grid.Row="0" Background="Transparent" Margin="0 0 6 0" ColumnDefinitions="Auto,*,Auto,Auto,Auto">
<avalonia:MaterialIcon Classes.chevron-collapsed="{CompiledBinding !IsCollapsed}" <avalonia:MaterialIcon Classes.chevron-collapsed="{CompiledBinding !IsCollapsed}"
Kind="ChevronUp" Kind="ChevronUp"

View File

@ -71,7 +71,7 @@
ColumnDefinitions="Auto,*,Auto,Auto" ColumnDefinitions="Auto,*,Auto,Auto"
Background="Transparent" Background="Transparent"
ContextFlyout="{StaticResource ProfileMenuFlyout}" ContextFlyout="{StaticResource ProfileMenuFlyout}"
Classes.flyout-open="{Binding IsOpen, Source={StaticResource ProfileMenuFlyout}}"> Classes.flyout-open="{CompiledBinding IsOpen, Source={StaticResource ProfileMenuFlyout}}">
<shared:ProfileConfigurationIcon Grid.Column="0" <shared:ProfileConfigurationIcon Grid.Column="0"
x:Name="ProfileIcon" x:Name="ProfileIcon"
VerticalAlignment="Center" VerticalAlignment="Center"

View File

@ -3,10 +3,12 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:vm="clr-namespace:Artemis.UI.Screens.Sidebar;assembly=Artemis.UI"
x:DataType="vm:SidebarScreenViewModel"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.Sidebar.SidebarScreenView"> x:Class="Artemis.UI.Screens.Sidebar.SidebarScreenView">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<avalonia:MaterialIcon Kind="{Binding Icon}" Width="16" Height="16" /> <avalonia:MaterialIcon Kind="{CompiledBinding Icon}" Width="16" Height="16" />
<TextBlock FontSize="12" Margin="10 0" VerticalAlignment="Center" Text="{Binding DisplayName}" /> <TextBlock FontSize="12" Margin="10 0" VerticalAlignment="Center" Text="{CompiledBinding DisplayName}" />
</StackPanel> </StackPanel>
</UserControl> </UserControl>

View File

@ -28,7 +28,7 @@
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<Border Classes="card-condensed" Margin="4"> <Border Classes="card-condensed" Margin="4">
<ContentControl Content="{Binding}"></ContentControl> <ContentControl Content="{CompiledBinding}"></ContentControl>
</Border> </Border>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>

View File

@ -31,7 +31,7 @@
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Top" VerticalAlignment="Top"
Classes="subtitle" Classes="subtitle"
Text="{Binding Version}" /> Text="{CompiledBinding Version}" />
<controls:HyperlinkButton Grid.Row="1" <controls:HyperlinkButton Grid.Row="1"
Grid.Column="2" Grid.Column="2"

View File

@ -54,7 +54,7 @@
ClipToBounds="True"> ClipToBounds="True">
<Border CornerRadius="4"> <Border CornerRadius="4">
<Border.Background> <Border.Background>
<SolidColorBrush Color="{Binding Converter={StaticResource SKColorToColorConverter}, Mode=OneWay}" /> <SolidColorBrush Color="{CompiledBinding Converter={StaticResource SKColorToColorConverter}, Mode=OneWay}" />
</Border.Background> </Border.Background>
</Border> </Border>
</Border> </Border>
@ -64,13 +64,13 @@
<TextBlock Text="Color gradient" FontFamily="Consolas" /> <TextBlock Text="Color gradient" FontFamily="Consolas" />
</DataTemplate> </DataTemplate>
<DataTemplate DataType="core:Numeric"> <DataTemplate DataType="core:Numeric">
<TextBlock Text="{Binding Mode=OneWay}" FontFamily="Consolas" /> <TextBlock Text=" {CompiledBinding Mode=OneWay}" FontFamily="Consolas" />
</DataTemplate> </DataTemplate>
<DataTemplate DataType="collections:IList"> <DataTemplate DataType="collections:IList">
<TextBlock Text="{Binding Count, StringFormat='List - {0} item(s)', Mode=OneWay}" FontFamily="Consolas" /> <TextBlock Text="{CompiledBinding Count, StringFormat='List - {0} item(s)', Mode=OneWay}" FontFamily="Consolas" />
</DataTemplate> </DataTemplate>
<DataTemplate DataType="system:Object"> <DataTemplate DataType="system:Object">
<TextBlock Text="{Binding Mode=OneWay}" FontFamily="Consolas" /> <TextBlock Text="{CompiledBinding Mode=OneWay}" FontFamily="Consolas" />
</DataTemplate> </DataTemplate>
</ContentControl.DataTemplates> </ContentControl.DataTemplates>
</ContentControl> </ContentControl>

View File

@ -19,12 +19,12 @@
<Button Content="&#xE8BB;" <Button Content="&#xE8BB;"
FontFamily="{StaticResource SymbolThemeFontFamily}" FontFamily="{StaticResource SymbolThemeFontFamily}"
Theme="{StaticResource TransparentButton}" Theme="{StaticResource TransparentButton}"
Command="{Binding $parent[TextBox].Clear}" Command="{CompiledBinding $parent[TextBox].Clear}"
IsVisible="{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType=TextBox}, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/> IsVisible="{CompiledBinding Text, RelativeSource={RelativeSource FindAncestor, AncestorType=TextBox}, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<Button Content="&#xE721;" <Button Content="&#xE721;"
FontFamily="{StaticResource SymbolThemeFontFamily}" FontFamily="{StaticResource SymbolThemeFontFamily}"
Theme="{StaticResource TransparentButton}" Theme="{StaticResource TransparentButton}"
Command="{Binding $parent[TextBox].Clear}" Command="{CompiledBinding $parent[TextBox].Clear}"
IsHitTestVisible="False"/> IsHitTestVisible="False"/>
</StackPanel> </StackPanel>
</Template> </Template>
@ -48,12 +48,12 @@
<TreeView.DataTemplates> <TreeView.DataTemplates>
<TreeDataTemplate DataType="core:NodeData"> <TreeDataTemplate DataType="core:NodeData">
<StackPanel Margin="-15 1 0 1" Background="Transparent" PointerReleased="InputElement_OnPointerReleased"> <StackPanel Margin="-15 1 0 1" Background="Transparent" PointerReleased="InputElement_OnPointerReleased">
<TextBlock Classes="BodyStrongTextBlockStyle" Text="{Binding Name}" TextWrapping="Wrap"></TextBlock> <TextBlock Classes="BodyStrongTextBlockStyle" Text="{CompiledBinding Name}" TextWrapping="Wrap"></TextBlock>
<TextBlock Foreground="{DynamicResource TextFillColorSecondary}" Text="{Binding Description}" TextWrapping="Wrap"></TextBlock> <TextBlock Foreground="{DynamicResource TextFillColorSecondary}" Text="{CompiledBinding Description}" TextWrapping="Wrap"></TextBlock>
</StackPanel> </StackPanel>
</TreeDataTemplate> </TreeDataTemplate>
<TreeDataTemplate DataType="visualScripting:NodeCategoryViewModel" ItemsSource="{Binding Nodes}"> <TreeDataTemplate DataType="visualScripting:NodeCategoryViewModel" ItemsSource="{CompiledBinding Nodes}">
<TextBlock Text="{Binding Category}"></TextBlock> <TextBlock Text="{CompiledBinding Category}"></TextBlock>
</TreeDataTemplate> </TreeDataTemplate>
</TreeView.DataTemplates> </TreeView.DataTemplates>
<TreeView.ItemsPanel> <TreeView.ItemsPanel>

View File

@ -78,15 +78,15 @@
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.Styles> <ItemsControl.Styles>
<Style Selector="ItemsControl#NodesContainer > ContentPresenter"> <Style Selector="ItemsControl#NodesContainer > ContentPresenter" x:DataType="visualScripting:NodeViewModel">
<Setter Property="Canvas.Left" Value="{Binding Node.X}" /> <Setter Property="Canvas.Left" Value="{CompiledBinding Node.X}" />
<Setter Property="Canvas.Top" Value="{Binding Node.Y}" /> <Setter Property="Canvas.Top" Value="{CompiledBinding Node.Y}" />
</Style> </Style>
</ItemsControl.Styles> </ItemsControl.Styles>
</ItemsControl> </ItemsControl>
<shared:SelectionRectangle Name="SelectionRectangle" <shared:SelectionRectangle Name="SelectionRectangle"
InputElement="{Binding #NodeScriptZoomBorder}" InputElement="{CompiledBinding #NodeScriptZoomBorder}"
SelectionUpdated="SelectionRectangle_OnSelectionUpdated" SelectionUpdated="SelectionRectangle_OnSelectionUpdated"
SelectionFinished="SelectionRectangle_OnSelectionFinished" SelectionFinished="SelectionRectangle_OnSelectionFinished"
BorderBrush="{DynamicResource SystemAccentColor}" BorderBrush="{DynamicResource SystemAccentColor}"

View File

@ -28,10 +28,10 @@
<avalonia:MaterialIcon Kind="Plus" /> <avalonia:MaterialIcon Kind="Plus" />
</MenuItem.Icon> </MenuItem.Icon>
<MenuItem.Styles> <MenuItem.Styles>
<Style Selector="MenuItem > MenuItem > MenuItem"> <Style Selector="MenuItem > MenuItem > MenuItem" x:DataType="visualScripting:NodeMenuItemViewModel">
<Setter Property="Command" Value="{Binding CreateNode}" /> <Setter Property="Command" Value="{CompiledBinding CreateNode}" />
<Setter Property="Header" Value="{Binding Header}" /> <Setter Property="Header" Value="{CompiledBinding Header}" />
<Setter Property="ItemsSource" Value="{Binding Items}" /> <Setter Property="ItemsSource" Value="{CompiledBinding Items}" />
</Style> </Style>
</MenuItem.Styles> </MenuItem.Styles>
</MenuItem> </MenuItem>

View File

@ -10,7 +10,7 @@ public partial class InputPinView : PinView
public InputPinView() public InputPinView()
{ {
InitializeComponent(); InitializeComponent();
InitializePin(this.Get<Border>("PinPoint")); InitializePin(PinPoint);
} }

View File

@ -10,7 +10,7 @@ public partial class OutputPinView : PinView
public OutputPinView() public OutputPinView()
{ {
InitializeComponent(); InitializeComponent();
InitializePin(this.Get<Border>("PinPoint")); InitializePin(PinPoint);
} }

View File

@ -55,7 +55,7 @@
<shared:EnumComboBox Value="{CompiledBinding SelectedCursor}"></shared:EnumComboBox> <shared:EnumComboBox Value="{CompiledBinding SelectedCursor}"></shared:EnumComboBox>
</StackPanel> </StackPanel>
<Button Command="{Binding CreateRandomGradient}"> <Button Command="{CompiledBinding CreateRandomGradient}">
Create random gradient Create random gradient
</Button> </Button>
<gradientPicker:GradientPickerButton ColorGradient="{CompiledBinding ColorGradient}" IsCompact="True" /> <gradientPicker:GradientPickerButton ColorGradient="{CompiledBinding ColorGradient}" IsCompact="True" />

View File

@ -3,10 +3,12 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:vm="clr-namespace:Artemis.VisualScripting.Nodes.Operators.Screens"
x:DataType="vm:EnumEqualsNodeCustomViewModel"
x:Class="Artemis.VisualScripting.Nodes.Operators.Screens.EnumEqualsNodeCustomView"> x:Class="Artemis.VisualScripting.Nodes.Operators.Screens.EnumEqualsNodeCustomView">
<ComboBox IsEnabled="{Binding EnumValues.Count}" <ComboBox IsEnabled="{CompiledBinding EnumValues.Count}"
ItemsSource="{Binding EnumValues}" ItemsSource="{CompiledBinding EnumValues}"
SelectedItem="{Binding CurrentValue}" SelectedItem="{CompiledBinding CurrentValue}"
PlaceholderText="Select a value" PlaceholderText="Select a value"
Classes="condensed" Classes="condensed"
VerticalAlignment="Center"> VerticalAlignment="Center">
@ -17,7 +19,7 @@
</ComboBox.ItemsPanel> </ComboBox.ItemsPanel>
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding [1]}" /> <TextBlock Text="{CompiledBinding Path=Name}" />
</DataTemplate> </DataTemplate>
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>

View File

@ -42,15 +42,15 @@ public class EnumEqualsNodeCustomViewModel : CustomNodeViewModel
}); });
} }
public ObservableCollection<(long, string)> EnumValues { get; } = new(); public ObservableCollection<EnumValueItem> EnumValues { get; } = new();
public (long, string) CurrentValue public EnumValueItem CurrentValue
{ {
get => EnumValues.FirstOrDefault(v => v.Item1 == _node.Storage); get => EnumValues.FirstOrDefault(v => v.Value == _node.Storage);
set set
{ {
if (!Equals(_node.Storage, value.Item1)) if (!Equals(_node.Storage, value.Value))
_nodeEditorService.ExecuteCommand(Script, new UpdateStorage<long>(_node, value.Item1)); _nodeEditorService.ExecuteCommand(Script, new UpdateStorage<long>(_node, value.Value));
} }
} }
@ -58,13 +58,38 @@ public class EnumEqualsNodeCustomViewModel : CustomNodeViewModel
{ {
Dispatcher.UIThread.Post(() => Dispatcher.UIThread.Post(() =>
{ {
List<(long, string)> values = Enum.GetValues(type).Cast<Enum>().Select(e => (Convert.ToInt64(e), e.Humanize())).ToList(); List<EnumValueItem> values = Enum.GetValues(type).Cast<Enum>().Select(e => new EnumValueItem(value: Convert.ToInt64(e), name: e.Humanize())).ToList();
if (values.Count > 20) if (values.Count > 20)
EnumValues.AddRange(values.OrderBy(v => v.Item2)); EnumValues.AddRange(values.OrderBy(v => v.Name));
else else
EnumValues.AddRange(Enum.GetValues(type).Cast<Enum>().Select(e => (Convert.ToInt64(e), e.Humanize()))); EnumValues.AddRange(values);
this.RaisePropertyChanged(nameof(CurrentValue)); this.RaisePropertyChanged(nameof(CurrentValue));
}, DispatcherPriority.Background); }, DispatcherPriority.Background);
} }
} }
/// <summary>
/// Represents a single enum value
/// </summary>
public class EnumValueItem
{
/// <summary>
/// Creates a new instance of the <see cref="EnumValueItem" /> class.
/// </summary>
public EnumValueItem(long value, string name)
{
Value = value;
Name = name;
}
/// <summary>
/// The underlying value of the enum
/// </summary>
public long Value { get; set; }
/// <summary>
/// The name of the enum value
/// </summary>
public string Name { get; set; }
}

View File

@ -38,7 +38,7 @@
ClipToBounds="True"> ClipToBounds="True">
<Border CornerRadius="4"> <Border CornerRadius="4">
<Border.Background> <Border.Background>
<SolidColorBrush Color="{Binding Converter={StaticResource SKColorToColorConverter}}" /> <SolidColorBrush Color="{CompiledBinding Converter={StaticResource SKColorToColorConverter}}" />
</Border.Background> </Border.Background>
</Border> </Border>
</Border> </Border>
@ -46,7 +46,7 @@
</DataTemplate> </DataTemplate>
<DataTemplate DataType="system:Object"> <DataTemplate DataType="system:Object">
<Border Classes="card-condensed" Margin="0,5,5,5 "> <Border Classes="card-condensed" Margin="0,5,5,5 ">
<TextBlock Text="{Binding Converter={StaticResource JsonConverter}}" FontFamily="Consolas"/> <TextBlock Text="{CompiledBinding Converter={StaticResource JsonConverter}}" FontFamily="Consolas"/>
</Border> </Border>
</DataTemplate> </DataTemplate>
</ContentControl.DataTemplates> </ContentControl.DataTemplates>