[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25545] trunk/blender/source/blender: support for registering operators using the same internal rna api as panels , menus, headers & render engines since there was a fair bit of duplicate functionality .
Campbell Barton
ideasman42 at gmail.com
Thu Dec 24 17:10:26 CET 2009
Revision: 25545
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25545
Author: campbellbarton
Date: 2009-12-24 17:10:26 +0100 (Thu, 24 Dec 2009)
Log Message:
-----------
support for registering operators using the same internal rna api as panels, menus, headers & render engines since there was a fair bit of duplicate functionality.
will remove the old system and update scripts next.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_sequencer.h
trunk/blender/source/blender/blenkernel/intern/brush.c
trunk/blender/source/blender/editors/mesh/mesh_intern.h
trunk/blender/source/blender/editors/space_console/console_intern.h
trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
trunk/blender/source/blender/makesrna/intern/rna_wm.c
trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
trunk/blender/source/blender/python/intern/bpy_operator.c
trunk/blender/source/blender/python/intern/bpy_rna.c
trunk/blender/source/blender/windowmanager/WM_api.h
trunk/blender/source/blender/windowmanager/WM_types.h
trunk/blender/source/blender/windowmanager/wm_window.h
Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2009-12-24 16:10:26 UTC (rev 25545)
@@ -195,7 +195,7 @@
void seq_update_sound(struct Sequence *seq);
void seq_update_muting(struct Editing *ed);
-
+void seqbase_sound_reload(Scene *scene, ListBase *seqbase);
void clear_scene_in_allseqs(struct Scene *sce);
struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive);
Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c 2009-12-24 16:10:26 UTC (rev 25545)
@@ -40,6 +40,8 @@
#include "DNA_scene_types.h"
#include "DNA_windowmanager_types.h"
+#include "WM_types.h"
+
#include "RNA_access.h"
#include "BLI_math.h"
@@ -56,6 +58,8 @@
#include "BKE_texture.h"
#include "BKE_utildefines.h"
+
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
Modified: trunk/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_intern.h 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/editors/mesh/mesh_intern.h 2009-12-24 16:10:26 UTC (rev 25545)
@@ -34,7 +34,9 @@
struct bContext;
struct wmOperatorType;
+struct wmOperator;
+
#define UVCOPY(t, s) memcpy(t, s, 2 * sizeof(float));
/* ******************** editface.c */
@@ -197,7 +199,7 @@
void join_triangles(EditMesh *em);
int removedoublesflag(EditMesh *em, short flag, short automerge, float limit); /* return amount */
void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float fractal, int beauty, int numcuts, int seltype);
-int EdgeSlide(EditMesh *em, wmOperator *op, short immediate, float imperc);
+int EdgeSlide(EditMesh *em, struct wmOperator *op, short immediate, float imperc);
void MESH_OT_merge(struct wmOperatorType *ot);
void MESH_OT_subdivide(struct wmOperatorType *ot);
Modified: trunk/blender/source/blender/editors/space_console/console_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_console/console_intern.h 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/editors/space_console/console_intern.h 2009-12-24 16:10:26 UTC (rev 25545)
@@ -51,28 +51,28 @@
int console_report_mask(SpaceConsole *sc);
-void CONSOLE_OT_move(wmOperatorType *ot);
-void CONSOLE_OT_delete(wmOperatorType *ot);
-void CONSOLE_OT_insert(wmOperatorType *ot);
+void CONSOLE_OT_move(struct wmOperatorType *ot);
+void CONSOLE_OT_delete(struct wmOperatorType *ot);
+void CONSOLE_OT_insert(struct wmOperatorType *ot);
-void CONSOLE_OT_history_append(wmOperatorType *ot);
-void CONSOLE_OT_scrollback_append(wmOperatorType *ot);
+void CONSOLE_OT_history_append(struct wmOperatorType *ot);
+void CONSOLE_OT_scrollback_append(struct wmOperatorType *ot);
-void CONSOLE_OT_clear(wmOperatorType *ot);
-void CONSOLE_OT_history_cycle(wmOperatorType *ot);
-void CONSOLE_OT_copy(wmOperatorType *ot);
-void CONSOLE_OT_paste(wmOperatorType *ot);
-void CONSOLE_OT_zoom(wmOperatorType *ot);
+void CONSOLE_OT_clear(struct wmOperatorType *ot);
+void CONSOLE_OT_history_cycle(struct wmOperatorType *ot);
+void CONSOLE_OT_copy(struct wmOperatorType *ot);
+void CONSOLE_OT_paste(struct wmOperatorType *ot);
+void CONSOLE_OT_zoom(struct wmOperatorType *ot);
/* console_report.c */
-void CONSOLE_OT_select_pick(wmOperatorType *ot); /* report selection */
-void CONSOLE_OT_select_all_toggle(wmOperatorType *ot);
-void CONSOLE_OT_select_border(wmOperatorType *ot);
+void CONSOLE_OT_select_pick(struct wmOperatorType *ot); /* report selection */
+void CONSOLE_OT_select_all_toggle(struct wmOperatorType *ot);
+void CONSOLE_OT_select_border(struct wmOperatorType *ot);
-void CONSOLE_OT_report_replay(wmOperatorType *ot);
-void CONSOLE_OT_report_delete(wmOperatorType *ot);
-void CONSOLE_OT_report_copy(wmOperatorType *ot);
+void CONSOLE_OT_report_replay(struct wmOperatorType *ot);
+void CONSOLE_OT_report_delete(struct wmOperatorType *ot);
+void CONSOLE_OT_report_copy(struct wmOperatorType *ot);
Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c 2009-12-24 16:10:26 UTC (rev 25545)
@@ -1814,7 +1814,7 @@
/* ******************** linked select operator **************** */
-static select_linked_internal(bContext *C, wmOperator *op, wmEvent *event, int pick)
+static int select_linked_internal(bContext *C, wmOperator *op, wmEvent *event, int pick)
{
SpaceImage *sima= CTX_wm_space_image(C);
Scene *scene= CTX_data_scene(C);
Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h 2009-12-24 16:10:26 UTC (rev 25545)
@@ -180,64 +180,15 @@
#
typedef struct wmOperatorTypeMacro {
struct wmOperatorTypeMacro *next, *prev;
-
+
/* operator id */
char idname[MAX_ID_NAME];
/* rna pointer to access properties, like keymap */
struct IDProperty *properties; /* operator properties, assigned to ptr->data and can be written to a file */
- struct PointerRNA *ptr;
+ struct PointerRNA *ptr;
} wmOperatorTypeMacro;
-#
-#
-typedef struct wmOperatorType {
- struct wmOperatorType *next, *prev;
-
- char *name; /* text for ui, undo */
- char *idname; /* unique identifier */
- char *description; /* tooltips and python docs */
-
- /* this callback executes the operator without any interactive input,
- * parameters may be provided through operator properties. cannot use
- * any interface code or input device state.
- * - see defines below for return values */
- int (*exec)(struct bContext *, struct wmOperator *);
-
- /* for modal temporary operators, initially invoke is called. then
- * any further events are handled in modal. if the operation is
- * cancelled due to some external reason, cancel is called
- * - see defines below for return values */
- int (*invoke)(struct bContext *, struct wmOperator *, struct wmEvent *);
- int (*cancel)(struct bContext *, struct wmOperator *);
- int (*modal)(struct bContext *, struct wmOperator *, struct wmEvent *);
-
- /* verify if the operator can be executed in the current context, note
- * that the operator might still fail to execute even if this return true */
- int (*poll)(struct bContext *);
-
- /* optional panel for redo and repeat, autogenerated if not set */
- void (*ui)(struct bContext *, struct wmOperator *, struct uiLayout *);
-
- /* rna for properties */
- struct StructRNA *srna;
-
- /* struct wmOperatorTypeMacro */
- ListBase macro;
-
- short flag;
-
- /* pointer to modal keymap, do not free! */
- struct wmKeyMap *modalkeymap;
-
- /* only used for operators defined with python
- * use to store pointers to python functions */
- void *pyop_data;
- int (*pyop_poll)(struct bContext *, struct wmOperatorType *ot);
-
-} wmOperatorType;
-
-
/* partial copy of the event, for matching by eventhandler */
typedef struct wmKeyMapItem {
struct wmKeyMapItem *next, *prev;
@@ -318,18 +269,18 @@
/* saved */
char idname[64]; /* used to retrieve type pointer */
IDProperty *properties; /* saved, user-settable properties */
-
+
/* runtime */
- wmOperatorType *type; /* operator type definition from idname */
+ struct wmOperatorType *type; /* operator type definition from idname */
void *customdata; /* custom storage, only while operator runs */
-
+
struct PointerRNA *ptr; /* rna pointer to access properties */
struct ReportList *reports; /* errors and warnings storage */
-
+
ListBase macro; /* list of operators, can be a tree */
struct wmOperator *opm; /* current running macro, not saved */
short flag, pad[3];
-
+
} wmOperator;
/* operator type exec(), invoke() modal(), return values */
Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c 2009-12-24 14:58:11 UTC (rev 25544)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c 2009-12-24 16:10:26 UTC (rev 25545)
@@ -584,6 +584,196 @@
return 0;
}
+static void rna_Operator_unregister(const bContext *C, StructRNA *type)
+{
+ char *idname;
+ wmOperatorType *ot= RNA_struct_blender_type_get(type);
+
+ if(!ot)
+ return;
+
+ RNA_struct_free_extension(type, &ot->ext);
+
+ idname= ot->idname;
+ WM_operatortype_remove(ot->idname);
+ MEM_freeN(idname);
+
+ // RNA_struct_free(&BLENDER_RNA, type); // WM_operatortype_remove calls this
+
+ /* update while blender is running */
+ if(C)
+ WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
+}
+
+void operator_wrapper(wmOperatorType *ot, void *userdata)
+{
+ /* take care not to overwrite anything set in
+ * WM_operatortype_append_ptr before opfunc() is called */
+ StructRNA *srna = ot->srna;
+ *ot= *((wmOperatorType *)userdata);
+ ot->srna= srna; /* restore */
+
+ RNA_struct_blender_type_set(ot->ext.srna, ot);
+}
+
+#if 0
+static int PYTHON_OT_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ return PYTHON_OT_generic(PYOP_INVOKE, C, op->type, op, event, NULL);
+}
+
+static int PYTHON_OT_execute(bContext *C, wmOperator *op)
+{
+ return PYTHON_OT_generic(PYOP_EXEC, C, op->type, op, NULL, NULL);
+}
+
+static int PYTHON_OT_poll(bContext *C, wmOperatorType *ot)
+{
+ return PYTHON_OT_generic(PYOP_POLL, C, ot, NULL, NULL, NULL);
+}
+
+static void PYTHON_OT_draw(bContext *C, wmOperator *op, uiLayout *layout)
+{
+ PYTHON_OT_generic(PYOP_DRAW, C, op->type, op, NULL, layout);
+}
+#endif
+
+static int operator_poll(bContext *C, wmOperatorType *ot)
+{
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ void *ret;
+ int visible;
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list