ui/gtk/tree.c

branch
newapi
changeset 299
48763a9d19a7
parent 291
302a150ff5e4
equal deleted inserted replaced
298:c5e207d01ff2 299:48763a9d19a7
93 break; 93 break;
94 } 94 }
95 case UI_ICON: { 95 case UI_ICON: {
96 g_value_init(&value, G_TYPE_OBJECT); 96 g_value_init(&value, G_TYPE_OBJECT);
97 UiIcon *icon = data; 97 UiIcon *icon = data;
98 #if GTK_MAJOR_VERSION >= 4
99 g_value_set_object(&value, icon->info); // TODO: does this work?
100 #else
98 if(!icon->pixbuf && icon->info) { 101 if(!icon->pixbuf && icon->info) {
99 GError *error = NULL; 102 GError *error = NULL;
100 GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon->info, &error); 103 GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon->info, &error);
101 icon->pixbuf = pixbuf; 104 icon->pixbuf = pixbuf;
102 } 105 }
103 106
104 if(icon->pixbuf) { 107 if(icon->pixbuf) {
105 g_value_set_object(&value, icon->pixbuf); 108 g_value_set_object(&value, icon->pixbuf);
106 } 109 }
107 110 #endif
108
109 break; 111 break;
110 } 112 }
111 case UI_ICON_TEXT: 113 case UI_ICON_TEXT:
112 case UI_ICON_TEXT_FREE: { 114 case UI_ICON_TEXT_FREE: {
115 UiIcon *icon = data;
116 char *str = model->getvalue(elm, c);
117 #if GTK_MAJOR_VERSION >= 4
118 GValue iconvalue = G_VALUE_INIT;
119 g_value_init(&iconvalue, G_TYPE_OBJECT);
120 g_value_set_object(&iconvalue, icon->info);
121 gtk_list_store_set_value(store, &iter, c, &iconvalue);
122 #else
113 GValue pixbufvalue = G_VALUE_INIT; 123 GValue pixbufvalue = G_VALUE_INIT;
114 UiIcon *icon = data;
115 if(!icon->pixbuf && icon->info) { 124 if(!icon->pixbuf && icon->info) {
116 GError *error = NULL; 125 GError *error = NULL;
117 GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon->info, &error); 126 GdkPixbuf *pixbuf = gtk_icon_info_load_icon(icon->info, &error);
118 icon->pixbuf = pixbuf; 127 icon->pixbuf = pixbuf;
119 } 128 }
120 g_value_init(&pixbufvalue, G_TYPE_OBJECT); 129 g_value_init(&pixbufvalue, G_TYPE_OBJECT);
121 g_value_set_object(&pixbufvalue, icon->pixbuf); 130 g_value_set_object(&pixbufvalue, icon->pixbuf);
122 gtk_list_store_set_value(store, &iter, c, &pixbufvalue); 131 gtk_list_store_set_value(store, &iter, c, &pixbufvalue);
132 #endif
123 c++; 133 c++;
124
125 char *str = model->getvalue(elm, c);
126 g_value_init(&value, G_TYPE_STRING); 134 g_value_init(&value, G_TYPE_STRING);
127 g_value_set_string(&value, str); 135 g_value_set_string(&value, str);
128 if(model->types[i] == UI_ICON_TEXT_FREE) { 136 if(model->types[i] == UI_ICON_TEXT_FREE) {
129 free(str); 137 free(str);
130 } 138 }
203 G_CALLBACK(ui_listview_activate_event), 211 G_CALLBACK(ui_listview_activate_event),
204 event); 212 event);
205 } 213 }
206 214
207 // add widget to the current container 215 // add widget to the current container
208 GtkWidget *scroll_area = gtk_scrolled_window_new(NULL, NULL); 216 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
209 gtk_scrolled_window_set_policy( 217 gtk_scrolled_window_set_policy(
210 GTK_SCROLLED_WINDOW(scroll_area), 218 GTK_SCROLLED_WINDOW(scroll_area),
211 GTK_POLICY_AUTOMATIC, 219 GTK_POLICY_AUTOMATIC,
212 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS 220 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
213 gtk_container_add(GTK_CONTAINER(scroll_area), view); 221 SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
214 222
215 UI_APPLY_LAYOUT1(current, args); 223 UI_APPLY_LAYOUT1(current, args);
216 current->container->add(current->container, scroll_area, FALSE); 224 current->container->add(current->container, scroll_area, FALSE);
217 225
218 // ct->current should point to view, not scroll_area, to make it possible 226 // ct->current should point to view, not scroll_area, to make it possible
220 current->container->current = view; 228 current->container->current = view;
221 229
222 return scroll_area; 230 return scroll_area;
223 } 231 }
224 232
233 /*
225 static void drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer udata) { 234 static void drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer udata) {
226 printf("drag begin\n"); 235 printf("drag begin\n");
227 236
228 } 237 }
229 238
234 gpointer udata) 243 gpointer udata)
235 { 244 {
236 printf("drag end\n"); 245 printf("drag end\n");
237 246
238 } 247 }
239 248 */
249
250 /*
240 static GtkTargetEntry targetentries[] = 251 static GtkTargetEntry targetentries[] =
241 { 252 {
242 { "STRING", 0, 0 }, 253 { "STRING", 0, 0 },
243 { "text/plain", 0, 1 }, 254 { "text/plain", 0, 1 },
244 { "text/uri-list", 0, 2 }, 255 { "text/uri-list", 0, 2 },
245 }; 256 };
257 */
246 258
247 UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) { 259 UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
248 UiObject* current = uic_current_obj(obj); 260 UiObject* current = uic_current_obj(obj);
249 261
250 // create treeview 262 // create treeview
354 366
355 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); 367 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
356 gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); 368 gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
357 369
358 // add widget to the current container 370 // add widget to the current container
359 GtkWidget *scroll_area = gtk_scrolled_window_new(NULL, NULL); 371 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
360 gtk_scrolled_window_set_policy( 372 gtk_scrolled_window_set_policy(
361 GTK_SCROLLED_WINDOW(scroll_area), 373 GTK_SCROLLED_WINDOW(scroll_area),
362 GTK_POLICY_AUTOMATIC, 374 GTK_POLICY_AUTOMATIC,
363 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS 375 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
364 gtk_container_add(GTK_CONTAINER(scroll_area), view); 376 SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
365 377
366 UI_APPLY_LAYOUT1(current, args); 378 UI_APPLY_LAYOUT1(current, args);
367 current->container->add(current->container, scroll_area, FALSE); 379 current->container->add(current->container, scroll_area, FALSE);
368 380
369 // ct->current should point to view, not scroll_area, to make it possible 381 // ct->current should point to view, not scroll_area, to make it possible
373 return scroll_area; 385 return scroll_area;
374 } 386 }
375 387
376 388
377 GtkWidget* ui_get_tree_widget(UIWIDGET widget) { 389 GtkWidget* ui_get_tree_widget(UIWIDGET widget) {
378 GList *c = gtk_container_get_children(GTK_CONTAINER(widget)); 390 return SCROLLEDWINDOW_GET_CHILD(widget);
379 if(c) {
380 return c->data;
381 }
382 return NULL;
383 } 391 }
384 392
385 static char** targets2array(char *target0, va_list ap, int *nelm) { 393 static char** targets2array(char *target0, va_list ap, int *nelm) {
386 int al = 16; 394 int al = 16;
387 char **targets = calloc(16, sizeof(char*)); 395 char **targets = calloc(16, sizeof(char*));
400 408
401 *nelm = i; 409 *nelm = i;
402 return targets; 410 return targets;
403 } 411 }
404 412
413 /*
405 static GtkTargetEntry* targetstr2gtktargets(char **str, int nelm) { 414 static GtkTargetEntry* targetstr2gtktargets(char **str, int nelm) {
406 GtkTargetEntry *targets = calloc(nelm, sizeof(GtkTargetEntry)); 415 GtkTargetEntry *targets = calloc(nelm, sizeof(GtkTargetEntry));
407 for(int i=0;i<nelm;i++) { 416 for(int i=0;i<nelm;i++) {
408 targets[i].target = str[i]; 417 targets[i].target = str[i];
409 } 418 }
410 return targets; 419 return targets;
411 } 420 }
421 */
412 422
413 void ui_table_dragsource(UIWIDGET tablewidget, int actions, char *target0, ...) { 423 void ui_table_dragsource(UIWIDGET tablewidget, int actions, char *target0, ...) {
414 va_list ap; 424 va_list ap;
415 va_start(ap, target0); 425 va_start(ap, target0);
416 int nelm; 426 int nelm;

mercurial