Outliner: Tweaks for Driver Operators

* Driver adding/removing operators in the Outliner now work properly for arrays
* Renamed these operators so that their names are more indicative of how they work (i.e. based on the data in the Outliner that is selected)
* Added a menu labelled 'Edit' in the Datablocks view which gives access to (and includes the hotkeys for) these tools.
This commit is contained in:
2009-10-21 05:59:51 +00:00
parent 908061378c
commit ddb1f64fff
4 changed files with 67 additions and 27 deletions

View File

@@ -17,6 +17,8 @@ class OUTLINER_HT_header(bpy.types.Header):
if context.area.show_menus: if context.area.show_menus:
sub = row.row(align=True) sub = row.row(align=True)
sub.itemM("OUTLINER_MT_view") sub.itemM("OUTLINER_MT_view")
if space.display_mode == 'DATABLOCKS':
sub.itemM("OUTLINER_MT_edit_datablocks")
layout.itemR(space, "display_mode", text="") layout.itemR(space, "display_mode", text="")
@@ -26,13 +28,16 @@ class OUTLINER_HT_header(bpy.types.Header):
row = layout.row(align=True) row = layout.row(align=True)
row.itemO("outliner.keyingset_add_selected", icon='ICON_ZOOMIN', text="") row.itemO("outliner.keyingset_add_selected", icon='ICON_ZOOMIN', text="")
row.itemO("outliner.keyingset_remove_selected", icon='ICON_ZOOMOUT', text="") row.itemO("outliner.keyingset_remove_selected", icon='ICON_ZOOMOUT', text="")
if ks: if ks:
row = layout.row(align=False)
row.item_pointerR(scene, "active_keying_set", scene, "keying_sets", text="") row.item_pointerR(scene, "active_keying_set", scene, "keying_sets", text="")
row = layout.row(align=True) row = layout.row(align=True)
row.itemO("anim.insert_keyframe", text="", icon='ICON_KEY_HLT') row.itemO("anim.insert_keyframe", text="", icon='ICON_KEY_HLT')
row.itemO("anim.delete_keyframe", text="", icon='ICON_KEY_DEHLT') row.itemO("anim.delete_keyframe", text="", icon='ICON_KEY_DEHLT')
else: else:
row = layout.row(align=False)
row.itemL(text="No Keying Set active") row.itemL(text="No Keying Set active")
class OUTLINER_MT_view(bpy.types.Menu): class OUTLINER_MT_view(bpy.types.Menu):
@@ -51,6 +56,23 @@ class OUTLINER_MT_view(bpy.types.Menu):
col.itemO("outliner.show_one_level") col.itemO("outliner.show_one_level")
col.itemO("outliner.show_hierarchy") col.itemO("outliner.show_hierarchy")
class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
__label__ = "Edit"
def draw(self, context):
layout = self.layout
col = layout.column()
col.itemO("outliner.keyingset_add_selected")
col.itemO("outliner.keyingset_remove_selected")
col.itemS()
col.itemO("outliner.drivers_add_selected")
col.itemO("outliner.drivers_delete_selected")
bpy.types.register(OUTLINER_HT_header) bpy.types.register(OUTLINER_HT_header)
bpy.types.register(OUTLINER_MT_view) bpy.types.register(OUTLINER_MT_view)
bpy.types.register(OUTLINER_MT_edit_datablocks)

View File

