From 0f2ebfbe009e6a1399131f90cc7d3dd4ef2fc27b Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Tue, 10 Mar 2020 18:35:31 +1100 Subject: [PATCH 1/5] Remove UwpDesktop library dependency and upgrade to framework 4.6.2 (#159) * Remove UwpDesktop dependency of lower sdk and add Win SDK Contracts * Upgrade from .Net Framework 4.5.2 to 4.6.2 This upgrade is needed to use Microsoft Windows SDK Contracts library from previous commit * Remove Windows SDK references as no longer required --- Plugins/HelloWorldCSharp/App.config | 6 +++--- Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj | 3 ++- .../Wox.Plugin.BrowserBookmark.csproj | 2 +- Plugins/Wox.Plugin.BrowserBookmark/app.config | 14 +++++++------- .../Wox.Plugin.Calculator.csproj | 2 +- Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj | 2 +- .../Wox.Plugin.ControlPanel.csproj | 2 +- .../Wox.Plugin.Everything.csproj | 2 +- Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj | 2 +- .../Wox.Plugin.PluginIndicator.csproj | 2 +- .../Wox.Plugin.PluginManagement.csproj | 2 +- .../Wox.Plugin.Program/Wox.Plugin.Program.csproj | 8 ++++---- Plugins/Wox.Plugin.Shell/Wox.Plugin.Shell.csproj | 2 +- Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj | 2 +- Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj | 2 +- .../Wox.Plugin.WebSearch.csproj | 2 +- README.md | 12 +----------- Wox.Core/Wox.Core.csproj | 2 +- Wox.Infrastructure/Wox.Infrastructure.csproj | 2 +- Wox.Plugin/Wox.Plugin.csproj | 2 +- Wox.Test/Wox.Test.csproj | 2 +- Wox/App.config | 8 ++++---- Wox/Properties/Resources.Designer.cs | 2 +- Wox/Properties/Settings.Designer.cs | 2 +- Wox/Wox.csproj | 2 +- 25 files changed, 40 insertions(+), 49 deletions(-) diff --git a/Plugins/HelloWorldCSharp/App.config b/Plugins/HelloWorldCSharp/App.config index 88fa4027b..8d234373a 100644 --- a/Plugins/HelloWorldCSharp/App.config +++ b/Plugins/HelloWorldCSharp/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj index 46006f098..143052a03 100644 --- a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj +++ b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj @@ -9,9 +9,10 @@ Properties HelloWorldCSharp HelloWorldCSharp - v4.5.2 + v4.6.2 512 true + AnyCPU diff --git a/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj b/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj index 413b0aec7..56456892d 100644 --- a/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj +++ b/Plugins/Wox.Plugin.BrowserBookmark/Wox.Plugin.BrowserBookmark.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.BrowserBookmark Wox.Plugin.BrowserBookmark - v4.5.2 + v4.6.2 512 ..\..\ true diff --git a/Plugins/Wox.Plugin.BrowserBookmark/app.config b/Plugins/Wox.Plugin.BrowserBookmark/app.config index 376ff2d53..3b7c7ed0a 100644 --- a/Plugins/Wox.Plugin.BrowserBookmark/app.config +++ b/Plugins/Wox.Plugin.BrowserBookmark/app.config @@ -1,22 +1,22 @@ - + -
+
- + - + - - + + - \ No newline at end of file + diff --git a/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj b/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj index f24ad118e..06d476ef4 100644 --- a/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj +++ b/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.Caculator Wox.Plugin.Caculator - v4.5.2 + v4.6.2 512 ..\..\ diff --git a/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj b/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj index ca75ed8f3..c7cbc29e5 100644 --- a/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj +++ b/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.Color Wox.Plugin.Color - v4.5.2 + v4.6.2 512 diff --git a/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj b/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj index 711cb8e29..97cdc8c02 100644 --- a/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj +++ b/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.ControlPanel Wox.Plugin.ControlPanel - v4.5.2 + v4.6.2 512 diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj index 2ec791bf8..65f4e45e5 100644 --- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj +++ b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.Everything Wox.Plugin.Everything - v4.5.2 + v4.6.2 512 ..\Wox\ diff --git a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj index a75fa0ba9..338e550d5 100644 --- a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj +++ b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.Folder Wox.Plugin.Folder - v4.5.2 + v4.6.2 512 ..\..\ diff --git a/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj b/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj index 709016b06..2de1309cd 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj +++ b/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.PluginIndicator Wox.Plugin.PluginIndicator - v4.5.2 + v4.6.2 512 diff --git a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj index d963ea367..dcf77f487 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj +++ b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.PluginManagement Wox.Plugin.PluginManagement - v4.5.2 + v4.6.2 512 ..\..\ diff --git a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj index 17ccffaba..a5d7700e1 100644 --- a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj +++ b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj @@ -9,7 +9,7 @@ Properties Wox.Plugin.Program Wox.Plugin.Program - v4.5.2 + v4.6.2 512 ..\..\ @@ -158,6 +158,9 @@ 10.3.0 + + 10.0.18362.2005 + 9.0.1 @@ -167,9 +170,6 @@ 4.0.0 - - 10.0.14393.3 - - -
+ +
@@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/Wox/Properties/Resources.Designer.cs b/Wox/Properties/Resources.Designer.cs index 20e0fb225..26a9ddff9 100644 --- a/Wox/Properties/Resources.Designer.cs +++ b/Wox/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Wox.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/Wox/Properties/Settings.Designer.cs b/Wox/Properties/Settings.Designer.cs index a61339f5e..be9020f6e 100644 --- a/Wox/Properties/Settings.Designer.cs +++ b/Wox/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace Wox.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 3b942ca65..0aa060ddd 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -9,7 +9,7 @@ Properties Wox Wox - v4.5.2 + v4.6.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 From 37149d99563e559ef1bfdbb86658fedd327f1b24 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 12 Mar 2020 09:57:36 +1100 Subject: [PATCH 2/5] Reduce Wox's drain on CPU when using Pinyin search (#162) * Remove this unneccessary dreadful logging that kills performance * Update to ShouldUsePinyin option 1. Change default start up not to use Pinyin as default language is English 2. Add prompt when switching to Chinese or Chinese_TW prompt user if they want to use Pinyin search --- Wox.Core/Resource/Internationalization.cs | 16 ++++++++++++ Wox.Infrastructure/Alphabet.cs | 2 +- Wox.Infrastructure/UserSettings/Settings.cs | 3 +-- Wox/SettingWindow.xaml | 6 ++--- Wox/SettingWindow.xaml.cs | 6 ----- Wox/ViewModel/SettingWindowViewModel.cs | 29 ++++++++++++++++++++- 6 files changed, 49 insertions(+), 13 deletions(-) diff --git a/Wox.Core/Resource/Internationalization.cs b/Wox.Core/Resource/Internationalization.cs index 9f865cb53..53cce9174 100644 --- a/Wox.Core/Resource/Internationalization.cs +++ b/Wox.Core/Resource/Internationalization.cs @@ -99,6 +99,22 @@ namespace Wox.Core.Resource } + public bool PromptShouldUsePinyin(string languageCodeToSet) + { + var languageToSet = GetLanguageByLanguageCode(languageCodeToSet); + + if (Settings.ShouldUsePinyin) + return false; + + if (languageToSet != AvailableLanguages.Chinese && languageToSet != AvailableLanguages.Chinese_TW) + return false; + + if (MessageBox.Show("Do you want to turn on search with Pinyin?", string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No) + return false; + + return true; + } + private void RemoveOldLanguageFiles() { var dicts = Application.Current.Resources.MergedDictionaries; diff --git a/Wox.Infrastructure/Alphabet.cs b/Wox.Infrastructure/Alphabet.cs index 487c0a4b0..4754394cb 100644 --- a/Wox.Infrastructure/Alphabet.cs +++ b/Wox.Infrastructure/Alphabet.cs @@ -162,7 +162,7 @@ namespace Wox.Infrastructure if (word.Length > 40) { - Log.Debug($"|Wox.Infrastructure.StringMatcher.ScoreForPinyin|skip too long string: {word}"); + //Skip strings that are too long string for Pinyin conversion. return false; } diff --git a/Wox.Infrastructure/UserSettings/Settings.cs b/Wox.Infrastructure/UserSettings/Settings.cs index 7714768f0..94a1639d6 100644 --- a/Wox.Infrastructure/UserSettings/Settings.cs +++ b/Wox.Infrastructure/UserSettings/Settings.cs @@ -25,8 +25,7 @@ namespace Wox.Infrastructure.UserSettings /// /// when false Alphabet static service will always return empty results /// - public bool ShouldUsePinyin { get; set; } = true; - + public bool ShouldUsePinyin { get; set; } = false; internal StringMatcher.SearchPrecisionScore QuerySearchPrecision { get; private set; } = StringMatcher.SearchPrecisionScore.Regular; diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 1eddd8ab6..7fe6d8750 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -55,7 +55,7 @@ - + @@ -72,8 +72,8 @@ - diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 52addf362..df3b363d5 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -40,12 +40,6 @@ namespace Wox #region General - void OnLanguageChanged(object sender, SelectionChangedEventArgs e) - { - var language = (Language)e.AddedItems[0]; - InternationalizationManager.Instance.ChangeLanguage(language); - } - private void OnAutoStartupChecked(object sender, RoutedEventArgs e) { SetStartup(); diff --git a/Wox/ViewModel/SettingWindowViewModel.cs b/Wox/ViewModel/SettingWindowViewModel.cs index 504e7bdfa..f9160df9f 100644 --- a/Wox/ViewModel/SettingWindowViewModel.cs +++ b/Wox/ViewModel/SettingWindowViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -77,6 +77,33 @@ namespace Wox.ViewModel } } + public string Language + { + get + { + return Settings.Language; + } + set + { + InternationalizationManager.Instance.ChangeLanguage(value); + + if (InternationalizationManager.Instance.PromptShouldUsePinyin(value)) + ShouldUsePinyin = true; + } + } + + public bool ShouldUsePinyin + { + get + { + return Settings.ShouldUsePinyin; + } + set + { + Settings.ShouldUsePinyin = value; + } + } + public List QuerySearchPrecisionStrings { get From f68365b0ee595785597e3d6d704c5131d41bd2c5 Mon Sep 17 00:00:00 2001 From: clueless <14300910+theClueless@users.noreply.github.com> Date: Thu, 12 Mar 2020 01:49:24 +0200 Subject: [PATCH 3/5] fix issue #115 --- Plugins/HelloWorldCSharp/App.config | 6 ------ Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj | 1 - Wox.Plugin/IPublicAPI.cs | 11 ++++++++++- Wox.sln | 4 ++-- Wox/PublicAPIInstance.cs | 7 ++++++- 5 files changed, 18 insertions(+), 11 deletions(-) delete mode 100644 Plugins/HelloWorldCSharp/App.config diff --git a/Plugins/HelloWorldCSharp/App.config b/Plugins/HelloWorldCSharp/App.config deleted file mode 100644 index 8d234373a..000000000 --- a/Plugins/HelloWorldCSharp/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj index 143052a03..49f3bf88f 100644 --- a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj +++ b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj @@ -11,7 +11,6 @@ HelloWorldCSharp v4.6.2 512 - true diff --git a/Wox.Plugin/IPublicAPI.cs b/Wox.Plugin/IPublicAPI.cs index 754b76d36..3c5b34277 100644 --- a/Wox.Plugin/IPublicAPI.cs +++ b/Wox.Plugin/IPublicAPI.cs @@ -81,7 +81,16 @@ namespace Wox.Plugin /// Message title /// Message subtitle /// Message icon path (relative path to your plugin folder) - void ShowMsg(string title, string subTitle = "", string iconPath = "", bool useMainWindowAsOwner = true); + void ShowMsg(string title, string subTitle = "", string iconPath = ""); + + /// + /// Show message box + /// + /// Message title + /// Message subtitle + /// Message icon path (relative path to your plugin folder) + /// when true will use main windows as the owner + void ShowMsg(string title, string subTitle, string iconPath, bool useMainWindowAsOwner = true); /// /// Open setting dialog diff --git a/Wox.sln b/Wox.sln index cbceab9b8..a8a42ae8d 100644 --- a/Wox.sln +++ b/Wox.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.271 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Test", "Wox.Test\Wox.Test.csproj", "{FF742965-9A80-41A5-B042-D6C7D3A21708}" ProjectSection(ProjectDependencies) = postProject diff --git a/Wox/PublicAPIInstance.cs b/Wox/PublicAPIInstance.cs index 58915f87b..6c17be5c5 100644 --- a/Wox/PublicAPIInstance.cs +++ b/Wox/PublicAPIInstance.cs @@ -97,7 +97,12 @@ namespace Wox _mainVM.MainWindowVisibility = Visibility.Visible; } - public void ShowMsg(string title, string subTitle = "", string iconPath = "", bool useMainWindowAsOwner = true) + public void ShowMsg(string title, string subTitle = "", string iconPath = "") + { + ShowMsg(title, subTitle, iconPath, true); + } + + public void ShowMsg(string title, string subTitle, string iconPath, bool useMainWindowAsOwner = true) { Application.Current.Dispatcher.Invoke(() => { From 98ed4e7b593b5ee3c3376b29866e5a1834b17a78 Mon Sep 17 00:00:00 2001 From: clueless <14300910+theClueless@users.noreply.github.com> Date: Thu, 12 Mar 2020 01:54:30 +0200 Subject: [PATCH 4/5] app config remove --- Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj index 49f3bf88f..827c74170 100644 --- a/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj +++ b/Plugins/HelloWorldCSharp/HelloWorldCSharp.csproj @@ -52,7 +52,6 @@ - PreserveNewest From b50f738f4207ddf9d41be726d4eaa44c4d28fcdd Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sun, 15 Mar 2020 20:05:34 +1100 Subject: [PATCH 5/5] Feature: Add auto-complete query text suggestion (#153) * Add query suggestion logic * Add UI element * update * Make caret more appealing by following the color of the query font * Add suggestions when using actionkeyword * Add feature to readme * Per suggestion add explaination * Per review comment * Per review comment * change to use converter * Correct typo Co-authored-by: clueless <14300910+theClueless@users.noreply.github.com> --- Plugins/Wox.Plugin.WebSearch/Main.cs | 2 + README.md | 1 + Wox.Core/Plugin/PluginManager.cs | 5 ++ Wox.Core/Resource/Theme.cs | 6 ++ Wox.Plugin/Result.cs | 13 +++- Wox/Converters/QuerySuggestionBoxConverter.cs | 61 +++++++++++++++++++ Wox/MainWindow.xaml | 47 +++++++++----- Wox/Themes/Base.xaml | 1 + Wox/ViewModel/MainViewModel.cs | 6 +- Wox/Wox.csproj | 1 + 10 files changed, 123 insertions(+), 20 deletions(-) create mode 100644 Wox/Converters/QuerySuggestionBoxConverter.cs diff --git a/Plugins/Wox.Plugin.WebSearch/Main.cs b/Plugins/Wox.Plugin.WebSearch/Main.cs index 429e51cc0..d8c6ccafb 100644 --- a/Plugins/Wox.Plugin.WebSearch/Main.cs +++ b/Plugins/Wox.Plugin.WebSearch/Main.cs @@ -72,6 +72,7 @@ namespace Wox.Plugin.WebSearch SubTitle = subtitle, Score = 6, IcoPath = searchSource.IconPath, + ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword, Action = c => { if (_settings.OpenInNewBrowser) @@ -137,6 +138,7 @@ namespace Wox.Plugin.WebSearch SubTitle = subtitle, Score = 5, IcoPath = searchSource.IconPath, + ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword, Action = c => { if (_settings.OpenInNewBrowser) diff --git a/README.md b/README.md index 8db5d4d9c..732dd242f 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Features **New from this fork:** - Portable mode - Drastically improved search experience +- Auto-complete text suggestion - Search all subfolders and files - Option to always run CMD or Powershell as administrator - Run CMD, Powershell and programs as a different user diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 0166690b7..3d1450648 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -191,6 +191,11 @@ namespace Wox.Core.Plugin r.PluginDirectory = metadata.PluginDirectory; r.PluginID = metadata.ID; r.OriginQuery = query; + + // ActionKeywordAssigned is used for constructing MainViewModel's query text auto-complete suggestions + // Plugins may have multi-actionkeywords eg. WebSearches. In this scenario it needs to be overriden on the plugin level + if (metadata.ActionKeywords.Count == 1) + r.ActionKeywordAssigned = query.ActionKeyword; } } diff --git a/Wox.Core/Resource/Theme.cs b/Wox.Core/Resource/Theme.cs index 4b8c37ccf..fc5d55046 100644 --- a/Wox.Core/Resource/Theme.cs +++ b/Wox.Core/Resource/Theme.cs @@ -124,6 +124,12 @@ namespace Wox.Core.Resource queryBoxStyle.Setters.Add(new Setter(TextBox.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(Settings.QueryBoxFontStyle))); queryBoxStyle.Setters.Add(new Setter(TextBox.FontWeightProperty, FontHelper.GetFontWeightFromInvariantStringOrNormal(Settings.QueryBoxFontWeight))); queryBoxStyle.Setters.Add(new Setter(TextBox.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(Settings.QueryBoxFontStretch))); + + var caretBrushPropertyValue = queryBoxStyle.Setters.OfType().Any(x => x.Property.Name == "CaretBrush"); + var foregroundPropertyValue = queryBoxStyle.Setters.OfType().Where(x => x.Property.Name == "Foreground") + .Select(x => x.Value).FirstOrDefault(); + if (!caretBrushPropertyValue && foregroundPropertyValue != null) //otherwise BaseQueryBoxStyle will handle styling + queryBoxStyle.Setters.Add(new Setter(TextBox.CaretBrushProperty, foregroundPropertyValue)); } Style resultItemStyle = dict["ItemTitleStyle"] as Style; diff --git a/Wox.Plugin/Result.cs b/Wox.Plugin/Result.cs index 6e0559d35..4c8f2b1ed 100644 --- a/Wox.Plugin/Result.cs +++ b/Wox.Plugin/Result.cs @@ -14,6 +14,12 @@ namespace Wox.Plugin public string Title { get; set; } public string SubTitle { get; set; } + /// + /// This holds the action keyword that triggered the result. + /// If result is triggered by global keyword: *, this should be empty. + /// + public string ActionKeywordAssigned { get; set; } + public string IcoPath { get { return _icoPath; } @@ -53,7 +59,7 @@ namespace Wox.Plugin public IList SubTitleHighlightData { get; set; } /// - /// Only resulsts that originQuery match with curren query will be displayed in the panel + /// Only results that originQuery match with current query will be displayed in the panel /// internal Query OriginQuery { get; set; } @@ -98,13 +104,14 @@ namespace Wox.Plugin return Title + SubTitle; } - [Obsolete("Use IContextMenu instead")] + /// /// Context menus associate with this result /// + [Obsolete("Use IContextMenu instead")] public List ContextMenu { get; set; } - [Obsolete("Use Object initializers instead")] + [Obsolete("Use Object initializer instead")] public Result(string Title, string IcoPath, string SubTitle = null) { this.Title = Title; diff --git a/Wox/Converters/QuerySuggestionBoxConverter.cs b/Wox/Converters/QuerySuggestionBoxConverter.cs new file mode 100644 index 000000000..68b891ce6 --- /dev/null +++ b/Wox/Converters/QuerySuggestionBoxConverter.cs @@ -0,0 +1,61 @@ +using System; +using System.Globalization; +using System.Windows.Data; +using Wox.Infrastructure.Logger; +using Wox.ViewModel; + +namespace Wox.Converters +{ + public class QuerySuggestionBoxConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values.Length != 2) + { + return string.Empty; + } + + // first prop is the current query string + var queryText = (string)values[0]; + + if (string.IsNullOrEmpty(queryText)) + return "Type here to search"; + + // second prop is the current selected item result + var val = values[1]; + if (val == null) + { + return string.Empty; + } + if (!(val is ResultViewModel)) + { + return System.Windows.Data.Binding.DoNothing; + } + + try + { + var selectedItem = (ResultViewModel)val; + + var selectedResult = selectedItem.Result; + var selectedResultActionKeyword = string.IsNullOrEmpty(selectedResult.ActionKeywordAssigned) ? "" : selectedResult.ActionKeywordAssigned + " "; + var selectedResultPossibleSuggestion = selectedResultActionKeyword + selectedResult.Title; + + if (!selectedResultPossibleSuggestion.StartsWith(queryText, StringComparison.CurrentCultureIgnoreCase)) + return string.Empty; + + // When user typed lower case and result title is uppercase, we still want to display suggestion + return queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); + } + catch (Exception e) + { + Log.Exception(nameof(QuerySuggestionBoxConverter), "fail to convert text for suggestion box", e); + return string.Empty; + } + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Wox/MainWindow.xaml b/Wox/MainWindow.xaml index d50411b83..7c5afb3ef 100644 --- a/Wox/MainWindow.xaml +++ b/Wox/MainWindow.xaml @@ -4,7 +4,9 @@ xmlns:wox="clr-namespace:Wox" xmlns:vm="clr-namespace:Wox.ViewModel" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:converters="clr-namespace:Wox.Converters" + mc:Ignorable="d" Title="Wox" Topmost="True" SizeToContent="Height" @@ -25,6 +27,9 @@ PreviewKeyDown="OnKeyDown" Visibility="{Binding MainWindowVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" d:DataContext="{d:DesignInstance vm:MainViewModel}"> + + + @@ -55,29 +60,43 @@ - + + + + + + + + + - - - - - - - - - - + Background="Transparent"> + + + + + + + + + + + - + diff --git a/Wox/Themes/Base.xaml b/Wox/Themes/Base.xaml index ae195feaa..6f6083035 100644 --- a/Wox/Themes/Base.xaml +++ b/Wox/Themes/Base.xaml @@ -8,6 +8,7 @@ + diff --git a/Wox/ViewModel/MainViewModel.cs b/Wox/ViewModel/MainViewModel.cs index acdd7c040..c2a277963 100644 --- a/Wox/ViewModel/MainViewModel.cs +++ b/Wox/ViewModel/MainViewModel.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.Collections.Generic; +using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Threading; @@ -210,7 +211,7 @@ namespace Wox.ViewModel Query(); } } - + /// /// we need move cursor to end when we manually changed query /// but we don't want to move cursor to end when query is updated from TextBox @@ -455,7 +456,6 @@ namespace Wox.ViewModel } } - private Result ContextMenuTopMost(Result result) { Result menu; diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 0aa060ddd..56a4ed97b 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -93,6 +93,7 @@ + ResultListBox.xaml