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 |
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 |
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; |