[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21881] branches/blender2.5/blender/source /blender/editors: 2.5

Ton Roosendaal ton at blender.org
Sat Jul 25 15:40:59 CEST 2009


Revision: 21881
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21881
Author:   ton
Date:     2009-07-25 15:40:59 +0200 (Sat, 25 Jul 2009)

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

Outliner: brought back to near full functioning:

- proper operators, like for open/close items, exec operations
  (note: select is still same operator as activate, should
   become modal ops later)
- rename works again (ctrl+click)
- proper notifiers for redraws
- select / extend select works again
- editmode in/out works again
- enter key opens/closes again
- right mouse operations work again

Didn't do:
- options for Sequence strips
- signals to change button views on clicks
- error/warning messages

UI: 

- added new uiButSetRenameFunc(), which passes on the old name
- added uiButActiveOnly(), which ensures a button gets created in
  active state, and gets removed when used. Needed for editing
  names in outliner.
  
  Andrea: check outliner.c for uiButActiveOnly(), very easy to use!

Also:

- Added posemode operator, CTRL+TAB tied to it.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
    branches/blender2.5/blender/source/blender/editors/include/ED_armature.h
    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_intern.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_intern.h
    branches/blender2.5/blender/source/blender/editors/object/object_ops.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_ops.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c

Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/editarmature.c	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/armature/editarmature.c	2009-07-25 13:40:59 UTC (rev 21881)
@@ -1737,7 +1737,7 @@
  * toggle==2: only active tag
  * toggle==3: swap (no test)
  */
-void deselectall_armature(Object *obedit, int toggle, int doundo)
+void ED_armature_deselectall(Object *obedit, int toggle, int doundo)
 {
 	bArmature *arm= obedit->data;
 	EditBone	*eBone;
@@ -1809,7 +1809,7 @@
 	if (nearBone) {
 
 		if (!extend)
-			deselectall_armature(obedit, 0, 0);
+			ED_armature_deselectall(obedit, 0, 0);
 		
 		/* by definition the non-root connected bones have no root point drawn,
 	       so a root selection needs to be delivered to the parent tip */
@@ -2187,7 +2187,7 @@
 	Mat3MulMat3(totmat, obmat, viewmat);
 	Mat3Inv(imat, totmat);
 	
-	deselectall_armature(obedit, 0, 0);
+	ED_armature_deselectall(obedit, 0, 0);
 	
 	/*	Create a bone	*/
 	bone= add_editbone(obedit, "Bone");
@@ -2240,7 +2240,7 @@
 		to_root= 1;
 	}
 	
-	deselectall_armature(obedit, 0, 0);
+	ED_armature_deselectall(obedit, 0, 0);
 	
 	/* we re-use code for mirror editing... */
 	flipbone= NULL;
@@ -3405,7 +3405,7 @@
 	Mat3MulMat3(totmat, obmat, viewmat);
 	Mat3Inv(imat, totmat);
 	
-	deselectall_armature(obedit, 0, 0);
+	ED_armature_deselectall(obedit, 0, 0);
 	
 	/*	Create a bone	*/
 	bone= add_editbone(obedit, name);

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_armature.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_armature.h	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_armature.h	2009-07-25 13:40:59 UTC (rev 21881)
@@ -99,6 +99,8 @@
 void ED_armature_to_edit(struct Object *ob);
 void ED_armature_edit_free(struct Object *ob);
 void ED_armature_edit_remake(struct Object *obedit);
+void ED_armature_deselectall(struct Object *obedit, int toggle, int doundo);
+
 int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer, 
 							short hits, short extend);
 void mouse_armature(struct bContext *C, short mval[2], int extend);

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-07-25 13:40:59 UTC (rev 21881)
@@ -313,6 +313,10 @@
 void	uiButSetFlag		(uiBut *but, int flag);
 void	uiButClearFlag		(uiBut *but, int flag);
 
+/* special button case, only draw it when used actively, for outliner etc */
+int		uiButActiveOnly		(const struct bContext *C, uiBlock *block, uiBut *but);
+
+
 /* Buttons
  *
  * Functions to define various types of buttons in a block. Postfixes:
@@ -474,9 +478,9 @@
 
 void	uiBlockSetHandleFunc(uiBlock *block,	uiBlockHandleFunc func, void *arg);
 void	uiBlockSetButmFunc	(uiBlock *block,	uiMenuHandleFunc func, void *arg);
+void	uiBlockSetFunc		(uiBlock *block,	uiButHandleFunc func, void *arg1, void *arg2);
 
-void	uiBlockSetFunc		(uiBlock *block,	uiButHandleFunc func, void *arg1, void *arg2);
-void	uiBlockSetRenameFunc(uiBlock *block,	uiButHandleRenameFunc func, void *arg1);
+void	uiButSetRenameFunc	(uiBut *but,		uiButHandleRenameFunc func, void *arg1);
 void	uiButSetFunc		(uiBut *but,		uiButHandleFunc func, void *arg1, void *arg2);
 void	uiButSetNFunc		(uiBut *but,		uiButHandleNFunc func, void *argN, void *arg2);
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-07-25 13:40:59 UTC (rev 21881)
@@ -442,7 +442,7 @@
 	if(but->retval != oldbut->retval) return 0;
 	if(but->rnapoin.data != oldbut->rnapoin.data) return 0;
 	if(but->rnaprop != oldbut->rnaprop)
-	if(but->rnaindex != oldbut->rnaindex) return 0;
+		if(but->rnaindex != oldbut->rnaindex) return 0;
 	if(but->func != oldbut->func) return 0;
 	if(but->funcN != oldbut->funcN) return 0;
 	if(oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return 0;
@@ -496,6 +496,43 @@
 	return found;
 }
 
+/* needed for temporarily rename buttons, such as in outliner or fileselect,
+   they should keep calling uiDefButs to keep them alive */
+/* returns 0 when button removed */
+int uiButActiveOnly(const bContext *C, uiBlock *block, uiBut *but)
+{
+	uiBlock *oldblock;
+	uiBut *oldbut;
+	int activate= 0, found= 0, isactive= 0;
+	
+	oldblock= block->oldblock;
+	if(!oldblock)
+		activate= 1;
+	else {
+		for(oldbut=oldblock->buttons.first; oldbut; oldbut=oldbut->next) {
+			if(ui_but_equals_old(oldbut, but)) {
+				found= 1;
+				
+				if(oldbut->active)
+					isactive= 1;
+				
+				break;
+			}
+		}
+	}
+	if(activate || found==0) {
+		ui_button_activate_do( (bContext *)C, CTX_wm_region(C), but);
+	}
+	else if(found && isactive==0) {
+		
+		BLI_remlink(&block->buttons, but);
+		ui_free_but(C, but);
+		return 0;
+	}
+	
+	return 1;
+}
+
 void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
 {
 	uiBut *but;
@@ -2767,9 +2804,10 @@
 	block->func_arg2= arg2;
 }
 
