- new menu type; with icon support!
(the one you make with uIDefBut(..., MENU, ...) add a %i<nr> to the string, and the item gets <nr> as icon. - added this to the 'mode' selectors in 3dwin and ipowin - cleaned up code for modeselector pup... that was a bad ass one! :)
This commit is contained in:
@@ -447,56 +447,56 @@ static char *ipo_modeselect_pup(void)
|
||||
char tmpstr[1024];
|
||||
char formatstring[1024];
|
||||
|
||||
strcpy(string, "Display IPO type: %t");
|
||||
strcpy(string, "Ipo type: %t");
|
||||
|
||||
strcpy(formatstring, "|%s %%x%d");
|
||||
strcpy(formatstring, "|%s %%x%d %%i%d");
|
||||
|
||||
if(OBACT) {
|
||||
sprintf(tmpstr,formatstring,"Object",ID_OB);
|
||||
sprintf(tmpstr,formatstring,"Object",ID_OB, ICON_OBJECT);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(OBACT && give_current_material(OBACT, OBACT->actcol)) { // check for material
|
||||
sprintf(tmpstr,formatstring,"Material",ID_MA);
|
||||
sprintf(tmpstr,formatstring,"Material",ID_MA, ICON_MATERIAL);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(G.scene->world) {
|
||||
sprintf(tmpstr,formatstring,"World",ID_WO);
|
||||
sprintf(tmpstr,formatstring,"World",ID_WO, ICON_WORLD);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(OBACT && OBACT->type==OB_CURVE) {
|
||||
sprintf(tmpstr,formatstring,"Curve",ID_WO);
|
||||
sprintf(tmpstr,formatstring,"Curve",ID_CU, ICON_CURVE);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(OBACT && OBACT->type==OB_CAMERA) {
|
||||
sprintf(tmpstr,formatstring,"Camera",ID_CA);
|
||||
sprintf(tmpstr,formatstring,"Camera",ID_CA, ICON_CAMERA);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(OBACT && OBACT->type==OB_LAMP) {
|
||||
sprintf(tmpstr,formatstring,"Lamp",ID_LA);
|
||||
sprintf(tmpstr,formatstring,"Lamp",ID_LA, ICON_LAMP);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
|
||||
if(OBACT){
|
||||
if ELEM4(OBACT->type, OB_MESH, OB_CURVE, OB_SURF, OB_LATTICE) {
|
||||
sprintf(tmpstr,formatstring,"Vertex",ID_KE);
|
||||
sprintf(tmpstr,formatstring,"Vertex",ID_KE, ICON_EDIT);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
if (OBACT->action){
|
||||
sprintf(tmpstr,formatstring,"Action",ID_AC);
|
||||
sprintf(tmpstr,formatstring,"Action",ID_AC, ICON_ACTION);
|
||||
strcat(string,tmpstr);
|
||||
}
|
||||
#ifdef __CON_IPO
|
||||
sprintf(tmpstr,formatstring,"Constraint",IPO_CO);
|
||||
sprintf(tmpstr,formatstring,"Constraint",IPO_CO, ICON_CONSTRAINT);
|
||||
strcat(string,tmpstr);
|
||||
#endif
|
||||
}
|
||||
|
||||
sprintf(tmpstr,formatstring,"Sequence",ID_SEQ);
|
||||
sprintf(tmpstr,formatstring,"Sequence",ID_SEQ, ICON_SEQUENCE);
|
||||
strcat(string,tmpstr);
|
||||
|
||||
|
||||
@@ -628,7 +628,7 @@ void ipo_buttons(void)
|
||||
uiBlock *block;
|
||||
short xco,xmax;
|
||||
char naam[20];
|
||||
int icon;
|
||||
int icon=0;
|
||||
|
||||
sprintf(naam, "header %d", curarea->headwin);
|
||||
block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSS, UI_HELV, curarea->headwin);
|
||||
@@ -682,7 +682,6 @@ void ipo_buttons(void)
|
||||
uiSetButLock(G.sipo->pin, "Can't change because of pinned data");
|
||||
|
||||
ob= OBACT;
|
||||
xco+= 10;
|
||||
|
||||
if (G.sipo->blocktype == ID_OB)
|
||||
icon = ICON_OBJECT;
|
||||
@@ -705,9 +704,10 @@ void ipo_buttons(void)
|
||||
else if (G.sipo->blocktype == ID_SEQ)
|
||||
icon = ICON_SEQUENCE;
|
||||
|
||||
uiDefIconTextButS(block, MENU, B_IPOMAIN, icon, ipo_modeselect_pup(), xco,0,120,20, &(G.sipo->blocktype), 0, 0, 0, 0, "Display IPO type");
|
||||
xco+= 5;
|
||||
uiDefIconTextButS(block, MENU, B_IPOMAIN, icon, ipo_modeselect_pup(), xco,0,100,20, &(G.sipo->blocktype), 0, 0, 0, 0, "Display IPO type");
|
||||
|
||||
xco += 110;
|
||||
xco += 85;
|
||||
|
||||
if(G.sipo->blocktype==ID_MA) {
|
||||
uiDefButS(block, NUM, B_IPOMAIN, "", xco+=XIC,0,XIC-4,YIC, &G.sipo->channel, 0.0, 7.0, 0, 0, "Displays Channel Number of the active Material texture. Click to change.");
|
||||
@@ -747,8 +747,7 @@ void ipo_buttons(void)
|
||||
xco+=XIC/2;
|
||||
|
||||
uiClearButLock();
|
||||
/* ZOOM en BORDER */
|
||||
uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM, xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view (CTRL+MiddleMouse)");
|
||||
/* ZOOMBORDER */
|
||||
uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area");
|
||||
|
||||
/* draw LOCK */
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
* This can be cleaned when I make some new 'mode' icons.
|
||||
*/
|
||||
|
||||
#define V3D_OBJECTMODE_SEL ICON_ORTHO
|
||||
#define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
|
||||
#define V3D_OBJECTMODE_SEL ICON_OBJECT
|
||||
#define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
|
||||
#define V3D_FACESELECTMODE_SEL ICON_FACESEL_HLT
|
||||
#define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
|
||||
#define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
|
||||
@@ -2504,81 +2504,45 @@ static uiBlock *view3d_faceselmenu(void *arg_unused)
|
||||
static char *view3d_modeselect_pup(void)
|
||||
{
|
||||
static char string[1024];
|
||||
char formatstring[1024];
|
||||
|
||||
strcpy(formatstring, "Mode: %%t");
|
||||
char formatstr[1024];
|
||||
char tempstr[1024];
|
||||
|
||||
strcat(formatstring, "|%s %%x%d"); // add space in the menu for Object
|
||||
strcpy(string, "Mode: %t");
|
||||
strcpy(formatstr, "|%s %%x%d %%i%d");
|
||||
|
||||
/* if active object is an armature */
|
||||
if (OBACT && OBACT->type==OB_ARMATURE) {
|
||||
strcat(formatstring, "|%s %%x%d"); // add space in the menu for pose
|
||||
}
|
||||
|
||||
/* if active object is a mesh */
|
||||
if (OBACT && OBACT->type == OB_MESH) {
|
||||
strcat(formatstring, "|%s %%x%d|%s %%x%d|%s %%x%d"); // add space in the menu for faceselect, vertex paint, texture paint
|
||||
|
||||
/* if active mesh has an armature */
|
||||
if ((((Mesh*)(OBACT->data))->dvert)) {
|
||||
strcat(formatstring, "|%s %%x%d"); // add space in the menu for weight paint
|
||||
}
|
||||
}
|
||||
sprintf(tempstr, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT);
|
||||
strcat(string, tempstr);
|
||||
|
||||
/* if active object is editable */
|
||||
if (OBACT && ((OBACT->type == OB_MESH) || (OBACT->type == OB_ARMATURE)
|
||||
|| (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT)
|
||||
|| (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) {
|
||||
strcat(formatstring, "|%s %%x%d"); // add space in the menu for Edit
|
||||
|| (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT)
|
||||
|| (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) {
|
||||
|
||||
sprintf(tempstr, formatstr, "Edit Mode", V3D_EDITMODE_SEL, ICON_EDITMODE_HLT);
|
||||
strcat(string, tempstr);
|
||||
}
|
||||
|
||||
/*
|
||||
* fill in the spaces in the menu with appropriate mode choices depending on active object
|
||||
*/
|
||||
|
||||
if (OBACT && OBACT->type == OB_MESH) {
|
||||
|
||||
sprintf(tempstr, formatstr, "UV FaceSelect", V3D_FACESELECTMODE_SEL, ICON_FACESEL_HLT);
|
||||
strcat(string, tempstr);
|
||||
sprintf(tempstr, formatstr, "Vertex Paint", V3D_VERTEXPAINTMODE_SEL, ICON_VPAINT_HLT);
|
||||
strcat(string, tempstr);
|
||||
sprintf(tempstr, formatstr, "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, ICON_TPAINT_HLT);
|
||||
strcat(string, tempstr);
|
||||
|
||||
|
||||
if ( ((Mesh*)(OBACT->data))->dvert) {
|
||||
sprintf(tempstr, formatstr, "Texture Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT);
|
||||
strcat(string, tempstr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* if active object is an armature */
|
||||
if (OBACT && OBACT->type==OB_ARMATURE) {
|
||||
sprintf(string, formatstring,
|
||||
"Object Mode", V3D_OBJECTMODE_SEL,
|
||||
"Edit Mode", V3D_EDITMODE_SEL,
|
||||
"Pose Mode", V3D_POSEMODE_SEL
|
||||
);
|
||||
}
|
||||
/* if active object is a mesh with armature */
|
||||
else if ((OBACT && OBACT->type == OB_MESH) && ((((Mesh*)(OBACT->data))->dvert))) {
|
||||
sprintf(string, formatstring,
|
||||
"Object Mode", V3D_OBJECTMODE_SEL,
|
||||
"Edit Mode", V3D_EDITMODE_SEL,
|
||||
"Face Select", V3D_FACESELECTMODE_SEL,
|
||||
"Vertex Paint", V3D_VERTEXPAINTMODE_SEL,
|
||||
"Texture Paint", V3D_TEXTUREPAINTMODE_SEL,
|
||||
"Weight Paint", V3D_WEIGHTPAINTMODE_SEL
|
||||
);
|
||||
}
|
||||
/* if active object is a mesh */
|
||||
else if (OBACT && OBACT->type == OB_MESH) {
|
||||
sprintf(string, formatstring,
|
||||
"Object Mode", V3D_OBJECTMODE_SEL,
|
||||
"Edit Mode", V3D_EDITMODE_SEL,
|
||||
"Face Select", V3D_FACESELECTMODE_SEL,
|
||||
"Vertex Paint", V3D_VERTEXPAINTMODE_SEL,
|
||||
"Texture Paint", V3D_TEXTUREPAINTMODE_SEL
|
||||
);
|
||||
}
|
||||
/* if active object is editable */
|
||||
else if (OBACT && ((OBACT->type == OB_MESH) || (OBACT->type == OB_ARMATURE)
|
||||
|| (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT)
|
||||
|| (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) {
|
||||
sprintf(string, formatstring,
|
||||
"Object Mode", V3D_OBJECTMODE_SEL,
|
||||
"Edit Mode", V3D_EDITMODE_SEL
|
||||
);
|
||||
}
|
||||
/* if active object is not editable */
|
||||
else {
|
||||
sprintf(string, formatstring,
|
||||
"Object Mode", V3D_OBJECTMODE_SEL
|
||||
);
|
||||
sprintf(tempstr, formatstr, "Pose Mode", V3D_POSEMODE_SEL, ICON_POSE_HLT);
|
||||
strcat(string, tempstr);
|
||||
}
|
||||
|
||||
return (string);
|
||||
|
||||
@@ -655,6 +655,7 @@ void uiDrawBlock(uiBlock *block)
|
||||
typedef struct {
|
||||
char *str;
|
||||
int retval;
|
||||
int icon;
|
||||
} MenuEntry;
|
||||
|
||||
typedef struct {
|
||||
@@ -681,7 +682,7 @@ static void menudata_set_title(MenuData *md, char *title) {
|
||||
md->title= title;
|
||||
}
|
||||
|
||||
static void menudata_add_item(MenuData *md, char *str, int retval) {
|
||||
static void menudata_add_item(MenuData *md, char *str, int retval, int icon) {
|
||||
if (md->nitems==md->itemssize) {
|
||||
int nsize= md->itemssize?(md->itemssize<<1):1;
|
||||
MenuEntry *oitems= md->items;
|
||||
@@ -697,6 +698,7 @@ static void menudata_add_item(MenuData *md, char *str, int retval) {
|
||||
|
||||
md->items[md->nitems].str= str;
|
||||
md->items[md->nitems].retval= retval;
|
||||
md->items[md->nitems].icon= icon;
|
||||
md->nitems++;
|
||||
}
|
||||
|
||||
@@ -724,7 +726,7 @@ static MenuData *decompose_menu_string(char *str)
|
||||
char *instr= BLI_strdup(str);
|
||||
MenuData *md= menudata_new(instr);
|
||||
char *nitem= NULL, *s= instr;
|
||||
int nretval= 1, nitem_is_title= 0;
|
||||
int nicon=0, nretval= 1, nitem_is_title= 0;
|
||||
|
||||
while (1) {
|
||||
char c= *s;
|
||||
@@ -743,6 +745,9 @@ static MenuData *decompose_menu_string(char *str)
|
||||
} else if (s[1]=='l') {
|
||||
nitem= "%l";
|
||||
s++;
|
||||
} else if (s[1]=='i') {
|
||||
nicon= atoi(s+2);
|
||||
s++;
|
||||
}
|
||||
} else if (c=='|' || c=='\0') {
|
||||
if (nitem) {
|
||||
@@ -752,11 +757,12 @@ static MenuData *decompose_menu_string(char *str)
|
||||
menudata_set_title(md, nitem);
|
||||
nitem_is_title= 0;
|
||||
} else {
|
||||
menudata_add_item(md, nitem, nretval);
|
||||
menudata_add_item(md, nitem, nretval, nicon);
|
||||
nretval= md->nitems+1;
|
||||
}
|
||||
|
||||
nitem= NULL;
|
||||
nicon= 0;
|
||||
}
|
||||
|
||||
if (c=='\0')
|
||||
@@ -878,6 +884,10 @@ static int ui_do_but_MENU(uiBut *but)
|
||||
if (strcmp(md->items[md->nitems-a-1].str, "%l")==0) {
|
||||
uiDefBut(block, SEPR, B_NOP, "", x1, y1,(short)(width-(rows>1)), (short)(boxh-1), NULL, 0.0, 0.0, 0, 0, "");
|
||||
}
|
||||
else if(md->items[md->nitems-a-1].icon) {
|
||||
uiBut *bt= uiDefIconTextBut(block, BUTM|but->pointype, but->retval, md->items[md->nitems-a-1].icon ,md->items[md->nitems-a-1].str, x1, y1,(short)(width-(rows>1)), (short)(boxh-1), but->poin, (float) md->items[md->nitems-a-1].retval, 0.0, 0, 0, "");
|
||||
if(active==a) bt->flag |= UI_ACTIVE;
|
||||
}
|
||||
else {
|
||||
uiBut *bt= uiDefBut(block, BUTM|but->pointype, but->retval, md->items[md->nitems-a-1].str, x1, y1,(short)(width-(rows>1)), (short)(boxh-1), but->poin, (float) md->items[md->nitems-a-1].retval, 0.0, 0, 0, "");
|
||||
if(active==a) bt->flag |= UI_ACTIVE;
|
||||
|
||||
Reference in New Issue
Block a user