From 64254d99a6795388de376f99a0ac9f0be5d817c2 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 14 Sep 2012 22:40:22 +0200 Subject: [PATCH] Move IMenuItemBuilder into ICSharpCode.Core. Changes ICustomizedCommands to [ViewContentService] --- .../Project/Src/CSharpLanguageBinding.cs | 2 -- .../Project/Src/CSharpSemanticHighlighter.cs | 2 +- .../Search/SearchResultPadToolbarCommands.cs | 2 +- .../Base/Project/Src/Commands/BuildCommands.cs | 4 ++-- .../Base/Project/Src/Commands/FileCommands.cs | 15 ++++++++------- .../Base/Project/Src/Commands/MenuItemBuilders.cs | 14 +++++++------- .../Base/Project/Workbench/ICustomizedCommands.cs | 3 +-- src/Main/Core/Project/ICSharpCode.Core.csproj | 1 + .../DefaultDoozers/MenuItem}/IMenuItemBuilder.cs | 6 +++--- .../Core/Project/Src/Services/ServiceSingleton.cs | 2 +- .../ICSharpCode.Core.Presentation.csproj | 1 - .../Menu/MenuService.cs | 6 +++--- .../ToolBar/ToolBarService.cs | 2 +- .../ICSharpCode.Core.WinForms.csproj | 1 - .../Menu/ISubmenuBuilder.cs | 13 ------------- src/Main/ICSharpCode.Core.WinForms/Menu/Menu.cs | 5 +++-- .../ICSharpCode.Core.WinForms/Menu/MenuService.cs | 5 +++-- .../ToolBar/ToolBarDropDownButton.cs | 5 +++-- .../ToolBar/ToolBarService.cs | 7 ++++--- .../ToolBar/ToolBarSplitButton.cs | 8 +++----- .../Workbench/SingleInstanceHelper.cs | 8 ++++++-- 21 files changed, 51 insertions(+), 61 deletions(-) rename src/Main/{ICSharpCode.Core.Presentation/Menu => Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem}/IMenuItemBuilder.cs (73%) delete mode 100644 src/Main/ICSharpCode.Core.WinForms/Menu/ISubmenuBuilder.cs diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs index 37bab9ad6a..91ea98d700 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs @@ -34,7 +34,6 @@ namespace CSharpBinding } ITextEditor editor; - CSharpSemanticHighlighter semanticHighlighter; IssueManager inspectionManager; IList contextActionProviders; @@ -54,7 +53,6 @@ namespace CSharpBinding public override void Detach() { //codeManipulation.Dispose(); - IHighlighter highlighter = editor.GetService(typeof(IHighlighter)) as IHighlighter; if (inspectionManager != null) { inspectionManager.Dispose(); inspectionManager = null; diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs index 15cc5090b6..bcfe44d06c 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs @@ -152,7 +152,7 @@ namespace CSharpBinding void ParserService_ParseInformationUpdated(object sender, ParseInformationEventArgs e) { - if (e.FileName == document.FileName && invalidLines.Count > 0) { + if (FileUtility.IsEqualFileName(e.FileName, document.FileName) && invalidLines.Count > 0) { cachedLines.Clear(); foreach (IDocumentLine line in invalidLines) { if (!line.IsDeleted) { diff --git a/src/Main/Base/Project/Editor/Search/SearchResultPadToolbarCommands.cs b/src/Main/Base/Project/Editor/Search/SearchResultPadToolbarCommands.cs index bea6194860..3562cee595 100644 --- a/src/Main/Base/Project/Editor/Search/SearchResultPadToolbarCommands.cs +++ b/src/Main/Base/Project/Editor/Search/SearchResultPadToolbarCommands.cs @@ -13,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search { public class LastSearchResultsBuilder : IMenuItemBuilder { - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { List items = new List(); foreach (ISearchResult searchResult in SearchResultsPad.Instance.LastSearches) { diff --git a/src/Main/Base/Project/Src/Commands/BuildCommands.cs b/src/Main/Base/Project/Src/Commands/BuildCommands.cs index 5ed48d0acb..a628c8988d 100644 --- a/src/Main/Base/Project/Src/Commands/BuildCommands.cs +++ b/src/Main/Base/Project/Src/Commands/BuildCommands.cs @@ -242,7 +242,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public class SetConfigurationMenuBuilder : IMenuItemBuilder { - public System.Collections.ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { if (ProjectService.OpenSolution == null) return new MenuItem[0]; @@ -270,7 +270,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public class SetPlatformMenuBuilder : IMenuItemBuilder { - public System.Collections.ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { if (ProjectService.OpenSolution == null) return new MenuItem[0]; diff --git a/src/Main/Base/Project/Src/Commands/FileCommands.cs b/src/Main/Base/Project/Src/Commands/FileCommands.cs index 049354112d..eaf0ce6277 100644 --- a/src/Main/Base/Project/Src/Commands/FileCommands.cs +++ b/src/Main/Base/Project/Src/Commands/FileCommands.cs @@ -73,10 +73,9 @@ namespace ICSharpCode.SharpDevelop.Commands internal static void Save(IViewContent content) { if (content != null && content.IsDirty) { - if (content is ICustomizedCommands) { - if (((ICustomizedCommands)content).SaveCommand()) { - return; - } + var customizedCommands = content.GetService(); + if (customizedCommands != null && customizedCommands.SaveCommand()) { + return; } if (content.IsViewOnly) { return; @@ -143,7 +142,8 @@ namespace ICSharpCode.SharpDevelop.Commands foreach (IViewContent content in window.ViewContents) { // try to run customized Save As Command, exclude ViewContent if successful - if (content is ICustomizedCommands && (content as ICustomizedCommands).SaveAsCommand()) + var customizedCommands = content.GetService(); + if (customizedCommands != null && customizedCommands.SaveAsCommand()) continue; // exclude view only ViewContents if (content.IsViewOnly) @@ -195,8 +195,9 @@ namespace ICSharpCode.SharpDevelop.Commands public static void SaveAll() { foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) { - if (content is ICustomizedCommands && content.IsDirty) { - ((ICustomizedCommands)content).SaveCommand(); + var customizedCommands = content.GetService(); + if (customizedCommands != null && content.IsDirty) { + customizedCommands.SaveCommand(); } } foreach (OpenedFile file in SD.FileService.OpenedFiles) { diff --git a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs index 4c2f0f0de8..cb7472a00e 100644 --- a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs +++ b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs @@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Commands return items; } - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { if (NavigationService.CanNavigateBack || NavigationService.CanNavigateForwards) { ICollection points = NavigationService.Points; @@ -135,7 +135,7 @@ namespace ICSharpCode.SharpDevelop.Commands public class RecentFilesMenuBuilder : IMenuItemBuilder { - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { IRecentOpen recentOpen = SD.FileService.RecentOpen; @@ -165,7 +165,7 @@ namespace ICSharpCode.SharpDevelop.Commands public class RecentProjectsMenuBuilder : IMenuItemBuilder { - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { IRecentOpen recentOpen = SD.FileService.RecentOpen; @@ -195,7 +195,7 @@ namespace ICSharpCode.SharpDevelop.Commands public class ToolMenuBuilder : IMenuItemBuilder { - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { var items = new System.Windows.Controls.MenuItem[ToolLoader.Tool.Count]; for (int i = 0; i < ToolLoader.Tool.Count; ++i) { @@ -278,7 +278,7 @@ namespace ICSharpCode.SharpDevelop.Commands public class OpenContentsMenuBuilder : IMenuItemBuilder { - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { int windowCount = WorkbenchSingleton.Workbench.WorkbenchWindowCollection.Count; if (windowCount == 0) { @@ -452,9 +452,9 @@ namespace ICSharpCode.SharpDevelop.Commands get; } - public ICollection BuildItems(Codon codon, object owner) + public IEnumerable BuildItems(Codon codon, object owner) { - ArrayList list = new ArrayList(); + List list = new List(); foreach (PadDescriptor padContent in WorkbenchSingleton.Workbench.PadContentCollection) { if (padContent.Category == Category) { var item = new System.Windows.Controls.MenuItem(); diff --git a/src/Main/Base/Project/Workbench/ICustomizedCommands.cs b/src/Main/Base/Project/Workbench/ICustomizedCommands.cs index cb5046800d..11dc2aac45 100644 --- a/src/Main/Base/Project/Workbench/ICustomizedCommands.cs +++ b/src/Main/Base/Project/Workbench/ICustomizedCommands.cs @@ -5,11 +5,10 @@ using System; namespace ICSharpCode.SharpDevelop.Workbench { - // TODO: change to [ViewContentService] - /// /// Allows an IViewContent to handle the save command on its own instead of using OpenedFile. /// + [ViewContentService] public interface ICustomizedCommands { /// diff --git a/src/Main/Core/Project/ICSharpCode.Core.csproj b/src/Main/Core/Project/ICSharpCode.Core.csproj index b9b263b36c..a69752ba51 100644 --- a/src/Main/Core/Project/ICSharpCode.Core.csproj +++ b/src/Main/Core/Project/ICSharpCode.Core.csproj @@ -73,6 +73,7 @@ + diff --git a/src/Main/ICSharpCode.Core.Presentation/Menu/IMenuItemBuilder.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/IMenuItemBuilder.cs similarity index 73% rename from src/Main/ICSharpCode.Core.Presentation/Menu/IMenuItemBuilder.cs rename to src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/IMenuItemBuilder.cs index 52013e256a..22efa73f2b 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Menu/IMenuItemBuilder.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/IMenuItemBuilder.cs @@ -2,15 +2,15 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; -using System.Collections; +using System.Collections.Generic; -namespace ICSharpCode.Core.Presentation +namespace ICSharpCode.Core { /// /// Used to include a dynamically built list of menu items. /// public interface IMenuItemBuilder { - ICollection BuildItems(Codon codon, object owner); + IEnumerable BuildItems(Codon codon, object parameter); } } diff --git a/src/Main/Core/Project/Src/Services/ServiceSingleton.cs b/src/Main/Core/Project/Src/Services/ServiceSingleton.cs index e0d881476d..e55d8437ba 100644 --- a/src/Main/Core/Project/Src/Services/ServiceSingleton.cs +++ b/src/Main/Core/Project/Src/Services/ServiceSingleton.cs @@ -37,7 +37,7 @@ namespace ICSharpCode.Core } /// - /// Retrieves the service of type from the provider. + /// Retrieves the service of type from the provider. /// If the service cannot be found, a will be thrown. /// public static T GetRequiredService() diff --git a/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj b/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj index c4b8d47f3b..0e02fdd26b 100644 --- a/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj +++ b/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj @@ -85,7 +85,6 @@ - diff --git a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs index 63de2b7583..6c89195d45 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs @@ -146,7 +146,7 @@ namespace ICSharpCode.Core.Presentation this.caller = caller; } - public ICollection BuildItems() + public IEnumerable BuildItems() { return builder.BuildItems(codon, caller); } @@ -165,11 +165,11 @@ namespace ICSharpCode.Core.Presentation static IList ExpandMenuBuilders(ICollection input, bool addDummyEntryIfMenuEmpty) { - ArrayList result = new ArrayList(input.Count); + List result = new List(input.Count); foreach (object o in input) { MenuItemBuilderPlaceholder p = o as MenuItemBuilderPlaceholder; if (p != null) { - ICollection c = p.BuildItems(); + IEnumerable c = p.BuildItems(); if (c != null) result.AddRange(c); } else { diff --git a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs index f7643165eb..3615d97a2e 100644 --- a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs +++ b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.Core.Presentation static IList CreateToolBarItems(UIElement inputBindingOwner, IEnumerable descriptors) { - ArrayList result = new ArrayList(); + List result = new List(); foreach (ToolbarItemDescriptor descriptor in descriptors) { object item = CreateToolBarItemFromDescriptor(inputBindingOwner, descriptor); IMenuItemBuilder submenuBuilder = item as IMenuItemBuilder; diff --git a/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj b/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj index d13b3393f0..bf5cb02fb4 100644 --- a/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj +++ b/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj @@ -54,7 +54,6 @@ Properties\GlobalAssemblyInfo.cs - diff --git a/src/Main/ICSharpCode.Core.WinForms/Menu/ISubmenuBuilder.cs b/src/Main/ICSharpCode.Core.WinForms/Menu/ISubmenuBuilder.cs deleted file mode 100644 index d68fa16bf3..0000000000 --- a/src/Main/ICSharpCode.Core.WinForms/Menu/ISubmenuBuilder.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Windows.Forms; - -namespace ICSharpCode.Core.WinForms -{ - public interface ISubmenuBuilder - { - ToolStripItem[] BuildSubmenu(Codon codon, object owner); - } -} diff --git a/src/Main/ICSharpCode.Core.WinForms/Menu/Menu.cs b/src/Main/ICSharpCode.Core.WinForms/Menu/Menu.cs index 916e4cab09..2a37cc2f68 100644 --- a/src/Main/ICSharpCode.Core.WinForms/Menu/Menu.cs +++ b/src/Main/ICSharpCode.Core.WinForms/Menu/Menu.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; namespace ICSharpCode.Core.WinForms @@ -46,8 +47,8 @@ namespace ICSharpCode.Core.WinForms ((IStatusUpdate)item).UpdateText(); } } else { - ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; - DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller)); + IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item; + DropDownItems.AddRange(submenuBuilder.BuildItems(codon, caller).Cast().ToArray()); } } } diff --git a/src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs b/src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs index 7ef882f2fd..09e442d6ed 100644 --- a/src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs +++ b/src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs @@ -5,6 +5,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Drawing; +using System.Linq; using System.Windows.Forms; namespace ICSharpCode.Core.WinForms @@ -25,8 +26,8 @@ namespace ICSharpCode.Core.WinForms if (item is IStatusUpdate) ((IStatusUpdate)item).UpdateStatus(); } else { - ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; - collection.AddRange(submenuBuilder.BuildSubmenu(descriptor.Codon, descriptor.Parameter)); + IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item; + collection.AddRange(submenuBuilder.BuildItems(descriptor.Codon, descriptor.Parameter).Cast().ToArray()); } } } diff --git a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarDropDownButton.cs b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarDropDownButton.cs index d46a354ff4..7e1cfb4125 100644 --- a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarDropDownButton.cs +++ b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarDropDownButton.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; using System.Windows.Input; @@ -68,8 +69,8 @@ namespace ICSharpCode.Core.WinForms } else { - ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; - DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller)); + IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item; + DropDownItems.AddRange(submenuBuilder.BuildItems(codon, caller).Cast().ToArray()); } } } diff --git a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs index 0c0181bcdf..d4a359bf20 100644 --- a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs +++ b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarService.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; namespace ICSharpCode.Core.WinForms @@ -23,9 +24,9 @@ namespace ICSharpCode.Core.WinForms object item = CreateToolbarItemFromDescriptor(descriptor); if (item is ToolStripItem) { collection.Add((ToolStripItem)item); - } else if (item is ISubmenuBuilder) { - ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; - collection.AddRange(submenuBuilder.BuildSubmenu(descriptor.Codon, owner)); + } else if (item is IMenuItemBuilder) { + IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item; + collection.AddRange(submenuBuilder.BuildItems(descriptor.Codon, owner).Cast().ToArray()); } } diff --git a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarSplitButton.cs b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarSplitButton.cs index 6e3d478f54..568f0fa37f 100644 --- a/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarSplitButton.cs +++ b/src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarSplitButton.cs @@ -5,6 +5,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Drawing; +using System.Linq; using System.Windows.Forms; using System.Windows.Input; @@ -65,11 +66,8 @@ namespace ICSharpCode.Core.WinForms } else { - ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; - itemsToAdd = submenuBuilder.BuildSubmenu(codon, caller); - if (itemsToAdd!=null) { - DropDownItems.AddRange(itemsToAdd); - } + IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item; + DropDownItems.AddRange(submenuBuilder.BuildItems(codon, caller).Cast().ToArray()); } } } diff --git a/src/Main/SharpDevelop/Workbench/SingleInstanceHelper.cs b/src/Main/SharpDevelop/Workbench/SingleInstanceHelper.cs index 16c476da36..02c5d38696 100644 --- a/src/Main/SharpDevelop/Workbench/SingleInstanceHelper.cs +++ b/src/Main/SharpDevelop/Workbench/SingleInstanceHelper.cs @@ -6,8 +6,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; +using System.Windows; using System.Windows.Forms; - using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; @@ -69,7 +69,11 @@ namespace ICSharpCode.SharpDevelop.Workbench } else { try { SD.MainThread.InvokeAsync( - delegate { NativeMethods.SetForegroundWindow(SD.Workbench.MainWin32Window.Handle); } + delegate { + var win32Window = PresentationSource.FromVisual(SD.Workbench.MainWindow) as System.Windows.Interop.IWin32Window; + if (win32Window != null) + NativeMethods.SetForegroundWindow(win32Window.Handle); + } ).FireAndForget(); string tempFileName = Path.Combine(Path.GetTempPath(), "sd" + fileNumber + ".tmp"); foreach (string file in File.ReadAllLines(tempFileName)) {