1
0
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:
Robert 2022-09-14 19:34:36 +02:00
parent 6ed349d4c8
commit 87bf85c2e4
2 changed files with 53 additions and 25 deletions

View File

@ -15,23 +15,6 @@
<UserControl.Resources>
<converters:ColorOpacityConverter x:Key="ColorOpacityConverter" />
<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.Icon>
<avalonia:MaterialIcon Kind="Check" IsVisible="{CompiledBinding IsSuspended}" />
@ -48,12 +31,29 @@
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="-" />
<MenuItem Header="Rename" Command="{CompiledBinding RenameCategory}">
<MenuItem.Icon>
<avalonia:MaterialIcon Kind="RenameBox" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Delete" Command="{CompiledBinding DeleteCategory}">
<MenuItem.Icon>
<avalonia:MaterialIcon Kind="TrashCan" />
</MenuItem.Icon>
</MenuItem>
</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.Styles>
<Style Selector=":is(Button).properties-button">
@ -64,6 +64,9 @@
</Style>
<Style Selector="Grid#ContainerGrid.flyout-open :is(Button).properties-button">
<Setter Property="IsVisible" Value="True" />
</Style>
<Style Selector="Grid#ContainerGrid.plus-flyout-open :is(Button).properties-button">
<Setter Property="IsVisible" Value="True" />
</Style>
<Style Selector="avalonia|MaterialIcon.chevron-collapsed">
@ -137,7 +140,8 @@
Margin="0 8 0 0"
RowDefinitions="Auto,*"
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">
<avalonia:MaterialIcon Classes.chevron-collapsed="{CompiledBinding !IsCollapsed}"
Kind="ChevronUp"
@ -188,13 +192,21 @@
<Button Classes="properties-button icon-button icon-button-small"
Grid.Column="2"
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}"
Margin="0 0 2 0">
<avalonia:MaterialIcon Kind="Cog" />
</Button>
<Button Classes="icon-button icon-button-small"
Command="{CompiledBinding ToggleSuspended}"
Grid.Column="3"
Grid.Column="4"
ToolTip.Tip="Suspend/resume category"
Margin="0 0 2 0">
<Panel>

View File

@ -71,14 +71,33 @@ public class SidebarCategoryViewModel : ActivatableViewModelBase
.Subscribe(e => profileConfigurations.RemoveMany(profileConfigurations.Items.Where(c => c == e.EventArgs.ProfileConfiguration)))
.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);
_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);
// 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 =>
@ -88,10 +107,7 @@ public class SidebarCategoryViewModel : ActivatableViewModelBase
});
}
public ReactiveCommand<Unit, Unit> ImportProfile { get; }
public ReactiveCommand<Unit, Unit> ToggleCollapsed { get; }
public ReactiveCommand<Unit, Unit> ToggleSuspended { get; }
public ReactiveCommand<Unit, Unit> AddProfile { get; }
@ -154,7 +170,7 @@ public class SidebarCategoryViewModel : ActivatableViewModelBase
SelectedProfileConfiguration = viewModel;
}
}
private async Task ExecuteImportProfile()
{
string[]? result = await _windowService.CreateOpenFileDialog()