[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25148] trunk/blender/source/blender: wm. invoke_popup(op, width, height) similar to wm.invoke_props_popup(op, event) except it doesnt use undo/redo (UI's need to execute operators themselves)

Campbell Barton ideasman42 at gmail.com
Sun Dec 6 05:35:02 CET 2009


Revision: 25148
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25148
Author:   campbellbarton
Date:     2009-12-06 05:35:00 +0100 (Sun, 06 Dec 2009)

Log Message:
-----------
wm.invoke_popup(op, width, height) similar to wm.invoke_props_popup(op, event) except it doesnt use undo/redo (UI's need to execute operators themselves) 

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2009-12-05 23:41:45 UTC (rev 25147)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2009-12-06 04:35:00 UTC (rev 25148)
@@ -147,6 +147,15 @@
 	parm= RNA_def_pointer(func, "event", "Event", "", "Event.");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 	RNA_def_function_return(func, RNA_def_int(func, "mode",  0, 0, INT_MAX, "Mode", "", 0, INT_MAX)); // XXX, should be an enum/flag thingo
+
+	/* invoke functions, for use with python */
+	func= RNA_def_function(srna, "invoke_popup", "WM_operator_ui_popup");
+	RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
+	RNA_def_function_ui_description(func, "Operator popup invoke.");
+	parm= RNA_def_pointer(func, "operator", "Operator", "", "Operator to call.");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm= RNA_def_int(func, "width", 300, 0, INT_MAX, "", "Width of the popup.", 0, INT_MAX);
+	parm= RNA_def_int(func, "height", 20, 0, INT_MAX, "", "Height of the popup.", 0, INT_MAX);
 }
 
 void RNA_api_keyconfig(StructRNA *srna)

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2009-12-05 23:41:45 UTC (rev 25147)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2009-12-06 04:35:00 UTC (rev 25148)
@@ -168,6 +168,7 @@
 			/* invoke callback, exec + redo popup */
 int			WM_operator_props_popup	(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int			WM_operator_redo_popup	(struct bContext *C, struct wmOperator *op);
+void		WM_operator_ui_popup	(struct bContext *C, struct wmOperator *op, int width, int height);
 
 int			WM_operator_confirm_message(struct bContext *C, struct wmOperator *op, char *message);
 

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-12-05 23:41:45 UTC (rev 25147)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-12-06 04:35:00 UTC (rev 25148)
@@ -774,6 +774,38 @@
 	return block;
 }
 
+
+static uiBlock *wm_operator_create_ui(bContext *C, ARegion *ar, void *userData)
+{
+	struct { wmOperator *op; int width; int height; } * data = userData;
+	wmWindowManager *wm= CTX_wm_manager(C);
+	wmOperator *op= data->op;
+	PointerRNA ptr;
+	uiBlock *block;
+	uiLayout *layout;
+	uiStyle *style= U.uistyles.first;
+
+	block= uiBeginBlock(C, ar, "opui_popup", UI_EMBOSS);
+	uiBlockClearFlag(block, UI_BLOCK_LOOP);
+	uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1|UI_BLOCK_MOVEMOUSE_QUIT);
+
+	if(!op->properties) {
+		IDPropertyTemplate val = {0};
+		op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
+	}
+
+	RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
+	layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, data->width, data->height, style);
+
+	if(op->type->ui)
+		op->type->ui((bContext*)C, op, layout);
+
+	uiPopupBoundsBlock(block, 4.0f, 0, 0);
+	uiEndBlock(C, block);
+
+	return block;
+}
+
 int WM_operator_props_popup(bContext *C, wmOperator *op, wmEvent *event)
 {
 	int retval= OPERATOR_CANCELLED;
@@ -787,6 +819,15 @@
 	return retval;
 }
 
+void WM_operator_ui_popup(bContext *C, wmOperator *op, int width, int height)
+{
+	struct { wmOperator *op; int width; int height; } data;
+	data.op = op;
+	data.width = width;
+	data.height = height;
+	uiPupBlock(C, wm_operator_create_ui, &data);
+}
+
 int WM_operator_redo_popup(bContext *C, wmOperator *op)
 {
 	uiPupBlock(C, wm_block_create_redo, op);





More information about the Bf-blender-cvs mailing list