From 95e468c90a9f20b8431fbe649877387e91a68598 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Mon, 2 Feb 2015 23:28:40 +0800 Subject: [PATCH] Add drop event [WIP] --- Plugins/Wox.Plugin.Program/Images/folder.png | Bin 0 -> 4260 bytes .../ProgramSources/FileSystemProgramSource.cs | 15 +- Plugins/Wox.Plugin.Program/Programs.cs | 6 + .../Wox.Plugin.Program.csproj | 289 +++++++++--------- Wox.Core/Updater/UpdaterManager.cs | 4 +- Wox.Plugin/EventHandler.cs | 3 + Wox.Plugin/IPublicAPI.cs | 5 + Wox/MainWindow.xaml.cs | 16 + Wox/ResultPanel.xaml | 2 +- Wox/ResultPanel.xaml.cs | 16 + 10 files changed, 199 insertions(+), 157 deletions(-) create mode 100644 Plugins/Wox.Plugin.Program/Images/folder.png diff --git a/Plugins/Wox.Plugin.Program/Images/folder.png b/Plugins/Wox.Plugin.Program/Images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..330cb2e4bf8ac344014dd3d22910de1ae884343a GIT binary patch literal 4260 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 literal 0 HcmV?d00001 diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs index cb62dc8316..f4997615e8 100644 --- a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs +++ b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs @@ -16,7 +16,8 @@ namespace Wox.Plugin.Program.ProgramSources this.baseDirectory = baseDirectory; } - public FileSystemProgramSource(ProgramSource source):this(source.Location) + public FileSystemProgramSource(ProgramSource source) + : this(source.Location) { this.BonusPoints = source.BonusPoints; } @@ -50,17 +51,9 @@ namespace Wox.Plugin.Program.ProgramSources GetAppFromDirectory(subDirectory, list); } } - catch (UnauthorizedAccessException e) + catch (Exception e) { - Log.Warn(string.Format("Can't access to directory {0}", path)); - } - catch (DirectoryNotFoundException e) - { - Log.Warn(string.Format("Directory {0} doesn't exist", path)); - } - catch (PathTooLongException e) - { - Log.Warn(string.Format("File path too long: {0}", e.Message)); + Log.Warn(string.Format("GetAppFromDirectory failed: {0} - {1}", path, e.Message)); } } diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index 7028848b83..92da2c1959 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -103,6 +103,7 @@ namespace Wox.Plugin.Program public void Init(PluginInitContext context) { this.context = context; + this.context.API.ResultItemDropEvent += API_ResultItemDropEvent; using (new Timeit("Preload programs")) { programs = ProgramCacheStorage.Instance.Programs; @@ -114,6 +115,11 @@ namespace Wox.Plugin.Program } } + void API_ResultItemDropEvent(Result result, IDataObject dropObject) + { + + } + public static void IndexPrograms() { lock (lockObject) diff --git a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj index a517e1407e..0f357736f1 100644 --- a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj +++ b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj @@ -1,150 +1,153 @@ - - - - - Debug - AnyCPU - {FDB3555B-58EF-4AE6-B5F1-904719637AB4} - Library - Properties - Wox.Plugin.Program - Wox.Plugin.Program - v3.5 - 512 - ..\..\ - true - - - - true - full - false - ..\..\Output\Debug\Plugins\Wox.Plugin.Program\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - ..\..\Output\Release\Plugins\Wox.Plugin.Program\ - TRACE - prompt - 4 - false - - - - False - ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - ProgramSetting.xaml - - - - - - - - - ProgramSuffixes.xaml - - - - - - - - PreserveNewest - - - - - PreserveNewest - - - PreserveNewest - - - MSBuild:Compile - Designer - PreserveNewest - - - - - MSBuild:Compile - Designer - PreserveNewest - - - MSBuild:Compile - Designer - PreserveNewest - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - {4fd29318-a8ab-4d8f-aa47-60bc241b8da3} - Wox.Infrastructure - - - {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} - Wox.Plugin - - - - - {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} - 1 - 0 - 0 - tlbimp - False - True - - - - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - + + + + + Debug + AnyCPU + {FDB3555B-58EF-4AE6-B5F1-904719637AB4} + Library + Properties + Wox.Plugin.Program + Wox.Plugin.Program + v3.5 + 512 + ..\..\ + true + + + + true + full + false + ..\..\Output\Debug\Plugins\Wox.Plugin.Program\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + ..\..\Output\Release\Plugins\Wox.Plugin.Program\ + TRACE + prompt + 4 + false + + + + False + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + ProgramSetting.xaml + + + + + + + + + ProgramSuffixes.xaml + + + + + + + + PreserveNewest + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + MSBuild:Compile + Designer + PreserveNewest + + + + + MSBuild:Compile + Designer + PreserveNewest + + + MSBuild:Compile + Designer + PreserveNewest + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + {4fd29318-a8ab-4d8f-aa47-60bc241b8da3} + Wox.Infrastructure + + + {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} + Wox.Plugin + + + + + {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} + 1 + 0 + 0 + tlbimp + False + True + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + --> \ No newline at end of file diff --git a/Wox.Core/Updater/UpdaterManager.cs b/Wox.Core/Updater/UpdaterManager.cs index 258d3c0b6f..21b43cfef7 100644 --- a/Wox.Core/Updater/UpdaterManager.cs +++ b/Wox.Core/Updater/UpdaterManager.cs @@ -22,8 +22,8 @@ namespace Wox.Core.Updater { private static UpdaterManager instance; private const string VersionCheckURL = "https://api.getwox.com/release/latest/"; - //private const string UpdateFeedURL = "http://upgrade.getwox.com/update.xml"; - private const string UpdateFeedURL = "http://127.0.0.1:8888/update.xml"; + private const string UpdateFeedURL = "http://upgrade.getwox.com/update.xml"; + //private const string UpdateFeedURL = "http://127.0.0.1:8888/update.xml"; private static SemanticVersion currentVersion; public event EventHandler PrepareUpdateReady; diff --git a/Wox.Plugin/EventHandler.cs b/Wox.Plugin/EventHandler.cs index f3c6121f92..3aa31c938a 100644 --- a/Wox.Plugin/EventHandler.cs +++ b/Wox.Plugin/EventHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Windows; using System.Windows.Input; namespace Wox.Plugin @@ -9,6 +10,8 @@ namespace Wox.Plugin public delegate void WoxKeyDownEventHandler(WoxKeyDownEventArgs e); public delegate void AfterWoxQueryEventHandler(WoxQueryEventArgs e); + public delegate void ResultItemDropEventHandler(Result result, IDataObject dropObject); + /// /// Global keyboard events /// diff --git a/Wox.Plugin/IPublicAPI.cs b/Wox.Plugin/IPublicAPI.cs index 972d281f92..1e9ec5c059 100644 --- a/Wox.Plugin/IPublicAPI.cs +++ b/Wox.Plugin/IPublicAPI.cs @@ -119,5 +119,10 @@ namespace Wox.Plugin /// Fired before wox start to execute a query /// event AfterWoxQueryEventHandler BeforeWoxQueryEvent; + + /// + /// Fired after drop to result item of current plugin + /// + event ResultItemDropEventHandler ResultItemDropEvent; } } diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 1f408c20e4..1e6cae46a6 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -34,6 +34,7 @@ using MenuItem = System.Windows.Forms.MenuItem; using MessageBox = System.Windows.MessageBox; using ToolTip = System.Windows.Controls.ToolTip; using Wox.Infrastructure.Logger; +using IDataObject = System.Windows.IDataObject; namespace Wox { @@ -135,6 +136,7 @@ namespace Wox public event WoxGlobalKeyboardEventHandler GlobalKeyboardEvent; public event AfterWoxQueryEventHandler AfterWoxQueryEvent; public event AfterWoxQueryEventHandler BeforeWoxQueryEvent; + public event ResultItemDropEventHandler ResultItemDropEvent; public void PushResults(Query query, PluginMetadata plugin, List results) { @@ -168,6 +170,7 @@ namespace Wox progressBar.ToolTip = toolTip; InitialTray(); pnlResult.LeftMouseClickEvent += SelectResult; + pnlResult.ItemDropEvent += pnlResult_ItemDropEvent; pnlContextMenu.LeftMouseClickEvent += SelectResult; pnlResult.RightMouseClickEvent += pnlResult_RightMouseClickEvent; @@ -192,6 +195,19 @@ namespace Wox }); } + void pnlResult_ItemDropEvent(Result result, IDataObject dropDataObject) + { + if (ResultItemDropEvent != null) + { + PluginPair pluginPair = PluginManager.AllPlugins.FirstOrDefault(o => o.Plugin == ResultItemDropEvent.Target); + if (pluginPair != null) + { + //todo: + ResultItemDropEvent(result, dropDataObject); + } + } + } + private bool KListener_hookedKeyboardCallback(KeyEvent keyevent, int vkcode, SpecialKeyState state) { if (GlobalKeyboardEvent != null) diff --git a/Wox/ResultPanel.xaml b/Wox/ResultPanel.xaml index a156d6fc18..a3ada3cd38 100644 --- a/Wox/ResultPanel.xaml +++ b/Wox/ResultPanel.xaml @@ -7,7 +7,7 @@ mc:Ignorable="d" d:DesignWidth="100" d:DesignHeight="100"> - + diff --git a/Wox/ResultPanel.xaml.cs b/Wox/ResultPanel.xaml.cs index 7274a8c544..18ddd76707 100644 --- a/Wox/ResultPanel.xaml.cs +++ b/Wox/ResultPanel.xaml.cs @@ -16,6 +16,7 @@ namespace Wox { public event Action LeftMouseClickEvent; public event Action RightMouseClickEvent; + public event Action ItemDropEvent; protected virtual void OnRightMouseClick(Result result) { @@ -208,5 +209,20 @@ namespace Wox } Select(index); } + + private void ListBoxItem_OnDrop(object sender, DragEventArgs e) + { + var item = ItemsControl.ContainerFromElement(lbResults, e.OriginalSource as DependencyObject) as ListBoxItem; + if (item != null) + { + OnItemDropEvent(item.DataContext as Result,e.Data); + } + } + + protected virtual void OnItemDropEvent(Result obj, IDataObject data) + { + var handler = ItemDropEvent; + if (handler != null) handler(obj,data); + } } } \ No newline at end of file