mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Improve settings panel theme page & theme selector
This commit is contained in:
parent
358b1fd7c8
commit
9b9704e938
2 changed files with 17 additions and 44 deletions
|
|
@ -28,25 +28,23 @@ public partial class SettingsPaneThemeViewModel : BaseModel
|
|||
public static string LinkHowToCreateTheme => @"https://www.flowlauncher.com/theme-builder/";
|
||||
public static string LinkThemeGallery => "https://github.com/Flow-Launcher/Flow.Launcher/discussions/1438";
|
||||
|
||||
private List<Theme.ThemeData> _themes;
|
||||
public List<Theme.ThemeData> Themes => _themes ??= _theme.LoadAvailableThemes();
|
||||
private List<ThemeData> _themes;
|
||||
public List<ThemeData> Themes => _themes ??= App.API.GetAvailableThemes();
|
||||
|
||||
private Theme.ThemeData _selectedTheme;
|
||||
public Theme.ThemeData SelectedTheme
|
||||
private ThemeData _selectedTheme;
|
||||
public ThemeData SelectedTheme
|
||||
{
|
||||
get => _selectedTheme ??= Themes.Find(v => v.FileNameWithoutExtension == _theme.GetCurrentTheme());
|
||||
get => _selectedTheme ??= Themes.Find(v => v == App.API.GetCurrentTheme());
|
||||
set
|
||||
{
|
||||
_selectedTheme = value;
|
||||
_theme.ChangeTheme(value.FileNameWithoutExtension);
|
||||
App.API.SetCurrentTheme(value);
|
||||
|
||||
// Update UI state
|
||||
OnPropertyChanged(nameof(BackdropType));
|
||||
OnPropertyChanged(nameof(IsBackdropEnabled));
|
||||
OnPropertyChanged(nameof(IsDropShadowEnabled));
|
||||
OnPropertyChanged(nameof(DropShadowEffect));
|
||||
|
||||
_ = _theme.RefreshFrameAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Core.Resource;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Sys
|
||||
{
|
||||
|
|
@ -11,32 +9,6 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
|
||||
private readonly PluginInitContext _context;
|
||||
|
||||
// Do not initialize it in the constructor, because it will cause null reference in
|
||||
// var dicts = Application.Current.Resources.MergedDictionaries; line of Theme
|
||||
private Theme theme = null;
|
||||
private Theme Theme => theme ??= Ioc.Default.GetRequiredService<Theme>();
|
||||
|
||||
#region Theme Selection
|
||||
|
||||
// Theme select codes simplified from SettingsPaneThemeViewModel.cs
|
||||
|
||||
private Theme.ThemeData _selectedTheme;
|
||||
public Theme.ThemeData SelectedTheme
|
||||
{
|
||||
get => _selectedTheme ??= Themes.Find(v => v.FileNameWithoutExtension == Theme.GetCurrentTheme());
|
||||
set
|
||||
{
|
||||
_selectedTheme = value;
|
||||
Theme.ChangeTheme(value.FileNameWithoutExtension);
|
||||
|
||||
_ = Theme.RefreshFrameAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private List<Theme.ThemeData> Themes => Theme.LoadAvailableThemes();
|
||||
|
||||
#endregion
|
||||
|
||||
public ThemeSelector(PluginInitContext context)
|
||||
{
|
||||
_context = context;
|
||||
|
|
@ -44,28 +16,31 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
|
||||
public List<Result> Query(Query query)
|
||||
{
|
||||
var themes = _context.API.GetAvailableThemes();
|
||||
var selectedTheme = _context.API.GetCurrentTheme();
|
||||
|
||||
var search = query.SecondToEndSearch;
|
||||
if (string.IsNullOrWhiteSpace(search))
|
||||
{
|
||||
return Themes.Select(CreateThemeResult)
|
||||
return themes.Select(x => CreateThemeResult(x, selectedTheme))
|
||||
.OrderBy(x => x.Title)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return Themes.Select(theme => (theme, matchResult: _context.API.FuzzySearch(search, theme.Name)))
|
||||
return themes.Select(theme => (theme, matchResult: _context.API.FuzzySearch(search, theme.Name)))
|
||||
.Where(x => x.matchResult.IsSearchPrecisionScoreMet())
|
||||
.Select(x => CreateThemeResult(x.theme, x.matchResult.Score, x.matchResult.MatchData))
|
||||
.Select(x => CreateThemeResult(x.theme, selectedTheme, x.matchResult.Score, x.matchResult.MatchData))
|
||||
.OrderBy(x => x.Title)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private Result CreateThemeResult(Theme.ThemeData theme) => CreateThemeResult(theme, 0, null);
|
||||
private Result CreateThemeResult(ThemeData theme, ThemeData selectedTheme) => CreateThemeResult(theme, selectedTheme, 0, null);
|
||||
|
||||
private Result CreateThemeResult(Theme.ThemeData theme, int score, IList<int> highlightData)
|
||||
private Result CreateThemeResult(ThemeData theme, ThemeData selectedTheme, int score, IList<int> highlightData)
|
||||
{
|
||||
string themeName = theme.Name;
|
||||
var themeName = theme.FileNameWithoutExtension;
|
||||
string title;
|
||||
if (theme == SelectedTheme)
|
||||
if (theme == selectedTheme)
|
||||
{
|
||||
title = $"{theme.Name} ★";
|
||||
// Set current theme to the top
|
||||
|
|
@ -101,7 +76,7 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
Score = score,
|
||||
Action = c =>
|
||||
{
|
||||
SelectedTheme = theme;
|
||||
_context.API.SetCurrentTheme(theme);
|
||||
_context.API.ReQuery();
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue