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

Settings - Added plugin search

This commit is contained in:
Robert 2021-11-12 20:39:02 +01:00
parent 19685eb516
commit 26639ca8fd
5 changed files with 29 additions and 20 deletions

View File

@ -7,7 +7,7 @@
xmlns:shared="clr-namespace:Artemis.UI.Avalonia.Shared.Controls;assembly=Artemis.UI.Avalonia.Shared" xmlns:shared="clr-namespace:Artemis.UI.Avalonia.Shared.Controls;assembly=Artemis.UI.Avalonia.Shared"
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="450"
x:Class="Artemis.UI.Avalonia.Screens.Plugins.Views.PluginSettingsView"> x:Class="Artemis.UI.Avalonia.Screens.Plugins.Views.PluginSettingsView">
<Border Classes="card" Width="900" Padding="15" Margin="0 5"> <Border Classes="card" Padding="15" Margin="0 5">
<Grid RowDefinitions="*,Auto" ColumnDefinitions="4*,5*"> <Grid RowDefinitions="*,Auto" ColumnDefinitions="4*,5*">
<Grid Grid.Row="0" RowDefinitions="Auto,Auto,*" ColumnDefinitions="80,*"> <Grid Grid.Row="0" RowDefinitions="Auto,Auto,*" ColumnDefinitions="80,*">
<shared:ArtemisIcon Icon="{Binding Plugin.Info.ResolvedIcon}" <shared:ArtemisIcon Icon="{Binding Plugin.Info.ResolvedIcon}"
@ -72,13 +72,13 @@
</controls:SplitButton.Flyout> </controls:SplitButton.Flyout>
</controls:SplitButton> </controls:SplitButton>
<controls:HyperlinkButton Classes="icon-button" <controls:HyperlinkButton Classes="icon-button icon-button-large"
Margin="5 0" Margin="5 0"
IsVisible="{Binding Plugin.Info.Website, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" IsVisible="{Binding Plugin.Info.Website, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
NavigateUri="{Binding Plugin.Info.Website}"> NavigateUri="{Binding Plugin.Info.Website}">
<avalonia:MaterialIcon Kind="Web" /> <avalonia:MaterialIcon Kind="Web" />
</controls:HyperlinkButton> </controls:HyperlinkButton>
<controls:HyperlinkButton Classes="icon-button" <controls:HyperlinkButton Classes="icon-button icon-button-large"
Margin="5 0" Margin="5 0"
IsVisible="{Binding Plugin.Info.Repository, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" IsVisible="{Binding Plugin.Info.Repository, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
NavigateUri="{Binding Plugin.Info.Repository}"> NavigateUri="{Binding Plugin.Info.Repository}">

View File

