Revision: 20589
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20589
Author:   blendix
Date:     2009-06-03 02:01:22 +0200 (Wed, 03 Jun 2009)

Log Message:
-----------
2.5:
* Button space context now includes most data so python code doesn't
  have to look it up manually, and to plug-in context browsing later.

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
    
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c

Added Paths:
-----------
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c

Added: 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
                          (rev 0)
+++ 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
  2009-06-03 00:01:22 UTC (rev 20589)
@@ -0,0 +1,185 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+
+#include "DNA_armature_types.h"
+#include "DNA_object_types.h"
+#include "DNA_material_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_texture_types.h"
+#include "DNA_world_types.h"
+
+#include "BKE_context.h"
+#include "BKE_material.h"
+#include "BKE_modifier.h"
+#include "BKE_particle.h"
+
+#include "RNA_access.h"
+
+#include "buttons_intern.h"    // own include
+
+int buttons_context(const bContext *C, const char *member, bContextDataResult 
*result)
+{
+       Scene *scene= CTX_data_scene(C);
+       Object *ob= (scene->basact)? scene->basact->object: NULL;
+
+       if(CTX_data_equals(member, "scene")) {
+               CTX_data_pointer_set(result, &scene->id, &RNA_Scene, scene);
+               return 1;
+       }
+       else if(CTX_data_equals(member, "world")) {
+               CTX_data_pointer_set(result, &scene->world->id, &RNA_World, 
scene->world);
+               return 1;
+       }
+       else if(CTX_data_equals(member, "object")) {
+               CTX_data_pointer_set(result, &ob->id, &RNA_Object, ob);
+               return 1;
+       }
+       else if(CTX_data_equals(member, "mesh")) {
+               if(ob && ob->type == OB_MESH) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Mesh, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "armature")) {
+               if(ob && ob->type == OB_ARMATURE) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Armature, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "lattice")) {
+               if(ob && ob->type == OB_LATTICE) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Lattice, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "curve")) {
+               if(ob && ob->type == OB_CURVE) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Curve, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "meta_ball")) {
+               if(ob && ob->type == OB_MBALL) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_MetaBall, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "lamp")) {
+               if(ob && ob->type == OB_LAMP) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Lamp, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "camera")) {
+               if(ob && ob->type == OB_CAMERA) {
+                       CTX_data_pointer_set(result, ob->data, &RNA_Camera, 
ob->data);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "material")) {
+               if(ob && ob->type && (ob->type<OB_LAMP)) {
+                       Material *ma= give_current_material(ob, ob->actcol);
+                       CTX_data_pointer_set(result, &ma->id, &RNA_Material, 
ma);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "texture")) {
+               if(ob && ob->type && (ob->type<OB_LAMP)) {
+                       Material *ma= give_current_material(ob, ob->actcol);
+
+                       if(ma) {
+                               MTex *mtex= ma->mtex[(int)ma->texact];
+                               
+                               if(mtex->tex) {
+                                       CTX_data_pointer_set(result, 
&mtex->tex->id, &RNA_Texture, mtex->tex);
+                                       return 1;
+                               }
+                       }
+               }
+       }
+       else if(CTX_data_equals(member, "material_slot")) {
+       }
+       else if(CTX_data_equals(member, "texture_slot")) {
+               if(ob && ob->type && (ob->type<OB_LAMP)) {
+                       Material *ma= give_current_material(ob, ob->actcol);
+
+                       if(ma) {
+                               MTex *mtex= ma->mtex[(int)ma->texact];
+                               
+                               CTX_data_pointer_set(result, &ma->id, 
&RNA_TextureSlot, mtex);
+                               return 1;
+                       }
+               }
+       }
+       else if(CTX_data_equals(member, "bone")) {
+               if(ob && ob->type == OB_ARMATURE) {
+                       bArmature *arm= ob->data;
+                       Bone *bone;
+
+                       for(bone=arm->bonebase.first; bone; bone=bone->next) {
+                               if(bone->flag & BONE_ACTIVE) {
+                                       CTX_data_pointer_set(result, &arm->id, 
&RNA_Bone, bone);
+                                       return 1;
+                               }
+                       }
+               }
+       }
+       else if(CTX_data_equals(member, "particle_system")) {
+               if(ob) {
+                       ParticleSystem *psys= psys_get_current(ob);
+                       CTX_data_pointer_set(result, &ob->id, 
&RNA_ParticleSystem, psys);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "cloth")) {
+               if(ob) {
+                       ModifierData *md= modifiers_findByType(ob, 
eModifierType_Cloth);
+                       CTX_data_pointer_set(result, &ob->id, 
&RNA_ClothModifier, md);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "soft_body")) {
+               if(ob) {
+                       CTX_data_pointer_set(result, &ob->id, 
&RNA_SoftBodySettings, ob->soft);
+                       return 1;
+               }
+       }
+       else if(CTX_data_equals(member, "fluid")) {
+               if(ob) {
+                       ModifierData *md= modifiers_findByType(ob, 
eModifierType_Fluidsim);
+                       CTX_data_pointer_set(result, &ob->id, 
&RNA_FluidSimulationModifier, md);
+                       return 1;
+               }
+       }
+
+       return 0;
+}
+

Modified: 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
   2009-06-02 23:56:33 UTC (rev 20588)
+++ 
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
   2009-06-03 00:01:22 UTC (rev 20589)
@@ -31,8 +31,8 @@
 struct ARegion;
 struct ARegionType;
 struct bContext;
+struct bContextDataResult;
 
-
 /* buts->scaflag */            
 #define BUTS_SENS_SEL          1
 #define BUTS_SENS_ACT          2
@@ -48,8 +48,11 @@
 
 /* internal exports only */
 
-/* image_header.c */
+/* buttons_header.c */
 void buttons_header_buttons(const struct bContext *C, struct ARegion *ar);
 
+/* buttons_context.c */
+int buttons_context(const struct bContext *C, const char *member, struct 
bContextDataResult *result);
+
 #endif /* ED_BUTTONS_INTERN_H */
 

Modified: 
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    2009-06-02 23:56:33 UTC (rev 20588)
+++ 
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    2009-06-03 00:01:22 UTC (rev 20589)
@@ -272,6 +272,7 @@
        st->duplicate= buttons_duplicate;
        st->operatortypes= buttons_operatortypes;
        st->keymap= buttons_keymap;
+       st->context= buttons_context;
        
        /* regions: main window */
        art= MEM_callocN(sizeof(ARegionType), "spacetype buttons region");


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to