static void bar_pane_exif_conf_dialog(GtkWidget *widget) { ConfDialogData *cdd; GenericDialog *gd; GtkWidget *table; /* the widget can be either ExifEntry (for editing) or Pane (for new entry) we can decide it by the attached data */ ExifEntry *ee = g_object_get_data(G_OBJECT(widget), "entry_data"); cdd = g_new0(ConfDialogData, 1); cdd->widget = widget; cdd->if_set = ee ? ee->if_set : TRUE; cdd->editable = ee ? ee->editable : FALSE; cdd->gd = gd = generic_dialog_new(ee ? _("Configure entry") : _("Add entry"), "exif_entry_edit", widget, TRUE, bar_pane_exif_edit_cancel_cb, cdd); g_signal_connect(G_OBJECT(gd->dialog), "destroy", G_CALLBACK(bar_pane_exif_edit_destroy_cb), cdd); /* in case the entry is deleted during editing */ g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(bar_pane_exif_edit_close_cb), gd); generic_dialog_add_message(gd, NULL, ee ? _("Configure entry") : _("Add entry"), NULL, FALSE); generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, bar_pane_exif_edit_ok_cb, TRUE); table = pref_table_new(gd->vbox, 3, 2, FALSE, TRUE); pref_table_label(table, 0, 0, _("Key:"), 1.0); cdd->key_entry = gtk_entry_new(); gtk_widget_set_size_request(cdd->key_entry, 300, -1); if (ee) gtk_entry_set_text(GTK_ENTRY(cdd->key_entry), ee->key); gtk_table_attach_defaults(GTK_TABLE(table), cdd->key_entry, 1, 2, 0, 1); generic_dialog_attach_default(gd, cdd->key_entry); gtk_widget_show(cdd->key_entry); pref_table_label(table, 0, 1, _("Title:"), 1.0); cdd->title_entry = gtk_entry_new(); gtk_widget_set_size_request(cdd->title_entry, 300, -1); if (ee) gtk_entry_set_text(GTK_ENTRY(cdd->title_entry), ee->title); gtk_table_attach_defaults(GTK_TABLE(table), cdd->title_entry, 1, 2, 1, 2); generic_dialog_attach_default(gd, cdd->title_entry); gtk_widget_show(cdd->title_entry); pref_checkbox_new_int(gd->vbox, _("Show only if set"), cdd->if_set, &cdd->if_set); pref_checkbox_new_int(gd->vbox, _("Editable (supported only for XMP)"), cdd->editable, &cdd->editable); gtk_widget_show(gd->dialog); }
void file_dialog_add_path_widgets(FileDialog *fdlg, const gchar *default_path, const gchar *path, const gchar *history_key, const gchar *filter, const gchar *filter_desc) { GtkWidget *tabcomp; GtkWidget *list; if (fdlg->entry) return; tabcomp = tab_completion_new_with_history(&fdlg->entry, NULL, history_key, -1, file_dialog_entry_enter_cb, fdlg); gtk_box_pack_end(GTK_BOX(GENERIC_DIALOG(fdlg)->vbox), tabcomp, FALSE, FALSE, 0); generic_dialog_attach_default(GENERIC_DIALOG(fdlg), fdlg->entry); gtk_widget_show(tabcomp); if (path && path[0] == G_DIR_SEPARATOR) { fdlg->dest_path = g_strdup(path); } else { const gchar *base; base = tab_completion_set_to_last_history(fdlg->entry); if (!base) base = default_path; if (!base) base = homedir(); if (path) { fdlg->dest_path = g_build_filename(base, path, NULL); } else { fdlg->dest_path = g_strdup(base); } } list = path_selection_new_with_files(fdlg->entry, fdlg->dest_path, filter, filter_desc); path_selection_add_select_func(fdlg->entry, file_dialog_entry_enter_cb, fdlg); gtk_box_pack_end(GTK_BOX(GENERIC_DIALOG(fdlg)->vbox), list, TRUE, TRUE, 0); gtk_widget_show(list); gtk_widget_grab_focus(fdlg->entry); if (fdlg->dest_path) { gtk_entry_set_text(GTK_ENTRY(fdlg->entry), fdlg->dest_path); gtk_editable_set_position(GTK_EDITABLE(fdlg->entry), strlen(fdlg->dest_path)); } g_signal_connect(G_OBJECT(fdlg->entry), "changed", G_CALLBACK(file_dialog_entry_cb), fdlg); }
static void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_existing) { ConfDialogData *cdd; GenericDialog *gd; GtkWidget *table; GtkWidget *group; GtkWidget *button; gchar *name = NULL; gboolean is_keyword = TRUE; if (edit_existing && pkd->click_tpath) { GtkTreeModel *model; GtkTreeIter iter; model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview)); if (gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) { gtk_tree_model_get(model, &iter, FILTER_KEYWORD_COLUMN_NAME, &name, FILTER_KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1); } else { return; } } if (edit_existing && !name) return; cdd = g_new0(ConfDialogData, 1); cdd->pkd =pkd; cdd->click_tpath = pkd->click_tpath; pkd->click_tpath = NULL; cdd->edit_existing = edit_existing; cdd->gd = gd = generic_dialog_new(name ? _("Edit keyword") : _("Add keywords"), "keyword_edit", pkd->widget, TRUE, bar_pane_keywords_edit_cancel_cb, cdd); g_signal_connect(G_OBJECT(gd->dialog), "destroy", G_CALLBACK(bar_pane_keywords_edit_destroy_cb), cdd); generic_dialog_add_message(gd, NULL, name ? _("Configure keyword") : _("Add keyword"), NULL); generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, bar_pane_keywords_edit_ok_cb, TRUE); table = pref_table_new(gd->vbox, 3, 1, FALSE, TRUE); pref_table_label(table, 0, 0, _("Keyword:"), 1.0); cdd->edit_widget = gtk_entry_new(); gtk_widget_set_size_request(cdd->edit_widget, 300, -1); if (name) gtk_entry_set_text(GTK_ENTRY(cdd->edit_widget), name); gtk_table_attach_defaults(GTK_TABLE(table), cdd->edit_widget, 1, 2, 0, 1); /* here could eventually be a text view instead of entry */ generic_dialog_attach_default(gd, cdd->edit_widget); gtk_widget_show(cdd->edit_widget); group = pref_group_new(gd->vbox, FALSE, _("Keyword type:"), GTK_ORIENTATION_VERTICAL); button = pref_radiobutton_new(group, NULL, _("Active keyword"), (is_keyword), G_CALLBACK(bar_pane_keywords_conf_set_kw), cdd); button = pref_radiobutton_new(group, button, _("Helper"), (!is_keyword), G_CALLBACK(bar_pane_keywords_conf_set_helper), cdd); cdd->is_keyword = is_keyword; g_free(name); gtk_widget_grab_focus(cdd->edit_widget); gtk_widget_show(gd->dialog); }