Revision: 37376
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37376
Author:   blendix
Date:     2011-06-10 18:17:34 +0000 (Fri, 10 Jun 2011)
Log Message:
-----------
Cycles: button to switch to texture tab from e.g. modifiers and field, with the
relevant texture selected, and some cosmetic tweaks to the menu.

Modified Paths:
--------------
    branches/cycles/release/scripts/startup/bl_ui/properties_data_modifier.py
    branches/cycles/release/scripts/startup/bl_ui/properties_physics_field.py
    branches/cycles/source/blender/editors/include/UI_interface.h
    branches/cycles/source/blender/editors/interface/interface_templates.c
    branches/cycles/source/blender/editors/space_buttons/buttons_texture.c

Modified: 
branches/cycles/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- branches/cycles/release/scripts/startup/bl_ui/properties_data_modifier.py   
2011-06-10 17:17:25 UTC (rev 37375)
+++ branches/cycles/release/scripts/startup/bl_ui/properties_data_modifier.py   
2011-06-10 18:17:34 UTC (rev 37376)
@@ -666,7 +666,7 @@
         split = layout.split()
         col = split.column()
         col.label(text="Texture:")
-        col.prop(md, "texture", text="")
+        col.template_ID(md, "texture", new="texture.new")
 
         col = split.column()
         col.label(text="Texture Coordinates:")

Modified: 
branches/cycles/release/scripts/startup/bl_ui/properties_physics_field.py
===================================================================
--- branches/cycles/release/scripts/startup/bl_ui/properties_physics_field.py   
2011-06-10 17:17:25 UTC (rev 37375)
+++ branches/cycles/release/scripts/startup/bl_ui/properties_physics_field.py   
2011-06-10 18:17:34 UTC (rev 37376)
@@ -61,6 +61,10 @@
             split = layout.split(percentage=0.2)
             split.label(text="Shape:")
             split.prop(field, "shape", text="")
+        elif field.type == 'TEXTURE':
+            split = layout.split(percentage=0.2)
+            split.label(text="Texture:")
+            split.row().template_ID(field, "texture", new="texture.new")
 
         split = layout.split()
 
@@ -103,7 +107,6 @@
         elif field.type == 'TEXTURE':
             col = split.column()
             col.prop(field, "strength")
-            col.prop(field, "texture", text="")
             col.prop(field, "texture_mode", text="")
             col.prop(field, "texture_nabla")
 

Modified: branches/cycles/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/cycles/source/blender/editors/include/UI_interface.h       
2011-06-10 17:17:25 UTC (rev 37375)
+++ branches/cycles/source/blender/editors/include/UI_interface.h       
2011-06-10 18:17:34 UTC (rev 37376)
@@ -730,6 +730,7 @@
 void uiTemplateNodeLink(uiLayout *layout, struct ID *id, struct bNodeTree 
*ntree, struct bNode *node, struct bNodeSocket *input);
 void uiTemplateNodeView(uiLayout *layout, struct bContext *C, struct ID *id, 
struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *input);
 void uiTemplateTextureUser(uiLayout *layout, struct bContext *C);
+void uiTemplateTextureShow(uiLayout *layout, struct bContext *C, struct 
PointerRNA *ptr, struct PropertyRNA *prop);
 
 /* items */
 void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname);

Modified: branches/cycles/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/cycles/source/blender/editors/interface/interface_templates.c      
2011-06-10 17:17:25 UTC (rev 37375)
+++ branches/cycles/source/blender/editors/interface/interface_templates.c      
2011-06-10 18:17:34 UTC (rev 37376)
@@ -325,7 +325,7 @@
        return "Browse ID data to be linked";
 }
 
-static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, 
StructRNA *type, int flag, const char *newop, const char *openop, const char 
*unlinkop)
+static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, 
StructRNA *type, short idcode, int flag, const char *newop, const char *openop, 
const char *unlinkop)
 {
        uiBut *but;
        uiBlock *block;
@@ -470,6 +470,9 @@
                if((idfrom && idfrom->lib) || !editable)
                        uiButSetFlag(but, UI_BUT_DISABLED);
        }
