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;
 }


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to