Revision: 20782
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20782
Author:   ton
Date:     2009-06-10 13:43:21 +0200 (Wed, 10 Jun 2009)

Log Message:
-----------
2.5

First version of search-based ID browsing. Now only in use for the
top bar screen/scene browse. The python buttons will follow. 
Also made search button colors match the theme colors from menu back.

Todos for browse-search:
- "Add new" will disappear, and become a separate icon button in the
  row of widgets (like X, delete).
- Drawing the preview icons in menu
- Make search menu dynamic, with configurable number of items? And/or
  multi-collumn... for now it's static
- Search menu should popup with last active ID visible and selected

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    
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/editors/interface/interface_utils.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-10 11:21:17 UTC (rev 20781)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-10 11:43:21 UTC (rev 20782)
@@ -399,6 +399,8 @@
 uiBut *uiDefIconTextMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, 
int icon, char *str, short x1, short y1, short x2, short y2, char *tip);
 
 uiBut *uiDefBlockBut(uiBlock *block, uiBlockCreateFunc func, void *func_arg1, 
char *str, short x1, short y1, short x2, short y2, char *tip);
+uiBut *uiDefBlockButN(uiBlock *block, uiBlockCreateFunc func, void *argN, char 
*str, short x1, short y1, short x2, short y2, char *tip);
+
 uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, 
int retval, int icon, short x1, short y1, short x2, short y2, char *tip);
 uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void 
*arg, int icon, char *str, short x1, short y1, short x2, short y2, char *tip);
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-06-10 11:21:17 UTC (rev 20781)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-06-10 11:43:21 UTC (rev 20782)
@@ -432,6 +432,7 @@
 
 /* ************** BLOCK ENDING FUNCTION ************* */
 
