Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/src/core/MonoDevelop.Ide/ChangeLog39
-rw-r--r--main/src/core/MonoDevelop.Ide/Makefile.am2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs41
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs7
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/SolutionPadCodon.cs13
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs58
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs3
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs104
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs37
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs17
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs6
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs13
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs9
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs11
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs23
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs23
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs6
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs17
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs23
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/SolutionPad.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs9
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Ide.cs16
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml359
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj2
28 files changed, 427 insertions, 431 deletions
diff --git a/main/src/core/MonoDevelop.Ide/ChangeLog b/main/src/core/MonoDevelop.Ide/ChangeLog
index bd1713a211..d8e15272d2 100644
--- a/main/src/core/MonoDevelop.Ide/ChangeLog
+++ b/main/src/core/MonoDevelop.Ide/ChangeLog
@@ -1,3 +1,42 @@
+2009-02-23 Lluis Sanchez Gual <lluis@novell.com>
+
+ * Makefile.am:
+ * MonoDevelop.Ide.csproj: Added new files.
+
+ * MonoDevelop.Ide.Gui/Ide.cs: When registering for the
+ Initialized event, fire it if the IDE has already been
+ initialized.
+
+ * MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs:
+ * MonoDevelop.Ide.Gui.Pads/SolutionPad.cs:
+ * MonoDevelop.Ide.Codons/SolutionPadCodon.cs:
+ * MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs:
+ * MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs:
+ * MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs: Allow
+ setting the default context menu to be used when none is
+ specified for a node type.
+
+ * MonoDevelop.Ide.addin.xml:
+ * MonoDevelop.Ide.Codons/ProjectActiveCondition.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs:
+ * MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs:
+ Merged all project pad context menus in a single extension
+ point.
+
2009-02-23 Mike Krüger <mkrueger@novell.com>
* MonoDevelop.Ide.addin.xml: removed f11 shortcut.
diff --git a/main/src/core/MonoDevelop.Ide/Makefile.am b/main/src/core/MonoDevelop.Ide/Makefile.am
index fd02e36f27..9dbaa621ce 100644
--- a/main/src/core/MonoDevelop.Ide/Makefile.am
+++ b/main/src/core/MonoDevelop.Ide/Makefile.am
@@ -79,6 +79,7 @@ FILES = \
MonoDevelop.Ide.Codons/LanguageActiveCondition.cs \
MonoDevelop.Ide.Codons/NodeBuilderCodon.cs \
MonoDevelop.Ide.Codons/PadCodon.cs \
+ MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs \
MonoDevelop.Ide.Codons/PadOptionCodon.cs \
MonoDevelop.Ide.Codons/ProjectActiveCondition.cs \
MonoDevelop.Ide.Codons/ProjectTemplateCodon.cs \
@@ -198,6 +199,7 @@ FILES = \
MonoDevelop.Ide.Gui.Pads.ClassPad/PropertyNodeBuilder.cs \
MonoDevelop.Ide.Gui.Pads.ClassPad/ReferenceNodeBuilder.cs \
MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs \
+ MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs \
MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs \
MonoDevelop.Ide.Gui.Pads.ProjectPad/LinkedFilesFolder.cs \
MonoDevelop.Ide.Gui.Pads.ProjectPad/LinkedFilesFolderNodeBuilder.cs \
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs
new file mode 100644
index 0000000000..4c23fec799
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadContextMenuExtensionNode.cs
@@ -0,0 +1,41 @@
+//
+// PadContextMenuExtensionNode.cs
+//
+// Author:
+// Lluis Sanchez Gual <lluis@novell.com>
+//
+// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Mono.Addins;
+
+namespace MonoDevelop.Ide.Codons
+{
+ public class PadContextMenuExtensionNode: ExtensionNode
+ {
+ [NodeAttribute]
+ public string path;
+
+ public string MenuPath {
+ get { return path; }
+ }
+ }
+}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
index c038a20786..58074b6b04 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
@@ -42,6 +42,13 @@ namespace MonoDevelop.Ide.Codons
{
public ProjectActiveCondition ()
{
+ IdeApp.Initialized += delegate {
+ Init ();
+ };
+ }
+
+ public void Init ()
+ {
IdeApp.ProjectOperations.CurrentProjectChanged += delegate {
NotifyChanged();
};
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/SolutionPadCodon.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/SolutionPadCodon.cs
index ef6eaa3a3f..51246582bc 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/SolutionPadCodon.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/SolutionPadCodon.cs
@@ -47,6 +47,7 @@ namespace MonoDevelop.Ide.Codons
NodeBuilder[] builders;
TreePadOption[] options;
TreeViewPad pad;
+ string contextMenuPath;
/*
string placement = null;*/
@@ -63,11 +64,11 @@ namespace MonoDevelop.Ide.Codons
NodeBuilderCodon nbc = ob as NodeBuilderCodon;
if (nbc != null)
bs.Add (nbc.NodeBuilder);
- else {
- PadOptionCodon poc = ob as PadOptionCodon;
- if (poc != null)
- ops.Add (poc.Option);
- }
+ else if (ob is PadOptionCodon) {
+ PadOptionCodon poc = (PadOptionCodon) ob;
+ ops.Add (poc.Option);
+ } else if (ob is PadContextMenuExtensionNode)
+ contextMenuPath = ((PadContextMenuExtensionNode) ob).MenuPath;
}
builders = (NodeBuilder[]) bs.ToArray (typeof(NodeBuilder));
options = (TreePadOption[]) ops.ToArray (typeof(TreePadOption));
@@ -88,7 +89,7 @@ namespace MonoDevelop.Ide.Codons
} else
pad = new SolutionPad ();
- pad.Initialize (builders, options);
+ pad.Initialize (builders, options, contextMenuPath);
// pad.DefaultPlacement = placement;
pad.Id = Id;
return pad;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs
index 2922ec6e12..689c4bdd51 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs
@@ -46,6 +46,7 @@ using MonoDevelop.Ide.Commands;
using MonoDevelop.Core.Gui;
using MonoDevelop.Components.Commands;
using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Projects.Extensions;
namespace MonoDevelop.Ide.Gui.Components
{
@@ -85,12 +86,19 @@ namespace MonoDevelop.Ide.Gui.Components
TransactedNodeStore transactionStore;
int updateLockCount;
+ string contextMenuPath;
+ IDictionary<string,string> contextMenuTypeNameAliases;
private static Gtk.TargetEntry [] target_table = new Gtk.TargetEntry [] {
new Gtk.TargetEntry ("text/uri-list", 0, 11 ),
new Gtk.TargetEntry ("text/plain", 0, 22),
new Gtk.TargetEntry ("application/x-rootwindow-drop", 0, 33)
};
+
+ public IDictionary<string,string> ContextMenuTypeNameAliases {
+ get { return contextMenuTypeNameAliases; }
+ set { contextMenuTypeNameAliases = value; }
+ }
public Gtk.TreeStore Store {
get {
@@ -138,8 +146,14 @@ namespace MonoDevelop.Ide.Gui.Components
}
}
- public virtual void Initialize (NodeBuilder[] builders, TreePadOption[] options)
+ public void Initialize (NodeBuilder[] builders, TreePadOption[] options)
+ {
+ Initialize (builders, options, null);
+ }
+
+ public virtual void Initialize (NodeBuilder[] builders, TreePadOption[] options, string contextMenuPath)
{
+ this.contextMenuPath = contextMenuPath;
builderContext = new TreeBuilderContext (this);
SetBuilders (builders, options);
@@ -1449,9 +1463,41 @@ namespace MonoDevelop.Ide.Gui.Components
[CommandUpdateHandler (EditCommands.Rename)]
public void UpdateStartLabelEdit (CommandInfo info)
{
- info.Enabled = GetSelectedNodes ().Length == 1;
+ if (editingText || GetSelectedNodes ().Length != 1) {
+ info.Visible = false;
+ return;
+ }
+
+ TreeNodeNavigator node = (TreeNodeNavigator) GetSelectedNode ();
+ NodeAttributes attributes = GetNodeAttributes (node);
+ if ((attributes & NodeAttributes.AllowRename) == 0) {
+ info.Visible = false;
+ return;
+ }
+ }
+
+ NodeAttributes GetNodeAttributes (TreeNodeNavigator node)
+ {
+ Gtk.TreeIter iter = node.CurrentPosition._iter;
+ object dataObject = node.DataItem;
+ NodeAttributes attributes = NodeAttributes.None;
+
+ ITreeNavigator parentNode = node.Clone ();
+ parentNode.MoveToParent ();
+ NodePosition pos = parentNode.CurrentPosition;
+
+ foreach (NodeBuilder b in node.NodeBuilderChain) {
+ try {
+ b.GetNodeAttributes (parentNode, dataObject, ref attributes);
+ } catch (Exception ex) {
+ LoggingService.LogError (ex.ToString ());
+ }
+ parentNode.MoveToPosition (pos);
+ }
+ return attributes;
}
+
bool wantFocus ()
{
tree.GrabFocus ();
@@ -1473,7 +1519,8 @@ namespace MonoDevelop.Ide.Gui.Components
{
ITreeNavigator tnav = GetSelectedNode ();
TypeNodeBuilder nb = GetTypeNodeBuilder (tnav.CurrentPosition._iter);
- if (nb == null || nb.ContextMenuAddinPath == null) {
+ string menuPath = nb != null && nb.ContextMenuAddinPath != null ? nb.ContextMenuAddinPath : contextMenuPath;
+ if (menuPath == null) {
if (options.Length > 0) {
CommandEntrySet opset = new CommandEntrySet ();
opset.AddItem (ViewCommands.TreeDisplayOptionList);
@@ -1482,7 +1529,10 @@ namespace MonoDevelop.Ide.Gui.Components
IdeApp.CommandService.ShowContextMenu (opset, this);
}
} else {
- CommandEntrySet eset = IdeApp.CommandService.CreateCommandEntrySet (nb.ContextMenuAddinPath);
+ ExtensionContext ctx = AddinManager.CreateExtensionContext ();
+ ctx.RegisterCondition ("ItemType", new ItemTypeCondition (tnav.DataItem.GetType (), contextMenuTypeNameAliases));
+ CommandEntrySet eset = IdeApp.CommandService.CreateCommandEntrySet (ctx, menuPath);
+
eset.AddItem (Command.Separator);
CommandEntrySet opset = eset.AddItemSet (GettextCatalog.GetString ("Display Options"));
opset.AddItem (ViewCommands.TreeDisplayOptionList);
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs
index 2189e672dc..62050662a4 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeCommandHandler.cs
@@ -41,11 +41,12 @@ namespace MonoDevelop.Ide.Gui.Components
object nextTarget;
CanDeleteFlags canDeleteFlags;
+ [Flags]
enum CanDeleteFlags {
NotChecked = 0,
Checked = 1,
Single = 2,
- Multiple = 3
+ Multiple = 4
}
internal void Initialize (ExtensibleTreeView tree)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs
index 39dcac0e46..1cd95b139a 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ClassPad/SolutionNodeBuilder.cs
@@ -83,10 +83,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ClassPad
attributes |= NodeAttributes.AllowRename;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Solution"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
Solution solution = dataObject as Solution;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs
new file mode 100644
index 0000000000..70f7ae31ea
--- /dev/null
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FileOperationsBuilderExtension.cs
@@ -0,0 +1,104 @@
+//
+// FileOperationsBuilderExtension.cs
+//
+// Author:
+// Lluis Sanchez Gual <lluis@novell.com>
+//
+// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using MonoDevelop.Projects;
+using MonoDevelop.Components.Commands;
+using MonoDevelop.Ide.Commands;
+using MonoDevelop.Ide.Gui.Components;
+using MonoDevelop.Ide.Gui.Search;
+using MonoDevelop.Core;
+
+namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
+{
+ class FileOperationsBuilderExtension: NodeBuilderExtension
+ {
+ public override bool CanBuildNode (Type dataType)
+ {
+ return typeof(IFileItem).IsAssignableFrom (dataType) ||
+ typeof(IFolderItem).IsAssignableFrom (dataType);
+ }
+
+ public override Type CommandHandlerType {
+ get { return typeof(FileOperationsCommandHandler); }
+ }
+ }
+
+ class FileOperationsCommandHandler: NodeCommandHandler
+ {
+ string GetDir (object ob)
+ {
+ if (ob is IFolderItem)
+ return ((IFolderItem)ob).BaseDirectory;
+ else if (ob is IFileItem) {
+ string path = ((IFileItem)ob).FileName;
+ if (!string.IsNullOrEmpty (path))
+ return System.IO.Path.GetDirectoryName (path);
+ }
+ return string.Empty;
+ }
+
+ [CommandHandler (FileCommands.OpenContainingFolder)]
+ [AllowMultiSelection]
+ public void OnOpenFolder ()
+ {
+ HashSet<string> paths = new HashSet<string> ();
+ foreach (ITreeNavigator node in CurrentNodes) {
+ string path = GetDir (node.DataItem);
+ if (!string.IsNullOrEmpty (path) && paths.Add (path))
+ System.Diagnostics.Process.Start ("file://" + path);
+ }
+ }
+
+ [CommandHandler (SearchCommands.FindInFiles)]
+ public void OnFindInFiles ()
+ {
+ string path = GetDir (CurrentNode.DataItem);
+ SearchReplaceInFilesManager.ShowFindDialog (path);
+ }
+
+ public static string TerminalCommand {
+ get {
+ return PropertyService.Get ("MonoDevelop.Shell", "gnome-terminal");
+ }
+ }
+
+ [CommandHandler (FileCommands.OpenInTerminal)]
+ [AllowMultiSelection]
+ public void OnOpenInTerminal ()
+ {
+ HashSet<string> paths = new HashSet<string> ();
+ foreach (ITreeNavigator node in CurrentNodes) {
+ string path = GetDir (node.DataItem);
+ string terminal = TerminalCommand;
+ if (paths.Add (path))
+ Runtime.ProcessService.StartProcess (terminal, "", path, null);
+ }
+ }
+
+ }
+}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs
index eef83c16b0..ec7ff20aa0 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs
@@ -359,42 +359,5 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
CurrentNode.Expanded = true;
Tree.AddNodeInsertCallback (new ProjectFolder (directoryName, project), new TreeNodeCallback (OnFileInserted));
}
-
- [CommandHandler (SearchCommands.FindInFiles)]
- public void OnFindInFiles ()
- {
- SearchReplaceInFilesManager.ShowFindDialog (GetFolderPath (CurrentNode.DataItem));
- }
-
- public static string TerminalCommand {
- get {
- return PropertyService.Get ("MonoDevelop.Shell", "gnome-terminal");
- }
- }
-
- [CommandHandler (FileCommands.OpenInTerminal)]
- [AllowMultiSelection]
- public void OnOpenInTerminal ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- string path = GetFolderPath (node.DataItem);
- string terminal = TerminalCommand;
- if (paths.Add (path))
- Runtime.ProcessService.StartProcess (terminal, "", path, null);
- }
- }
-
- [CommandHandler (FileCommands.OpenFolder)]
- [AllowMultiSelection]
- public void OnOpenFolder ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- string path = GetFolderPath (node.DataItem);
- if (paths.Add (path))
- System.Diagnostics.Process.Start ("file://" + path);
- }
- }
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs
index 2aea84b8d1..15bda14f0c 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs
@@ -59,10 +59,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return Path.GetFileName (((ProjectFile)dataObject).Name);
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/ProjectFile"; }
- }
-
public override void GetNodeAttributes (ITreeNavigator treeNavigator, object dataObject, ref NodeAttributes attributes)
{
ProjectFile file = (ProjectFile) dataObject;
@@ -185,19 +181,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
{
}
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OnOpenFolder ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- ProjectFile file = (ProjectFile) node.DataItem;
- string path = System.IO.Path.GetDirectoryName (file.FilePath);
- if (paths.Add (path))
- System.Diagnostics.Process.Start ("file://" + path);
- }
- }
-
public override bool CanDeleteItem ()
{
return ((ProjectFile) CurrentNode.DataItem).DependsOnFile == null;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs
index ff3acb3341..3ee167306f 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs
@@ -36,7 +36,7 @@ using MonoDevelop.Core.Gui;
namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
{
- public class ProjectFolder: IDisposable
+ public class ProjectFolder: IDisposable, IFolderItem
{
string absolutePath;
Project project;
@@ -67,6 +67,10 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
}
}
+ string IFolderItem.BaseDirectory {
+ get { return Path; }
+ }
+
public string Path {
get { return absolutePath; }
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs
index 290afd2af9..d9a5db2350 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs
@@ -68,10 +68,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return ((ProjectFolder)dataObject).Path;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Folder"; }
- }
-
protected override void Initialize ()
{
base.Initialize ();
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
index d0f411df53..a65b0f6bb2 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
@@ -102,10 +102,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return ((Project)dataObject).BaseDirectory;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Project"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
base.BuildNode (treeBuilder, dataObject, ref label, ref icon, ref closedIcon);
@@ -347,15 +343,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
IdeApp.ProjectOperations.Save (sol);
}
}
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OpenContainingFolder ()
- {
- foreach (ITreeNavigator nav in CurrentNodes) {
- Project prj = nav.DataItem as Project;
- System.Diagnostics.Process.Start ("file://" + prj.BaseDirectory);
- }
- }
[CommandHandler (ProjectCommands.AddReference)]
public void AddReferenceToProject ()
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs
index 4e725a3a6f..c9ffc917c8 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceFolderNodeBuilder.cs
@@ -57,10 +57,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return "References";
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/ReferenceFolder"; }
- }
-
protected override void Initialize ()
{
addedHandler = (ProjectReferenceEventHandler) DispatchService.GuiDispatch (new ProjectReferenceEventHandler (OnAddReference));
@@ -121,11 +117,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
public class ProjectReferenceFolderNodeCommandHandler: NodeCommandHandler
{
- public override DragOperation CanDragNode ()
- {
- return DragOperation.Copy | DragOperation.Move;
- }
-
public override bool CanDropNode (object dataObject, DragOperation operation)
{
return dataObject is ProjectReference || dataObject is Project;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs
index ac92386ae1..7bdb3329a5 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectReferenceNodeBuilder.cs
@@ -56,10 +56,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return ((ProjectReference)dataObject).Reference;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Reference"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
ProjectReference pref = (ProjectReference) dataObject;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs
index 6586fa09a9..5c5b3c3968 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectSolutionPad.cs
@@ -28,6 +28,7 @@
using System;
using System.Resources;
+using System.Collections.Generic;
using MonoDevelop.Projects;
using MonoDevelop.Core;
@@ -44,6 +45,16 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
IdeApp.Workbench.ActiveDocumentChanged += new EventHandler (OnWindowChanged);
}
+ public override void Initialize (MonoDevelop.Ide.Gui.Components.NodeBuilder[] builders, MonoDevelop.Ide.Gui.Components.TreePadOption[] options, string contextMenuPath)
+ {
+ base.Initialize (builders, options, contextMenuPath);
+ var aliases = new Dictionary<string,string> ();
+ aliases.Add ("SystemFile", "MonoDevelop.Ide.Gui.Pads.ProjectPad.SystemFile");
+ aliases.Add ("ProjectFolder", "MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectFolder");
+ TreeView.ContextMenuTypeNameAliases = aliases;
+ }
+
+
protected override void OnSelectionChanged (object sender, EventArgs args)
{
base.OnSelectionChanged (sender, args);
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs
index ad09ec0022..6d2e1816b9 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionFolderNodeBuilder.cs
@@ -68,10 +68,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
attributes |= NodeAttributes.AllowRename;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/SolutionFolder"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
SolutionFolder combine = dataObject as SolutionFolder;
@@ -241,25 +237,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
}
}
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OpenContainingFolder ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- SolutionFolder folder = (SolutionFolder) node.DataItem;
- if (paths.Add (folder.BaseDirectory))
- System.Diagnostics.Process.Start ("file://" + folder.BaseDirectory);
- }
- }
-
- [CommandHandler (SearchCommands.FindInFiles)]
- public void OnFindInFiles ()
- {
- SolutionFolder folder = (SolutionFolder) CurrentNode.DataItem;
- SearchReplaceInFilesManager.ShowFindDialog (folder.BaseDirectory);
- }
-
void OnEntryInserted (ITreeNavigator nav)
{
nav.Selected = true;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs
index 573d185050..5969db83c5 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SolutionNodeBuilder.cs
@@ -85,10 +85,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
attributes |= NodeAttributes.AllowRename;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Solution"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
Solution solution = dataObject as Solution;
@@ -313,25 +309,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
Tree.StartLabelEdit ();
}
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OnOpenFolder ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- Solution solution = (Solution) node.DataItem;
- if (paths.Add (solution.BaseDirectory))
- System.Diagnostics.Process.Start ("file://" + solution.BaseDirectory);
- }
- }
-
- [CommandHandler (SearchCommands.FindInFiles)]
- public void OnFindInFiles ()
- {
- Solution solution = (Solution) CurrentNode.DataItem;
- SearchReplaceInFilesManager.ShowFindDialog (solution.BaseDirectory);
- }
-
[CommandHandler (FileCommands.CloseWorkspaceItem)]
[AllowMultiSelection]
public void OnCloseItem ()
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs
index 886be93c95..a6c3c2c91e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFile.cs
@@ -33,7 +33,7 @@ using MonoDevelop.Projects;
namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
{
- public class SystemFile
+ public class SystemFile: IFileItem
{
string absolutePath;
Project project;
@@ -54,6 +54,10 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
get { return absolutePath; }
}
+ string IFileItem.FileName {
+ get { return Path; }
+ }
+
public string Name {
get { return System.IO.Path.GetFileName (absolutePath); }
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs
index ef8a33489a..bd456a36a5 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/SystemFileNodeBuilder.cs
@@ -56,10 +56,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
return Path.GetFileName (((SystemFile)dataObject).Name);
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/SystemFile"; }
- }
-
public override void GetNodeAttributes (ITreeNavigator treeNavigator, object dataObject, ref NodeAttributes attributes)
{
attributes |= NodeAttributes.AllowRename;
@@ -187,18 +183,5 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
prev = fv;
}
}
-
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OnOpenFolder ()
- {
- Set<string> folders = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- SystemFile file = node.DataItem as SystemFile;
- string path = System.IO.Path.GetDirectoryName (file.Path);
- if (folders.Add (path))
- System.Diagnostics.Process.Start ("file://" + path);
- }
- }
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs
index 7642b75b8e..1b333d1774 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs
@@ -44,10 +44,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
get { return typeof(UnknownSolutionItem); }
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/UnknownEntry"; }
- }
-
public override Type CommandHandlerType {
get { return typeof(UnknownEntryCommandHandler); }
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs
index 72c626d69f..7b9e7bf57f 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/WorkspaceNodeBuilder.cs
@@ -75,10 +75,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
attributes |= NodeAttributes.AllowRename;
}
- public override string ContextMenuAddinPath {
- get { return "/MonoDevelop/Ide/ContextMenu/ProjectPad/Workspace"; }
- }
-
public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
{
Workspace workspace = dataObject as Workspace;
@@ -296,25 +292,6 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
nav.Expanded = true;
}
- [CommandHandler (FileCommands.OpenContainingFolder)]
- [AllowMultiSelection]
- public void OnOpenFolder ()
- {
- Set<string> paths = new Set<string> ();
- foreach (ITreeNavigator node in CurrentNodes) {
- Workspace ws = (Workspace) node.DataItem;
- if (paths.Add (ws.BaseDirectory))
- System.Diagnostics.Process.Start ("file://" + ws.BaseDirectory);
- }
- }
-
- [CommandHandler (SearchCommands.FindInFiles)]
- public void OnFindInFiles ()
- {
- Workspace ws = (Workspace) CurrentNode.DataItem;
- SearchReplaceInFilesManager.ShowFindDialog (ws.BaseDirectory);
- }
-
[CommandHandler (FileCommands.CloseWorkspaceItem)]
[AllowMultiSelection]
public void OnCloseItem ()
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/SolutionPad.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/SolutionPad.cs
index 82665e2728..67b10fafb2 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/SolutionPad.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/SolutionPad.cs
@@ -45,9 +45,9 @@ namespace MonoDevelop.Ide.Gui.Pads
IdeApp.Workspace.WorkspaceItemClosed += OnCloseWorkspace;
}
- public override void Initialize (NodeBuilder[] builders, TreePadOption[] options)
+ public override void Initialize (NodeBuilder[] builders, TreePadOption[] options, string contextMenuPath)
{
- base.Initialize (builders, options);
+ base.Initialize (builders, options, contextMenuPath);
foreach (WorkspaceItem it in IdeApp.Workspace.Items)
treeView.AddChild (it);
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs
index 51edbfa2ef..4661cbdea2 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/TreeViewPad.cs
@@ -84,9 +84,14 @@ namespace MonoDevelop.Ide.Gui.Pads
Initialize (builders, options);
}
- public virtual void Initialize (NodeBuilder[] builders, TreePadOption[] options)
+ public void Initialize (NodeBuilder[] builders, TreePadOption[] options)
{
- treeView.Initialize (builders, options);
+ Initialize (builders, options, null);
+ }
+
+ public virtual void Initialize (NodeBuilder[] builders, TreePadOption[] options, string contextMenuPath)
+ {
+ treeView.Initialize (builders, options, contextMenuPath);
}
#region ICommandDelegatorRouter
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Ide.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Ide.cs
index 3417e0617a..5abf6a031e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Ide.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Ide.cs
@@ -65,7 +65,17 @@ namespace MonoDevelop.Ide.Gui
public static event ExitEventHandler Exiting;
public static event EventHandler Exited;
- public static event EventHandler Initialized;
+
+ static EventHandler initializedEvent;
+ public static event EventHandler Initialized {
+ add {
+ if (isInitialized) value (null, EventArgs.Empty);
+ else initializedEvent += value;
+ }
+ remove {
+ initializedEvent -= value;
+ }
+ }
IdeApp ()
{
@@ -218,8 +228,8 @@ namespace MonoDevelop.Ide.Gui
}
}
- if (Initialized != null)
- Initialized (null, EventArgs.Empty);
+ if (initializedEvent != null)
+ initializedEvent (null, EventArgs.Empty);
// Load requested files
foreach (string file in StartupInfo.GetRequestedFileList()) {
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml
index 65d50dcbb2..f0876aa7d4 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml
@@ -97,54 +97,12 @@
<ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
</ExtensionPoint>
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Workspace" name = "Workspace context menu">
- <Description>Context menu for workspaces in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Solution" name = "Solution context menu">
- <Description>Context menu for solutions in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/SolutionFolder" name = "Solution folder context menu">
- <Description>Context menu for solution folders in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/ReferenceFolder" name = "References folder context menu">
- <Description>Context menu for the references folder in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Reference" name = "Reference context menu">
- <Description>Context menu for a reference in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/ProjectFile" name = "Project file context menu">
- <Description>Context menu for a project file in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/SystemFile" name = "File context menu">
- <Description>Context menu for a file (not belonging to a project) in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Folder" name = "Folder context menu">
- <Description>Context menu for a folder in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Project" name = "Project context menu">
- <Description>Context menu for a project in the solution pad.</Description>
- <ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
- </ExtensionPoint>
-
- <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/UnknownEntry" name = "Unknown entry context menu">
- <Description>Context menu for unknown entries in the solution pad.</Description>
+ <ExtensionPoint path = "/MonoDevelop/Ide/ContextMenu/ProjectPad" name = "Project pad context menu">
+ <Description>Context menu for nodes in the solution pad.</Description>
<ExtensionNodeSet id="MonoDevelop.Components.Commands.ItemSet"/>
+ <ConditionType id="ItemType" type="MonoDevelop.Projects.Extensions.ItemTypeCondition">
+ <Description>Type of the item. If no namespace is provided, MonoDevelop.Projects is assumed.</Description>
+ </ConditionType>
</ExtensionPoint>
<ExtensionPoint path = "/MonoDevelop/Ide/TaskList/View" name = "Task list views">
@@ -160,6 +118,7 @@
<ExtensionNode name="SolutionPad" type="MonoDevelop.Ide.Codons.SolutionPadCodon">
<ExtensionNode name="NodeBuilder" type="MonoDevelop.Ide.Codons.NodeBuilderCodon"/>
<ExtensionNode name="PadOption" type="MonoDevelop.Ide.Codons.PadOptionCodon"/>
+ <ExtensionNode name="ContextMenu" type="MonoDevelop.Ide.Codons.PadContextMenuExtensionNode"/>
</ExtensionNode>
<ExtensionNode name="Category" type="MonoDevelop.Ide.Codons.CategoryNode">
<ExtensionNodeSet id="MonoDevelop.Ide.Pads"/>
@@ -1002,201 +961,133 @@
<Scheme id="MD2" _name = "MonoDevelop 2.0" resource="KeyBindingSchemeMonoDevelop2.xml"/>
</Extension>
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Workspace">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Build" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Rebuild" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Clean" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
- <ItemSet id = "Tools" _label = "_Tools" >
- </ItemSet>
- <SeparatorItem id = "RunSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.RunEntry" />
- <SeparatorItem id = "CombineBuildGroupSeparator" />
- <ItemSet id = "CombineAddMenu" _label = "_Add" >
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewSolution" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewWorkspace" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddItem" />
- </ItemSet>
- <SeparatorItem id = "AddSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.CloseWorkspaceItem" />
- <SeparatorItem id = "FindInFilesSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "CombineOptionsSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Options" />
- </Extension>
+ <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad">
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Solution">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Build" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Rebuild" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Clean" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.CustomCommandList" />
- <ItemSet id = "Tools" _label = "_Tools" >
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.ExportProject" />
- <SeparatorItem id = "ExportSeparator" />
- </ItemSet>
- <SeparatorItem id = "RunSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.RunEntry" />
- <SeparatorItem id = "CombineBuildGroupSeparator" />
- <ItemSet id = "CombineAddMenu" _label = "_Add" >
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewProject" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddProject" />
- <SeparatorItem id = "Separator1" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddSolutionFolder" />
- </ItemSet>
- <SeparatorItem id = "AddSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.CloseWorkspaceItem" />
- <SeparatorItem id = "FindInFilesSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "CombineOptionsSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Options" />
- </Extension>
+ <!-- Build section -->
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/SolutionFolder">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Build" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Rebuild" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Clean" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
- <SeparatorItem id = "CombineBuildGroupSeparator" />
- <ItemSet id = "CombineAddMenu" _label = "Add" >
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewProject" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddProject" />
- <SeparatorItem id = "Separator1" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddSolutionFolder" />
- </ItemSet>
- <SeparatorItem id = "AddSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- <SeparatorItem id = "FindInFilesSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "OptionsSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Options" />
- </Extension>
-
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/ReferenceFolder">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddReference" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Paste" />
- </Extension>
-
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Reference">
- <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.Open" />
- <SeparatorItem id = "OpenSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.LocalCopyReference" />
- <SeparatorItem id = "CopySeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- </Extension>
-
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/ProjectFile">
- <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.Open" />
- <ItemSet id = "OpenWith" _label = "Open _With">
- <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.OpenWithList" />
- </ItemSet>
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "OpenSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Cut" />
- <SeparatorItem id = "CutSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- <SeparatorItem id = "PropertiesStartSeparator" />
- <ItemSet id = "BuildActions" _label = "Build Action">
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.SetBuildAction" />
- </ItemSet>
- <ItemSet id = "QuickProperties" _label = "_Quick Properties">
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.CopyToOutputDirectory" />
- </ItemSet>
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.ShowProperties" />
- <SeparatorItem id = "PropertiesEndSeparator" />
- </Extension>
+ <SeparatorItem id = "BuildSectionStart" />
+ <Condition id="ItemType" value="IBuildTarget">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Build" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Rebuild" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Clean" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.CustomCommandList" />
+ </Condition>
+ <SeparatorItem id = "BuildSectionEnd" />
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/SystemFile">
- <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.Open" />
- <ItemSet id = "OpenWith" _label = "Open _With">
- <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.OpenWithList" />
- </ItemSet>
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "OpenSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.IncludeToProject" />
- <SeparatorItem id = "IncludeToProjectSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Cut" />
- <SeparatorItem id = "CutSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- </Extension>
-
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Folder">
- <ItemSet id = "Add" _label = "_Add">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddFiles" />
- <SeparatorItem id = "Separator1" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.NewFolder" />
- </ItemSet>
- <SeparatorItem id = "AddSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.IncludeToProject" />
- <SeparatorItem id = "IncludeToProjectSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Cut" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Paste" />
- <SeparatorItem id = "CutSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
- <SeparatorItem id = "FindInFilesSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenFolder" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenInTerminal" />
- </Extension>
+ <!-- Actions Section -->
+
+ <SeparatorItem id = "ActionsSectionStart" />
+ <Condition id="ItemType" value="ProjectReference|ProjectFile|SystemFile">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.Open" />
+ <ItemSet id = "OpenWith" _label = "Open _With" autohide="true">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ViewCommands.OpenWithList" />
+ </ItemSet>
+ <SeparatorItem id = "OpenSeparator" />
+ </Condition>
+ <Condition id="ItemType" value="SystemFile|ProjectFolder">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.IncludeToProject" />
+ </Condition>
+ <SeparatorItem id = "ActionsSectionEnd" />
+
+ <!-- Run section -->
+
+ <SeparatorItem id = "RunSectionStart" />
+ <Condition id="ItemType" value="IBuildTarget">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.RunEntry" />
+ </Condition>
+ <Condition id="ItemType" value="Project">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.SetAsStartupProject" />
+ </Condition>
+ <SeparatorItem id = "RunSectionEnd" />
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/Project">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Build" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Rebuild"/>
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Clean" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.CustomCommandList" />
- <ItemSet id = "Tools" _label = "_Tools" >
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.ExportProject" />
- <SeparatorItem id="ExportSeparator"/>
+ <!-- Add section -->
+
+ <SeparatorItem id = "AddSectionStart" />
+ <ItemSet id = "Add" _label = "_Add" autohide="True">
+ <Condition id="ItemType" value="Workspace">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewSolution" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewWorkspace" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddItem" />
+ </Condition>
+ <Condition id="ItemType" value="Solution|SolutionFolder">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewProject" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddProject" />
+ <SeparatorItem id = "Separator1" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddSolutionFolder" />
+ </Condition>
+ <Condition id="ItemType" value="Project|ProjectFolder">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewFiles" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddFiles" />
+ <SeparatorItem id = "Separator1" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.NewFolder" />
+ </Condition>
</ItemSet>
- <SeparatorItem id = "RunSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.RunEntry" />
- <SeparatorItem id = "BuildGroupSeparator" />
- <ItemSet id = "Add" _label = "_Add">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddNewFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddFiles" />
- <SeparatorItem id = "Separator1" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.NewFolder" />
+ <Condition id="ItemType" value="ProjectReferenceCollection">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.AddReference" />
+ </Condition>
+ <SeparatorItem id = "AddSectionEnd" />
+
+ <!-- Tools section -->
+
+ <SeparatorItem id = "ToolsSectionStart" />
+ <ItemSet id = "Tools" _label = "_Tools" autohide="True">
+ <Condition id="ItemType" value="Solution|Project">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.ExportProject" />
+ <SeparatorItem id = "ExportSeparator" />
+ </Condition>
+ <Condition id="ItemType" value="IFolderItem">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenInTerminal" />
+ </Condition>
</ItemSet>
-
- <SeparatorItem id = "AddSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Cut" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Paste" />
- <SeparatorItem id = "CutSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" />
+ <Condition id="ItemType" value="IFolderItem">
+ <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
+ </Condition>
+ <Condition id="ItemType" value="IFolderItem|IFileItem">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
+ </Condition>
+ <SeparatorItem id = "ToolsSectionEnd" />
+
+ <!-- Edit section -->
+
+ <SeparatorItem id = "EditSectionStart" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy" disabledVisible="False" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Cut" disabledVisible="False" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Paste" disabledVisible="False" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" disabledVisible="False" />
+ <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Rename" disabledVisible="False" />
+ <SeparatorItem id = "EditSectionEnd" />
+
+ <Condition id="ItemType" value="WorkspaceItem">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.CloseWorkspaceItem" />
+ </Condition>
+
+ <SeparatorItem id = "CombineOptionsSeparator" />
+
+ <!-- Properties Section -->
+
+ <SeparatorItem id = "PropertiesSectionStart" />
+ <Condition id="ItemType" value="ProjectFile">
+ <ItemSet id = "BuildActions" _label = "Build Action">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.SetBuildAction" />
+ </ItemSet>
+ <ItemSet id = "QuickProperties" _label = "_Quick Properties">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.CopyToOutputDirectory" />
+ </ItemSet>
+ </Condition>
+ <Condition id="ItemType" value="ProjectReference">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.LocalCopyReference" />
+ </Condition>
+ <Condition id="ItemType" value="IBuildTarget">
+ <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Options" />
+ </Condition>
+ <Condition id="ItemType" value="ProjectItem">
+ <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.ShowProperties" />
+ </Condition>
+ <SeparatorItem id = "PropertiesSectionEnd" />
- <SeparatorItem id = "SetAsStartupProjectSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.SetAsStartupProject" />
- <SeparatorItem id = "FindInFilesSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.SearchCommands.FindInFiles" />
- <CommandItem id = "MonoDevelop.Ide.Commands.FileCommands.OpenContainingFolder" />
- <SeparatorItem id = "OptionsSeparator" />
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Options" />
</Extension>
- <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad/UnknownEntry">
- <CommandItem id = "MonoDevelop.Ide.Commands.ProjectCommands.Reload" />
- <CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete" />
- </Extension>
-
<!--<Extension path = "/MonoDevelop/Ide/FileFilters">
<FileFilter id = "AllFiles"
_label = "All Files"
@@ -1215,6 +1106,7 @@
<Pad id = "MonoDevelop.Ide.Gui.Pads.HelpTree" defaultPlacement = "Left" _label = "Help" icon="gtk-help" class = "MonoDevelop.Ide.Gui.Pads.HelpTree"/>
<SolutionPad id = "ProjectPad" defaultPlacement = "Left" _label = "Solution" icon = "md-solution" class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectSolutionPad">
+ <ContextMenu path="/MonoDevelop/Ide/ContextMenu/ProjectPad" />
<PadOption id = "ShowAllFiles" _label = "Show All Files" defaultValue = "False" />
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.WorkspaceNodeBuilder"/>
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.SolutionNodeBuilder"/>
@@ -1227,6 +1119,7 @@
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectFolderNodeBuilder"/>
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.SystemFileNodeBuilder"/>
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.ShowAllFilesBuilderExtension"/>
+ <NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.FileOperationsBuilderExtension"/>
<NodeBuilder class = "MonoDevelop.Ide.Gui.Pads.ProjectPad.UnknownEntryNodeBuilder"/>
</SolutionPad>
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
index 151c846fa2..9206804867 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
@@ -525,6 +525,8 @@
<Compile Include="MonoDevelop.Ide.Gui.Content\TextStylePolicy.cs" />
<Compile Include="MonoDevelop.Ide.Gui\PadFontChanger.cs" />
<Compile Include="MonoDevelop.Ide.Gui.Components\PadTreeView.cs" />
+ <Compile Include="MonoDevelop.Ide.Codons\PadContextMenuExtensionNode.cs" />
+ <Compile Include="MonoDevelop.Ide.Gui.Pads.ProjectPad\FileOperationsBuilderExtension.cs" />
<Compile Include="MonoDevelop.Ide.Templates\DirectoryTemplate.cs" />
</ItemGroup>
<ItemGroup>