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 )
This commit is contained in:
@@ -236,7 +236,7 @@ static int group_select_flag(Group *gr)
|
||||
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;
|
||||
|
||||
@@ -218,6 +218,34 @@ void OUTLINER_OT_item_openclose(wmOperatorType *ot)
|
||||
|
||||
/* 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 @@ static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, T
|
||||
/* 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 object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, Tre
|
||||
}
|
||||
}
|
||||
|
||||
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 object_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme
|
||||
}
|
||||
}
|
||||
|
||||
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 object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -139,6 +139,7 @@ void outliner_build_tree(struct Main *mainvar, struct Scene *scene, struct Space
|
||||
/* 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_visibility_cb(struct bContext *C, struct Scene *scene, TreeEl
|
||||
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);
|
||||
|
||||
@@ -510,6 +510,7 @@ static EnumPropertyItem prop_object_op_types[] = {
|
||||
{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 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
|
||||
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 @@ static EnumPropertyItem prop_group_op_types[] = {
|
||||
{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 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
|
||||
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 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
|
||||
|
||||
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 @@ typedef enum eOutlinerIdOpTypes {
|
||||
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 @@ static EnumPropertyItem prop_id_op_types[] = {
|
||||
{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 @@ static int outliner_id_operation_exec(bContext *C, wmOperator *op)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user