[Bf-blender-cvs] [263e2537c5a] soc-2020-outliner: Outliner: Add sort by object type

Nathan Craddock noreply at git.blender.org
Tue Jul 7 01:46:06 CEST 2020


Commit: 263e2537c5a9c84d35f3d0a8bc5efc75974b6c54
Author: Nathan Craddock
Date:   Mon Jul 6 17:41:22 2020 -0600
Branches: soc-2020-outliner
https://developer.blender.org/rB263e2537c5a9c84d35f3d0a8bc5efc75974b6c54

Outliner: Add sort by object type

When sorting by type, collections are sorted alphabetically. Objects are
sorted by their types.

===================================================================

M	source/blender/editors/space_outliner/outliner_tree.c

===================================================================

diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index 5f73c175b44..40765f86865 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -1723,6 +1723,23 @@ static int treesort_alpha(const void *v1, const void *v2)
   return 0;
 }
 
+static int treesort_type(const void *v1, const void *v2)
+{
+  const tTreeSort *x1 = v1;
+  const tTreeSort *x2 = v2;
+
+  if (((Object *)x1->id)->type > ((Object *)x2->id)->type) {
+    return 1;
+  }
+  else if (((Object *)x2->id)->type > ((Object *)x1->id)->type) {
+    return -1;
+  }
+  else {
+    /* Compare by name */
+    return treesort_alpha(v1, v2);
+  }
+}
+
 /* this is nice option for later? doesn't look too useful... */
 #if 0
 static int treesort_obtype_alpha(const void *v1, const void *v2)
@@ -1935,15 +1952,32 @@ static void outliner_tree_sort(SpaceOutliner *soops, ListBase *tree)
 
       /* Sort collections. */
       if (num_collections > 0) {
-        qsort(tree_sort + skip, num_collections - skip, sizeof(tTreeSort), treesort_alpha);
+        switch (soops->sort_method) {
+          case SO_SORT_ALPHA:
+            qsort(tree_sort + skip, num_collections - skip, sizeof(tTreeSort), treesort_alpha);
+            break;
+          case SO_SORT_TYPE:
+            qsort(tree_sort + skip, num_collections - skip, sizeof(tTreeSort), treesort_alpha);
+            break;
+        }
       }
 
       /* Sort objects. */
       if (num_elems - num_collections - skip > 0) {
-        qsort(tree_sort + skip + num_collections,
-              num_elems - num_collections - skip,
-              sizeof(tTreeSort),
-              treesort_alpha);
+        switch (soops->sort_method) {
+          case SO_SORT_ALPHA:
+            qsort(tree_sort + skip + num_collections,
+                  num_elems - num_collections - skip,
+                  sizeof(tTreeSort),
+                  treesort_alpha);
+            break;
+          case SO_SORT_TYPE:
+            qsort(tree_sort + skip + num_collections,
+                  num_elems - num_collections - skip,
+                  sizeof(tTreeSort),
+                  treesort_type);
+            break;
+        }
       }
 
       // /* just sort alphabetically */



More information about the Bf-blender-cvs mailing list