Revision: 49222
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49222
Author:   nazgul
Date:     2012-07-25 19:45:34 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
Implement operator to select linked data from outliner

Supports selecting using object data, material and library.

Would be nice to hide this menu item from menus appearing for
datablocks which does not support such a selection, but that
could be done separately.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/object/object_select.c
    trunk/blender/source/blender/editors/space_outliner/outliner_tools.c

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h    2012-07-25 
19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/include/ED_object.h    2012-07-25 
19:45:34 UTC (rev 49222)
@@ -41,6 +41,7 @@
 struct bPoseChannel;
 struct Curve;
 struct EnumPropertyItem;
+struct ID;
 struct KeyBlock;
 struct Lattice;
 struct Main;
@@ -183,6 +184,9 @@
 
 int ED_object_multires_update_totlevels_cb(struct Object *ob, void 
*totlevel_v);
 
+/* ibject_select.c */
+void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/editors/object/object_select.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_select.c 2012-07-25 
19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/object/object_select.c 2012-07-25 
19:45:34 UTC (rev 49222)
@@ -372,6 +372,25 @@
        return changed;
 }
 
+void ED_object_select_linked_by_id(bContext *C, ID *id)
+{
+       int gs = GS(id->name);
+       int changed = FALSE;
+
+       if (ELEM8(gs, ID_ME, ID_CU, ID_MB, ID_LT, ID_LA, ID_CA, ID_TXT, 
ID_SPK)) {
+               changed = object_select_all_by_obdata(C, id);
+       }
+       else if (gs == ID_MA) {
+               changed = object_select_all_by_material_texture(C, FALSE, 
(Material *)id, NULL);
+       }
+       else if (gs == ID_LI) {
+               changed = object_select_all_by_library(C, (Library *) id);
+       }
+
+       if (changed)
+               WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, 
CTX_data_scene(C));
+}
+
 static int object_select_linked_exec(bContext *C, wmOperator *op)
 {
        Scene *scene = CTX_data_scene(C);
@@ -1097,5 +1116,3 @@
        RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, 
"Percent", "Percentage of objects to select randomly", 0.f, 100.0f);
        RNA_def_boolean(ot->srna, "extend", FALSE, "Extend Selection", "Extend 
selection instead of deselecting everything first");
 }
-
-

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2012-07-25 19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2012-07-25 19:45:34 UTC (rev 49222)
@@ -324,6 +324,14 @@
        }
 }
 
+static void id_select_linked_cb(bContext *C, Scene *UNUSED(scene), TreeElement 
*UNUSED(te),
+                                TreeStoreElem *UNUSED(tsep), TreeStoreElem 
*tselem)
+{
+       ID *id = tselem->id;
+
+       ED_object_select_linked_by_id(C, id);
+}
+
 static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), 
TreeElement *UNUSED(te),
                                  TreeStoreElem *tsep, TreeStoreElem *tselem)
 {
@@ -728,7 +736,9 @@
        
        OUTLINER_IDOP_FAKE_ADD,
        OUTLINER_IDOP_FAKE_CLEAR,
-       OUTLINER_IDOP_RENAME
+       OUTLINER_IDOP_RENAME,
+
+       OUTLINER_IDOP_SELECT_LINKED
 } eOutlinerIdOpTypes;
 
 // TODO: implement support for changing the ID-block used
@@ -740,6 +750,7 @@
      "Ensure datablock gets saved even if it isn't in use (e.g. for motion and 
material libraries)"},
        {OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""},
        {OUTLINER_IDOP_RENAME, "RENAME", 0, "Rename", ""},
+       {OUTLINER_IDOP_SELECT_LINKED, "SELECT_LINKED", 0, "Select Linked", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -855,6 +866,11 @@
                        ED_undo_push(C, "Rename");
                }
                break;
+
+               case OUTLINER_IDOP_SELECT_LINKED:
+                       outliner_do_libdata_operation(C, scene, soops, 
&soops->tree, id_select_linked_cb);
+                       ED_undo_push(C, "Select");
+                       break;
                        
                default:
                        // invalid - unhandled

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to