Commit: 2ca18d608cd5dc38c17e120cd8c613c88c38673f
Author: Julian Eisel
Date:   Tue May 31 12:21:45 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB2ca18d608cd5dc38c17e120cd8c613c88c38673f

Support for expanding layer settings

A selected layer now shows a gear wheel icon which expands the layer settings. 
The layer settings are currently two dummy text buttons.

===================================================================

M       source/blender/blenkernel/BKE_layer.h
M       source/blender/editors/include/ED_object.h
M       source/blender/editors/object/CMakeLists.txt
D       source/blender/editors/object/object_layer.c
M       source/blender/editors/space_layers/CMakeLists.txt
M       source/blender/editors/space_layers/layers_draw.c
M       source/blender/editors/space_layers/layers_intern.h
M       source/blender/editors/space_layers/layers_ops.c
A       source/blender/editors/space_layers/layers_types.c
M       source/blender/editors/space_layers/layers_util.c
M       source/blender/editors/space_layers/space_layers.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_layer.h 
b/source/blender/blenkernel/BKE_layer.h
index c06492b..d6471ee 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -69,8 +69,8 @@ bool BKE_layertree_iterate(const LayerTree *ltree, 
LayerTreeIterFunc foreach, vo
 /* Layer Tree Item */
 
 typedef short (*LayerItemPollFunc)(const struct bContext *, struct 
LayerTreeItem *);
-typedef void  (*LayerItemDrawFunc)(struct LayerTreeItem *, struct uiLayout 
*layout);
-typedef void  (*LayerItemDrawSettingsFunc)(struct LayerTreeItem *, struct 
uiLayout *layout);
+typedef void  (*LayerItemDrawFunc)(const struct bContext *, struct 
LayerTreeItem *, struct uiLayout *layout);
+typedef void  (*LayerItemDrawSettingsFunc)(const struct bContext *, struct 
LayerTreeItem *, struct uiLayout *layout);
 
 typedef enum eLayerTreeItem_Type {
        LAYER_ITEMTYPE_LAYER,
diff --git a/source/blender/editors/include/ED_object.h 
b/source/blender/editors/include/ED_object.h
index f4ab00b..8a3404b 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -178,9 +178,6 @@ void undo_push_lattice(struct bContext *C, const char 
*name);
 
 void ED_lattice_flags_set(struct Object *obedit, int flag);
 
-/* object_layer.c */
-struct LayerTreeItem *ED_object_layer_add(struct LayerTree *ltree, const char 
*name);
-
 /* object_modifier.c */
 enum {
        MODIFIER_APPLY_DATA = 1,
diff --git a/source/blender/editors/object/CMakeLists.txt 
b/source/blender/editors/object/CMakeLists.txt
index 88a4183..b3d02d4 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -49,7 +49,6 @@ set(SRC
        object_group.c
        object_hook.c
        object_lattice.c
-       object_layer.c
        object_lod.c
        object_modifier.c
        object_ops.c
diff --git a/source/blender/editors/space_layers/CMakeLists.txt 
b/source/blender/editors/space_layers/CMakeLists.txt
index 9df1798..9d20910 100644
--- a/source/blender/editors/space_layers/CMakeLists.txt
+++ b/source/blender/editors/space_layers/CMakeLists.txt
@@ -22,6 +22,7 @@ set(INC
        ../include
        ../../blenkernel
        ../../blenlib
+       ../../blentranslation
        ../../gpu
        ../../makesdna
        ../../makesrna
@@ -37,6 +38,7 @@ set(INC_SYS
 set(SRC
        layers_draw.c
        layers_ops.c
+       layers_types.c
        layers_util.c
        space_layers.c
 
diff --git a/source/blender/editors/space_layers/layers_draw.c 
b/source/blender/editors/space_layers/layers_draw.c
index fb0e793..5afd1f3 100644
--- a/source/blender/editors/space_layers/layers_draw.c
+++ b/source/blender/editors/space_layers/layers_draw.c
@@ -29,6 +29,8 @@
 #include "BLI_listbase.h"
 #include "BLI_rect.h"
 
+#include "BLT_translation.h"
+
 #include "BKE_context.h"
 #include "BKE_layer.h"
 
@@ -75,24 +77,71 @@ typedef struct TileDrawInfo {
        int idx;
 } TileDrawInfo;
 
+#define LAYERTILE_HEADER_HEIGHT UI_UNIT_Y
+
 static bool layer_tile_draw_cb(LayerTreeItem *litem, void *userdata)
 {
+       if (!litem->draw)
+               return true; /* skip this item, but continue iterating */
+
        TileDrawInfo *drawinfo = userdata;
        View2D *v2d = &drawinfo->ar->v2d;
        LayerTile *tile = BLI_ghash_lookup(drawinfo->slayer->tiles, litem);
+       const bool expanded = litem->draw_settings && (tile->flag & 
LAYERTILE_EXPANDED);
+
        const float pad_x = 4.0f * UI_DPI_FAC;
-       const float height = tile->height;
+       const float header_y = LAYERTILE_HEADER_HEIGHT;
 
        const float ofs_x = layer_tile_indent_level_get(litem) * 
LAYERITEM_INDENT_SIZE;
        const float ofs_y = drawinfo->size_y;
-       rctf rect = {ofs_x, drawinfo->ar->winx, -v2d->cur.ymin - ofs_y - 
height};
-       rect.ymax = rect.ymin + height;
+       rctf rect = {ofs_x, drawinfo->ar->winx, -v2d->cur.ymin - ofs_y - 
header_y};
+       rect.ymax = rect.ymin + header_y;
+       int size_y = 0;
+       int tile_size_y = 0;
+
+       /* draw item itself */
+       uiBlock *block = drawinfo->block;
+
+       if (tile->flag & LAYERTILE_RENAME) {
+               uiBut *but = uiDefBut(
+                       block, UI_BTYPE_TEXT, 1, "", rect.xmin, rect.ymin,
+                       UI_UNIT_X * 7.0f, BLI_rctf_size_y(&rect),
+                       litem->name, 1.0f, (float)sizeof(litem->name), 0, 0, 
"");
+               UI_but_flag_enable(but, UI_BUT_NO_UTF8); /* allow non utf8 
names */
+               UI_but_flag_disable(but, UI_BUT_UNDO);
+
+               /* returns false if button got removed */
+               if (UI_but_active_only(drawinfo->C, drawinfo->ar, block, but) 
== false) {
+                       tile->flag &= ~LAYERTILE_RENAME;
+                       /* Yuk! Sending notifier during draw. Need to
+                        * do that so item uses regular drawing again. */
+                       WM_event_add_notifier(drawinfo->C, NC_SPACE | 
ND_SPACE_LAYERS, NULL);
+               }
+       }
+       else {
+               uiLayout *layout = UI_block_layout(
+                       block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER,
+                       -v2d->cur.xmin + ofs_x, -v2d->cur.ymin - ofs_y, 
header_y, 0, 0, drawinfo->style);
+               litem->draw(drawinfo->C, litem, layout);
+               uiItemL(layout, "", 0); /* XXX without this editing last item 
causes crashes */
+               UI_block_layout_resolve(block, NULL, NULL);
+       }
+       tile_size_y = header_y;
 
+       if (expanded) {
+               uiLayout *layout = UI_block_layout(
+                       block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL,
+                       -v2d->cur.xmin + ofs_x, -v2d->cur.ymin - ofs_y - 
header_y, BLI_rctf_size_x(&rect), 0, 0, drawinfo->style);
+               litem->draw_settings(drawinfo->C, litem, layout);
+
+               UI_block_layout_resolve(block, NULL, &size_y);
+               tile_size_y = -(size_y + drawinfo->size_y + v2d->cur.ymin);
+       }
 
        /* draw background */
        if (drawinfo->idx % 2) {
                UI_ThemeColorShade(TH_BACK, 10);
-               fdrawbox_filled(0, rect.ymin, rect.xmax, rect.ymax);
+               fdrawbox_filled(0, rect.ymax - tile_size_y, rect.xmax, 
rect.ymax);
        }
        /* draw selection */
        if (tile->flag & LAYERTILE_SELECTED) {
@@ -100,36 +149,11 @@ static bool layer_tile_draw_cb(LayerTreeItem *litem, void 
*userdata)
                UI_ThemeColor(TH_HILITE);
                UI_draw_roundbox(rect.xmin + pad_x, rect.ymin, rect.xmax - 
pad_x, rect.ymax, 5.0f);
        }
-       /* draw item itself */
-       if (litem->draw) {
-               uiBlock *block = drawinfo->block;
-               uiLayout *layout = UI_block_layout(
-                                      block, UI_LAYOUT_HORIZONTAL, 
UI_LAYOUT_HEADER,
-                                      -v2d->cur.xmin + ofs_x, -v2d->cur.ymin - 
ofs_y, height, 0, 0, drawinfo->style);
-               if (tile->flag & LAYERTILE_RENAME) {
-                       uiBut *but = uiDefBut(
-                               block, UI_BTYPE_TEXT, 1, "", rect.xmin, 
rect.ymin,
-                               UI_UNIT_X * 7.0f, BLI_rctf_size_y(&rect),
-                               litem->name, 1.0f, (float)sizeof(litem->name), 
0, 0, "");
-                       UI_but_flag_enable(but, UI_BUT_NO_UTF8); /* allow non 
utf8 names */
-                       UI_but_flag_disable(but, UI_BUT_UNDO);
-
-                       /* returns false if button got removed */
-                       if (UI_but_active_only(drawinfo->C, drawinfo->ar, 
block, but) == false) {
-                               tile->flag &= ~LAYERTILE_RENAME;
-                               /* Yuk! Sending notifier during draw. Need to
-                                * do that so item uses regular drawing again. 
*/
-                               WM_event_add_notifier(drawinfo->C, NC_SPACE | 
ND_SPACE_LAYERS, NULL);
-                       }
-               }
-               else {
-                       litem->draw(litem, layout);
-               }
-               uiItemL(layout, "", 0); /* XXX without this editing last item 
causes crashes */
-               UI_block_layout_resolve(block, NULL, NULL);
-       }
-       drawinfo->size_y += height;
+
+       drawinfo->size_y += tile_size_y;
        drawinfo->idx++;
+       /* set tile height */
+       tile->height = tile_size_y;
 
        return true;
 }
@@ -145,12 +169,12 @@ void layers_tiles_draw(const bContext *C, ARegion *ar)
        BKE_layertree_iterate(slayer->act_tree, layer_tile_draw_cb, &drawinfo);
 
        /* fill remaining space with empty boxes */
-       const float tot_fill_tiles = (-ar->v2d.cur.ymin - drawinfo.size_y) / 
LAYERTILE_DEFAULT_HEIGHT + 1;
+       const float tot_fill_tiles = (-ar->v2d.cur.ymin - drawinfo.size_y) / 
LAYERTILE_HEADER_HEIGHT + 1;
        for (int i = 0; i < tot_fill_tiles; i++) {
                if ((i + drawinfo.idx - 1) % 2) {
-                       const float pos[2] = {0, -ar->v2d.cur.ymin - 
drawinfo.size_y - (LAYERTILE_DEFAULT_HEIGHT * i)};
+                       const float pos[2] = {0, -ar->v2d.cur.ymin - 
drawinfo.size_y - (LAYERTILE_HEADER_HEIGHT * i)};
                        UI_ThemeColorShade(TH_BACK, 10);
-                       fdrawbox_filled(pos[0], pos[1], pos[0] + ar->winx, 
pos[1] + LAYERTILE_DEFAULT_HEIGHT);
+                       fdrawbox_filled(pos[0], pos[1], pos[0] + ar->winx, 
pos[1] + LAYERTILE_HEADER_HEIGHT);
                }
        }
 
@@ -165,7 +189,31 @@ void layers_tiles_draw(const bContext *C, ARegion *ar)
 /* -------------------------------------------------------------------- */
 /* Layer draw callbacks */
 
-void layer_group_draw(LayerTreeItem *litem, uiLayout *layout)
+void layer_group_draw(const bContext *UNUSED(C), LayerTreeItem *litem, 
uiLayout *layout)
 {
        uiItemL(layout, litem->name, ICON_FILE_FOLDER);
 }
+
+void object_layer_draw(const bContext *C, LayerTreeItem *litem, uiLayout 
*layout)
+{
+       SpaceLayers *slayer = CTX_wm_space_layers(C);
+       LayerTile *tile = BLI_ghash_lookup(slayer->tiles, litem);
+       uiBlock *block = uiLayoutGetBlock(layout);
+       const bool draw_settingbut = litem->draw_settings && tile->flag & 
(LAYERTILE_SELECTED | LAYERTILE_EXPANDED);
+
+       uiItemL(layout, litem->name, 0);
+       if (draw_settingbut) {
+               UI_block_emboss_set(block, UI_EMBOSS_NONE);
+               uiDefIconButBitI(block, UI_BTYPE_TOGGLE, LAYERTILE_EXPANDED, 0,
+                                ICON_SCRIPTWIN, 0, 0, UI_UNIT_X, UI_UNIT_Y, 
(int *)&tile->flag,
+                                0.0f, 0.0f, 0.0f, 0.0f, TIP_("Toggle layer 
settings"));
+               UI_block_emboss_set(block, UI_EMBOSS);
+       }
+}
+
+void object_layer_draw_settings(const bContext *UNUSED(C), LayerTreeItem 
*UNUSED(litem), uiLayout *layout)
+{
+       /* TODO */
+       uiItemL(layout, "Add stuff here!", 0);
+       uiItemL(layout, "Test", 0);
+}
diff --git a/source/blender/editors/space_layers/layers_intern.h 
b/source/blender/editors/space_layers/layers_intern.h
index ab781e9..5935222 100644
--- a/source/blender/editors/space_layers/layers_intern.h
+++ b/source/blender/editors/space_layers/layers_intern.h
@@ -26,13 +26,13 @@
 #define __LAYERS_INTERN_H__
 
 struct ARegion;
+struct SpaceLayers;
 struct wmKeyConfig;
 
-#define LAYERTILE_DEFAULT_HEIGHT U.widget_unit
-
 typedef enum eLayerTileFlag {
        LAYERTILE_SELECTED = (1 << 0),
        LAYERTILE_RENAME   = (1 << 1),
+       LAYERTILE_EXPANDED = (1 << 2),
 } eLayerTileFlag;
 
 /**
@@ -43,18 +43,22 @@ typedef struct LayerTile {
        struct LayerTreeItem *litem;
 
        eLayerTileFlag flag;
-       int height; /* the height of this item */
+       /* The height of this item. Set right after

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to