Revision: 39867
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39867
Author:   campbellbarton
Date:     2011-09-02 08:35:46 +0000 (Fri, 02 Sep 2011)
Log Message:
-----------
patch [#28473] Outliner Simple Todo
from Julien DUROURE (julien)

---

* right click --> rename, as proposed on 
http://wiki.blender.org/index.php/Dev:2.5/Source/Development/Todo/Simple_Todos

* implementation of Toggle visibility/rendarability/selectability on right 
click on Groups ( was in menu, but not implemented )

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_outliner/outliner_draw.c
    trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
    trunk/blender/source/blender/editors/space_outliner/outliner_intern.h
    trunk/blender/source/blender/editors/space_outliner/outliner_tools.c

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_draw.c 
2011-09-02 08:20:30 UTC (rev 39866)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_draw.c 
2011-09-02 08:35:46 UTC (rev 39867)
@@ -236,7 +236,7 @@
        return 0;
 }
 
-static void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag)
+void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag)
 {      
        Scene *scene = (Scene *)poin;           
        GroupObject *gob;

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_edit.c 
2011-09-02 08:20:30 UTC (rev 39866)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_edit.c 
2011-09-02 08:35:46 UTC (rev 39867)
@@ -218,6 +218,34 @@
 
 /* Rename --------------------------------------------------- */
 
+void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem, 
ReportList *reports)
+{
+       /* can't rename rna datablocks entries */
+       if(ELEM3(tselem->type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, 
TSE_RNA_ARRAY_ELEM))
+                       ;
+       else if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, TSE_DEFGROUP_BASE, 
TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, 
TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS)) 
+                       BKE_report(reports, RPT_WARNING, "Cannot edit builtin 
name");
+       else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, 
TSE_SEQUENCE_DUP))
+               BKE_report(reports, RPT_WARNING, "Cannot edit sequence name");
+       else if(tselem->id->lib) {
+               // XXX                                          error_libdata();
+       } 
+       else if(te->idcode == ID_LI && te->parent) {
+               BKE_report(reports, RPT_WARNING, "Cannot edit the path of an 
indirectly linked library");
+       } 
+       else {
+               tselem->flag |= TSE_TEXTBUT;
+               ED_region_tag_redraw(ar);
+       }
+}
+
+void item_rename_cb(bContext *C, Scene *UNUSED(scene), TreeElement *te, 
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       ARegion *ar= CTX_wm_region(C);
+       ReportList *reports= CTX_wm_reports(C); // XXX
+       do_item_rename(ar, te, tselem, reports) ;
+}
+
 static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, 
TreeElement *te, const float mval[2])
 {      
        ReportList *reports= CTX_wm_reports(C); // XXX
@@ -228,23 +256,7 @@
                /* name and first icon */
                if(mval[0]>te->xs+UI_UNIT_X && mval[0]<te->xend) {
                        
-                       /* can't rename rna datablocks entries */
-                       if(ELEM3(tselem->type, TSE_RNA_STRUCT, 
TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM))
-                          ;
-                       else if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, 
TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, 
TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS)) 
-                                       BKE_report(reports, RPT_WARNING, 
"Cannot edit builtin name");
-                       else if(ELEM3(tselem->type, TSE_SEQUENCE, 
TSE_SEQ_STRIP, TSE_SEQUENCE_DUP))
-                               BKE_report(reports, RPT_WARNING, "Cannot edit 
sequence name");
-                       else if(tselem->id->lib) {
-                               // XXX                                          
error_libdata();
-                       } 
-                       else if(te->idcode == ID_LI && te->parent) {
-                               BKE_report(reports, RPT_WARNING, "Cannot edit 
the path of an indirectly linked library");
-                       } 
-                       else {
-                               tselem->flag |= TSE_TEXTBUT;
-                               ED_region_tag_redraw(ar);
-                       }
+                       do_item_rename(ar, te, tselem, reports) ;
                }
                return 1;
        }
@@ -377,6 +389,12 @@
        }
 }
 
+void group_toggle_visibility_cb(bContext *UNUSED(C), Scene *scene, TreeElement 
*UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       Group *group= (Group *)tselem->id;
+       restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_VIEW);
+}
+
 static int outliner_toggle_visibility_exec(bContext *C, wmOperator *UNUSED(op))
 {
        SpaceOops *soops= CTX_wm_space_outliner(C);
@@ -417,6 +435,12 @@
        }
 }
 
+void group_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, 
TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       Group *group= (Group *)tselem->id;
+       restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_SELECT);
+}
+
 static int outliner_toggle_selectability_exec(bContext *C, wmOperator 
*UNUSED(op))
 {
        SpaceOops *soops= CTX_wm_space_outliner(C);
@@ -457,6 +481,12 @@
        }
 }
 