@@ -3771,21 +3771,39 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, short m
} }
/* only if ID and path were set, should we perform any actions */ /* only if ID and path were set, should we perform any actions */
// FIXME: if whole array flag is set, mus add the entire array
if (id && path) { if (id && path) {
/* action depends on mode */ int arraylen, i;
switch (mode) {
case DRIVERS_EDITMODE_ADD: /* array checks */
{ if (flag & KSP_FLAG_WHOLE_ARRAY) {
/* add a new driver with the information obtained (only if valid) */ /* entire array was selected, so add drivers for all */
ANIM_add_driver(id, path, array_index, flag, DRIVER_TYPE_AVERAGE); arraylen= RNA_property_array_length(&te->rnaptr, te->directdata);
}
else
arraylen= array_index;
/* we should do at least one step */
if (arraylen == array_index)
arraylen++;
/* for each array element we should affect, add driver */
for (; array_index < arraylen; array_index++) {
/* action depends on mode */
switch (mode) {
case DRIVERS_EDITMODE_ADD:
{
/* add a new driver with the information obtained (only if valid) */
ANIM_add_driver(id, path, array_index, flag, DRIVER_TYPE_PYTHON);
}
break;
case DRIVERS_EDITMODE_REMOVE:
{
/* remove driver matching the information obtained (only if valid) */
ANIM_remove_driver(id, path, array_index, flag);
}
break;
} }
break;
case DRIVERS_EDITMODE_REMOVE:
{
/* remove driver matching the information obtained (only if valid) */
ANIM_remove_driver(id, path, array_index, flag);
}
break;
} }
/* free path, since it had to be generated */ /* free path, since it had to be generated */
@@ -3815,16 +3833,16 @@ static int outliner_drivers_addsel_exec(bContext *C, wmOperator *op)
do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_ADD); do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_ADD);
/* send notifiers */ /* send notifiers */
WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL); WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
return OPERATOR_FINISHED; return OPERATOR_FINISHED;
} }
void OUTLINER_OT_drivers_add(wmOperatorType *ot) void OUTLINER_OT_drivers_add_selected(wmOperatorType *ot)
{ {
/* api callbacks */ /* api callbacks */
ot->idname= "OUTLINER_OT_drivers_add"; ot->idname= "OUTLINER_OT_drivers_add_selected";
ot->name= "Add Drivers"; ot->name= "Add Drivers for Selected";
ot->description= "Add drivers to selected items."; ot->description= "Add drivers to selected items.";
/* api callbacks */ /* api callbacks */
@@ -3850,16 +3868,16 @@ static int outliner_drivers_deletesel_exec(bContext *C, wmOperator *op)
do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_REMOVE); do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_REMOVE);
/* send notifiers */ /* send notifiers */
WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL); WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
return OPERATOR_FINISHED; return OPERATOR_FINISHED;
} }
void OUTLINER_OT_drivers_delete(wmOperatorType *ot) void OUTLINER_OT_drivers_delete_selected(wmOperatorType *ot)
{ {
/* identifiers */ /* identifiers */
ot->idname= "OUTLINER_OT_drivers_delete"; ot->idname= "OUTLINER_OT_drivers_delete_selected";
ot->name= "Delete Drivers"; ot->name= "Delete Drivers for Selected";
ot->description= "Delete drivers assigned to selected items."; ot->description= "Delete drivers assigned to selected items.";
/* api callbacks */ /* api callbacks */

View File

@@ -143,8 +143,8 @@ void OUTLINER_OT_visibility_toggle(struct wmOperatorType *ot);
void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot); void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot);
void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot); void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot);
void OUTLINER_OT_drivers_add(struct wmOperatorType *ot); void OUTLINER_OT_drivers_add_selected(struct wmOperatorType *ot);
void OUTLINER_OT_drivers_delete(struct wmOperatorType *ot); void OUTLINER_OT_drivers_delete_selected(struct wmOperatorType *ot);
#if 0 #if 0
extern void outliner_mouse_event(Scene *scene, ARegion *ar, SpaceOops *soops, short event); extern void outliner_mouse_event(Scene *scene, ARegion *ar, SpaceOops *soops, short event);

View File

@@ -70,8 +70,8 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_keyingset_add_selected); WM_operatortype_append(OUTLINER_OT_keyingset_add_selected);
WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected); WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected);
WM_operatortype_append(OUTLINER_OT_drivers_add); WM_operatortype_append(OUTLINER_OT_drivers_add_selected);
WM_operatortype_append(OUTLINER_OT_drivers_delete); WM_operatortype_append(OUTLINER_OT_drivers_delete_selected);
} }
void outliner_keymap(wmKeyConfig *keyconf) void outliner_keymap(wmKeyConfig *keyconf)
@@ -110,7 +110,7 @@ void outliner_keymap(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe", IKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe", IKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add", DKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add_selected", DKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete", DKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete_selected", DKEY, KM_PRESS, KM_ALT, 0);
} }