ui/gtk/list.c

changeset 698
3496032f0dd0
parent 697
d254b3ec7736
child 699
148618eff948
equal deleted inserted replaced
697:d254b3ec7736 698:3496032f0dd0
37 37
38 #include <cx/array_list.h> 38 #include <cx/array_list.h>
39 #include <cx/linked_list.h> 39 #include <cx/linked_list.h>
40 40
41 #include "list.h" 41 #include "list.h"
42 #include "button.h"
42 #include "icon.h" 43 #include "icon.h"
43 #include "menu.h" 44 #include "menu.h"
44 #include "dnd.h" 45 #include "dnd.h"
45 46
46 47
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) {

mercurial