[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