+
+       if(idcode == ID_TE)
+               uiTemplateTextureShow(layout, C, &template->ptr, 
template->prop);
        
        uiBlockEndAlign(block);
 }
@@ -479,6 +482,7 @@
        TemplateID *template;
        PropertyRNA *prop;
        StructRNA *type;
+       short idcode;
 
        prop= RNA_struct_find_property(ptr, propname);
 
@@ -499,14 +503,15 @@
                flag |= UI_ID_OPEN;
 
        type= RNA_property_pointer_type(ptr, prop);
-       template->idlb= which_libbase(CTX_data_main(C), 
RNA_type_to_ID_code(type));
+       idcode= RNA_type_to_ID_code(type);
+       template->idlb= which_libbase(CTX_data_main(C), idcode);
        
        /* create UI elements for this template
         *      - template_ID makes a copy of the template data and assigns it 
to the relevant buttons
         */
        if(template->idlb) {
                uiLayoutRow(layout, 1);
-               template_ID(C, layout, template, type, flag, newop, openop, 
unlinkop);
+               template_ID(C, layout, template, type, idcode, flag, newop, 
openop, unlinkop);
        }
 
        MEM_freeN(template);

Modified: branches/cycles/source/blender/editors/space_buttons/buttons_texture.c
===================================================================
--- branches/cycles/source/blender/editors/space_buttons/buttons_texture.c      
2011-06-10 17:17:25 UTC (rev 37375)
+++ branches/cycles/source/blender/editors/space_buttons/buttons_texture.c      
2011-06-10 18:17:34 UTC (rev 37376)
@@ -45,6 +45,7 @@
 #include "DNA_material_types.h"
 #include "DNA_node_types.h"
 #include "DNA_object_types.h"
+#include "DNA_object_force.h"
 #include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -56,12 +57,15 @@
 #include "BKE_modifier.h"
 #include "BKE_node.h"
 #include "BKE_paint.h"
+#include "BKE_particle.h"
 
 #include "RNA_access.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
 
+#include "ED_screen.h"
+
 #include "../interface/interface_intern.h"
 
 #include "buttons_intern.h"    // own include
@@ -99,7 +103,8 @@
                                RNA_pointer_create(&ntree->id, &RNA_Node, node, 
&ptr);
                                prop = RNA_struct_find_property(&ptr, 
"texture");
 
-                               buttons_texture_user_add(users, id, ptr, prop, 
category, ICON_NODE, node->name);
+                               buttons_texture_user_add(users, id, ptr, prop,
+                                       category, RNA_struct_ui_icon(ptr.type), 
node->name);
                        }
                        else if(node->type == NODE_GROUP && node->id) {
                                buttons_texture_users_find_nodetree(users, id, 
(bNodeTree*)node->id, category);
@@ -117,7 +122,8 @@
        RNA_pointer_create(&ob->id, &RNA_Modifier, md, &ptr);
        prop = RNA_struct_find_property(&ptr, propname);
 
-       buttons_texture_user_add(users, &ob->id, ptr, prop, "Modifiers", 
ICON_MODIFIER, md->name);
+       buttons_texture_user_add(users, &ob->id, ptr, prop,
+               "Modifiers", RNA_struct_ui_icon(ptr.type), md->name);
 }
 
 static void buttons_texture_users_from_context(ListBase *users, const bContext 
*C, SpaceButs *sbuts)
@@ -171,7 +177,7 @@
                buttons_texture_users_find_nodetree(users, &wrld->id, 
wrld->nodetree, "World");
 
        if(ob) {
-               ParticleSystem *psys;
+               ParticleSystem *psys= psys_get_current(ob);
                MTex *mtex;
                int a;
 
@@ -179,8 +185,8 @@
                modifiers_foreachTexLink(ob, buttons_texture_modifier_foreach, 
users);
 
                /* particle systems */
-               /* todo: these slots are not in the UI */
-               for(psys=ob->particlesystem.first; psys; psys=psys->next) {
+               if(psys) {
+                       /* todo: these slots are not in the UI */
                        for(a=0; a<MAX_MTEX; a++) {
                                mtex = psys->part->mtex[a];
 
@@ -191,10 +197,23 @@
                                        RNA_pointer_create(&psys->part->id, 
&RNA_ParticleSettingsTextureSlot, mtex, &ptr);
                                        prop = RNA_struct_find_property(&ptr, 
"texture");
 
-                                       buttons_texture_user_add(users, 
&psys->part->id, ptr, prop, "Particles", ICON_PARTICLES, psys->name);
+                                       buttons_texture_user_add(users, 
&psys->part->id, ptr, prop,
+                                               "Particles", 
RNA_struct_ui_icon(&RNA_ParticleSettings), psys->name);
                                }
                        }
                }
+
+               /* field */
+               if(ob->pd && ob->pd->forcefield == PFIELD_TEXTURE) {
+                       PointerRNA ptr;
+                       PropertyRNA *prop;
+
+                       RNA_pointer_create(&ob->id, &RNA_FieldSettings, ob->pd, 
&ptr);
+                       prop = RNA_struct_find_property(&ptr, "texture");
+
+                       buttons_texture_user_add(users, &ob->id, ptr, prop,
+                               "Fields", ICON_FORCE_TEXTURE, "Texture Field");
+               }
        }
 
        /* brush */