@ -13,14 +13,12 @@
<ContentControl Grid.Column="0" Content="{Binding SidebarViewModel}" /> <ContentControl Grid.Column="0" Content="{Binding SidebarViewModel}" />
<Border Classes="router-container" Grid.Column="1" Margin="0 40 0 0"> <Border Classes="router-container" Grid.Column="1" Margin="0 10 0 0">
<!-- <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" > --> <reactiveUi:RoutedViewHost Router="{Binding Router}">
<reactiveUi:RoutedViewHost Router="{Binding Router}"> <reactiveUi:RoutedViewHost.PageTransition>
<reactiveUi:RoutedViewHost.PageTransition> <CrossFade Duration="0.1" />
<CrossFade Duration="0.1" /> </reactiveUi:RoutedViewHost.PageTransition>
</reactiveUi:RoutedViewHost.PageTransition> </reactiveUi:RoutedViewHost>
</reactiveUi:RoutedViewHost>
<!-- </ScrollViewer> -->
</Border> </Border>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -19,12 +19,12 @@ namespace Artemis.UI.Avalonia.Screens.Settings.Tabs.ViewModels
{ {
public class PluginsTabViewModel : ActivatableViewModelBase public class PluginsTabViewModel : ActivatableViewModelBase
{ {
private readonly IPluginManagementService _pluginManagementService;
private readonly INotificationService _notificationService; private readonly INotificationService _notificationService;
private readonly IWindowService _windowService; private readonly IPluginManagementService _pluginManagementService;
private readonly ISettingsVmFactory _settingsVmFactory; private readonly ISettingsVmFactory _settingsVmFactory;
private string? _searchPluginInput; private readonly IWindowService _windowService;
private List<PluginSettingsViewModel>? _instances; private List<PluginSettingsViewModel>? _instances;
private string? _searchPluginInput;
public PluginsTabViewModel(IPluginManagementService pluginManagementService, INotificationService notificationService, IWindowService windowService, ISettingsVmFactory settingsVmFactory) public PluginsTabViewModel(IPluginManagementService pluginManagementService, INotificationService notificationService, IWindowService windowService, ISettingsVmFactory settingsVmFactory)
{ {
@ -36,7 +36,7 @@ namespace Artemis.UI.Avalonia.Screens.Settings.Tabs.ViewModels
DisplayName = "Plugins"; DisplayName = "Plugins";
Plugins = new ObservableCollection<PluginSettingsViewModel>(); Plugins = new ObservableCollection<PluginSettingsViewModel>();
this.WhenAnyValue(x => x.SearchPluginInput).Throttle(TimeSpan.FromMilliseconds(300)).Subscribe(SearchPlugins); this.WhenAnyValue(x => x.SearchPluginInput).Throttle(TimeSpan.FromMilliseconds(100)).Subscribe(SearchPlugins);
this.WhenActivated((CompositeDisposable _) => GetPluginInstances()); this.WhenActivated((CompositeDisposable _) => GetPluginInstances());
} }
@ -48,7 +48,10 @@ namespace Artemis.UI.Avalonia.Screens.Settings.Tabs.ViewModels
set => this.RaiseAndSetIfChanged(ref _searchPluginInput, value); set => this.RaiseAndSetIfChanged(ref _searchPluginInput, value);
} }
public void OpenUrl(string url) => Utilities.OpenUrl(url); public void OpenUrl(string url)
{
Utilities.OpenUrl(url);
}
public async Task ImportPlugin() public async Task ImportPlugin()
{ {
@ -66,7 +69,7 @@ namespace Artemis.UI.Avalonia.Screens.Settings.Tabs.ViewModels
// Enable it via the VM to enable the prerequisite dialog // Enable it via the VM to enable the prerequisite dialog
PluginSettingsViewModel pluginViewModel = Plugins.FirstOrDefault(i => i.Plugin == plugin); PluginSettingsViewModel pluginViewModel = Plugins.FirstOrDefault(i => i.Plugin == plugin);
if (pluginViewModel is { IsEnabled: false }) if (pluginViewModel is {IsEnabled: false})
pluginViewModel.IsEnabled = true; pluginViewModel.IsEnabled = true;
_notificationService.CreateNotification() _notificationService.CreateNotification()

View File

@ -2,7 +2,10 @@
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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="1200" d:DesignHeight="450"
x:Class="Artemis.UI.Avalonia.Screens.Settings.Tabs.Views.PluginsTabView"> x:Class="Artemis.UI.Avalonia.Screens.Settings.Tabs.Views.PluginsTabView">
<ItemsControl Items="{Binding Plugins}"></ItemsControl> <Grid RowDefinitions="Auto,*" ColumnDefinitions="*,*" Width="900">
<TextBox Grid.Row="0" Grid.Column="0" Text="{Binding SearchPluginInput}" Watermark="Search plugins" Margin="0 10" />
<ItemsControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Items="{Binding Plugins}" />
</Grid>
</UserControl> </UserControl>

View File

@ -49,6 +49,11 @@
<Setter Property="Height" Value="14" /> <Setter Property="Height" Value="14" />
</Style> </Style>
<Style Selector=":is(Button).icon-button-large avalonia|MaterialIcon">
<Setter Property="Width" Value="20" />
<Setter Property="Height" Value="20" />
</Style>
<Style Selector="controls|HyperlinkButton.icon-button"> <Style Selector="controls|HyperlinkButton.icon-button">
<Setter Property="Foreground" Value="{DynamicResource ButtonForeground}" /> <Setter Property="Foreground" Value="{DynamicResource ButtonForeground}" />
</Style> </Style>