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:
parent
19685eb516
commit
26639ca8fd
@ -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}">
|
||||||
|
|||||||
@ -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>
|
||||||
@ -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()
|
||||||
|
|||||||
@ -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">
|
||||||
</UserControl>
|
<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>
|
||||||
@ -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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user