[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20782] branches/blender2.5/blender/source /blender/editors: 2.5
Ton Roosendaal
ton at blender.org
Wed Jun 10 13:43:21 CEST 2009
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. @@
More information about the Bf-blender-cvs
mailing list