Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-06-10 15:43:21 +0400
committerTon Roosendaal <ton@blender.org>2009-06-10 15:43:21 +0400
commitfba6a9931c81e8cc6a3ea5d3cbd466f2d759c514 (patch)
tree573f2d39036d37cecde991ffba8000a5f845b48d /source/blender/editors/interface/interface_handlers.c
parent872767f5c76db75797344b84c056d6cef28248e8 (diff)
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
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r--source/blender/editors/interface/interface_handlers.c214
1 files changed, 110 insertions, 104 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index b9e4b18761f..74559b36c60 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1494,7 +1494,7 @@ static void ui_blockopen_begin(bContext *C, uiBut *but, uiHandleButtonData *data
}
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_SLI(bContext *C, uiBlock *block, uiBut *but, uiHandleButton
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 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA
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 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu,
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 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu,
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;
-
- /* 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 && ELEM(but->type, BLOCK, PULLDOWN))
- ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE_OPEN);
- }
+ retval= WM_UI_HANDLER_BREAK;
+ break;
- 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) {
+ /* opening sublevels of pulldowns */
+ case RIGHTARROWKEY:
+ if(event->val==KM_PRESS && (block->flag & UI_BLOCK_LOOP)) {
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);
- }
- if(but)
- ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE);
+ 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) {
- 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 && 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);
+ }
+
+ if(but)
+ ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE);
}
- if(bt)
- ui_handle_button_activate(C, ar, bt, 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(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;
- }
- else if(count==act)
- doit=1;
-
- if(doit) {
- ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE_APPLY);
- break;
+ /* 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;
+ }
}
}
- }
- retval= WM_UI_HANDLER_BREAK;
- break;
+ retval= WM_UI_HANDLER_BREAK;
+ break;
+ }
}
-
+
/* here we check return conditions for menus */
if(block->flag & UI_BLOCK_LOOP) {
/* if we click outside the block, verify if we clicked on the