[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18835] branches/blender2.5/blender/source /blender/editors: 2.5: ID datablock button back, previously known as std_libbuttons.
Brecht Van Lommel
brecht at blender.org
Fri Feb 6 17:40:17 CET 2009
Revision: 18835
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18835
Author: blendix
Date: 2009-02-06 17:40:14 +0100 (Fri, 06 Feb 2009)
Log Message:
-----------
2.5: ID datablock button back, previously known as std_libbuttons. The
way this worked in 2.4x wasn't really clean, with events going all over
the place and using dubious variables such as G.but->lockpoin or
G.sima->menunr. It works as follows now, for example:
xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID**)&sima->image, ID_IM, &sima->pin, xco, yco,
sima_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE|UI_ID_ALONE|UI_ID_PIN);
The last two parameters are a callback function, and a list of events
or functionalities that are supported. The callback function will then
get the ID pointer + event to handle.
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_intern.h
branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.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-02-06 16:38:53 UTC (rev 18834)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h 2009-02-06 16:40:14 UTC (rev 18835)
@@ -33,6 +33,7 @@
/* Struct Declarations */
struct ID;
+struct Main;
struct ListBase;
struct ARegion;
struct wmWindow;
@@ -395,10 +396,25 @@
* - PickerButtons: buttons like the color picker (for code sharing).
* - AutoButR: RNA property button with type automatically defined. */
-typedef void (*uiIDPoinFuncFP)(struct bContext *C, char *str, struct ID **idpp);
+#define UI_ID_RENAME 1
+#define UI_ID_BROWSE 2
+#define UI_ID_ADD_NEW 4
+#define UI_ID_OPEN 8
+#define UI_ID_ALONE 16
+#define UI_ID_DELETE 32
+#define UI_ID_LOCAL 64
+#define UI_ID_AUTO_NAME 128
+#define UI_ID_FAKE_USER 256
+#define UI_ID_PIN 512
+#define UI_ID_BROWSE_RENDER 1024
+#define UI_ID_FULL (UI_ID_RENAME|UI_ID_BROWSE|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_ALONE|UI_ID_DELETE|UI_ID_LOCAL)
-uiBut *uiDefIDPoinBut(struct uiBlock *block, uiIDPoinFuncFP func, short blocktype, int retval, char *str,
+typedef void (*uiIDPoinFuncFP)(struct bContext *C, char *str, struct ID **idpp);
+typedef void (*uiIDPoinFunc)(struct bContext *C, struct ID *id, int event);
+
+uiBut *uiDefIDPoinBut(uiBlock *block, uiIDPoinFuncFP func, short blocktype, int retval, char *str,
short x1, short y1, short x2, short y2, void *idpp, char *tip);
+int uiDefIDPoinButs(uiBlock *block, struct Main *main, struct ID *parid, struct ID **id_p, int id_code, short *pin_p, int x, int y, uiIDPoinFunc func, int events);
uiBut *uiDefPulldownBut(uiBlock *block, uiBlockCreateFunc func, void *arg, char *str, short x1, short y1, short x2, short y2, char *tip);
uiBut *uiDefMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, char *str, short x1, short y1, short x2, short y2, char *tip);
@@ -434,9 +450,12 @@
* uiButSetCompleteFunc is for tab completion.
*
* uiBlockSetFunc and uiButSetFunc are callbacks run when a button is used,
- * in case events, operators or RNA are not sufficient to handle the button. */
+ * in case events, operators or RNA are not sufficient to handle the button.
+ *
+ * uiButSetNFunc will free the argument with MEM_freeN. */
typedef void (*uiButHandleFunc)(struct bContext *C, void *arg1, void *arg2);
+typedef void (*uiButHandleNFunc)(struct bContext *C, void *argN, void *arg2);
typedef void (*uiButCompleteFunc)(struct bContext *C, char *str, void *arg);
typedef void (*uiBlockHandleFunc)(struct bContext *C, void *arg, int event);
@@ -445,6 +464,7 @@
void uiBlockSetFunc (uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2);
void uiButSetFunc (uiBut *but, uiButHandleFunc func, void *arg1, void *arg2);
+void uiButSetNFunc (uiBut *but, uiButHandleNFunc func, void *argN, void *arg2);
void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg);
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c 2009-02-06 16:38:53 UTC (rev 18834)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c 2009-02-06 16:40:14 UTC (rev 18835)
@@ -503,13 +503,14 @@
/* various properties are being compared here, hopfully sufficient
* to catch all cases, but it is simple to add more checks later */
if(but->retval != oldbut->retval) return 0;
- if(but->poin != oldbut->poin || but->pointype != oldbut->pointype) 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->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;
if(oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return 0;
+ if(!but->funcN && (but->poin != oldbut->poin || but->pointype != oldbut->pointype)) return 0;
return 1;
}
@@ -902,8 +903,10 @@
void uiBlockSetButLock(uiBlock *block, int val, char *lockstr)
{
- block->lock |= val;
- if(val) block->lockstr= lockstr;
+ if(val) {
+ block->lock |= val;
+ block->lockstr= lockstr;
+ }
}
void uiBlockClearButLock(uiBlock *block)
@@ -1496,6 +1499,7 @@
WM_operator_properties_free(but->opptr);
MEM_freeN(but->opptr);
}
+ if(but->func_argN) MEM_freeN(but->func_argN);
if(but->active) ui_button_active_cancel(C, but);
if(but->str && but->str != but->strdata) MEM_freeN(but->str);
ui_free_link(but->link);
@@ -2852,19 +2856,19 @@
return but->opptr;
}
-void uiBlockSetHandleFunc(uiBlock *block, void (*func)(struct bContext *C, void *arg, int event), void *arg)
+void uiBlockSetHandleFunc(uiBlock *block, uiBlockHandleFunc func, void *arg)
{
block->handle_func= func;
block->handle_func_arg= arg;
}
-void uiBlockSetButmFunc(uiBlock *block, void (*func)(struct bContext *C, void *arg, int but_a2), void *arg)
+void uiBlockSetButmFunc(uiBlock *block, uiMenuHandleFunc func, void *arg)
{
block->butm_func= func;
block->butm_func_arg= arg;
}
-void uiBlockSetFunc(uiBlock *block, void (*func)(struct bContext *C, void *arg1, void *arg2), void *arg1, void *arg2)
+void uiBlockSetFunc(uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2)
{
block->func= func;
block->func_arg1= arg1;
@@ -2876,15 +2880,22 @@
block->drawextra= func;
}
-void uiButSetFunc(uiBut *but, void (*func)(struct bContext *C, void *arg1, void *arg2), void *arg1, void *arg2)
+void uiButSetFunc(uiBut *but, uiButHandleFunc func, void *arg1, void *arg2)
{
but->func= func;
but->func_arg1= arg1;
but->func_arg2= arg2;
}
-void uiButSetCompleteFunc(uiBut *but, void (*func)(struct bContext *C, char *str, void *arg), void *arg)
+void uiButSetNFunc(uiBut *but, uiButHandleNFunc funcN, void *argN, void *arg2)
{
+ but->funcN= funcN;
+ but->func_argN= argN;
+ but->func_arg2= arg2;
+}
+
+void uiButSetCompleteFunc(uiBut *but, uiButCompleteFunc func, void *arg)
+{
but->autocomplete_func= func;
but->autofunc_arg= 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-02-06 16:38:53 UTC (rev 18834)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c 2009-02-06 16:40:14 UTC (rev 18835)
@@ -134,15 +134,18 @@
typedef struct uiAfterFunc {
struct uiAfterFunc *next, *prev;
- void (*func)(struct bContext*, void *, void *);
+ uiButHandleFunc func;
void *func_arg1;
void *func_arg2;
- void (*handle_func)(struct bContext*, void *arg, int event);
+ uiButHandleNFunc funcN;
+ void *func_argN;
+
+ uiBlockHandleFunc handle_func;
void *handle_func_arg;
int retval;
- void (*butm_func)(struct bContext*, void *arg, int event);
+ uiMenuHandleFunc butm_func;
void *butm_func_arg;
int a2;
@@ -217,13 +220,16 @@
* 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 || block->handle_func || (but->type == BUTM && block->butm_func) || but->opname || but->rnaprop) {
+ if(but->func || but->funcN || block->handle_func || (but->type == BUTM && block->butm_func) || but->opname || but->rnaprop) {
after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc");
after->func= but->func;
after->func_arg1= but->func_arg1;
after->func_arg2= but->func_arg2;
+ after->funcN= but->funcN;
+ after->func_argN= but->func_argN;
+
after->handle_func= block->handle_func;
after->handle_func_arg= block->handle_func_arg;
after->retval= but->retval;
@@ -264,6 +270,8 @@
if(after.func)
after.func(C, after.func_arg1, after.func_arg2);
+ if(after.funcN)
+ after.funcN(C, after.func_argN, after.func_arg2);
if(after.handle_func)
after.handle_func(C, after.handle_func_arg, after.retval);
@@ -2611,6 +2619,9 @@
data= but->active;
retval= WM_UI_HANDLER_CONTINUE;
+ if(but->flag & UI_BUT_DISABLED)
+ return WM_UI_HANDLER_BREAK;
+
/* handle copy-paste */
if(data->state == BUTTON_STATE_HIGHLIGHT) {
if(ELEM(event->type, CKEY, VKEY) && event->val==KM_PRESS && (event->ctrl || event->oskey)) {
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 2009-02-06 16:38:53 UTC (rev 18834)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 2009-02-06 16:40:14 UTC (rev 18835)
@@ -125,6 +125,9 @@
void *func_arg1;
void *func_arg2;
+ uiButHandleNFunc funcN;
+ void *func_argN;
+
void (*embossfunc)(int , int , float, float, float, float, float, int);
void (*sliderfunc)(int , float, float, float, float, float, float, int);
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c 2009-02-06 16:38:53 UTC (rev 18834)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c 2009-02-06 16:40:14 UTC (rev 18835)
@@ -30,11 +30,14 @@
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
+#include "DNA_material_types.h"
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
#include "BKE_context.h"
#include "BKE_idprop.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -47,6 +50,10 @@
#include "WM_api.h"
#include "WM_types.h"
+#define DEF_BUT_WIDTH 150
+#define DEF_ICON_BUT_WIDTH 20
+#define DEF_BUT_HEIGHT 20
+
/*************************** RNA Utilities ******************************/
int UI_GetIconRNA(PointerRNA *ptr)
@@ -287,9 +294,6 @@
return but;
}
-#define RNA_BUT_WIDTH 150
-#define RNA_BUT_HEIGHT 20
-
int uiDefAutoButsRNA(uiBlock *block, PointerRNA *ptr)
{
CollectionPropertyIterator iter;
@@ -303,8 +307,8 @@
/* create buttons */
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list