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:
authorLluis Sanchez Gual <lluis@novell.com>2011-04-12 14:22:34 +0400
committerLluis Sanchez Gual <lluis@novell.com>2011-04-12 14:22:34 +0400
commit8b0b10fd4e5a57e4b83abedd833e118c11748b0a (patch)
treed5d843bcc8c3fed60197b14f924e6fc657920f46 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components
parentb73c28fdba8ef47059f933458444740e4cfbcae3 (diff)
Allow the node sort order to be overriden by extensions
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/ExtensibleTreeView.cs19
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/NodeBuilder.cs29
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/TypeNodeBuilder.cs14
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; }
}