Revision: 20850
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20850
Author:   aligorith
Date:     2009-06-13 13:21:02 +0200 (Sat, 13 Jun 2009)

Log Message:
-----------
2.5 - Armature Buttons + UI-Templates

Added a new template for layer-buttons, which auto-determines the layout of the 
buttons instead of relying on some hardcoded pattern for n-layers (i.e. 16 or 
20 currently). This is a still bit rough, and could do with some refining to 
allow us to define what extra info (icons) should get drawn on the buttons or 
so.

Currently, this is only used in the Armature buttons to allow showing/hiding 
layers.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_armature.py
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_armature.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_armature.py     
2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/release/ui/buttons_data_armature.py     
2009-06-13 11:21:02 UTC (rev 20850)
@@ -45,9 +45,9 @@
                        
                        sub = split.column()
                        sub.itemL(text="Layers:")
-                       sub.itemL(text="LAYERS")
-                       #sub.itemR(arm, "layer")
-                       #sub.itemR(arm, "layer_protection")
+                       sub.template_layers(arm, "layer")
+                       sub.itemL(text="Protected Layers:")
+                       sub.template_layers(arm, "layer_protection")
 
 class DATA_PT_display(DataButtonsPanel):
        __idname__ = "DATA_PT_display"

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-13 11:09:13 UTC (rev 20849)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-13 11:21:02 UTC (rev 20850)
@@ -615,6 +615,7 @@
 void uiTemplatePreview(uiLayout *layout, struct ID *id);
 void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int 
type);
+void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char 
*propname);
 
 /* items */
 void uiItemO(uiLayout *layout, char *name, int icon, char *opname);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c    
    2009-06-13 11:09:13 UTC (rev 20849)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c    
    2009-06-13 11:21:02 UTC (rev 20850)
@@ -230,5 +230,11 @@
        parm= RNA_def_pointer(func, "ramp", "ColorRamp", "", "Color ramp 
pointer.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        RNA_def_boolean(func, "expand", 0, "", "Expand button to show more 
detail.");
+       
+       func= RNA_def_function(srna, "template_layers", "uiTemplateLayers");
+       parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to 
take property.");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm= RNA_def_string(func, "property", "", 0, "", "Identifier of 
pointer property in data.");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-13 11:09:13 UTC (rev 20849)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-13 11:21:02 UTC (rev 20850)
@@ -1439,3 +1439,56 @@
        }
 }
 
+/********************* Layer Buttons Template ************************/
+
+// TODO:
+//     - option for showing extra info like whether layer has contents?
+//     - for now, grouping of layers is determined by dividing up the length 
of 
+//       the array of layer bitflags
+
+void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname)
+{
+       uiBlock *block;
+       uiLayout *uRow, *uSplit, *uCol;
+       PropertyRNA *prop;
+       StructRNA *type;
+       int groups, cols, layers;
+       int group, col, layer, row;
+       
+       if (!ptr->data)
+               return;
+       
+       prop= RNA_struct_find_property(ptr, propname);
+       if (!prop) {
+               printf("uiTemplateLayer: layers property not found: %s\n", 
propname);
+               return;
+       }
+       
+       /* the number of layers determines the way we group them 
+        *      - we want 2 rows only (for now)
+        *      - the number of columns (cols) is the total number of buttons 
per row
+        *        the 'remainder' is added to this, as it will be ok to have 
first row slightly wider if need be
+        *      - for now, only split into groups if if group will have at 
least 5 items
+        */
+       layers= RNA_property_array_length(prop);
+       cols= (layers / 2) + (layers % 2);
+       groups= ((cols / 2) < 5) ? (1) : (cols / 2);
+       
+       /* layers are laid out going across rows, with the columns being 
divided into groups */
+       uSplit= uiLayoutSplit(layout, (1.0f/(float)groups));
+       
+       for (group= 0; group < groups; group++) {
+               uCol= uiLayoutColumn(uSplit, 1);
+               
+               for (row= 0; row < 2; row++) {
+                       uRow= uiLayoutRow(uCol, 1);
+                       layer= groups*cols*row + cols*group;
+                       
+                       /* add layers as toggle buts */
+                       for (col= 0; (col < cols) && (layer < layers); col++, 
layer++) {
+                               int icon=0; // XXX - add some way of setting 
this...
+                               uiItemFullR(uRow, "", icon, ptr, prop, layer, 
0, 0, 0, 1);
+                       }
+               }
+       }
+}


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

Reply via email to