void gui_init(dt_lib_module_t *self) { /* initialize ui widgets */ dt_lib_viewswitcher_t *d = (dt_lib_viewswitcher_t *)g_malloc(sizeof(dt_lib_viewswitcher_t)); self->data = (void *)d; memset(d,0,sizeof(dt_lib_viewswitcher_t)); self->widget = gtk_hbox_new(FALSE,5); for (int k=0; k<darktable.view_manager->num_views; k++) { if (darktable.view_manager->view[k].module) { /* create view label */ dt_view_t *v = &darktable.view_manager->view[k]; GtkWidget *w = _lib_viewswitcher_create_label(v); gtk_box_pack_start(GTK_BOX(self->widget),w,FALSE,FALSE,0); /* create space if more views */ if (k < darktable.view_manager->num_views-1) { GtkWidget *w = gtk_label_new("<span color=\"#7f7f7f\"><big><big><b>|</b></big></big></span>"); gtk_misc_set_alignment(GTK_MISC(w), 0, 0.5); gtk_label_set_use_markup(GTK_LABEL(w), TRUE); gtk_widget_set_name(w,"view_label"); gtk_box_pack_start(GTK_BOX(self->widget),w,FALSE,FALSE,5); } } } /* connect callback to view change signal */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED, G_CALLBACK(_lib_viewswitcher_view_changed_callback), self); }
void gui_init(dt_lib_module_t *self) { /* initialize ui widgets */ dt_lib_viewswitcher_t *d = (dt_lib_viewswitcher_t *)g_malloc0(sizeof(dt_lib_viewswitcher_t)); self->data = (void *)d; self->widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DT_PIXEL_APPLY_DPI(5)); d->dropdown = NULL; GtkTreeIter iter; GtkListStore *model = NULL; for(int k = 0; k < darktable.view_manager->num_views; k++) { if(darktable.view_manager->view[k].module) { // lighttable and darkroom are shown in the top level, the rest in a dropdown /* create view label */ dt_view_t *v = &darktable.view_manager->view[k]; if(!g_strcmp0(v->module_name, "lighttable") || !g_strcmp0(v->module_name, "darkroom")) { GtkWidget *w = _lib_viewswitcher_create_label(v); gtk_box_pack_start(GTK_BOX(self->widget), w, FALSE, FALSE, 0); d->labels = g_list_append(d->labels, gtk_bin_get_child(GTK_BIN(w))); /* create space if more views */ if(k < darktable.view_manager->num_views - 1) { GtkWidget *w = gtk_label_new("|"); gtk_widget_set_halign(w, GTK_ALIGN_START); gtk_widget_set_name(w, "view_label"); gtk_box_pack_start(GTK_BOX(self->widget), w, FALSE, FALSE, DT_PIXEL_APPLY_DPI(5)); } } else { // only create the dropdown when needed, in case someone runs dt with just lt + dr if(!d->dropdown) { model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN); d->dropdown = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); gtk_widget_set_name(d->dropdown, "view_dropdown"); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(d->dropdown), renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(d->dropdown), renderer, "markup", TEXT_COLUMN, "sensitive", SENSITIVE_COLUMN, NULL); gtk_list_store_append(model, &iter); // char *italic = g_strdup_printf("<i>%s</i>", _("other")); gtk_list_store_set(model, &iter, TEXT_COLUMN, /*italic*/ _("other"), VIEW_COLUMN, 0, SENSITIVE_COLUMN, 0, -1); // g_free(italic); gtk_box_pack_start(GTK_BOX(self->widget), d->dropdown, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(d->dropdown), "changed", G_CALLBACK(_dropdown_changed), d); } gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, TEXT_COLUMN, v->name(v), VIEW_COLUMN, v->view(v), SENSITIVE_COLUMN, 1, -1); } } } if(model) g_object_unref(model); /* connect callback to view change signal */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED, G_CALLBACK(_lib_viewswitcher_view_changed_callback), self); }