From 2d9ae728ac96dff3439c76876babb42568e73b5f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 2 Aug 2008 13:57:07 +0000 Subject: [PATCH] Allow opening files/projects by drag+drop onto the start page. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3280 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Misc/StartPage/Project/Src/StartPage.cs | 29 ++++++++++++ .../Src/Gui/Workbench/DefaultWorkbench.cs | 46 +++++++++++-------- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/AddIns/Misc/StartPage/Project/Src/StartPage.cs b/src/AddIns/Misc/StartPage/Project/Src/StartPage.cs index 9fead23277..689692fca7 100644 --- a/src/AddIns/Misc/StartPage/Project/Src/StartPage.cs +++ b/src/AddIns/Misc/StartPage/Project/Src/StartPage.cs @@ -5,6 +5,7 @@ // $Revision$ // +using ICSharpCode.SharpDevelop; using System; using System.Windows.Forms; using ICSharpCode.Core; @@ -45,6 +46,34 @@ namespace ICSharpCode.StartPage if (btn != null) { btn.Click += delegate {new ICSharpCode.SharpDevelop.Project.Commands.CreateNewSolution().Run();}; } + + pane.WebBrowser.Navigating += pane_WebBrowser_Navigating; + pane.WebBrowser.Navigated += pane_WebBrowser_Navigated; + } + + void pane_WebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) + { + WebBrowser webBrowser = (WebBrowser)sender; + webBrowser.Navigating -= pane_WebBrowser_Navigating; + webBrowser.Navigated -= pane_WebBrowser_Navigated; + } + + void pane_WebBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e) + { + try { + if (e.Url.IsFile) { + e.Cancel = true; + string file = e.Url.LocalPath; + IProjectLoader loader = ProjectService.GetProjectLoader(file); + if (loader != null) { + FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file); + } else { + FileService.OpenFile(file); + } + } + } catch (Exception ex) { + MessageService.ShowError(ex); + } } public override void GoHome(HtmlViewPane pane) diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index b4f9914ee3..d5579efb61 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -639,35 +639,43 @@ namespace ICSharpCode.SharpDevelop.Gui protected override void OnDragEnter(DragEventArgs e) { - base.OnDragEnter(e); - if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) { - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); - foreach (string file in files) { - if (File.Exists(file)) { - e.Effect = DragDropEffects.Copy; - return; + try { + base.OnDragEnter(e); + if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + foreach (string file in files) { + if (File.Exists(file)) { + e.Effect = DragDropEffects.Copy; + return; + } } } + e.Effect = DragDropEffects.None; + } catch (Exception ex) { + MessageService.ShowError(ex); } - e.Effect = DragDropEffects.None; } protected override void OnDragDrop(DragEventArgs e) { - base.OnDragDrop(e); - if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) { - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); - - foreach (string file in files) { - if (File.Exists(file)) { - IProjectLoader loader = ProjectService.GetProjectLoader(file); - if (loader != null) { - FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file); - } else { - FileService.OpenFile(file); + try { + base.OnDragDrop(e); + if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + + foreach (string file in files) { + if (File.Exists(file)) { + IProjectLoader loader = ProjectService.GetProjectLoader(file); + if (loader != null) { + FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file); + } else { + FileService.OpenFile(file); + } } } } + } catch (Exception ex) { + MessageService.ShowError(ex); } }