[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