diff options
author | Lluis Sanchez Gual <lluis@novell.com> | 2011-04-12 14:22:34 +0400 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@novell.com> | 2011-04-12 14:22:34 +0400 |
commit | 8b0b10fd4e5a57e4b83abedd833e118c11748b0a (patch) | |
tree | d5d843bcc8c3fed60197b14f924e6fc657920f46 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components | |
parent | b73c28fdba8ef47059f933458444740e4cfbcae3 (diff) |
Allow the node sort order to be overriden by extensions
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components')
3 files changed, 44 insertions, 18 deletions
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 a6218f44dc..ba28da7fb6 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 @@ -1296,19 +1296,19 @@ namespace MonoDevelop.Ide.Gui.Components compareNode1.MoveToIter (a); compareNode2.MoveToIter (b); - TypeNodeBuilder tb1 = (TypeNodeBuilder) chain1[0]; - int sort = tb1.CompareObjects (compareNode1, compareNode2); + int sort = CompareObjects (chain1, compareNode1, compareNode2); if (sort != TypeNodeBuilder.DefaultSort) return sort; NodeBuilder[] chain2 = (NodeBuilder[]) store.GetValue (b, BuilderChainColumn); if (chain2 == null) return 1; - TypeNodeBuilder tb2 = (TypeNodeBuilder) chain2[0]; if (chain1 != chain2) { - sort = tb2.CompareObjects (compareNode2, compareNode1); + sort = CompareObjects (chain2, compareNode2, compareNode1); if (sort != TypeNodeBuilder.DefaultSort) return sort * -1; } + TypeNodeBuilder tb1 = (TypeNodeBuilder) chain1[0]; + TypeNodeBuilder tb2 = (TypeNodeBuilder) chain2[0]; object o1 = store.GetValue (a, DataItemColumn); object o2 = store.GetValue (b, DataItemColumn); return string.Compare (tb1.GetNodeName (compareNode1, o1), tb2.GetNodeName (compareNode2, o2), true); @@ -1317,6 +1317,17 @@ namespace MonoDevelop.Ide.Gui.Components } } + int CompareObjects (NodeBuilder[] chain, ITreeNavigator thisNode, ITreeNavigator otherNode) + { + int result = NodeBuilder.DefaultSort; + for (int n=0; n<chain.Length; n++) { + int sort = chain[n].CompareObjects (thisNode, otherNode); + if (sort != NodeBuilder.DefaultSort) + result = sort; + } + return result; + } + internal bool GetFirstNode (object dataObject, out Gtk.TreeIter iter) { object it = nodeHash [dataObject]; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeBuilder.cs index a4859a7e4b..16b91b950c 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeBuilder.cs @@ -101,6 +101,35 @@ namespace MonoDevelop.Ide.Gui.Components { } + /// <summary> + /// Return this constant in CompareToObject to instruct the tree view to + /// use the default sorting rules for the compared objects. + /// </summary> + public const int DefaultSort = int.MinValue; + + /// <summary> + /// Compares two nodes. Used when sorting the nodes in the tree. + /// </summary> + /// <returns> + /// A value < 0 if thisNode is less than otherNode, 0 if equal, 1 if greater, <c>DefaultSort</c> + /// if the default sort order has to be used. + /// </returns> + /// <param name='thisNode'> + /// A node handled by this builder + /// </param> + /// <param name='otherNode'> + /// Another node (which may not be handled by this builder) + /// </param> + /// <remarks> + /// This method is used by ExtensibleTreeView to sort nodes. <c>thisNode</c> always points to a node + /// which is handled by this builder, but <c>otherNode</c> can be any node, handled or not by this builder. + /// The value <c>DefaultSort</c> can be returned to instruct that no order can be decided in this node, and + /// that the default ordering should be used (by default, node names are compared) + /// </remarks> + public virtual int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode) + { + return DefaultSort; + } // Helper methods diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/TypeNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/TypeNodeBuilder.cs index b2188414c6..161464dc81 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/TypeNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/TypeNodeBuilder.cs @@ -32,10 +32,6 @@ namespace MonoDevelop.Ide.Gui.Components { public abstract class TypeNodeBuilder: NodeBuilder { - // Return this const in CompareToObject to instruct the tree view to - // use the default sorting rules for the compared objects. - public const int DefaultSort = int.MinValue; - public abstract Type NodeDataType { get; } public abstract string GetNodeName (ITreeNavigator thisNode, object dataObject); @@ -47,16 +43,6 @@ namespace MonoDevelop.Ide.Gui.Components return null; } - // Return -1 if thisDataObject is less than otherDataObject, 0 if equal, 1 if greater - // Return DefaultSort is sort is undefined or you want to use default sorting rules - // (by default, it compares the node name). - // The thisDataObject parameter is an instance valid for this node builder. - // otherDataObject may not be an instance valid for this builder. - public virtual int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode) - { - return DefaultSort; - } - public virtual string ContextMenuAddinPath { get { return null; } } |