200 listview); |
200 listview); |
201 |
201 |
202 // bind var |
202 // bind var |
203 list->update = ui_listview_update; |
203 list->update = ui_listview_update; |
204 list->getselection = ui_listview_getselection; |
204 list->getselection = ui_listview_getselection; |
|
205 list->setselection = ui_listview_setselection; |
205 list->obj = listview; |
206 list->obj = listview; |
206 |
207 |
207 // add callback |
208 // add callback |
|
209 UiTreeEventData *event = malloc(sizeof(UiTreeEventData)); |
|
210 event->obj = obj; |
|
211 event->activate = args.onactivate; |
|
212 event->activatedata = args.onactivatedata; |
|
213 event->selection = args.onselection; |
|
214 event->selectiondata = args.onselectiondata; |
|
215 g_signal_connect( |
|
216 view, |
|
217 "destroy", |
|
218 G_CALLBACK(ui_destroy_userdata), |
|
219 event); |
|
220 |
208 if(args.onactivate) { |
221 if(args.onactivate) { |
209 UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData)); |
|
210 event->obj = obj; |
|
211 event->activatedata = args.onactivatedata; |
|
212 event->activate = args.onactivate; |
|
213 event->selection = NULL; |
|
214 |
|
215 g_signal_connect( |
222 g_signal_connect( |
216 view, |
223 view, |
217 "row-activated", |
224 "row-activated", |
218 G_CALLBACK(ui_listview_activate_event), |
225 G_CALLBACK(ui_listview_activate_event), |
219 event); |
226 event); |
220 } |
227 } |
|
228 if(args.onselection) { |
|
229 GtkTreeSelection *selection = gtk_tree_view_get_selection( |
|
230 GTK_TREE_VIEW(view)); |
|
231 g_signal_connect( |
|
232 selection, |
|
233 "changed", |
|
234 G_CALLBACK(ui_listview_selection_event), |
|
235 event); |
|
236 } |
|
237 |
221 |
238 |
222 // add widget to the current container |
239 // add widget to the current container |
223 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW(); |
240 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW(); |
224 gtk_scrolled_window_set_policy( |
241 gtk_scrolled_window_set_policy( |
225 GTK_SCROLLED_WINDOW(scroll_area), |
242 GTK_SCROLLED_WINDOW(scroll_area), |
490 gtk_tree_view_get_selection(GTK_TREE_VIEW(view->widget)), |
507 gtk_tree_view_get_selection(GTK_TREE_VIEW(view->widget)), |
491 NULL); |
508 NULL); |
492 return selection; |
509 return selection; |
493 } |
510 } |
494 |
511 |
|
512 void ui_listview_setselection(UiList *list, UiListSelection selection) { |
|
513 UiListView *view = list->obj; |
|
514 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view->widget)); |
|
515 GtkTreePath *path = gtk_tree_path_new_from_indicesv(selection.rows, selection.count); |
|
516 gtk_tree_selection_select_path(sel, path); |
|
517 //g_object_unref(path); |
|
518 } |
|
519 |
495 void ui_listview_destroy(GtkWidget *w, UiListView *v) { |
520 void ui_listview_destroy(GtkWidget *w, UiListView *v) { |
496 gtk_tree_view_set_model(GTK_TREE_VIEW(w), NULL); |
521 gtk_tree_view_set_model(GTK_TREE_VIEW(w), NULL); |
497 ui_destroy_boundvar(v->obj->ctx, v->var); |
522 ui_destroy_boundvar(v->obj->ctx, v->var); |
498 // TODO: destroy model? |
523 // TODO: destroy model? |
499 free(v); |
524 free(v); |