[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