-void uiBlockSetRenameFunc(uiBlock *block, uiButHandleRenameFunc func, void *arg1)
+void uiButSetRenameFunc(uiBut *but, uiButHandleRenameFunc func, void *arg1)
 {
-	
+	but->rename_func= func;
+	but->rename_arg1= arg1;
 }
 
 void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, void *idv, void *argv, rcti *rect), void *arg)

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-07-25 13:40:59 UTC (rev 21881)
@@ -152,6 +152,10 @@
 	uiButHandleNFunc funcN;
 	void *func_argN;
 
+	uiButHandleRenameFunc rename_func;
+	void *rename_arg1;
+	void *rename_orig;
+	
 	uiBlockHandleFunc handle_func;
 	void *handle_func_arg;
 	int retval;
@@ -239,7 +243,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 || but->funcN || block->handle_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) {
+	if(but->func || but->funcN || block->handle_func || but->rename_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) {
 		after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc");
 
 		after->func= but->func;
@@ -250,6 +254,10 @@
 		after->funcN= but->funcN;
 		after->func_argN= but->func_argN;
 
+		after->rename_func= but->rename_func;
+		after->rename_arg1= but->rename_arg1;
+		after->rename_orig= but->rename_orig; /* needs free! */
+		
 		after->handle_func= block->handle_func;
 		after->handle_func_arg= block->handle_func_arg;
 		after->retval= but->retval;
@@ -344,7 +352,12 @@
 			after.handle_func(C, after.handle_func_arg, after.retval);
 		if(after.butm_func)
 			after.butm_func(C, after.butm_func_arg, after.a2);
-
+		
+		if(after.rename_func)
+			after.rename_func(C, after.rename_arg1, after.rename_orig);
+		if(after.rename_orig)
+			MEM_freeN(after.rename_orig);
+		
 		if(after.undostr[0])
 			ED_undo_push(C, after.undostr);
 	}
@@ -468,10 +481,10 @@
 
 	/* give butfunc the original text too */
 	/* feature used for bone renaming, channels, etc */
-	/* XXX goes via uiButHandleRenameFunc now */
-//	if(but->func_arg2==NULL) but->func_arg2= data->origstr;
+	/* afterfunc frees origstr */
+	but->rename_orig= data->origstr;
+	data->origstr= NULL;
 	ui_apply_but_func(C, but);
-//	if(but->func_arg2==data->origstr) but->func_arg2= NULL;
 
 	data->retval= but->retval;
 	data->applied= 1;
@@ -3484,7 +3497,7 @@
 	data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData");
 	data->window= CTX_wm_window(C);
 	data->region= ar;
-	if( ELEM(but->type, BUT_CURVE, SEARCH_MENU) );  // XXX curve is temp
+	if( ELEM3(but->type, TEX, BUT_CURVE, SEARCH_MENU) );  // XXX curve is temp
 	else data->interactive= 1;
 	
 	data->state = BUTTON_STATE_INIT;
@@ -3630,6 +3643,23 @@
 	return WM_UI_HANDLER_CONTINUE;
 }
 
+/* exported to interface.c: uiButActiveOnly() */
+void ui_button_activate_do(bContext *C, ARegion *ar, uiBut *but)
+{
+	wmWindow *win= CTX_wm_window(C);
+	wmEvent event;
+	
+	button_activate_init(C, ar, but, BUTTON_ACTIVATE_OVER);
+	
+	event= *(win->eventstate);	/* XXX huh huh? make api call */
+	event.type= EVT_BUT_OPEN;
+	event.val= KM_PRESS;
+	event.customdata= but;
+	event.customdatafree= FALSE;
+	
+	ui_do_button(C, but->block, but, &event);
+}
+
 static void ui_handle_button_activate(bContext *C, ARegion *ar, uiBut *but, uiButtonActivateType type)
 {
 	uiBut *oldbut;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-07-25 12:53:09 UTC (rev 21880)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-07-25 13:40:59 UTC (rev 21881)
@@ -186,7 +186,11 @@
 	
 	uiButSearchFunc search_func;
 	void *search_arg;
-	
+
+	uiButHandleRenameFunc rename_func;
+	void *rename_arg1;
+	void *rename_orig;
+
 	uiLink *link;
 	short linkto[2];
 	
@@ -416,6 +420,7 @@
 
 
 /* interface_handlers.c */
+extern void ui_button_activate_do(struct bContext *C, struct ARegion *ar, uiBut *but);
 extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
 extern int ui_button_is_active(struct ARegion *ar);
 

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-07-25 12:53:09 UTC (rev 21880)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list