[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17909] branches/blender2.5/blender/source /blender: UI:

Brecht Van Lommel brecht at blender.org
Wed Dec 17 17:53:57 CET 2008


Revision: 17909
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17909
Author:   blendix
Date:     2008-12-17 17:53:56 +0100 (Wed, 17 Dec 2008)

Log Message:
-----------
UI:
* Changed pupmenu function name and added back some standard popups.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2008-12-17 16:21:14 UTC (rev 17908)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2008-12-17 16:53:56 UTC (rev 17909)
@@ -205,11 +205,13 @@
 typedef uiBlock* (*uiBlockFuncFP)(struct bContext *C, struct uiMenuBlockHandle *handle, void *arg1);
 typedef void (*uiPupmenuFunc)(struct bContext *C, void *arg, int event);
 
-extern void pupmenu_set_active(int val);
-extern void pupmenu_col(struct bContext *C, char *instr, int mx, int my, int maxrow, uiPupmenuFunc func, void *arg);
-extern void pupmenu(struct bContext *C, char *instr, int mx, int my, uiPupmenuFunc func, void *arg);
+void uiPupmenuSetActive(int val);
+void uiPupmenu(struct bContext *C, int maxrow, uiPupmenuFunc func, void *arg, char *str, ...);
 
-void okee_operator(struct bContext *C, char *opname, char *str, ...);
+void uiPupmenuOkee(struct bContext *C, char *opname, char *str, ...);
+void uiPupmenuSaveOver(struct bContext *C, char *opname, char *filename, ...);
+void uiPupmenuNotice(struct bContext *C, char *str, ...);
+void uiPupmenuError(struct bContext *C, char *str, ...);
 
 /* Block */
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-17 16:21:14 UTC (rev 17908)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-17 16:53:56 UTC (rev 17909)
@@ -165,7 +165,7 @@
 	 * handling is done, i.e. menus are closed, in order to avoid conflicts
 	 * with these functions removing the buttons we are working with */
 
