Blender  V2.59
buttons_header.c
Go to the documentation of this file.
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