diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-12-17 19:53:56 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-12-17 19:53:56 +0300 |
commit | 065155a17d468fd0655069f3c75af3c5fea69fa9 (patch) | |
tree | 74fafc9a5af91a7862ba26e1399c99bd96afaebc /source/blender/editors/interface/interface_regions.c | |
parent | 3051647c98704c9cb79c2673611ba801903341f5 (diff) |
UI:
* Changed pupmenu function name and added back some standard popups.
Diffstat (limited to 'source/blender/editors/interface/interface_regions.c')
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 102 |
1 files changed, 69 insertions, 33 deletions
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index e4b3157c6a1..a6f41195142 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1278,7 +1278,7 @@ uiBlock *ui_block_func_COL(bContext *C, uiMenuBlockHandle *handle, void *arg_but static int pupmenu_set= 0; -void pupmenu_set_active(int val) +void uiPupmenuSetActive(int val) { pupmenu_set= val; } @@ -1632,18 +1632,18 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiMenuBlockHandle *handle, void * 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 @@ void pupmenu_col(bContext *C, char *instr, int mx, int my, int maxrow, uiPupmenu 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); } |