|
Blender
V2.59
|
00001 /* 00002 * $Id: buttons_header.c 37185 2011-06-04 17:03:46Z ton $ 00003 * 00004 * ***** BEGIN GPL LICENSE BLOCK ***** 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software Foundation, 00018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 * 00020 * The Original Code is Copyright (C) 2008 Blender Foundation. 00021 * All rights reserved. 00022 * 00023 * 00024 * Contributor(s): Blender Foundation 00025 * 00026 * ***** END GPL LICENSE BLOCK ***** 00027 */ 00028 00034 #include <string.h> 00035 #include <stdio.h> 00036 00037 #include "BLI_blenlib.h" 00038 #include "BLI_utildefines.h" 00039 00040 00041 #include "BKE_context.h" 00042 00043 #include "ED_screen.h" 00044 #include "ED_types.h" 00045 00046 #include "DNA_object_types.h" 00047 00048 #include "UI_interface.h" 00049 #include "UI_resources.h" 00050 #include "UI_view2d.h" 00051 00052 #include "buttons_intern.h" 00053 00054 00055 #define B_CONTEXT_SWITCH 101 00056 #define B_BUTSPREVIEW 102 00057 00058 static void set_texture_context(bContext *C, SpaceButs *sbuts) 00059 { 00060 switch(sbuts->mainb) { 00061 case BCONTEXT_MATERIAL: 00062 sbuts->texture_context = SB_TEXC_MAT_OR_LAMP; 00063 break; 00064 case BCONTEXT_DATA: 00065 { 00066 Object *ob = CTX_data_active_object(C); 00067 if(ob && ob->type==OB_LAMP) 00068 sbuts->texture_context = SB_TEXC_MAT_OR_LAMP; 00069 break; 00070 } 00071 case BCONTEXT_WORLD: 00072 sbuts->texture_context = SB_TEXC_WORLD; 00073 break; 00074 case BCONTEXT_PARTICLE: 00075 sbuts->texture_context = SB_TEXC_PARTICLES; 00076 break; 00077 } 00078 } 00079 00080 static void do_buttons_buttons(bContext *C, void *UNUSED(arg), int event) 00081 { 00082 SpaceButs *sbuts= CTX_wm_space_buts(C); 00083 00084 if(!sbuts) /* editor type switch */ 00085 return; 00086 00087 switch(event) { 00088 case B_CONTEXT_SWITCH: 00089 case B_BUTSPREVIEW: 00090 ED_area_tag_redraw(CTX_wm_area(C)); 00091 00092 set_texture_context(C, sbuts); 00093 00094 sbuts->preview= 1; 00095 break; 00096 } 00097 00098 sbuts->mainbuser= sbuts->mainb; 00099 } 00100 00101 #define BUT_UNIT_X (UI_UNIT_X+2) 00102 00103 void buttons_header_buttons(const bContext *C, ARegion *ar) 00104 { 00105 SpaceButs *sbuts= CTX_wm_space_buts(C); 00106 uiBlock *block; 00107 int xco, yco= 2; 00108 00109 buttons_context_compute(C, sbuts); 00110 00111 block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); 00112 uiBlockSetHandleFunc(block, do_buttons_buttons, NULL); 00113 00114 xco= ED_area_header_switchbutton(C, block, yco); 00115 00116 uiBlockSetEmboss(block, UI_EMBOSS); 00117 00118 xco -= UI_UNIT_X; 00119 00120 // Default panels 00121 uiBlockBeginAlign(block); 00122 if(sbuts->pathflag & (1<<BCONTEXT_RENDER)) 00123 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_RENDER, 0, 0, "Render"); 00124 if(sbuts->pathflag & (1<<BCONTEXT_SCENE)) 00125 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE_DATA, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_SCENE, 0, 0, "Scene"); 00126 if(sbuts->pathflag & (1<<BCONTEXT_WORLD)) 00127 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_WORLD, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_WORLD, 0, 0, "World"); 00128 if(sbuts->pathflag & (1<<BCONTEXT_OBJECT)) 00129 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_OBJECT, 0, 0, "Object"); 00130 if(sbuts->pathflag & (1<<BCONTEXT_CONSTRAINT)) 00131 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_CONSTRAINT, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_CONSTRAINT, 0, 0, "Object Constraints"); 00132 if(sbuts->pathflag & (1<<BCONTEXT_MODIFIER)) 00133 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MODIFIER, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_MODIFIER, 0, 0, "Modifiers"); 00134 if(sbuts->pathflag & (1<<BCONTEXT_DATA)) 00135 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, sbuts->dataicon, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_DATA, 0, 0, "Object Data"); 00136 if(sbuts->pathflag & (1<<BCONTEXT_BONE)) 00137 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_BONE_DATA, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_BONE, 0, 0, "Bone"); 00138 if(sbuts->pathflag & (1<<BCONTEXT_BONE_CONSTRAINT)) 00139 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_CONSTRAINT_BONE, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_BONE_CONSTRAINT, 0, 0, "Bone Constraints"); 00140 if(sbuts->pathflag & (1<<BCONTEXT_MATERIAL)) 00141 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MATERIAL, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material"); 00142 if(sbuts->pathflag & (1<<BCONTEXT_TEXTURE)) 00143 uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture"); 00144 if(sbuts->pathflag & (1<<BCONTEXT_PARTICLE)) 00145 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); 00146 if(sbuts->pathflag & (1<<BCONTEXT_PHYSICS)) 00147 uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PHYSICS, xco+=BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); 00148 xco+= BUT_UNIT_X; 00149 00150 uiBlockEndAlign(block); 00151 00152 /* always as last */ 00153 UI_view2d_totRect_set(&ar->v2d, xco+(UI_UNIT_X/2), ar->v2d.tot.ymax-ar->v2d.tot.ymin); 00154 00155 uiEndBlock(C, block); 00156 uiDrawBlock(C, block); 00157 } 00158 00159