@@ -203,9 +222,10 @@
                PropertyRNA *prop;
 
                RNA_pointer_create(&brush->id, &RNA_BrushTextureSlot, 
&brush->mtex, &ptr);
-               prop = RNA_struct_find_property(&ptr, "texture");
+               prop= RNA_struct_find_property(&ptr, "texture");
 
-               buttons_texture_user_add(users, &brush->id, ptr, prop, "Brush", 
ICON_BRUSH_DATA, brush->id.name+2);
+               buttons_texture_user_add(users, &brush->id, ptr, prop,
+                       "Brush", ICON_BRUSH_DATA, brush->id.name+2);
        }
 }
 
@@ -335,3 +355,59 @@
        but->flag &= ~UI_ICON_SUBMENU;
 }
 
+/************************* Texture Show **************************/
+
+static void template_texture_show(bContext *C, void *data_p, void *prop_p)
+{
+       SpaceButs *sbuts = CTX_wm_space_buts(C);
+       ButsContextTexture *ct= (sbuts)? sbuts->texuser: NULL;
+       ButsTextureUser *user;
+
+       if(!ct)
+               return;
+
+       for(user=ct->users.first; user; user=user->next)
+               if(user->ptr.data == data_p && user->prop == prop_p)
+                       break;
+       
+       if(user) {
+               /* select texture */
+               template_texture_select(C, user, NULL);
+
+               /* change context */
+               sbuts->mainb= BCONTEXT_TEXTURE;
+               sbuts->mainbuser= sbuts->mainb;
+               sbuts->preview= 1;
+
+               /* redraw editor */
+               ED_area_tag_redraw(CTX_wm_area(C));
+       }
+}
+
+void uiTemplateTextureShow(uiLayout *layout, bContext *C, PointerRNA *ptr, 
PropertyRNA *prop)
+{
+       /* button to quickly show texture in texture tab */
+       SpaceButs *sbuts = CTX_wm_space_buts(C);
+       ButsContextTexture *ct= (sbuts)? sbuts->texuser: NULL;
+       ButsTextureUser *user;
+
+       /* only show button in other tabs in properties editor */
+       if(!ct || sbuts->mainb == BCONTEXT_TEXTURE)
+               return;
+
+       /* find corresponding texture user */
+       for(user=ct->users.first; user; user=user->next)
+               if(user->ptr.data == ptr->data && user->prop == prop)
+                       break;
+       
+       /* draw button */
+       if(user) {
+               uiBlock *block = uiLayoutGetBlock(layout);
+               uiBut *but;
+               
+               but= uiDefIconBut(block, BUT, 0, ICON_BUTS, 0, 0, UI_UNIT_X, 
UI_UNIT_Y,
+                       NULL, 0.0, 0.0, 0.0, 0.0, "Show texture in texture 
tab");
+               uiButSetFunc(but, template_texture_show, user->ptr.data, 
user->prop);
+       }
+}
+

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to