Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/ui/buttons_data_armature.py6
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/interface/interface_api.c6
-rw-r--r--source/blender/editors/interface/interface_templates.c53
4 files changed, 63 insertions, 3 deletions
diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py
index fd317baf861..0b02eee9f7b 100644
--- a/release/ui/buttons_data_armature.py
+++ b/release/ui/buttons_data_armature.py
@@ -45,9 +45,9 @@ class DATA_PT_skeleton(DataButtonsPanel):
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"
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 48a859dadc4..eb3a037d7b1 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -615,6 +615,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
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);
diff --git a/source/blender/editors/interface/interface_api.c b/source/blender/editors/interface/interface_api.c
index 60bfe4e79ad..b4e7dc03506 100644
--- a/source/blender/editors/interface/interface_api.c
+++ b/source/blender/editors/interface/interface_api.c
@@ -230,5 +230,11 @@ void RNA_api_ui_layout(StructRNA *srna)
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);
}
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 53238a306cd..63de328af0f 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -1439,3 +1439,56 @@ void uiTemplateCurveMapping(uiLayout *layout, CurveMapping *cumap, int type)
}
}
+/********************* 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);
+ }
+ }
+ }
+}