From 191f49dbeae49b0e34b2662835b92739f4ddfba3 Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Wed, 13 May 2020 17:17:15 +0200 Subject: [LISTVIEW] Support more customization in element. --- source/widgets/box.c | 3 ++- source/widgets/listview.c | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/source/widgets/box.c b/source/widgets/box.c index 42f95f4e..8bf531c9 100644 --- a/source/widgets/box.c +++ b/source/widgets/box.c @@ -225,12 +225,13 @@ static void hori_calculate_size ( box *b ) if ( b->max_size > ( rem_width ) ) { b->max_size = rem_width; g_debug ( "Widgets to large (width) for box: %d %d", b->max_size, b->widget.w ); - return; + //return; } if ( active_widgets > 0 ) { int left = widget_padding_get_left ( WIDGET ( b ) ); double rem = rem_width - b->max_size; int index = 0; + if ( rem < 0 ) rem = 0; for ( GList *iter = g_list_first ( b->children ); iter != NULL; iter = g_list_next ( iter ) ) { widget * child = (widget *) iter->data; if ( child->enabled == FALSE ) { diff --git a/source/widgets/listview.c b/source/widgets/listview.c index 3ff797ea..8df1cf9a 100644 --- a/source/widgets/listview.c +++ b/source/widgets/listview.c @@ -165,6 +165,32 @@ static void listview_set_state ( _listview_row r, TextBoxFontType tbft ) break; } } +static void listview_add_widget ( listview *lv, _listview_row *row, widget *wid, const char *label ) +{ + TextboxFlags flags = ( lv->multi_select ) ? TB_INDICATOR : 0; + if ( strcasecmp ( label, "element-icon" ) == 0 ) { + if ( config.show_icons ) { + row->icon = icon_create ( WIDGET ( wid ), "element-icon" ); + box_add ( (box *)wid, WIDGET ( row->icon ), FALSE ); + } + } + else if ( strcasecmp ( label, "element-text" ) == 0 ) { + row->textbox = textbox_create ( WIDGET ( wid ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT | flags, NORMAL, "DDD", 0, 0 ); + box_add ( (box *)wid, WIDGET ( row->textbox ), TRUE ); + } + else if ( strcasecmp ( label, "element-index" ) == 0 ) { + row->index = textbox_create ( WIDGET ( wid ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT, NORMAL, " ", 0, 0 ); + box_add ( (box *)wid, WIDGET ( row->index ), FALSE ); + } else { + widget *wid2 = (widget *) box_create ( wid, label, ROFI_ORIENTATION_VERTICAL ); + box_add ( (box *) wid, WIDGET ( wid2 ), TRUE ); + GList *list = rofi_theme_get_list ( WIDGET ( wid2 ), "children", "" ); + for ( GList *iter = g_list_first ( list ); iter != NULL; iter = g_list_next ( iter ) ) { + listview_add_widget ( lv,row, wid2, (const char *)iter->data ); + } + } + +} static void listview_create_row ( listview *lv, _listview_row *row ) { @@ -178,20 +204,7 @@ static void listview_create_row ( listview *lv, _listview_row *row ) row->index = NULL; for ( GList *iter = g_list_first ( list ); iter != NULL; iter = g_list_next ( iter ) ) { - if ( strcasecmp ( (char *) iter->data, "element-icon" ) == 0 ) { - if ( config.show_icons ) { - row->icon = icon_create ( WIDGET ( row->box ), "element-icon" ); - box_add ( row->box, WIDGET ( row->icon ), FALSE ); - } - } - else if ( strcasecmp ( (char *) iter->data, "element-text" ) == 0 ) { - row->textbox = textbox_create ( WIDGET ( row->box ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT | flags, NORMAL, "DDD", 0, 0 ); - box_add ( row->box, WIDGET ( row->textbox ), TRUE ); - } - else if ( strcasecmp ( (char*) iter->data, "element-index" ) == 0 ) { - row->index = textbox_create ( WIDGET ( row->box ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT, NORMAL, " ", 0, 0 ); - box_add ( row->box, WIDGET ( row->index ), FALSE ); - } + listview_add_widget ( lv,row, WIDGET(row->box), (const char *)iter->data ); } g_list_free_full ( list, g_free ); } -- cgit v1.2.3