From 84af5a277e14221bc9e1a14861a78dc4620c2be2 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Tue, 28 Jan 2014 11:19:27 +0800 Subject: [PATCH] code refactoring and add web searches setting window. --- WinAlfred/Helper/CommonStorage.cs | 85 ++++++ WinAlfred/Helper/GlobalKeyboardHook.cs | 343 ------------------------ WinAlfred/Helper/SelectedRecords.cs | 87 ------ WinAlfred/Helper/Settings.cs | 54 ---- WinAlfred/MainWindow.xaml.cs | 18 +- WinAlfred/Models/UserSelectedRecords.cs | 47 ++++ WinAlfred/Models/UserSetting.cs | 14 + WinAlfred/Models/WebSearch.cs | 10 + WinAlfred/ResultItem.xaml.cs | 2 +- WinAlfred/SettingWindow.xaml | 62 ++++- WinAlfred/SettingWindow.xaml.cs | 24 +- WinAlfred/WebSearchSetting.xaml | 48 ++++ WinAlfred/WebSearchSetting.xaml.cs | 28 ++ WinAlfred/WinAlfred.csproj | 17 +- 14 files changed, 321 insertions(+), 518 deletions(-) create mode 100644 WinAlfred/Helper/CommonStorage.cs delete mode 100644 WinAlfred/Helper/GlobalKeyboardHook.cs delete mode 100644 WinAlfred/Helper/SelectedRecords.cs delete mode 100644 WinAlfred/Helper/Settings.cs create mode 100644 WinAlfred/Models/UserSelectedRecords.cs create mode 100644 WinAlfred/Models/UserSetting.cs create mode 100644 WinAlfred/Models/WebSearch.cs create mode 100644 WinAlfred/WebSearchSetting.xaml create mode 100644 WinAlfred/WebSearchSetting.xaml.cs diff --git a/WinAlfred/Helper/CommonStorage.cs b/WinAlfred/Helper/CommonStorage.cs new file mode 100644 index 0000000000..84cbf58e15 --- /dev/null +++ b/WinAlfred/Helper/CommonStorage.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; +using System.Threading; +using Newtonsoft.Json; +using WinAlfred.Models; + +namespace WinAlfred.Helper +{ + [Serializable] + public class CommonStorage + { + private static string configPath = Directory.GetCurrentDirectory() + "\\data.json"; + private static object locker = new object(); + private static CommonStorage storage; + + public UserSetting UserSetting { get; set; } + public UserSelectedRecords UserSelectedRecords { get; set; } + + private CommonStorage() + { + //default setting + UserSetting = new UserSetting + { + Theme = "Default", + ReplaceWinR = true, + WebSearches = new List() + }; + + UserSelectedRecords = new UserSelectedRecords(); + } + + public void Save() + { + lock (locker) + { + //json is a good choise, readable and flexiable + string json = JsonConvert.SerializeObject(storage, Formatting.Indented); + File.WriteAllText(configPath, json); + } + } + + private static void Load() + { + if (!File.Exists(configPath)) + { + File.Create(configPath).Close(); + } + string json = File.ReadAllText(configPath); + if (!string.IsNullOrEmpty(json)) + { + try + { + storage = JsonConvert.DeserializeObject(json); + } + catch (Exception e) + { + //on-op, keep default storage + } + } + } + + public static CommonStorage Instance + { + get + { + if (storage == null) + { + lock (locker) + { + if (storage == null) + { + storage = new CommonStorage(); + Load(); + } + } + } + return storage; + } + } + } +} \ No newline at end of file diff --git a/WinAlfred/Helper/GlobalKeyboardHook.cs b/WinAlfred/Helper/GlobalKeyboardHook.cs deleted file mode 100644 index f3c71e59e7..0000000000 --- a/WinAlfred/Helper/GlobalKeyboardHook.cs +++ /dev/null @@ -1,343 +0,0 @@ -/// KEYBOARD.CS -/// (c) 2006 by Emma Burrows -/// This file contains the following items: -/// - KeyboardHook: class to enable low-level keyboard hook using -/// the Windows API. -/// - KeyboardHookEventHandler: delegate to handle the KeyIntercepted -/// event raised by the KeyboardHook class. -/// - KeyboardHookEventArgs: EventArgs class to contain the information -/// returned by the KeyIntercepted event. - -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Text; -using System.Windows.Forms; - -namespace WinAlfred.Helper -{ - /// - /// Low-level keyboard intercept class to trap and suppress system keys. - /// - public class GlobalKeyboardHook : IDisposable - { - /// - /// Parameters accepted by the KeyboardHook constructor. - /// - public enum Parameters - { - None, - AllowAltTab, - AllowWindowsKey, - AllowAltTabAndWindows, - PassAllKeysToNextApp - } - - //Internal parameters - private bool PassAllKeysToNextApp = false; - private bool AllowAltTab = false; - private bool AllowWindowsKey = false; - - //Keyboard API constants - private const int WH_KEYBOARD_LL = 13; - private const int WM_KEYUP = 0x0101; - private const int WM_SYSKEYUP = 0x0105; - - //Modifier key constants - private const int VK_SHIFT = 0x10; - private const int VK_CONTROL = 0x11; - private const int VK_MENU = 0x12; - private const int VK_CAPITAL = 0x14; - - //Variables used in the call to SetWindowsHookEx - private HookHandlerDelegate proc; - private IntPtr hookID = IntPtr.Zero; - internal delegate IntPtr HookHandlerDelegate( - int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam); - - /// - /// Event triggered when a keystroke is intercepted by the - /// low-level hook. - /// - public event KeyboardHookEventHandler KeyIntercepted; - - // Structure returned by the hook whenever a key is pressed - internal struct KBDLLHOOKSTRUCT - { - public int vkCode; - int scanCode; - public int flags; - int time; - int dwExtraInfo; - } - - #region Constructors - /// - /// Sets up a keyboard hook to trap all keystrokes without - /// passing any to other applications. - /// - public GlobalKeyboardHook() - { - proc = new HookHandlerDelegate(HookCallback); - using (Process curProcess = Process.GetCurrentProcess()) - using (ProcessModule curModule = curProcess.MainModule) - { - hookID = NativeMethods.SetWindowsHookEx(WH_KEYBOARD_LL, proc, - NativeMethods.GetModuleHandle(curModule.ModuleName), 0); - } - } - - /// - /// Sets up a keyboard hook with custom parameters. - /// - /// A valid name from the Parameter enum; otherwise, the - /// default parameter Parameter.None will be used. - public GlobalKeyboardHook(string param) - : this() - { - if (!String.IsNullOrEmpty(param) && Enum.IsDefined(typeof(Parameters), param)) - { - SetParameters((Parameters)Enum.Parse(typeof(Parameters), param)); - } - } - - /// - /// Sets up a keyboard hook with custom parameters. - /// - /// A value from the Parameters enum. - public GlobalKeyboardHook(Parameters param) - : this() - { - SetParameters(param); - } - - private void SetParameters(Parameters param) - { - switch (param) - { - case Parameters.None: - break; - case Parameters.AllowAltTab: - AllowAltTab = true; - break; - case Parameters.AllowWindowsKey: - AllowWindowsKey = true; - break; - case Parameters.AllowAltTabAndWindows: - AllowAltTab = true; - AllowWindowsKey = true; - break; - case Parameters.PassAllKeysToNextApp: - PassAllKeysToNextApp = true; - break; - } - } - #endregion - - #region Check Modifier keys - /// - /// Checks whether Alt, Shift, Control or CapsLock - /// is enabled at the same time as another key. - /// Modify the relevant sections and return type - /// depending on what you want to do with modifier keys. - /// - private void CheckModifiers() - { - StringBuilder sb = new StringBuilder(); - - if ((NativeMethods.GetKeyState(VK_CAPITAL) & 0x0001) != 0) - { - //CAPSLOCK is ON - sb.AppendLine("Capslock is enabled."); - } - - if ((NativeMethods.GetKeyState(VK_SHIFT) & 0x8000) != 0) - { - //SHIFT is pressed - sb.AppendLine("Shift is pressed."); - } - if ((NativeMethods.GetKeyState(VK_CONTROL) & 0x8000) != 0) - { - //CONTROL is pressed - sb.AppendLine("Control is pressed."); - } - if ((NativeMethods.GetKeyState(VK_MENU) & 0x8000) != 0) - { - //ALT is pressed - sb.AppendLine("Alt is pressed."); - } - Console.WriteLine(sb.ToString()); - } - #endregion Check Modifier keys - - #region Hook Callback Method - /// - /// Processes the key event captured by the hook. - /// - private IntPtr HookCallback( - int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam) - { - bool AllowKey = PassAllKeysToNextApp; - - //Filter wParam for KeyUp events only - if (nCode >= 0) - { - if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP) - { - - // Check for modifier keys, but only if the key being - // currently processed isn't a modifier key (in other - // words, CheckModifiers will only run if Ctrl, Shift, - // CapsLock or Alt are active at the same time as - // another key) - if (!(lParam.vkCode >= 160 && lParam.vkCode <= 164)) - { - CheckModifiers(); - } - - // Check for key combinations that are allowed to - // get through to Windows - // - // Ctrl+Esc or Windows key - if (AllowWindowsKey) - { - switch (lParam.flags) - { - //Ctrl+Esc - case 0: - if (lParam.vkCode == 27) - AllowKey = true; - break; - - //Windows keys - case 1: - if ((lParam.vkCode == 91) || (lParam.vkCode == 92)) - AllowKey = true; - break; - } - } - // Alt+Tab - if (AllowAltTab) - { - if ((lParam.flags == 32) && (lParam.vkCode == 9)) - AllowKey = true; - } - - OnKeyIntercepted(new KeyboardHookEventArgs(lParam.vkCode, AllowKey)); - } - - //If this key is being suppressed, return a dummy value - if (AllowKey == false) - return (System.IntPtr)1; - } - //Pass key to next application - return NativeMethods.CallNextHookEx(hookID, nCode, wParam, ref lParam); - - } - #endregion - - #region Event Handling - /// - /// Raises the KeyIntercepted event. - /// - /// An instance of KeyboardHookEventArgs - public void OnKeyIntercepted(KeyboardHookEventArgs e) - { - if (KeyIntercepted != null) - KeyIntercepted(e); - } - - /// - /// Delegate for KeyboardHook event handling. - /// - /// An instance of InterceptKeysEventArgs. - public delegate void KeyboardHookEventHandler(KeyboardHookEventArgs e); - - /// - /// Event arguments for the KeyboardHook class's KeyIntercepted event. - /// - public class KeyboardHookEventArgs : System.EventArgs - { - - private string keyName; - private int keyCode; - private bool passThrough; - - /// - /// The name of the key that was pressed. - /// - public string KeyName - { - get { return keyName; } - } - - /// - /// The virtual key code of the key that was pressed. - /// - public int KeyCode - { - get { return keyCode; } - } - - /// - /// True if this key combination was passed to other applications, - /// false if it was trapped. - /// - public bool PassThrough - { - get { return passThrough; } - } - - public KeyboardHookEventArgs(int evtKeyCode, bool evtPassThrough) - { - keyName = ((Keys)evtKeyCode).ToString(); - keyCode = evtKeyCode; - passThrough = evtPassThrough; - } - - } - - #endregion - - #region IDisposable Members - /// - /// Releases the keyboard hook. - /// - public void Dispose() - { - NativeMethods.UnhookWindowsHookEx(hookID); - } - #endregion - - #region Native methods - - [ComVisible(false), - System.Security.SuppressUnmanagedCodeSecurity()] - internal class NativeMethods - { - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr GetModuleHandle(string lpModuleName); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr SetWindowsHookEx(int idHook, - HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool UnhookWindowsHookEx(IntPtr hhk); - - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, - IntPtr wParam, ref KBDLLHOOKSTRUCT lParam); - - [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] - public static extern short GetKeyState(int keyCode); - - } - - - #endregion - } -} - - diff --git a/WinAlfred/Helper/SelectedRecords.cs b/WinAlfred/Helper/SelectedRecords.cs deleted file mode 100644 index 48375cf25d..0000000000 --- a/WinAlfred/Helper/SelectedRecords.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.Serialization.Formatters.Binary; -using System.Windows.Documents; -using WinAlfred.Plugin; - -namespace WinAlfred.Helper -{ - public class SelectedRecords - { - private int hasAddedCount = 0; - private Dictionary dict = new Dictionary(); - private string filePath = Directory.GetCurrentDirectory() + "\\selectedRecords.dat"; - private static readonly SelectedRecords instance = new SelectedRecords(); - - private SelectedRecords() - { - LoadSelectedRecords(); - } - - public static SelectedRecords Instance - { - get - { - return instance; - } - } - - private void LoadSelectedRecords() - { - if (File.Exists(filePath)) - { - FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); - BinaryFormatter b = new BinaryFormatter(); - dict = (Dictionary)b.Deserialize(fileStream); - fileStream.Close(); - } - - if (dict.Count > 1000) - { - List onlyOnceKeys = (from c in dict where c.Value == 1 select c.Key).ToList(); - foreach (string onlyOnceKey in onlyOnceKeys) - { - dict.Remove(onlyOnceKey); - } - } - } - - public void AddSelect(Result result) - { - hasAddedCount++; - if (hasAddedCount == 10) - { - SaveSelectedRecords(); - hasAddedCount = 0; - } - - if (dict.ContainsKey(result.ToString())) - { - dict[result.ToString()] += 1; - } - else - { - dict.Add(result.ToString(), 1); - } - } - - public int GetSelectedCount(Result result) - { - if (dict.ContainsKey(result.ToString())) - { - return dict[result.ToString()]; - } - return 0; - } - - private void SaveSelectedRecords() - { - FileStream fileStream = new FileStream("selectedRecords.dat", FileMode.Create); - BinaryFormatter b = new BinaryFormatter(); - b.Serialize(fileStream, dict); - fileStream.Close(); - } - } -} diff --git a/WinAlfred/Helper/Settings.cs b/WinAlfred/Helper/Settings.cs deleted file mode 100644 index 96f7c29329..0000000000 --- a/WinAlfred/Helper/Settings.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace WinAlfred.Helper -{ - public class Settings - { - private string configPath = Directory.GetCurrentDirectory() + "\\config.ini"; - private static readonly Settings settings = new Settings(); - IniParser parser; - - public string Theme { get; set; } - public bool ReplaceWinR { get; set; } - - private Settings() - { - if (!File.Exists(configPath)) File.Create(configPath); - parser = new IniParser(configPath); - LoadSettings(); - } - - private void LoadSettings() - { - Theme = parser.GetSetting("ui", "theme"); - - string replaceWinRStr = parser.GetSetting("hotkey", "replaceWinR"); - bool replace = true; - if (bool.TryParse(replaceWinRStr, out replace)) - { - ReplaceWinR = replace; - } - } - - public void SaveSettings() - { - parser.AddSetting("ui", "theme", Theme); - parser.AddSetting("hotkey", "replaceWinR", ReplaceWinR.ToString()); - parser.SaveSettings(); - } - - public static Settings Instance - { - get - { - return settings; - } - } - - - } -} diff --git a/WinAlfred/MainWindow.xaml.cs b/WinAlfred/MainWindow.xaml.cs index 59dad3f4e0..0851394f40 100644 --- a/WinAlfred/MainWindow.xaml.cs +++ b/WinAlfred/MainWindow.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Threading; @@ -41,15 +42,13 @@ namespace WinAlfred resultCtrl.resultItemChangedEvent += resultCtrl_resultItemChangedEvent; ThreadPool.SetMaxThreads(30, 10); InitProgressbarAnimation(); - try { - ChangeStyles(Settings.Instance.Theme); - + SetTheme(CommonStorage.Instance.UserSetting.Theme); } - catch (System.IO.IOException) + catch (IOException) { - ChangeStyles(Settings.Instance.Theme = "Default"); + SetTheme(CommonStorage.Instance.UserSetting.Theme = "Default"); } } @@ -229,7 +228,7 @@ namespace WinAlfred private bool KListener_hookedKeyboardCallback(KeyEvent keyevent, int vkcode, SpecialKeyState state) { - if (Settings.Instance.ReplaceWinR) + if (CommonStorage.Instance.UserSetting.ReplaceWinR) { //todo:need refatoring. move those codes to CMD file or expose events if (keyevent == KeyEvent.WM_KEYDOWN && vkcode == (int)Keys.R && state.WinPressed) @@ -290,7 +289,7 @@ namespace WinAlfred Result result = resultCtrl.AcceptSelect(); if (result != null) { - SelectedRecords.Instance.AddSelect(result); + CommonStorage.Instance.UserSelectedRecords.Add(result); if (!result.DontHideWinAlfredAfterSelect) { HideWinAlfred(); @@ -307,7 +306,7 @@ namespace WinAlfred //todo:this should be opened to users, it's their choise to use it or not in thier workflows list.ForEach(o => { - if (o.AutoAjustScore) o.Score += SelectedRecords.Instance.GetSelectedCount(o); + if (o.AutoAjustScore) o.Score += CommonStorage.Instance.UserSelectedRecords.GetSelectedCount(o); }); resultCtrl.Dispatcher.Invoke(new Action(() => { @@ -317,7 +316,7 @@ namespace WinAlfred } } - public void ChangeStyles(string themeName) + public void SetTheme(string themeName) { ResourceDictionary dict = new ResourceDictionary { @@ -367,6 +366,5 @@ namespace WinAlfred } #endregion - } } \ No newline at end of file diff --git a/WinAlfred/Models/UserSelectedRecords.cs b/WinAlfred/Models/UserSelectedRecords.cs new file mode 100644 index 0000000000..de4266b5f8 --- /dev/null +++ b/WinAlfred/Models/UserSelectedRecords.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization.Formatters.Binary; +using WinAlfred.Helper; +using WinAlfred.Plugin; + +namespace WinAlfred.Models +{ + [Serializable] + public class UserSelectedRecords + { + private static int hasAddedCount = 0; + + public Dictionary Records = new Dictionary(); + + public void Add(Result result) + { + if (Records.ContainsKey(result.ToString())) + { + Records[result.ToString()] += 1; + } + else + { + Records.Add(result.ToString(), 1); + } + + //hasAddedCount++; + //if (hasAddedCount == 10) + //{ + // hasAddedCount = 0; + //} + CommonStorage.Instance.Save(); + + } + + public int GetSelectedCount(Result result) + { + if (Records.ContainsKey(result.ToString())) + { + return Records[result.ToString()]; + } + return 0; + } + } +} diff --git a/WinAlfred/Models/UserSetting.cs b/WinAlfred/Models/UserSetting.cs new file mode 100644 index 0000000000..58de8e75cd --- /dev/null +++ b/WinAlfred/Models/UserSetting.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WinAlfred.Models +{ + public class UserSetting + { + public string Theme { get; set; } + public bool ReplaceWinR { get; set; } + public List WebSearches { get; set; } + } +} diff --git a/WinAlfred/Models/WebSearch.cs b/WinAlfred/Models/WebSearch.cs new file mode 100644 index 0000000000..01bead1041 --- /dev/null +++ b/WinAlfred/Models/WebSearch.cs @@ -0,0 +1,10 @@ +namespace WinAlfred.Models +{ + public class WebSearch + { + public string Keyword { get; set; } + public string IconPath { get; set; } + public string Website { get; set; } + public string Enabled { get; set; } + } +} \ No newline at end of file diff --git a/WinAlfred/ResultItem.xaml.cs b/WinAlfred/ResultItem.xaml.cs index 3de43b4b75..290579cfd2 100644 --- a/WinAlfred/ResultItem.xaml.cs +++ b/WinAlfred/ResultItem.xaml.cs @@ -80,7 +80,7 @@ namespace WinAlfred AddHandler(MouseLeftButtonUpEvent, new RoutedEventHandler((o, e) => { Result.Action(); - SelectedRecords.Instance.AddSelect(result); + CommonStorage.Instance.UserSelectedRecords.Add(result); if (!result.DontHideWinAlfredAfterSelect) { App.Window.HideApp(); diff --git a/WinAlfred/SettingWindow.xaml b/WinAlfred/SettingWindow.xaml index 96d2551f5c..299da80f50 100644 --- a/WinAlfred/SettingWindow.xaml +++ b/WinAlfred/SettingWindow.xaml @@ -6,15 +6,57 @@ ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Height="407.447" Width="843.989"> - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WinAlfred/SettingWindow.xaml.cs b/WinAlfred/SettingWindow.xaml.cs index b3fe0a9308..aad464ca76 100644 --- a/WinAlfred/SettingWindow.xaml.cs +++ b/WinAlfred/SettingWindow.xaml.cs @@ -18,13 +18,13 @@ namespace WinAlfred Loaded += Setting_Loaded; cbReplaceWinR.Checked += (o, e) => { - Settings.Instance.ReplaceWinR = true; - Settings.Instance.SaveSettings(); + CommonStorage.Instance.UserSetting.ReplaceWinR = true; + CommonStorage.Instance.Save(); }; cbReplaceWinR.Unchecked += (o, e) => { - Settings.Instance.ReplaceWinR = false; - Settings.Instance.SaveSettings(); + CommonStorage.Instance.UserSetting.ReplaceWinR = false; + CommonStorage.Instance.Save(); }; } @@ -36,8 +36,8 @@ namespace WinAlfred themeComboBox.Items.Add(themeName); } - themeComboBox.SelectedItem = Settings.Instance.Theme; - cbReplaceWinR.IsChecked = Settings.Instance.ReplaceWinR; + themeComboBox.SelectedItem = CommonStorage.Instance.UserSetting.Theme; + cbReplaceWinR.IsChecked = CommonStorage.Instance.UserSetting.ReplaceWinR; } private List LoadAvailableThemes() @@ -49,9 +49,15 @@ namespace WinAlfred private void ThemeComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { string themeName = themeComboBox.SelectedItem.ToString(); - mainWindow.ChangeStyles(themeName); - Settings.Instance.Theme = themeName; - Settings.Instance.SaveSettings(); + mainWindow.SetTheme(themeName); + CommonStorage.Instance.UserSetting.Theme = themeName; + CommonStorage.Instance.Save(); + } + + private void ButtonBase_OnClick(object sender, RoutedEventArgs e) + { + WebSearchSetting webSearch = new WebSearchSetting(); + webSearch.Show(); } } } diff --git a/WinAlfred/WebSearchSetting.xaml b/WinAlfred/WebSearchSetting.xaml new file mode 100644 index 0000000000..161f446fe7 --- /dev/null +++ b/WinAlfred/WebSearchSetting.xaml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + Search URL: + + Perform a search on a website and copy the result URL. Replace your search term with {query} in curly brackets + + Title: + + What to show in the WinAlfred. The search query is automatically appended for clarity. + + Keyword: + + What you type to use this shortcut. + + Validation: + + + + + Type some text and click test to check it works. + + + + + + + diff --git a/WinAlfred/WebSearchSetting.xaml.cs b/WinAlfred/WebSearchSetting.xaml.cs new file mode 100644 index 0000000000..3d31e61b69 --- /dev/null +++ b/WinAlfred/WebSearchSetting.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace WinAlfred +{ + public partial class WebSearchSetting : Window + { + public WebSearchSetting() + { + InitializeComponent(); + } + + private void BtnCancel_OnClick(object sender, RoutedEventArgs e) + { + Close(); + } + } +} diff --git a/WinAlfred/WinAlfred.csproj b/WinAlfred/WinAlfred.csproj index 132ef47025..87a16824e1 100644 --- a/WinAlfred/WinAlfred.csproj +++ b/WinAlfred/WinAlfred.csproj @@ -41,7 +41,7 @@ DEBUG;TRACE prompt 4 - false + true AnyCPU @@ -85,6 +85,7 @@ ..\packages\Newtonsoft.Json.5.0.8\lib\net35\Newtonsoft.Json.dll + @@ -116,10 +117,11 @@ - - + + + @@ -138,10 +140,13 @@ ResultItem.xaml - + SettingWindow.xaml + + WebSearchSetting.xaml + MSBuild:Compile Designer @@ -178,6 +183,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile +