mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Sidebar - Reorganized buttons and context menus
This commit is contained in:
parent
6ed349d4c8
commit
87bf85c2e4
@ -15,23 +15,6 @@
|
|||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<converters:ColorOpacityConverter x:Key="ColorOpacityConverter" />
|
<converters:ColorOpacityConverter x:Key="ColorOpacityConverter" />
|
||||||
<MenuFlyout x:Key="CategoryMenuFlyout" Placement="Bottom">
|
<MenuFlyout x:Key="CategoryMenuFlyout" Placement="Bottom">
|
||||||
<MenuItem Header="Rename" Command="{CompiledBinding RenameCategory}">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<avalonia:MaterialIcon Kind="RenameBox" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="-" />
|
|
||||||
<MenuItem Header="Create profile" Command="{CompiledBinding AddProfile}">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<avalonia:MaterialIcon Kind="Plus" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="Import profile" Command="{CompiledBinding ImportProfile}">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<avalonia:MaterialIcon Kind="Import" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="-" />
|
|
||||||
<MenuItem Header="Suspend" Command="{CompiledBinding ToggleSuspended}">
|
<MenuItem Header="Suspend" Command="{CompiledBinding ToggleSuspended}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<avalonia:MaterialIcon Kind="Check" IsVisible="{CompiledBinding IsSuspended}" />
|
<avalonia:MaterialIcon Kind="Check" IsVisible="{CompiledBinding IsSuspended}" />
|
||||||
@ -48,12 +31,29 @@
|
|||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="-" />
|
<MenuItem Header="-" />
|
||||||
|
<MenuItem Header="Rename" Command="{CompiledBinding RenameCategory}">
|
||||||
|
<MenuItem.Icon>
|
||||||
|
<avalonia:MaterialIcon Kind="RenameBox" />
|
||||||
|
</MenuItem.Icon>
|
||||||
|
</MenuItem>
|
||||||
<MenuItem Header="Delete" Command="{CompiledBinding DeleteCategory}">
|
<MenuItem Header="Delete" Command="{CompiledBinding DeleteCategory}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<avalonia:MaterialIcon Kind="TrashCan" />
|
<avalonia:MaterialIcon Kind="TrashCan" />
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
|
<MenuFlyout x:Key="PlusMenuFlyout" Placement="Bottom">
|
||||||
|
<MenuItem Header="Create profile" Command="{CompiledBinding AddProfile}">
|
||||||
|
<MenuItem.Icon>
|
||||||
|
<avalonia:MaterialIcon Kind="Plus" />
|
||||||
|
</MenuItem.Icon>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem Header="Import profile" Command="{CompiledBinding ImportProfile}">
|
||||||
|
<MenuItem.Icon>
|
||||||
|
<avalonia:MaterialIcon Kind="Import" />
|
||||||
|
</MenuItem.Icon>
|
||||||
|
</MenuItem>
|
||||||
|
</MenuFlyout>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<UserControl.Styles>
|
<UserControl.Styles>
|
||||||
<Style Selector=":is(Button).properties-button">
|
<Style Selector=":is(Button).properties-button">
|
||||||
@ -65,6 +65,9 @@
|
|||||||
<Style Selector="Grid#ContainerGrid.flyout-open :is(Button).properties-button">
|
<Style Selector="Grid#ContainerGrid.flyout-open :is(Button).properties-button">
|
||||||
<Setter Property="IsVisible" Value="True" />
|
<Setter Property="IsVisible" Value="True" />
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style Selector="Grid#ContainerGrid.plus-flyout-open :is(Button).properties-button">
|
||||||
|
<Setter Property="IsVisible" Value="True" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
<Style Selector="avalonia|MaterialIcon.chevron-collapsed">
|
<Style Selector="avalonia|MaterialIcon.chevron-collapsed">
|
||||||
<Setter Property="RenderTransform" Value="rotate(180deg)" />
|
<Setter Property="RenderTransform" Value="rotate(180deg)" />
|
||||||
@ -137,7 +140,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="{Binding IsOpen, Source={StaticResource CategoryMenuFlyout}}"
|
||||||
|
Classes.plus-flyout-open="{Binding 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"
|
||||||
@ -188,13 +192,21 @@
|
|||||||
<Button Classes="properties-button icon-button icon-button-small"
|
<Button Classes="properties-button icon-button icon-button-small"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
|
Flyout="{StaticResource PlusMenuFlyout}"
|
||||||
|
Margin="0 0 2 0">
|
||||||
|
<avalonia:MaterialIcon Kind="Plus" />
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button Classes="properties-button icon-button icon-button-small"
|
||||||
|
Grid.Column="3"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
Flyout="{StaticResource CategoryMenuFlyout}"
|
Flyout="{StaticResource CategoryMenuFlyout}"
|
||||||
Margin="0 0 2 0">
|
Margin="0 0 2 0">
|
||||||
<avalonia:MaterialIcon Kind="Cog" />
|
<avalonia:MaterialIcon Kind="Cog" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button Classes="icon-button icon-button-small"
|
<Button Classes="icon-button icon-button-small"
|
||||||
Command="{CompiledBinding ToggleSuspended}"
|
Command="{CompiledBinding ToggleSuspended}"
|
||||||
Grid.Column="3"
|
Grid.Column="4"
|
||||||
ToolTip.Tip="Suspend/resume category"
|
ToolTip.Tip="Suspend/resume category"
|
||||||
Margin="0 0 2 0">
|
Margin="0 0 2 0">
|
||||||
<Panel>
|
<Panel>
|
||||||
|
|||||||
@ -71,14 +71,33 @@ public class SidebarCategoryViewModel : ActivatableViewModelBase
|
|||||||
.Subscribe(e => profileConfigurations.RemoveMany(profileConfigurations.Items.Where(c => c == e.EventArgs.ProfileConfiguration)))
|
.Subscribe(e => profileConfigurations.RemoveMany(profileConfigurations.Items.Where(c => c == e.EventArgs.ProfileConfiguration)))
|
||||||
.DisposeWith(d);
|
.DisposeWith(d);
|
||||||
|
|
||||||
profileEditorService.ProfileConfiguration.Subscribe(p => SelectedProfileConfiguration = ProfileConfigurations.FirstOrDefault(c => ReferenceEquals(c.ProfileConfiguration, p)))
|
profileEditorService.ProfileConfiguration
|
||||||
|
.Subscribe(p => SelectedProfileConfiguration = ProfileConfigurations.FirstOrDefault(c => ReferenceEquals(c.ProfileConfiguration, p)))
|
||||||
.DisposeWith(d);
|
.DisposeWith(d);
|
||||||
|
|
||||||
_isCollapsed = ProfileCategory.WhenAnyValue(vm => vm.IsCollapsed).ToProperty(this, vm => vm.IsCollapsed).DisposeWith(d);
|
_isCollapsed = ProfileCategory.WhenAnyValue(vm => vm.IsCollapsed).ToProperty(this, vm => vm.IsCollapsed).DisposeWith(d);
|
||||||
_isSuspended = ProfileCategory.WhenAnyValue(vm => vm.IsSuspended).ToProperty(this, vm => vm.IsSuspended).DisposeWith(d);
|
_isSuspended = ProfileCategory.WhenAnyValue(vm => vm.IsSuspended).ToProperty(this, vm => vm.IsSuspended).DisposeWith(d);
|
||||||
|
|
||||||
// Change the current profile configuration when a new one is selected
|
// Change the current profile configuration when a new one is selected
|
||||||
this.WhenAnyValue(vm => vm.SelectedProfileConfiguration).WhereNotNull().Subscribe(s => profileEditorService.ChangeCurrentProfileConfiguration(s.ProfileConfiguration));
|
this.WhenAnyValue(vm => vm.SelectedProfileConfiguration)
|
||||||
|
.WhereNotNull()
|
||||||
|
.Subscribe(s =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
profileEditorService.ChangeCurrentProfileConfiguration(s.ProfileConfiguration);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (s.ProfileConfiguration.BrokenState != null && s.ProfileConfiguration.BrokenStateException != null)
|
||||||
|
_windowService.ShowExceptionDialog(s.ProfileConfiguration.BrokenState, s.ProfileConfiguration.BrokenStateException);
|
||||||
|
else
|
||||||
|
_windowService.ShowExceptionDialog(e.Message, e);
|
||||||
|
|
||||||
|
profileEditorService.ChangeCurrentProfileConfiguration(null);
|
||||||
|
SelectedProfileConfiguration = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
profileConfigurations.Edit(updater =>
|
profileConfigurations.Edit(updater =>
|
||||||
@ -88,10 +107,7 @@ public class SidebarCategoryViewModel : ActivatableViewModelBase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public ReactiveCommand<Unit, Unit> ImportProfile { get; }
|
public ReactiveCommand<Unit, Unit> ImportProfile { get; }
|
||||||
|
|
||||||
public ReactiveCommand<Unit, Unit> ToggleCollapsed { get; }
|
public ReactiveCommand<Unit, Unit> ToggleCollapsed { get; }
|
||||||
public ReactiveCommand<Unit, Unit> ToggleSuspended { get; }
|
public ReactiveCommand<Unit, Unit> ToggleSuspended { get; }
|
||||||
public ReactiveCommand<Unit, Unit> AddProfile { get; }
|
public ReactiveCommand<Unit, Unit> AddProfile { get; }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user