static GtkWidget * create_duplicate_contact_detected_dialog (EContact *old_contact, EContact *new_contact, gboolean disable_merge, gboolean is_for_commit) { GtkWidget *widget, *scrolled; GtkContainer *container; GtkDialog *dialog; const gchar *text; widget = gtk_dialog_new (); dialog = GTK_DIALOG (widget); g_object_set ( G_OBJECT (dialog), "title", _("Duplicate Contact Detected"), "default-width", 500, "default-height", 400, NULL); gtk_dialog_add_action_widget (dialog, e_dialog_button_new_with_icon ("process-stop", _("_Cancel")), GTK_RESPONSE_CANCEL); if (is_for_commit) { gtk_dialog_add_action_widget (dialog, e_dialog_button_new_with_icon ("document-save", _("_Save")), GTK_RESPONSE_OK); } else { gtk_dialog_add_action_widget (dialog, e_dialog_button_new_with_icon ("list-add", _("_Add")), GTK_RESPONSE_OK); gtk_dialog_add_action_widget (dialog, e_dialog_button_new_with_icon (NULL, _("_Merge")), GTK_RESPONSE_APPLY); } if (disable_merge) gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, FALSE); container = GTK_CONTAINER (gtk_dialog_get_content_area (dialog)); widget = gtk_grid_new (); g_object_set ( G_OBJECT (widget), "orientation", GTK_ORIENTATION_HORIZONTAL, "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, "margin", 12, NULL); gtk_container_add (container, widget); container = GTK_CONTAINER (widget); widget = gtk_image_new_from_icon_name ("avatar-default", GTK_ICON_SIZE_BUTTON); g_object_set ( G_OBJECT (widget), "hexpand", FALSE, "halign", GTK_ALIGN_START, "vexpand", FALSE, "valign", GTK_ALIGN_START, "margin-right", 12, NULL); gtk_container_add (container, widget); widget = gtk_grid_new (); g_object_set ( G_OBJECT (widget), "orientation", GTK_ORIENTATION_VERTICAL, "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, NULL); gtk_container_add (container, widget); container = GTK_CONTAINER (widget); if (is_for_commit) text = _("The name or email address of this contact already exists\n" "in this folder. Would you like to save the changes anyway?"); else text = _("The name or email address of this contact already exists\n" "in this folder. Would you like to add it anyway?"); widget = gtk_label_new (text); g_object_set ( G_OBJECT (widget), "hexpand", FALSE, "halign", GTK_ALIGN_START, "vexpand", FALSE, "valign", GTK_ALIGN_START, "margin-bottom", 6, NULL); gtk_container_add (container, widget); if (is_for_commit) text = _("Changed Contact:"); else text = _("New Contact:"); widget = gtk_label_new (text); g_object_set ( G_OBJECT (widget), "hexpand", FALSE, "halign", GTK_ALIGN_START, "vexpand", FALSE, "valign", GTK_ALIGN_START, "margin-bottom", 6, NULL); gtk_container_add (container, widget); scrolled = gtk_scrolled_window_new (NULL, NULL); g_object_set ( G_OBJECT (scrolled), "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "hscrollbar-policy", GTK_POLICY_AUTOMATIC, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, "vscrollbar-policy", GTK_POLICY_AUTOMATIC, "margin-bottom", 6, NULL); gtk_container_add (container, scrolled); widget = eab_contact_display_new (); g_object_set ( G_OBJECT (widget), "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, "contact", new_contact, "mode", EAB_CONTACT_DISPLAY_RENDER_COMPACT, NULL); gtk_container_add (GTK_CONTAINER (scrolled), widget); if (is_for_commit) text = _("Conflicting Contact:"); else text = _("Old Contact:"); widget = gtk_label_new (text); g_object_set ( G_OBJECT (widget), "hexpand", FALSE, "halign", GTK_ALIGN_START, "vexpand", FALSE, "valign", GTK_ALIGN_START, "margin-bottom", 6, NULL); gtk_container_add (container, widget); scrolled = gtk_scrolled_window_new (NULL, NULL); g_object_set ( G_OBJECT (scrolled), "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "hscrollbar-policy", GTK_POLICY_AUTOMATIC, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, "vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL); gtk_container_add (container, scrolled); widget = eab_contact_display_new (); g_object_set ( G_OBJECT (widget), "hexpand", TRUE, "halign", GTK_ALIGN_FILL, "vexpand", TRUE, "valign", GTK_ALIGN_FILL, "contact", old_contact, "mode", EAB_CONTACT_DISPLAY_RENDER_COMPACT, NULL); gtk_container_add (GTK_CONTAINER (scrolled), widget); gtk_widget_show_all (gtk_dialog_get_content_area (dialog)); return GTK_WIDGET (dialog); }
GtkWidget * e_plugin_lib_get_configure_widget (EPlugin *plugin) { GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkTreeIter iter; GtkWidget *hbox; gchar **clue_list; gint i; GtkWidget *reminder_configuration_box; GtkWidget *clue_container; GtkWidget *scrolledwindow1; GtkWidget *clue_treeview; GtkWidget *vbuttonbox2; GtkWidget *clue_add; GtkWidget *clue_edit; GtkWidget *clue_remove; UIData *ui = g_new0 (UIData, 1); reminder_configuration_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_widget_show (reminder_configuration_box); gtk_widget_set_size_request (reminder_configuration_box, 385, 189); clue_container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_widget_show (clue_container); gtk_box_pack_start ( GTK_BOX (reminder_configuration_box), clue_container, TRUE, TRUE, 0); scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow1); gtk_box_pack_start (GTK_BOX (clue_container), scrolledwindow1, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); clue_treeview = gtk_tree_view_new (); gtk_widget_show (clue_treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow1), clue_treeview); gtk_container_set_border_width (GTK_CONTAINER (clue_treeview), 1); vbuttonbox2 = gtk_button_box_new (GTK_ORIENTATION_VERTICAL); gtk_widget_show (vbuttonbox2); gtk_box_pack_start (GTK_BOX (clue_container), vbuttonbox2, FALSE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox2), GTK_BUTTONBOX_START); gtk_box_set_spacing (GTK_BOX (vbuttonbox2), 6); clue_add = e_dialog_button_new_with_icon ("list-add", _("_Add")); gtk_widget_show (clue_add); gtk_container_add (GTK_CONTAINER (vbuttonbox2), clue_add); gtk_widget_set_can_default (clue_add, TRUE); clue_edit = gtk_button_new_with_mnemonic (_("_Edit")); gtk_widget_show (clue_edit); gtk_container_add (GTK_CONTAINER (vbuttonbox2), clue_edit); gtk_widget_set_can_default (clue_edit, TRUE); clue_remove = e_dialog_button_new_with_icon ("list-remove", _("_Remove")); gtk_widget_show (clue_remove); gtk_container_add (GTK_CONTAINER (vbuttonbox2), clue_remove); gtk_widget_set_can_default (clue_remove, TRUE); ui->settings = e_util_ref_settings ("org.gnome.evolution.plugin.attachment-reminder"); ui->treeview = clue_treeview; ui->store = gtk_list_store_new (CLUE_N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model ( GTK_TREE_VIEW (ui->treeview), GTK_TREE_MODEL (ui->store)); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes ( GTK_TREE_VIEW (ui->treeview), -1, _("Keywords"), renderer, "text", CLUE_KEYWORD_COLUMN, NULL); g_object_set (renderer, "editable", TRUE, NULL); g_signal_connect ( renderer, "edited", G_CALLBACK (cell_edited_cb), ui); g_signal_connect ( renderer, "editing-canceled", G_CALLBACK (cell_editing_canceled_cb), ui); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ui->treeview)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect ( selection, "changed", G_CALLBACK (selection_changed), ui); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (ui->treeview), TRUE); ui->clue_add = clue_add; g_signal_connect ( ui->clue_add, "clicked", G_CALLBACK (clue_add_clicked), ui); ui->clue_remove = clue_remove; g_signal_connect ( ui->clue_remove, "clicked", G_CALLBACK (clue_remove_clicked), ui); gtk_widget_set_sensitive (ui->clue_remove, FALSE); ui->clue_edit = clue_edit; g_signal_connect ( ui->clue_edit, "clicked", G_CALLBACK (clue_edit_clicked), ui); gtk_widget_set_sensitive (ui->clue_edit, FALSE); /* Populate tree view with values from GSettings */ clue_list = g_settings_get_strv (ui->settings, CONF_KEY_ATTACH_REMINDER_CLUES); for (i = 0; clue_list[i] != NULL; i++) { gtk_list_store_append (ui->store, &iter); gtk_list_store_set (ui->store, &iter, CLUE_KEYWORD_COLUMN, clue_list[i], -1); } g_strfreev (clue_list); /* Add the list here */ hbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (hbox), reminder_configuration_box, TRUE, TRUE, 0); /* to let free data properly on destroy of configuration widget */ g_object_set_data_full (G_OBJECT (hbox), "myui-data", ui, destroy_ui_data); return hbox; }
static void source_viewer_constructed (GObject *object) { ESourceViewer *viewer; GtkTreeViewColumn *column; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkWidget *container; GtkWidget *paned; GtkWidget *widget; PangoAttribute *attr; PangoAttrList *bold; PangoFontDescription *desc; GIcon *icon; const gchar *title; gchar *font_name; gint page_num; viewer = E_SOURCE_VIEWER (object); /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (e_source_viewer_parent_class)->constructed (object); bold = pango_attr_list_new (); attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD); pango_attr_list_insert (bold, attr); title = _("Evolution Source Viewer"); gtk_window_set_title (GTK_WINDOW (viewer), title); gtk_window_set_default_size (GTK_WINDOW (viewer), 800, 600); paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); gtk_paned_set_position (GTK_PANED (paned), 400); gtk_container_add (GTK_CONTAINER (viewer), paned); gtk_widget_show (paned); /* Left panel */ widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_paned_add1 (GTK_PANED (paned), widget); gtk_widget_show (widget); container = widget; widget = gtk_tree_view_new_with_model ( GTK_TREE_MODEL (viewer->tree_store)); gtk_container_add (GTK_CONTAINER (container), widget); viewer->tree_view = widget; /* do not reference */ gtk_widget_show (widget); column = gtk_tree_view_column_new (); /* Translators: The name that is displayed in the user interface */ gtk_tree_view_column_set_title (column, _("Display Name")); gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_add_attribute ( column, renderer, "text", COLUMN_DISPLAY_NAME); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Flags")); gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set ( renderer, "icon-name", "media-record", "stock-size", GTK_ICON_SIZE_MENU, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute ( column, renderer, "visible", COLUMN_WRITABLE); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set ( renderer, "icon-name", "list-remove", "stock-size", GTK_ICON_SIZE_MENU, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute ( column, renderer, "visible", COLUMN_REMOVABLE); icon = source_view_new_remote_creatable_icon (); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set ( renderer, "gicon", icon, "stock-size", GTK_ICON_SIZE_MENU, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute ( column, renderer, "visible", COLUMN_REMOTE_CREATABLE); g_object_unref (icon); icon = source_view_new_remote_deletable_icon (); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set ( renderer, "gicon", icon, "stock-size", GTK_ICON_SIZE_MENU, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute ( column, renderer, "visible", COLUMN_REMOTE_DELETABLE); g_object_unref (icon); /* Append an empty pixbuf renderer to fill leftover space. */ renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Identity")); gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute ( column, renderer, "text", COLUMN_SOURCE_UID); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); /* Right panel */ widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_paned_add2 (GTK_PANED (paned), widget); gtk_widget_show (widget); container = widget; widget = gtk_notebook_new (); gtk_widget_set_margin_top (widget, 3); gtk_widget_set_margin_right (widget, 3); gtk_widget_set_margin_bottom (widget, 3); /* leave left margin at zero */ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE); gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE); gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); viewer->top_panel = widget; /* do not reference */ gtk_widget_show (widget); widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); gtk_widget_show (widget); container = widget; widget = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (widget), FALSE); gtk_container_add (GTK_CONTAINER (container), widget); viewer->text_view = widget; /* do not reference */ gtk_widget_show (widget); font_name = source_viewer_get_monospace_font_name (); desc = pango_font_description_from_string (font_name); gtk_widget_override_font (widget, desc); pango_font_description_free (desc); g_free (font_name); /* Top panel: Viewing */ container = viewer->top_panel; widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); page_num = gtk_notebook_append_page ( GTK_NOTEBOOK (container), widget, NULL); g_warn_if_fail (page_num == PAGE_VIEWING); gtk_widget_show (widget); container = widget; widget = gtk_label_new ("Identity:"); gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); gtk_widget_show (widget); widget = gtk_label_new (NULL); gtk_label_set_attributes (GTK_LABEL (widget), bold); gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); gtk_label_set_selectable (GTK_LABEL (widget), TRUE); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); viewer->viewing_label = widget; /* do not reference */ gtk_widget_show (widget); widget = e_dialog_button_new_with_icon ("edit-delete", _("_Delete")); gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0); viewer->delete_button = widget; /* do not reference */ gtk_widget_hide (widget); /* Top panel: Deleting */ container = viewer->top_panel; widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); page_num = gtk_notebook_append_page ( GTK_NOTEBOOK (container), widget, NULL); g_warn_if_fail (page_num == PAGE_DELETING); gtk_widget_show (widget); container = widget; widget = gtk_label_new ("Deleting"); gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); gtk_widget_show (widget); widget = gtk_label_new (NULL); gtk_label_set_attributes (GTK_LABEL (widget), bold); gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); viewer->deleting_label = widget; /* do not reference */ gtk_widget_show (widget); widget = e_dialog_button_new_with_icon ("process-stop", _("_Cancel")); gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0); viewer->deleting_cancel = widget; /* do not reference */ gtk_widget_show (widget); pango_attr_list_unref (bold); g_signal_connect ( selection, "changed", G_CALLBACK (source_viewer_selection_changed_cb), viewer); g_signal_connect ( viewer->delete_button, "clicked", G_CALLBACK (source_viewer_delete_button_clicked_cb), viewer); g_signal_connect ( viewer->deleting_cancel, "clicked", G_CALLBACK (source_viewer_deleting_cancel_clicked_cb), viewer); }