mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Implement PluginSearch TextBox & ContentControl Lazy Load
This commit is contained in:
parent
1f64dc8e94
commit
ee0f8ef22a
4 changed files with 56 additions and 6 deletions
|
|
@ -901,6 +901,7 @@
|
|||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="73" />
|
||||
<RowDefinition Height="73" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
|
@ -912,12 +913,23 @@
|
|||
Text="{DynamicResource plugin}"
|
||||
TextAlignment="left" />
|
||||
</Border>
|
||||
<Border Grid.Row="1" Padding="5,18,0,0">
|
||||
<TextBox
|
||||
Name="pluginFilterTxb"
|
||||
Margin="0,5,0,0"
|
||||
FontSize="30"
|
||||
Text=""
|
||||
TextAlignment="left"
|
||||
TextChanged="OnPluginSearchTextChanged"
|
||||
/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Padding="0,0,0,0"
|
||||
Background="{DynamicResource Color01B}">
|
||||
<ListBox
|
||||
Name="pluginList"
|
||||
Width="Auto"
|
||||
Margin="5,0,0,0"
|
||||
Padding="0,0,7,0"
|
||||
|
|
@ -942,7 +954,7 @@
|
|||
Padding="0"
|
||||
Background="Transparent"
|
||||
FlowDirection="RightToLeft"
|
||||
IsExpanded="{Binding Mode=TwoWay, Path=IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem, Mode=FindAncestor}}"
|
||||
IsExpanded="{Binding Mode=TwoWay, Path=IsExpanded}"
|
||||
Style="{StaticResource ExpanderStyle1}">
|
||||
<Expander.Header>
|
||||
<Grid
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ using ModernWpf;
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Interop;
|
||||
|
|
@ -41,9 +43,11 @@ namespace Flow.Launcher
|
|||
DataContext = viewModel;
|
||||
this.viewModel = viewModel;
|
||||
API = api;
|
||||
|
||||
}
|
||||
|
||||
#region General
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
RefreshMaximizeRestoreButton();
|
||||
|
|
@ -52,6 +56,9 @@ namespace Flow.Launcher
|
|||
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
|
||||
HwndTarget hwndTarget = hwndSource.CompositionTarget;
|
||||
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
|
||||
|
||||
pluginListView = (CollectionView) CollectionViewSource.GetDefaultView(pluginList.ItemsSource);
|
||||
pluginListView.Filter = PluginFilter;
|
||||
}
|
||||
|
||||
private void OnAutoStartupChecked(object sender, RoutedEventArgs e)
|
||||
|
|
@ -247,6 +254,7 @@ namespace Flow.Launcher
|
|||
PluginManager.API.OpenDirectory(directory);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Proxy
|
||||
|
|
@ -264,6 +272,7 @@ namespace Flow.Launcher
|
|||
viewModel.UpdateApp(); // TODO: change to command
|
||||
}
|
||||
|
||||
|
||||
private void OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
API.OpenUrl(e.Uri.AbsoluteUri);
|
||||
|
|
@ -307,7 +316,7 @@ namespace Flow.Launcher
|
|||
|
||||
private void OnExternalPluginInstallClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if(sender is Button { DataContext: UserPlugin plugin })
|
||||
if (sender is Button { DataContext: UserPlugin plugin })
|
||||
{
|
||||
var pluginsManagerPlugin = PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7");
|
||||
var actionKeyword = pluginsManagerPlugin.Metadata.ActionKeywords.Count == 0 ? "" : pluginsManagerPlugin.Metadata.ActionKeywords[0];
|
||||
|
|
@ -326,7 +335,7 @@ namespace Flow.Launcher
|
|||
textBox.MoveFocus(tRequest);
|
||||
}
|
||||
|
||||
private void ColorSchemeSelectedIndexChanged(object sender, EventArgs e)
|
||||
private void ColorSchemeSelectedIndexChanged(object sender, EventArgs e)
|
||||
=> ThemeManager.Current.ApplicationTheme = settings.ColorScheme switch
|
||||
{
|
||||
Constant.Light => ApplicationTheme.Light,
|
||||
|
|
@ -370,5 +379,22 @@ namespace Flow.Launcher
|
|||
RefreshMaximizeRestoreButton();
|
||||
}
|
||||
|
||||
private CollectionView pluginListView;
|
||||
|
||||
private bool PluginFilter(object item)
|
||||
{
|
||||
if (string.IsNullOrEmpty(pluginFilterTxb.Text))
|
||||
return true;
|
||||
if (item is PluginViewModel model)
|
||||
{
|
||||
return StringMatcher.FuzzySearch(pluginFilterTxb.Text, model.PluginPair.Metadata.Name).IsSearchPrecisionScoreMet();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void OnPluginSearchTextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
pluginListView.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -30,9 +30,20 @@ namespace Flow.Launcher.ViewModel
|
|||
get => !PluginPair.Metadata.Disabled;
|
||||
set => PluginPair.Metadata.Disabled = !value;
|
||||
}
|
||||
public bool IsExpanded
|
||||
{
|
||||
get => _isExpanded;
|
||||
set
|
||||
{
|
||||
_isExpanded = value;
|
||||
OnPropertyChanged();
|
||||
OnPropertyChanged(nameof(SettingControl));
|
||||
}
|
||||
}
|
||||
|
||||
private Control _settingControl;
|
||||
public Control SettingControl => _settingControl ??= PluginPair.Plugin is not ISettingProvider settingProvider ? new Control() : settingProvider.CreateSettingPanel();
|
||||
private bool _isExpanded;
|
||||
public Control SettingControl => IsExpanded ? _settingControl ??= PluginPair.Plugin is not ISettingProvider settingProvider ? new Control() : settingProvider.CreateSettingPanel() : null;
|
||||
|
||||
public Visibility ActionKeywordsVisibility => PluginPair.Metadata.ActionKeywords.Count == 1 ? Visibility.Visible : Visibility.Collapsed;
|
||||
public string InitilizaTime => PluginPair.Metadata.InitTime + "ms";
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ using Flow.Launcher.Infrastructure.Storage;
|
|||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Plugin.SharedModels;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Flow.Launcher.ViewModel
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue