343 gtk_toolbar_insert(tb, item, -1); |
343 gtk_toolbar_insert(tb, item, -1); |
344 } |
344 } |
345 } |
345 } |
346 */ |
346 */ |
347 |
347 |
|
348 |
|
349 |
|
350 #ifdef UI_GTK3 |
|
351 |
|
352 GtkWidget* ui_create_headerbar(UiObject *obj) { |
|
353 GtkWidget *headerbar = gtk_header_bar_new(); |
|
354 |
|
355 CxMap *items = uic_get_toolbar_items(); |
|
356 CxList *left_defaults = uic_get_toolbar_defaults(UI_TOOLBAR_LEFT); |
|
357 CxList *center_defaults = uic_get_toolbar_defaults(UI_TOOLBAR_CENTER); |
|
358 CxList *right_defaults = uic_get_toolbar_defaults(UI_TOOLBAR_RIGHT); |
|
359 |
|
360 ui_headerbar_add_items(obj, headerbar, items, left_defaults); |
|
361 ui_headerbar_add_items(obj, headerbar, items, center_defaults); |
|
362 ui_headerbar_add_items(obj, headerbar, items, right_defaults); |
|
363 |
|
364 return headerbar; |
|
365 } |
|
366 |
|
367 static void hb_create_item(UiObject *obj, GtkWidget *toolbar, UiToolbarItemI *i) { |
|
368 GtkHeaderBar *tb = GTK_HEADER_BAR(toolbar); |
|
369 switch(i->type) { |
|
370 case UI_TOOLBAR_ITEM: { |
|
371 add_headerbar_item_widget(tb, (UiToolbarItem*)i, obj); |
|
372 break; |
|
373 } |
|
374 case UI_TOOLBAR_TOGGLEITEM: { |
|
375 add_headerbar_item_toggle_widget(tb, (UiToolbarToggleItem*)i, obj); |
|
376 break; |
|
377 } |
|
378 case UI_TOOLBAR_MENU: { |
|
379 add_headerbar_item_menu_widget(tb, (UiToolbarMenuItem*)i, obj); |
|
380 break; |
|
381 } |
|
382 default: fprintf(stderr, "toolbar item type unimplemented: %d\n", (int)i->type); |
|
383 } |
|
384 } |
|
385 |
|
386 |
|
387 void ui_headerbar_add_items(UiObject *obj, GtkWidget *headerbar, CxMap *items, CxList *defaults) { |
|
388 // add pre-configured items |
|
389 CxIterator i = cxListIterator(defaults); |
|
390 cx_foreach(char*, def, i) { |
|
391 UiToolbarItemI* item = uic_toolbar_get_item(def); |
|
392 if (!item) { |
|
393 fprintf(stderr, "unknown toolbar item: %s\n", def); |
|
394 continue; |
|
395 } |
|
396 hb_create_item(obj, headerbar, item); |
|
397 } |
|
398 } |
|
399 |
|
400 void add_headerbar_item_widget(GtkHeaderBar *hb, UiToolbarItem *item, UiObject *obj) { |
|
401 GtkWidget *button = gtk_button_new_with_label(item->args.label); |
|
402 if(item->args.icon) { |
|
403 ui_button_set_icon_name(button, item->args.icon); |
|
404 } |
|
405 |
|
406 gtk_header_bar_pack_start(hb, button); |
|
407 |
|
408 } |
|
409 |
|
410 void add_headerbar_item_toggle_widget(GtkHeaderBar *hb, UiToolbarToggleItem *item, UiObject *obj) { |
|
411 |
|
412 } |
|
413 |
|
414 void add_headerbar_item_menu_widget(GtkHeaderBar *hb, UiToolbarMenuItem *item, UiObject *obj) { |
|
415 |
|
416 } |
|
417 |
|
418 #endif |