-	if(but->func || block->handle_func || (but->type == BUTM && block->butm_func)) {
+	if(but->func || block->handle_func || (but->type == BUTM && block->butm_func) || but->opname) {
 		after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc");
 
 		after->func= but->func;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2008-12-17 16:21:14 UTC (rev 17908)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2008-12-17 16:53:56 UTC (rev 17909)
@@ -1278,7 +1278,7 @@
 
 static int pupmenu_set= 0;
 
-void pupmenu_set_active(int val)
+void uiPupmenuSetActive(int val)
 {
 	pupmenu_set= val;
 }
@@ -1632,18 +1632,18 @@
 	return block;
 }
 
-void pupmenu_col(bContext *C, char *instr, int mx, int my, int maxrow, uiPupmenuFunc func, void *arg)
+void uiPupmenu(bContext *C, int maxrow, uiPupmenuFunc func, void *arg, char *str, ...)
 {
 	uiPupMenuInfo info;
 	uiMenuBlockHandle *menu;
 
 	memset(&info, 0, sizeof(info));
-	info.instr= instr;
-	info.mx= mx;
-	info.my= my;
+	info.mx= C->window->eventstate->x;
+	info.my= C->window->eventstate->y;
 	info.maxrow= maxrow;
+	info.instr= str;
 
-	menu= ui_menu_block_create(C, NULL, NULL, ui_block_func_PUPMENUCOL, &info);
+	menu= ui_menu_block_create(C, NULL, NULL, ui_block_func_PUPMENU, &info);
 	menu->popup= 1;
 
 	UI_add_popup_handlers(&C->window->handlers, menu);
@@ -1653,51 +1653,87 @@
 	menu->popup_arg= arg;
 }
 
-void pupmenu(bContext *C, char *instr, int mx, int my, uiPupmenuFunc func, void *arg)
+/* standard pupmenus */
+
+static void operator_cb(bContext *C, void *arg, int retval)
 {
-	uiPupMenuInfo info;
-	uiMenuBlockHandle *menu;
+	const char *opname= arg;
 
-	memset(&info, 0, sizeof(info));
-	info.instr= instr;
-	info.mx= mx;
-	info.my= my;
+	if(opname && retval > 0)
+		WM_operator_call(C, opname, WM_OP_DEFAULT, NULL);
+}
 
-	menu= ui_menu_block_create(C, NULL, NULL, ui_block_func_PUPMENU, &info);
-	menu->popup= 1;
+static void vconfirm(bContext *C, char *opname, char *title, char *itemfmt, va_list ap)
+{
+	char *s, buf[512];
 
-	UI_add_popup_handlers(&C->window->handlers, menu);
-	WM_event_add_mousemove(C);
+	s= buf;
+	if (title) s+= sprintf(s, "%s%%t|", title);
+	vsprintf(s, itemfmt, ap);
 
-	menu->popup_func= func;
-	menu->popup_arg= arg;
+	uiPupmenu(C, 0, operator_cb, opname, buf);
 }
 
-/* XXX test */
-static void operator_callback(bContext *C, void *arg, int retval)
+static void confirm(bContext *C, char *opname, char *title, char *itemfmt, ...)
 {
-	const char *opname= arg;
+	va_list ap;
 
-	if(retval > 0)
-		WM_operator_call(C, opname, WM_OP_DEFAULT, NULL);
+	va_start(ap, itemfmt);
+	vconfirm(C, opname, title, itemfmt, ap);
+	va_end(ap);
 }
 
-void okee_operator(bContext *C, char *opname, char *str, ...)
+void uiPupmenuOkee(bContext *C, char *opname, char *str, ...)
 {
 	va_list ap;
-	char *s, buf[512];
-	int mx, my;
+	char titlestr[256];
 
-	mx= C->window->eventstate->x;
-	my= C->window->eventstate->y;
+	sprintf(titlestr, "OK? %%i%d", ICON_HELP);
 
 	va_start(ap, str);
+	vconfirm(C, opname, titlestr, str, ap);
+	va_end(ap);
+}
 
-	s= buf;
-	s += sprintf(s, "OK? %%i%d%%t|", ICON_HELP);
-	vsprintf(s, str, ap);
+void uiPupmenuSaveOver(bContext *C, char *opname, char *filename, ...)
+{
+	size_t len= strlen(filename);
+
+	if(len==0)
+		return;
+
+	if(BLI_exists(filename)==0)
+		operator_cb(C, opname, 1);
+
+	if(filename[len-1]=='/' || filename[len-1]=='\\') {
+		uiPupmenuError(C, "Cannot overwrite a directory");
+		return;
+	}
+
+	confirm(C, opname, "Save over", filename);
+}
+
+void uiPupmenuNotice(bContext *C, char *str, ...)
+{
+	va_list ap;
+
+	va_start(ap, str);
+	vconfirm(C, NULL, NULL, str, ap);
 	va_end(ap);
+}
 
-	pupmenu(C, buf, mx, my, operator_callback, opname);
+void uiPupmenuError(bContext *C, char *str, ...)
+{
+	va_list ap;
+	char nfmt[256];
+	char titlestr[256];
+
+	sprintf(titlestr, "Error %%i%d", ICON_ERROR);
+
+	sprintf(nfmt, "%s", str);
+
+	va_start(ap, str);
+	vconfirm(C, NULL, titlestr, nfmt, ap);
+	va_end(ap);
 }
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2008-12-17 16:21:14 UTC (rev 17908)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2008-12-17 16:53:56 UTC (rev 17909)
@@ -102,7 +102,7 @@
 	char buf[512];
 	
 	sprintf(buf, "OK? %%i%d%%t|%s", ICON_HELP, op->type->name);
-	pupmenu(C, buf, event->x, event->y, operator_callback, op);
+	uiPupmenu(C, 0, operator_callback, op, buf);
 	
 	return 1;
 }





More information about the Bf-blender-cvs mailing list