+void group_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, 
TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       Group *group= (Group *)tselem->id;
+       restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_RENDER);
+}
+
 static int outliner_toggle_renderability_exec(bContext *C, wmOperator 
*UNUSED(op))
 {
        SpaceOops *soops= CTX_wm_space_outliner(C);

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_intern.h       
2011-09-02 08:20:30 UTC (rev 39866)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_intern.h       
2011-09-02 08:35:46 UTC (rev 39867)
@@ -139,6 +139,7 @@
 /* outliner_draw.c ---------------------------------------------- */
 
 void draw_outliner(const struct bContext *C);
+void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag);
 
 /* outliner_select.c -------------------------------------------- */
 int tree_element_type_active(struct bContext *C, struct Scene *scene, struct 
SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set);
@@ -158,6 +159,13 @@
 void object_toggle_selectability_cb(struct bContext *C, struct Scene *scene, 
TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
 void object_toggle_renderability_cb(struct bContext *C, struct Scene *scene, 
TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
 
+
+void group_toggle_visibility_cb(struct bContext *C, struct Scene *scene, 
TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
+void group_toggle_selectability_cb(struct bContext *C, struct Scene *scene, 
TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
+void group_toggle_renderability_cb(struct bContext *C, struct Scene *scene, 
TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
+
+void item_rename_cb(struct bContext *C, struct Scene *scene, TreeElement *te, 
struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
+
 /* ...................................................... */
 
 void OUTLINER_OT_item_activate(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2011-09-02 08:20:30 UTC (rev 39866)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2011-09-02 08:35:46 UTC (rev 39867)
@@ -510,6 +510,7 @@
        {6, "TOGVIS", 0, "Toggle Visible", ""},
        {7, "TOGSEL", 0, "Toggle Selectable", ""},
        {8, "TOGREN", 0, "Toggle Renderable", ""},
+       {9, "RENAME", 0, "Rename", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -567,6 +568,10 @@
                str= "Toggle Renderability";
                WM_event_add_notifier(C, NC_SCENE|ND_OB_RENDER, scene);
        }
+       else if(event==9) {
+               outliner_do_object_operation(C, scene, soops, &soops->tree, 
item_rename_cb);
+               str= "Rename Object";
+       }
 
        ED_undo_push(C, str);
        
@@ -600,6 +605,7 @@
        {4, "TOGVIS", 0, "Toggle Visible", ""},
        {5, "TOGSEL", 0, "Toggle Selectable", ""},
        {6, "TOGREN", 0, "Toggle Renderable", ""},
+       {7, "RENAME", 0, "Rename", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -608,6 +614,7 @@
        Scene *scene= CTX_data_scene(C);
        SpaceOops *soops= CTX_wm_space_outliner(C);
        int event;
+       const char *str= NULL;
        
        /* check for invalid states */
        if (soops == NULL)
@@ -617,18 +624,35 @@
        
        if(event==1) {
                outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
unlink_group_cb);
-               ED_undo_push(C, "Unlink group");
+               str= "Unlink group";
        }
        else if(event==2) {
                outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
id_local_cb);
-               ED_undo_push(C, "Localized Data");
+               str= "Localized Data";
        }
        else if(event==3) {
                outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
group_linkobs2scene_cb);
-               ED_undo_push(C, "Link Group Objects to Scene");
+               str= "Link Group Objects to Scene";
        }
+       else if(event==4) {
+               outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
group_toggle_visibility_cb);
+               str= "Toggle Visibility";
+       }
+       else if(event==5) {
+               outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
group_toggle_selectability_cb);
+               str= "Toggle Selectability";
+       }
+       else if(event==6) {
+               outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
group_toggle_renderability_cb);
+               str= "Toggle Renderability";
+       }
+       else if(event==7) {
+               outliner_do_libdata_operation(C, scene, soops, &soops->tree, 
item_rename_cb);
+               str= "Rename";
+       }
        
        
+       ED_undo_push(C, str);
        WM_event_add_notifier(C, NC_GROUP, NULL);
        
        return OPERATOR_FINISHED;
@@ -662,7 +686,8 @@
        OUTLINER_IDOP_SINGLE,
        
        OUTLINER_IDOP_FAKE_ADD,
-       OUTLINER_IDOP_FAKE_CLEAR
+       OUTLINER_IDOP_FAKE_CLEAR,
+       OUTLINER_IDOP_RENAME
 } eOutlinerIdOpTypes;
 
 // TODO: implement support for changing the ID-block used
@@ -672,6 +697,7 @@
        {OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""},
        {OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", "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", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -765,6 +791,14 @@
                        ED_undo_push(C, "Clear Fake User");
                }
                        break;
+               case OUTLINER_IDOP_RENAME:
+                       /* rename */
+                       outliner_do_libdata_operation(C, scene, soops, 
&soops->tree, item_rename_cb);
+
+                       WM_event_add_notifier(C, NC_ID|NA_EDITED, NULL);
+                       ED_undo_push(C, "Rename");
+
+                       break;
                        
                default:
                        // invalid - unhandled

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

Reply via email to