Option to copy the data path of an RNA button

This commit is contained in:
Campbell Barton 2009-10-07 13:22:56 +00:00
parent 9cf78144f1
commit 568be17326
4 changed files with 51 additions and 0 deletions

@ -79,4 +79,6 @@ void ANIM_OT_remove_driver_button(struct wmOperatorType *ot);
void ANIM_OT_copy_driver_button(struct wmOperatorType *ot);
void ANIM_OT_paste_driver_button(struct wmOperatorType *ot);
void ANIM_OT_copy_clipboard_button(struct wmOperatorType *ot);
#endif // ANIM_INTERN_H

@ -404,6 +404,8 @@ void ED_operatortypes_anim(void)
WM_operatortype_append(ANIM_OT_copy_driver_button);
WM_operatortype_append(ANIM_OT_paste_driver_button);
WM_operatortype_append(ANIM_OT_copy_clipboard_button);
WM_operatortype_append(ANIM_OT_add_keyingset_button);
WM_operatortype_append(ANIM_OT_remove_keyingset_button);

@ -564,4 +564,48 @@ void ANIM_OT_paste_driver_button (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
/* Paste Driver Button Operator ------------------------ */
static int copy_clipboard_button_exec(bContext *C, wmOperator *op)
{
PointerRNA ptr;
PropertyRNA *prop= NULL;
char *path;
short success= 0;
int index;
/* try to create driver using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
uiAnimContextProperty(C, &ptr, &prop, &index);
if (ptr.data && prop) { // && RNA_property_animateable(ptr.data, prop)
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
WM_clipboard_text_set(path, FALSE);
MEM_freeN(path);
}
}
/* since we're just copying, we don't really need to do anything else...*/
return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
}
void ANIM_OT_copy_clipboard_button(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Copy Data Path";
ot->idname= "ANIM_OT_copy_clipboard_button";
ot->description= "Copy the rna data path to the clipboard.";
/* callbacks */
ot->exec= copy_clipboard_button_exec;
//op->poll= ??? // TODO: need to have some driver to be able to do this...
/* flags */
ot->flag= 0;
}
/* ************************************************** */

@ -310,6 +310,9 @@ void ui_but_anim_menu(bContext *C, uiBut *but)
}
}
uiItemS(layout);
uiItemBooleanO(layout, "Copy Data Path", 0, "ANIM_OT_copy_clipboard_button", "all", 1);
uiPupMenuEnd(C, pup);
}
}