+/* NOTE: if but->poin is allocated memory for every defbut, things fail... */
 static int ui_but_equals_old(uiBut *but, uiBut *oldbut)
 {
        /* various properties are being compared here, hopfully sufficient
@@ -3012,6 +3013,16 @@
        return but;
 }
 
+uiBut *uiDefBlockButN(uiBlock *block, uiBlockCreateFunc func, void *argN, char 
*str, short x1, short y1, short x2, short y2, char *tip)
+{
+       uiBut *but= ui_def_but(block, BLOCK, 0, str, x1, y1, x2, y2, NULL, 0.0, 
0.0, 0.0, 0.0, tip);
+       but->block_create_func= func;
+       but->func_argN= argN;
+       ui_check_but(but);
+       return but;
+}
+
+
 uiBut *uiDefPulldownBut(uiBlock *block, uiBlockCreateFunc func, void *arg, 
char *str, short x1, short y1, short x2, short y2, char *tip)
 {
        uiBut *but= ui_def_but(block, PULLDOWN, 0, str, x1, y1, x2, y2, arg, 
0.0, 0.0, 0.0, 0.0, tip);
@@ -3095,7 +3106,6 @@
        but->flag|= UI_HAS_ICON;
        
        but->flag|= UI_ICON_LEFT|UI_TEXT_LEFT;
-       but->flag|= UI_ICON_SUBMENU;
        
        ui_check_but(but);
        

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-10 11:21:17 UTC (rev 20781)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-10 11:43:21 UTC (rev 20782)
@@ -1494,7 +1494,7 @@
                        }
                        else {
                                func= but->block_create_func;
-                               arg= but->poin;
+                               arg= but->poin?but->poin:but->func_argN;
                        }
                        break;
                case MENU:
@@ -2078,6 +2078,7 @@
 
 static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, 
wmEvent *event)
 {
+       
        if(data->state == BUTTON_STATE_HIGHLIGHT) {
                if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && 
event->val==KM_PRESS) {
                        button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
@@ -3112,7 +3113,7 @@
                        but->block->auto_open= 0;
 
        button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT);
-
+       
        if(type == BUTTON_ACTIVATE_OPEN) {
                button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
 
@@ -3522,7 +3523,9 @@
                if(block->miny <= my && block->maxy >= my)
                        inside= 1;
 
-       if((but=ui_but_find_activated(ar)) && 
button_modal_state(but->active->state)) {
+       /* if there's an active modal button, don't check events or outside, 
except for search menu */
+       but= ui_but_find_activated(ar);
+       if(but && button_modal_state(but->active->state) && 
but->type!=SEARCH_MENU) {
                /* if a button is activated modal, always reset the start mouse
                 * position of the towards mechanism to avoid loosing focus,
                 * and don't handle events */
@@ -3533,125 +3536,128 @@
                if(event->type == MOUSEMOVE)
                        ui_mouse_motion_towards_init(menu, mx, my, 0);
 
-               switch(event->type) {
-                       /* closing sublevels of pulldowns */
-                       case LEFTARROWKEY:
-                               if(event->val==KM_PRESS && (block->flag & 
UI_BLOCK_LOOP))
-                                       if(BLI_countlist(&block->saferct) > 0)
-                                               menu->menuretval= UI_RETURN_OUT;
+               /* events not for active search menu button */
+               if(but==NULL || but->type!=SEARCH_MENU) {
+                       switch(event->type) {
+                               /* closing sublevels of pulldowns */
+                               case LEFTARROWKEY:
+                                       if(event->val==KM_PRESS && (block->flag 
& UI_BLOCK_LOOP))
+                                               
if(BLI_countlist(&block->saferct) > 0)
+                                                       menu->menuretval= 
UI_RETURN_OUT;
 
-                               retval= WM_UI_HANDLER_BREAK;
-                               break;
+                                       retval= WM_UI_HANDLER_BREAK;
+                                       break;
 
-                       /* opening sublevels of pulldowns */
-                       case RIGHTARROWKEY:     
-                               if(event->val==KM_PRESS && (block->flag & 
UI_BLOCK_LOOP)) {
-                                       but= ui_but_find_activated(ar);
+                               /* opening sublevels of pulldowns */
+                               case RIGHTARROWKEY:     
+                                       if(event->val==KM_PRESS && (block->flag 
& UI_BLOCK_LOOP)) {
+                                               but= ui_but_find_activated(ar);
 
-                                       if(!but) {
-                                               /* no item active, we make 
first active */
-                                               if(block->direction & UI_TOP) 
but= ui_but_last(block);
-                                               else but= ui_but_first(block);
+                                               if(!but) {
+                                                       /* no item active, we 
make first active */
+                                                       if(block->direction & 
UI_TOP) but= ui_but_last(block);
+                                                       else but= 
ui_but_first(block);
+                                               }
+
+                                               if(but && ELEM(but->type, 
BLOCK, PULLDOWN))
+                                                       
ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE_OPEN);
                                        }
 
-                                       if(but && ELEM(but->type, BLOCK, 
PULLDOWN))
-                                               ui_handle_button_activate(C, 
ar, but, BUTTON_ACTIVATE_OPEN);
-                               }
+                                       retval= WM_UI_HANDLER_BREAK;
+                                       break;
+                               
+                               case UPARROWKEY:
+                               case DOWNARROWKEY:
+                               case WHEELUPMOUSE:
+                               case WHEELDOWNMOUSE:
+                                       /* arrowkeys: only handle for 
block_loop blocks */
+                                       if(inside || (block->flag & 
UI_BLOCK_LOOP)) {
+                                               if(event->val==KM_PRESS) {
+                                                       but= 
ui_but_find_activated(ar);
+                                                       if(but) {
+                                                               
if(ELEM(event->type, DOWNARROWKEY, WHEELDOWNMOUSE)) {
+                                                                       
if(block->direction & UI_TOP) but= ui_but_prev(but);
+                                                                       else 
but= ui_but_next(but);
+                                                               }
+                                                               else {
+                                                                       
if(block->direction & UI_TOP) but= ui_but_next(but);
+                                                                       else 
but= ui_but_prev(but);
+                                                               }
 
-                               retval= WM_UI_HANDLER_BREAK;
-                               break;
-                       
-                       case UPARROWKEY:
-                       case DOWNARROWKEY:
-                       case WHEELUPMOUSE:
-                       case WHEELDOWNMOUSE:
-                               /* arrowkeys: only handle for block_loop blocks 
*/
-                               if(inside || (block->flag & UI_BLOCK_LOOP)) {
-                                       if(event->val==KM_PRESS) {
-                                               but= ui_but_find_activated(ar);
-                                               if(but) {
-                                                       if(ELEM(event->type, 
DOWNARROWKEY, WHEELDOWNMOUSE)) {
-                                                               
if(block->direction & UI_TOP) but= ui_but_prev(but);
-                                                               else but= 
ui_but_next(but);
+                                                               if(but)
+                                                                       
ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE);
                                                        }
-                                                       else {
-                                                               
if(block->direction & UI_TOP) but= ui_but_next(but);
-                                                               else but= 
ui_but_prev(but);
-                                                       }
 
-                                                       if(but)
-                                                               
ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE);
-                                               }
+                                                       if(!but) {
+                                                               
if(ELEM(event->type, UPARROWKEY, WHEELUPMOUSE)) {
+                                                                       
if(block->direction & UI_TOP) bt= ui_but_first(block);
+                                                                       else 
bt= ui_but_last(block);
+                                                               }
+                                                               else {
+                                                                       
if(block->direction & UI_TOP) bt= ui_but_last(block);
+                                                                       else 
bt= ui_but_first(block);
+                                                               }
 
-                                               if(!but) {
-                                                       if(ELEM(event->type, 
UPARROWKEY, WHEELUPMOUSE)) {
-                                                               
if(block->direction & UI_TOP) bt= ui_but_first(block);
-                                                               else bt= 
ui_but_last(block);
+                                                               if(bt)
+                                                                       
ui_handle_button_activate(C, ar, bt, BUTTON_ACTIVATE);
                                                        }
-                                                       else {
-                                                               
if(block->direction & UI_TOP) bt= ui_but_last(block);
-                                                               else bt= 
ui_but_first(block);
-                                                       }
-
-                                                       if(bt)
-                                                               
ui_handle_button_activate(C, ar, bt, BUTTON_ACTIVATE);
                                                }
                                        }
-                               }
 
-                               retval= WM_UI_HANDLER_BREAK;
-                               break;
+                                       retval= WM_UI_HANDLER_BREAK;
+                                       break;
 
-                       case ONEKEY:    case PAD1: 
-                               act= 1;
-                       case TWOKEY:    case PAD2: 
-                               if(act==0) act= 2;
-                       case THREEKEY:  case PAD3: 
-                               if(act==0) act= 3;
-                       case FOURKEY:   case PAD4: 
-                               if(act==0) act= 4;
-                       case FIVEKEY:   case PAD5: 
-                               if(act==0) act= 5;
-                       case SIXKEY:    case PAD6: 
-                               if(act==0) act= 6;
-                       case SEVENKEY:  case PAD7: 
-                               if(act==0) act= 7;
-                       case EIGHTKEY:  case PAD8: 
-                               if(act==0) act= 8;
-                       case NINEKEY:   case PAD9: 
-                               if(act==0) act= 9;
-                       case ZEROKEY:   case PAD0: 
-                               if(act==0) act= 10;
-                       
-                               if(block->flag & UI_BLOCK_NUMSELECT) {
-                                       if(event->alt) act+= 10;
-                                       
-                                       count= 0;
-                                       for(but= block->buttons.first; but; 
but= but->next) {
-                                               int doit= 0;
+                               case ONEKEY:    case PAD1: 
+                                       act= 1;
+                               case TWOKEY:    case PAD2: 
+                                       if(act==0) act= 2;
+                               case THREEKEY:  case PAD3: 
+                                       if(act==0) act= 3;
+                               case FOURKEY:   case PAD4: 
+                                       if(act==0) act= 4;
+                               case FIVEKEY:   case PAD5: 
+                                       if(act==0) act= 5;
+                               case SIXKEY:    case PAD6: 
+                                       if(act==0) act= 6;
+                               case SEVENKEY:  case PAD7: 
+                                       if(act==0) act= 7;
+                               case EIGHTKEY:  case PAD8: 
+                                       if(act==0) act= 8;
+                               case NINEKEY:   case PAD9: 
+                                       if(act==0) act= 9;
+                               case ZEROKEY:   case PAD0: 
+                                       if(act==0) act= 10;
+                               
+                                       if(block->flag & UI_BLOCK_NUMSELECT) {
+                                               if(event->alt) act+= 10;
                                                
-                                               if(but->type!=LABEL && 
but->type!=SEPR)
-                                                       count++;
+                                               count= 0;
+                                               for(but= block->buttons.first; 
but; but= but->next) {
+                                                       int doit= 0;
+                                                       
+                                                       if(but->type!=LABEL && 
but->type!=SEPR)
+                                                               count++;
 
-                                               /* exception for menus like 
layer buts, with button aligning they're not drawn in order */
-                                               if(but->type==TOGR) {
-                                                       if(but->bitnr==act-1)
-                                                               doit= 1;
+                                                       /* exception for menus 
like layer buts, with button aligning they're not drawn in order */
+                                                       if(but->type==TOGR) {
+                                                               
if(but->bitnr==act-1)
+                                                                       doit= 1;
+                                                       }
+                                                       else if(count==act)
+                                                               doit=1;
+                                                       
+                                                       if(doit) {
+                                                               
ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE_APPLY);
+                                                               break;
+                                                       }
                                                }
-                                               else if(count==act)
-                                                       doit=1;

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to