mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Merge Dev
This commit is contained in:
commit
6c1730e79a
11 changed files with 179 additions and 35 deletions
|
|
@ -45,6 +45,8 @@ namespace Flow.Launcher.Core.Resource
|
|||
private string DirectoryPath => Path.Combine(Constant.ProgramDirectory, Folder);
|
||||
private string UserDirectoryPath => Path.Combine(DataLocation.DataDirectory(), Folder);
|
||||
|
||||
public string CurrentTheme => _settings.Theme;
|
||||
|
||||
public bool BlurEnabled { get; set; }
|
||||
|
||||
private double mainWindowWidth;
|
||||
|
|
|
|||
|
|
@ -308,6 +308,9 @@
|
|||
<system:String x:Key="userdatapath">User Data Location</system:String>
|
||||
<system:String x:Key="userdatapathToolTip">User settings and installed plugins are saved in the user data folder. This location may vary depending on whether it's in portable mode or not.</system:String>
|
||||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
|
||||
<!-- FileManager Setting Dialog -->
|
||||
<system:String x:Key="fileManagerWindow">Select File Manager</system:String>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using CommunityToolkit.Mvvm.Input;
|
|||
using Flow.Launcher.Core;
|
||||
using Flow.Launcher.Core.Resource;
|
||||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
|
||||
|
|
@ -45,10 +46,35 @@ public partial class SettingsPaneAboutViewModel : BaseModel
|
|||
_settings.ActivateTimes
|
||||
);
|
||||
|
||||
public class LogLevelData : DropdownDataGeneric<LOGLEVEL> { }
|
||||
|
||||
public List<LogLevelData> LogLevels { get; } =
|
||||
DropdownDataGeneric<LOGLEVEL>.GetValues<LogLevelData>("LogLevel");
|
||||
|
||||
public LOGLEVEL LogLevel
|
||||
{
|
||||
get => _settings.LogLevel;
|
||||
set
|
||||
{
|
||||
if (_settings.LogLevel != value)
|
||||
{
|
||||
_settings.LogLevel = value;
|
||||
|
||||
Log.SetLogLevel(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SettingsPaneAboutViewModel(Settings settings, Updater updater)
|
||||
{
|
||||
_settings = settings;
|
||||
_updater = updater;
|
||||
UpdateEnumDropdownLocalizations();
|
||||
}
|
||||
|
||||
private void UpdateEnumDropdownLocalizations()
|
||||
{
|
||||
DropdownDataGeneric<LOGLEVEL>.UpdateLabels(LogLevels);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
|
|
@ -138,5 +164,4 @@ public partial class SettingsPaneAboutViewModel : BaseModel
|
|||
|
||||
return "0 B";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Flow.Launcher.Core;
|
||||
using Flow.Launcher.Core.Configuration;
|
||||
using Flow.Launcher.Core.Resource;
|
||||
using Flow.Launcher.Helper;
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Plugin.SharedModels;
|
||||
|
|
@ -32,7 +30,6 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
|
|||
public class SearchWindowAlignData : DropdownDataGeneric<SearchWindowAligns> { }
|
||||
public class SearchPrecisionData : DropdownDataGeneric<SearchPrecisionScore> { }
|
||||
public class LastQueryModeData : DropdownDataGeneric<LastQueryMode> { }
|
||||
public class LogLevelData : DropdownDataGeneric<LOGLEVEL> { }
|
||||
|
||||
public bool StartFlowLauncherOnSystemStartup
|
||||
{
|
||||
|
|
@ -145,16 +142,12 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
|
|||
public List<LastQueryModeData> LastQueryModes { get; } =
|
||||
DropdownDataGeneric<LastQueryMode>.GetValues<LastQueryModeData>("LastQuery");
|
||||
|
||||
public List<LogLevelData> LogLevels { get; } =
|
||||
DropdownDataGeneric<LOGLEVEL>.GetValues<LogLevelData>("LogLevel");
|
||||
|
||||
private void UpdateEnumDropdownLocalizations()
|
||||
{
|
||||
DropdownDataGeneric<SearchWindowScreens>.UpdateLabels(SearchWindowScreens);
|
||||
DropdownDataGeneric<SearchWindowAligns>.UpdateLabels(SearchWindowAligns);
|
||||
DropdownDataGeneric<SearchPrecisionScore>.UpdateLabels(SearchPrecisionScores);
|
||||
DropdownDataGeneric<LastQueryMode>.UpdateLabels(LastQueryModes);
|
||||
DropdownDataGeneric<LOGLEVEL>.UpdateLabels(LogLevels);
|
||||
}
|
||||
|
||||
public string Language
|
||||
|
|
@ -222,22 +215,6 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
|
|||
}
|
||||
}
|
||||
|
||||
public LOGLEVEL LogLevel
|
||||
{
|
||||
get => Settings.LogLevel;
|
||||
set
|
||||
{
|
||||
if (Settings.LogLevel != value)
|
||||
{
|
||||
Settings.LogLevel = value;
|
||||
|
||||
Log.SetLogLevel(value);
|
||||
|
||||
UpdateEnumDropdownLocalizations();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void SelectPython()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -123,6 +123,14 @@
|
|||
</StackPanel>
|
||||
</cc:Card>
|
||||
|
||||
<cc:Card Title="{DynamicResource logLevel}" Icon="">
|
||||
<ComboBox
|
||||
DisplayMemberPath="Display"
|
||||
ItemsSource="{Binding LogLevels}"
|
||||
SelectedValue="{Binding LogLevel}"
|
||||
SelectedValuePath="Value" />
|
||||
</cc:Card>
|
||||
|
||||
<TextBlock
|
||||
Margin="14 20 0 0"
|
||||
HorizontalAlignment="Center"
|
||||
|
|
|
|||
|
|
@ -278,14 +278,6 @@
|
|||
SelectedValue="{Binding Language}"
|
||||
SelectedValuePath="LanguageCode" />
|
||||
</cc:Card>
|
||||
|
||||
<cc:Card Title="{DynamicResource logLevel}" Margin="0 14 0 0">
|
||||
<ComboBox
|
||||
DisplayMemberPath="Display"
|
||||
ItemsSource="{Binding LogLevels}"
|
||||
SelectedValue="{Binding LogLevel}"
|
||||
SelectedValuePath="Value" />
|
||||
</cc:Card>
|
||||
</VirtualizingStackPanel>
|
||||
</ScrollViewer>
|
||||
</ui:Page>
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Flow.Launcher.Infrastructure\Flow.Launcher.Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\..\Flow.Launcher.Plugin\Flow.Launcher.Plugin.csproj" />
|
||||
<ProjectReference Include="..\..\Flow.Launcher.Core\Flow.Launcher.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
BIN
Plugins/Flow.Launcher.Plugin.Sys/Images/theme_selector.png
Normal file
BIN
Plugins/Flow.Launcher.Plugin.Sys/Images/theme_selector.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
|
|
@ -27,6 +27,7 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_open_docs_tips_cmd">Flow Launcher Tips</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_open_userdata_location_cmd">Flow Launcher UserData Folder</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_toggle_game_mode_cmd">Toggle Game Mode</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_theme_selector_cmd">Set the Flow Launcher Theme</system:String>
|
||||
|
||||
<!-- Command Descriptions -->
|
||||
<system:String x:Key="flowlauncher_plugin_sys_shutdown_computer">Shutdown Computer</system:String>
|
||||
|
|
@ -49,8 +50,9 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_open_docs_tips">Visit Flow Launcher's documentation for more help and how to use tips</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_open_userdata_location">Open the location where Flow Launcher's settings are stored</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_toggle_game_mode">Toggle Game Mode</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_theme_selector">Quickly change the Flow Launcher theme</system:String>
|
||||
|
||||
<!-- Dialogs -->
|
||||
<!-- Dialogs -->
|
||||
<system:String x:Key="flowlauncher_plugin_sys_dlgtitle_success">Success</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_dlgtext_all_settings_saved">All Flow Launcher settings saved</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_dlgtext_all_applicableplugins_reloaded">Reloaded all applicable plugin data</system:String>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ using System.Windows;
|
|||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using Windows.Win32;
|
||||
using Windows.Win32.Foundation;
|
||||
using Windows.Win32.Security;
|
||||
|
|
@ -20,6 +19,7 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
public class Main : IPlugin, ISettingProvider, IPluginI18n
|
||||
{
|
||||
private PluginInitContext context;
|
||||
private ThemeSelector themeSelector;
|
||||
private Dictionary<string, string> KeywordTitleMappings = new Dictionary<string, string>();
|
||||
|
||||
// SHTDN_REASON_MAJOR_OTHER indicates a generic shutdown reason that isn't categorized under hardware failure, software updates, or other predefined reasons.
|
||||
|
|
@ -34,6 +34,11 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
|
||||
public List<Result> Query(Query query)
|
||||
{
|
||||
if(query.Search.StartsWith(ThemeSelector.Keyword))
|
||||
{
|
||||
return themeSelector.Query(query);
|
||||
}
|
||||
|
||||
var commands = Commands();
|
||||
var results = new List<Result>();
|
||||
foreach (var c in commands)
|
||||
|
|
@ -82,6 +87,7 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
public void Init(PluginInitContext context)
|
||||
{
|
||||
this.context = context;
|
||||
themeSelector = new ThemeSelector(context);
|
||||
KeywordTitleMappings = new Dictionary<string, string>{
|
||||
{"Shutdown", "flowlauncher_plugin_sys_shutdown_computer_cmd"},
|
||||
{"Restart", "flowlauncher_plugin_sys_restart_computer_cmd"},
|
||||
|
|
@ -102,7 +108,8 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
{"Open Log Location", "flowlauncher_plugin_sys_open_log_location_cmd"},
|
||||
{"Flow Launcher Tips", "flowlauncher_plugin_sys_open_docs_tips_cmd"},
|
||||
{"Flow Launcher UserData Folder", "flowlauncher_plugin_sys_open_userdata_location_cmd"},
|
||||
{"Toggle Game Mode", "flowlauncher_plugin_sys_toggle_game_mode_cmd"}
|
||||
{"Toggle Game Mode", "flowlauncher_plugin_sys_toggle_game_mode_cmd"},
|
||||
{"Set Flow Launcher Theme", "flowlauncher_plugin_sys_theme_selector_cmd"}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -451,6 +458,18 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
context.API.ToggleGameMode();
|
||||
return true;
|
||||
}
|
||||
},
|
||||
new Result
|
||||
{
|
||||
Title = "Set Flow Launcher Theme",
|
||||
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_theme_selector"),
|
||||
IcoPath = "Images\\app.png",
|
||||
Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\ue7fc"),
|
||||
Action = c =>
|
||||
{
|
||||
context.API.ChangeQuery($"{ThemeSelector.Keyword} ");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
115
Plugins/Flow.Launcher.Plugin.Sys/ThemeSelector.cs
Normal file
115
Plugins/Flow.Launcher.Plugin.Sys/ThemeSelector.cs
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Core.Resource;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Sys
|
||||
{
|
||||
public class ThemeSelector
|
||||
{
|
||||
public const string Keyword = "fltheme";
|
||||
|
||||
private readonly Settings _settings;
|
||||
private readonly Theme _theme;
|
||||
private readonly PluginInitContext _context;
|
||||
|
||||
#region Theme Selection
|
||||
|
||||
// Theme select codes simplified from SettingsPaneThemeViewModel.cs
|
||||
|
||||
private Theme.ThemeData _selectedTheme;
|
||||
private Theme.ThemeData SelectedTheme
|
||||
{
|
||||
get => _selectedTheme ??= Themes.Find(v => v.FileNameWithoutExtension == _theme.CurrentTheme);
|
||||
set
|
||||
{
|
||||
_selectedTheme = value;
|
||||
_theme.ChangeTheme(value.FileNameWithoutExtension);
|
||||
|
||||
if (_theme.BlurEnabled && _settings.UseDropShadowEffect)
|
||||
{
|
||||
_theme.RemoveDropShadowEffectFromCurrentTheme();
|
||||
_settings.UseDropShadowEffect = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Theme.ThemeData> Themes => _theme.LoadAvailableThemes();
|
||||
|
||||
#endregion
|
||||
|
||||
public ThemeSelector(PluginInitContext context)
|
||||
{
|
||||
_context = context;
|
||||
_theme = Ioc.Default.GetRequiredService<Theme>();
|
||||
_settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
}
|
||||
|
||||
public List<Result> Query(Query query)
|
||||
{
|
||||
var search = query.SecondToEndSearch;
|
||||
if (string.IsNullOrWhiteSpace(search))
|
||||
{
|
||||
return Themes.Select(CreateThemeResult)
|
||||
.OrderBy(x => x.Title)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
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))
|
||||
.OrderBy(x => x.Title)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private Result CreateThemeResult(Theme.ThemeData theme) => CreateThemeResult(theme, 0, null);
|
||||
|
||||
private Result CreateThemeResult(Theme.ThemeData theme, int score, IList<int> highlightData)
|
||||
{
|
||||
string themeName = theme.Name;
|
||||
string title;
|
||||
if (theme == SelectedTheme)
|
||||
{
|
||||
title = $"{theme.Name} ★";
|
||||
// Set current theme to the top
|
||||
score = 2000;
|
||||
}
|
||||
else
|
||||
{
|
||||
title = theme.Name;
|
||||
// Set them to 1000 so that they are higher than other non-theme records
|
||||
score = 1000;
|
||||
}
|
||||
|
||||
string description = string.Empty;
|
||||
if (theme.IsDark == true)
|
||||
{
|
||||
description += _context.API.GetTranslation("TypeIsDarkToolTip");
|
||||
}
|
||||
|
||||
if (theme.HasBlur == true)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(description))
|
||||
description += " ";
|
||||
description += _context.API.GetTranslation("TypeHasBlurToolTip");
|
||||
}
|
||||
|
||||
return new Result
|
||||
{
|
||||
Title = title,
|
||||
TitleHighlightData = highlightData,
|
||||
SubTitle = description,
|
||||
IcoPath = "Images\\theme_selector.png",
|
||||
Glyph = new GlyphInfo("/Resources/#Segoe Fluent Icons", "\ue790"),
|
||||
Score = score,
|
||||
Action = c =>
|
||||
{
|
||||
SelectedTheme = theme;
|
||||
_context.API.ReQuery();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue