| 1967 ui_listbox_update_sublist(listbox, sublist, pos); |
1968 ui_listbox_update_sublist(listbox, sublist, pos); |
| 1968 pos += sublist->numitems; |
1969 pos += sublist->numitems; |
| 1969 } |
1970 } |
| 1970 } |
1971 } |
| 1971 |
1972 |
| |
1973 static void listbox_button_clicked(GtkWidget *widget, UiEventDataExt *data) { |
| |
1974 UiListBoxSubList *sublist = data->customdata0; |
| |
1975 |
| |
1976 UiSubListEventData eventdata; |
| |
1977 eventdata.list = sublist->var->value; |
| |
1978 eventdata.sublist_index = sublist->index; |
| |
1979 eventdata.row_index = data->value0; |
| |
1980 eventdata.sublist_userdata = sublist->userdata; |
| |
1981 eventdata.row_data = eventdata.list->get(eventdata.list, eventdata.row_index); |
| |
1982 eventdata.event_data = data->customdata2; |
| |
1983 |
| |
1984 UiEvent event; |
| |
1985 event.obj = data->obj; |
| |
1986 event.window = event.obj->window; |
| |
1987 event.document = event.obj->ctx->document; |
| |
1988 event.eventdata = &eventdata; |
| |
1989 event.eventdatatype = UI_EVENT_DATA_SUBLIST; |
| |
1990 event.intval = data->value0; |
| |
1991 event.set = ui_get_setop(); |
| |
1992 |
| |
1993 if(data->callback2) { |
| |
1994 data->callback2(&event, data->userdata2); |
| |
1995 } |
| |
1996 } |
| |
1997 |
| 1972 static GtkWidget* create_listbox_row(UiListBox *listbox, UiListBoxSubList *sublist, UiSubListItem *item, int index) { |
1998 static GtkWidget* create_listbox_row(UiListBox *listbox, UiListBoxSubList *sublist, UiSubListItem *item, int index) { |
| 1973 GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); |
1999 GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); |
| 1974 if(item->icon) { |
2000 if(item->icon) { |
| 1975 GtkWidget *icon = ICON_IMAGE(item->icon); |
2001 GtkWidget *icon = ICON_IMAGE(item->icon); |
| 1976 BOX_ADD(hbox, icon); |
2002 BOX_ADD(hbox, icon); |
| 1977 } |
2003 } |
| 1978 GtkWidget *label = gtk_label_new(item->label); |
2004 GtkWidget *label = gtk_label_new(item->label); |
| 1979 gtk_widget_set_halign(label, GTK_ALIGN_START); |
2005 gtk_widget_set_halign(label, GTK_ALIGN_START); |
| 1980 BOX_ADD_EXPAND(hbox, label); |
2006 BOX_ADD_EXPAND(hbox, label); |
| 1981 // TODO: badge, button |
2007 if(item->badge) { |
| |
2008 |
| |
2009 } |
| 1982 GtkWidget *row = gtk_list_box_row_new(); |
2010 GtkWidget *row = gtk_list_box_row_new(); |
| 1983 LISTBOX_ROW_SET_CHILD(row, hbox); |
2011 LISTBOX_ROW_SET_CHILD(row, hbox); |
| 1984 |
2012 |
| 1985 // signals |
2013 // signals |
| 1986 UiEventDataExt *event = malloc(sizeof(UiEventDataExt)); |
2014 UiEventDataExt *event = malloc(sizeof(UiEventDataExt)); |
| 2000 "destroy", |
2028 "destroy", |
| 2001 G_CALLBACK(ui_destroy_userdata), |
2029 G_CALLBACK(ui_destroy_userdata), |
| 2002 event); |
2030 event); |
| 2003 |
2031 |
| 2004 g_object_set_data(G_OBJECT(row), "ui-listbox-row-eventdata", event); |
2032 g_object_set_data(G_OBJECT(row), "ui-listbox-row-eventdata", event); |
| |
2033 |
| |
2034 // TODO: badge |
| |
2035 // button |
| |
2036 if(item->button_icon || item->button_label) { |
| |
2037 GtkWidget *button = gtk_button_new(); |
| |
2038 gtk_button_set_label(GTK_BUTTON(button), item->button_label); |
| |
2039 ui_button_set_icon_name(button, item->button_icon); |
| |
2040 WIDGET_ADD_CSS_CLASS(button, "flat"); |
| |
2041 BOX_ADD(hbox, button); |
| |
2042 g_signal_connect( |
| |
2043 button, |
| |
2044 "clicked", |
| |
2045 G_CALLBACK(listbox_button_clicked), |
| |
2046 event |
| |
2047 ); |
| |
2048 } |
| 2005 |
2049 |
| 2006 return row; |
2050 return row; |
| 2007 } |
2051 } |
| 2008 |
2052 |
| 2009 void ui_listbox_update_sublist(UiListBox *listbox, UiListBoxSubList *sublist, size_t listbox_insert_index) { |
2053 void ui_listbox_update_sublist(UiListBox *listbox, UiListBoxSubList *sublist, size_t listbox_insert_index) { |