[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