diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2009-11-29 05:42:47 +0300 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2009-11-29 05:42:47 +0300 |
commit | 65edb6e55f11f20a552d8f9fd1375923d9854e49 (patch) | |
tree | 531331b36fb1eba2e9173b1dccc4058f36cde15e /source/blender | |
parent | 16efe1ac46fca2fafda292344a37f1f2deede2a0 (diff) |
UI:
* Moved more of 3dview header to python
* Fixed the layout of the ui layers template to show the correct number of buttons
* Added support for layer icons (active layer, used layers)
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 3 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 42 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 17 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ui_api.c | 6 |
5 files changed, 45 insertions, 29 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index ce49f11be54..608954eeed8 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -648,7 +648,8 @@ void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struc void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels); void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname); -void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname); +void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname, + PointerRNA *used_ptr, char *used_propname, int active_layer); void uiTemplateImage(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *userptr, int compact); void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser); void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index c263729f4fe..0b55571dbcd 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1879,16 +1879,17 @@ void uiTemplateTriColorSet(uiLayout *layout, PointerRNA *ptr, char *propname) /********************* 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) +void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname, + PointerRNA *used_ptr, char *used_propname, int active_layer) { - uiLayout *uRow, *uSplit, *uCol; - PropertyRNA *prop; + uiLayout *uRow, *uCol; + PropertyRNA *prop, *used_prop; int groups, cols, layers; int group, col, layer, row; + int cols_per_group = 5; prop= RNA_struct_find_property(ptr, propname); if (!prop) { @@ -1900,28 +1901,41 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname) * - 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 + * - for now, only split into groups if group will have at least 5 items */ layers= RNA_property_array_length(ptr, prop); cols= (layers / 2) + (layers % 2); - groups= ((cols / 2) < 5) ? (1) : (cols / 2); + groups= ((cols / 2) < cols_per_group) ? (1) : (cols / cols_per_group); + + if(used_ptr && used_propname) { + used_prop= RNA_struct_find_property(used_ptr, used_propname); + if (!used_prop) { + printf("uiTemplateLayer: used layers property not found: %s\n", used_propname); + return; + } + + if(RNA_property_array_length(used_ptr, used_prop) < layers) + used_prop = NULL; + } /* layers are laid out going across rows, with the columns being divided into groups */ - if (groups > 1) - uSplit= uiLayoutSplit(layout, (1.0f/(float)groups)); - else - uSplit= layout; for (group= 0; group < groups; group++) { - uCol= uiLayoutColumn(uSplit, 1); + uCol= uiLayoutColumn(layout, 1); for (row= 0; row < 2; row++) { uRow= uiLayoutRow(uCol, 1); - layer= groups*cols*row + cols*group; + layer= groups*cols_per_group*row + cols_per_group*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... + for (col= 0; (col < cols_per_group) && (layer < layers); col++, layer++) { + int icon = 0; + int butlay = 1 << layer; + if(active_layer & butlay) + icon = ICON_LAYER_ACTIVE; + else if(used_prop && RNA_property_boolean_get_index(used_ptr, used_prop, layer)) + icon = ICON_LAYER_USED; + uiItemFullR(uRow, "", icon, ptr, prop, layer, 0, UI_ITEM_R_TOGGLE); } } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 74f08d2b145..4dec705be15 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1918,7 +1918,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) View3D *v3d= sa->spacedata.first; Scene *scene= CTX_data_scene(C); ToolSettings *ts= CTX_data_tool_settings(C); - PointerRNA v3dptr, toolsptr; + PointerRNA v3dptr, toolsptr, sceneptr; Object *ob= OBACT; Object *obedit = CTX_data_edit_object(C); uiBlock *block; @@ -1926,6 +1926,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) RNA_pointer_create(&screen->id, &RNA_Space3DView, v3d, &v3dptr); RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &toolsptr); + RNA_pointer_create(&scene->id, &RNA_Scene, scene, &sceneptr); block= uiLayoutGetBlock(layout); uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL); @@ -1985,8 +1986,8 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) /* Transform widget / manipulators */ row= uiLayoutRow(layout, 1); + uiItemR(row, "", 0, &v3dptr, "manipulator", UI_ITEM_R_ICON_ONLY); block= uiLayoutGetBlock(row); - uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,0,0,XIC,YIC, &v3d->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)"); if(v3d->twflag & V3D_USE_MANIPULATOR) { uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, 0,0,XIC,YIC, &v3d->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)"); @@ -2046,16 +2047,4 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) BKE_mesh_end_editmesh(obedit->data, em); } - else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) { - PointerRNA particleptr; - - RNA_pointer_create(&scene->id, &RNA_ParticleEdit, &ts->particle, &particleptr); - - row= uiLayoutRow(layout, 1); - uiItemR(row, "", 0, &particleptr, "selection_mode", UI_ITEM_R_EXPAND+UI_ITEM_R_ICON_ONLY); - } - - /* Occlude geometry */ - if(v3d->drawtype > OB_WIRE && ((ob && ob->mode & OB_MODE_PARTICLE_EDIT) || (obedit && (obedit->type == OB_MESH)))) - uiItemR(layout, "", 0, &v3dptr, "occlude_geometry", UI_ITEM_R_ICON_ONLY); } diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index b072da4f64a..b37bca202bb 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -861,6 +861,12 @@ static void rna_def_space_3dview(BlenderRNA *brna) RNA_def_property_boolean_funcs(prop, NULL, "rna_Space3DView_lock_camera_and_layers_set"); RNA_def_property_ui_text(prop, "Lock Camera and Layers", "Lock the active camera and layers to scene."); RNA_def_property_ui_icon(prop, ICON_LOCKVIEW_OFF, 1); + + prop= RNA_def_property(srna, "used_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER); + RNA_def_property_boolean_sdna(prop, NULL, "lay_used", 1); + RNA_def_property_array(prop, 20); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Used Layers", "Layers that contain something."); } static void rna_def_space_buttons(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index a726a5b628e..e15cc130899 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -310,6 +310,12 @@ void RNA_api_ui_layout(StructRNA *srna) func= RNA_def_function(srna, "template_layers", "uiTemplateLayers"); api_ui_item_rna_common(func); + parm= RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property."); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR); + parm= RNA_def_string(func, "used_layers_property", "", 0, "", "Identifier of property in data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_int(func, "active_layer", 0, 0, INT_MAX, "Active Layer", "", 0, INT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); func= RNA_def_function(srna, "template_triColorSet", "uiTemplateTriColorSet"); api_ui_item_rna_common(func); |