Revision: 53280
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53280
Author:   ton
Date:     2012-12-22 18:34:17 +0000 (Sat, 22 Dec 2012)
Log Message:
-----------
Outliner:

Added drag-drop support for Groups. On drop in 3d window it creates an instance.

Todo: it adds this on 3d cursor position still. The existing 
drop-object-duplicate operator
is a Macro - with warning. For adding on mouse-cursor position we need a better
way (new function call, just use operator option).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c    2012-12-22 
18:31:05 UTC (rev 53279)
+++ trunk/blender/source/blender/editors/object/object_add.c    2012-12-22 
18:34:17 UTC (rev 53280)
@@ -802,11 +802,19 @@
 
 static int group_instance_add_exec(bContext *C, wmOperator *op)
 {
-       Group *group = BLI_findlink(&CTX_data_main(C)->group, 
RNA_enum_get(op->ptr, "group"));
-
+       Group *group;
        unsigned int layer;
        float loc[3], rot[3];
+       
+       if (RNA_struct_property_is_set(op->ptr, "name")) {
+               char name[MAX_ID_NAME - 2];
 
+               RNA_string_get(op->ptr, "name", name);
+               group = (Group *)BKE_libblock_find_name(ID_GR, name);
+       }
+       else
+               group = BLI_findlink(&CTX_data_main(C)->group, 
RNA_enum_get(op->ptr, "group"));
+
        if (!ED_object_add_generic_get_opts(C, op, loc, rot, NULL, &layer, 
NULL))
                return OPERATOR_CANCELLED;
 
@@ -847,6 +855,7 @@
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 
        /* properties */
+       RNA_def_string(ot->srna, "name", "Group", MAX_ID_NAME - 2, "Name", 
"Group name to add");
        ot->prop = RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, 
"Group", "");
        RNA_def_enum_funcs(ot->prop, RNA_group_itemf);
        ED_object_add_generic_props(ot, FALSE);

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c    
2012-12-22 18:31:05 UTC (rev 53279)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c    
2012-12-22 18:34:17 UTC (rev 53280)
@@ -466,6 +466,16 @@
        return 0;
 }
 
+static int view3d_group_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent 
*UNUSED(event))
+{
+       if (drag->type == WM_DRAG_ID) {
+               ID *id = (ID *)drag->poin;
+               if (GS(id->name) == ID_GR)
+                       return 1;
+       }
+       return 0;
+}
+
 static int view3d_mat_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent 
*UNUSED(event))
 {
        if (drag->type == WM_DRAG_ID) {
@@ -520,6 +530,14 @@
                RNA_string_set(drop->ptr, "name", id->name + 2);
 }
 
+static void view3d_group_drop_copy(wmDrag *drag, wmDropBox *drop)
+{
+       ID *id = (ID *)drag->poin;
+       
+       drop->opcontext = WM_OP_EXEC_DEFAULT;
+       RNA_string_set(drop->ptr, "name", id->name + 2);
+}
+
 static void view3d_id_drop_copy(wmDrag *drag, wmDropBox *drop)
 {
        ID *id = (ID *)drag->poin;
@@ -547,6 +565,7 @@
        WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", 
view3d_mat_drop_poll, view3d_id_drop_copy);
        WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, 
view3d_id_path_drop_copy);
        WM_dropbox_add(lb, "VIEW3D_OT_background_image_add", 
view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
+       WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", 
view3d_group_drop_poll, view3d_group_drop_copy);
 }
 
 

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

Reply via email to