2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * merge_properties.c: document merge properties dialog module
6 * Copyright (C) 2001 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "merge-properties.h"
33 /*===========================================*/
34 /* Private data types */
35 /*===========================================*/
43 GtkWidget *type_entry;
50 } PropertyDialogPassback;
52 /*===========================================*/
54 /*===========================================*/
56 /*===========================================*/
57 /* Local function prototypes */
58 /*===========================================*/
60 static void create_merge_dialog_widgets (GtkDialog * dialog,
61 PropertyDialogPassback * data);
63 static void type_changed_cb (GtkWidget * widget, PropertyDialogPassback * data);
64 static void src_changed_cb (GtkWidget * widget, PropertyDialogPassback * data);
66 static void response_cb (GtkDialog * dialog, gint response,
67 PropertyDialogPassback * data);
69 /****************************************************************************/
70 /* Launch merge properties dialog. */
71 /****************************************************************************/
73 gl_merge_properties_dialog (glView * view)
75 static PropertyDialogPassback *data = NULL;
77 BonoboWindow *win = glabels_get_active_window ();
80 data = g_new0 (PropertyDialogPassback, 1);
83 dialog = gtk_dialog_new_with_buttons (
84 _("Edit document-merge properties"),
86 GTK_DIALOG_DESTROY_WITH_PARENT,
87 GTK_STOCK_OK, GTK_RESPONSE_OK,
88 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
91 data->dialog = dialog;
93 data->label = view->label;
95 data->type_entry = NULL;
96 data->src_entry = NULL;
97 data->field_ws = NULL;
99 create_merge_dialog_widgets (GTK_DIALOG (dialog), data);
101 g_signal_connect (G_OBJECT(dialog), "response",
102 G_CALLBACK(response_cb), data);
104 gtk_widget_show_all (GTK_WIDGET (dialog));
108 /*--------------------------------------------------------------------------*/
109 /* PRIVATE. Create and add start page to druid. */
110 /*--------------------------------------------------------------------------*/
112 create_merge_dialog_widgets (GtkDialog * dialog,
113 PropertyDialogPassback * data)
115 GtkWidget *wvbox, *wframe, *whbox, *wtable, *wlabel, *wcombo, *wscroll;
122 merge = gl_label_get_merge (data->label);
125 fields = merge->field_defs;
126 gl_merge_free (&merge);
128 wvbox = dialog->vbox;
130 wframe = gtk_frame_new (_("Source"));
131 gtk_box_pack_start (GTK_BOX (wvbox), wframe, FALSE, FALSE, 0);
133 whbox = gtk_hbox_new (FALSE, GNOME_PAD);
134 gtk_container_add (GTK_CONTAINER (wframe), whbox);
136 wtable = gtk_table_new (2, 2, FALSE);
137 gtk_container_set_border_width (GTK_CONTAINER (wtable), 10);
138 gtk_table_set_row_spacings (GTK_TABLE (wtable), 5);
139 gtk_table_set_col_spacings (GTK_TABLE (wtable), 5);
140 gtk_box_pack_start (GTK_BOX (whbox), wtable, FALSE, FALSE, GNOME_PAD);
142 wlabel = gtk_label_new (_("Format:"));
143 gtk_misc_set_alignment (GTK_MISC (wlabel), 0, 0.5);
144 gtk_table_attach_defaults (GTK_TABLE (wtable), wlabel, 0, 1, 0, 1);
146 wcombo = gtk_combo_new ();
147 gtk_widget_set_usize (wcombo, 400, -1);
148 texts = gl_merge_get_long_texts_list ();
149 gtk_combo_set_popdown_strings (GTK_COMBO (wcombo), texts);
150 gl_merge_free_long_texts_list (&texts);
151 data->type_entry = GTK_COMBO (wcombo)->entry;
152 gtk_entry_set_editable (GTK_ENTRY (data->type_entry), FALSE);
153 gtk_table_attach_defaults (GTK_TABLE (wtable), wcombo, 1, 2, 0, 1);
154 gtk_entry_set_text (GTK_ENTRY (data->type_entry),
155 gl_merge_type_to_long_text (type));
157 wlabel = gtk_label_new (_("Location:"));
158 gtk_misc_set_alignment (GTK_MISC (wlabel), 0, 0.5);
159 gtk_table_attach_defaults (GTK_TABLE (wtable), wlabel, 0, 1, 1, 2);
161 data->src_entry = gl_merge_ui_src_new ();
162 gtk_table_attach_defaults (GTK_TABLE (wtable), data->src_entry, 1, 2, 1,
164 gl_merge_ui_src_set_type (GL_MERGE_UI_SRC (data->src_entry), type);
165 gl_merge_ui_src_set_value (GL_MERGE_UI_SRC (data->src_entry), src);
167 wframe = gtk_frame_new (_("Fields"));
168 gtk_box_pack_start (GTK_BOX (wvbox), wframe, FALSE, FALSE, 0);
170 wscroll = gtk_scrolled_window_new (NULL, NULL);
171 gtk_container_set_border_width (GTK_CONTAINER (wscroll), 5);
172 gtk_widget_set_usize (wscroll, 500, 300);
173 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wscroll),
174 GTK_POLICY_AUTOMATIC,
175 GTK_POLICY_AUTOMATIC);
176 gtk_container_add (GTK_CONTAINER (wframe), wscroll);
178 data->field_ws = gl_merge_ui_field_ws_new ();
179 gtk_container_set_border_width (GTK_CONTAINER (data->field_ws), 10);
180 gl_merge_ui_field_ws_set_type_src (GL_MERGE_UI_FIELD_WS
181 (data->field_ws), type, src);
182 gl_merge_ui_field_ws_set_field_defs (GL_MERGE_UI_FIELD_WS
183 (data->field_ws), fields);
184 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (wscroll),
187 g_signal_connect (G_OBJECT (data->type_entry), "changed",
188 G_CALLBACK (type_changed_cb), data);
189 g_signal_connect (G_OBJECT (data->src_entry), "changed",
190 G_CALLBACK (src_changed_cb), data);
194 /*--------------------------------------------------------------------------*/
195 /* PRIVATE. type "changed" callback. */
196 /*--------------------------------------------------------------------------*/
198 type_changed_cb (GtkWidget * widget,
199 PropertyDialogPassback * data)
204 type_text = gtk_editable_get_chars (GTK_EDITABLE (data->type_entry),
206 type = gl_merge_long_text_to_type (type_text);
209 gl_merge_ui_src_set_type (GL_MERGE_UI_SRC (data->src_entry), type);
212 /*--------------------------------------------------------------------------*/
213 /* PRIVATE. source "changed" callback. */
214 /*--------------------------------------------------------------------------*/
216 src_changed_cb (GtkWidget * widget,
217 PropertyDialogPassback * data)
220 gchar *type_text, *src;
222 type_text = gtk_editable_get_chars (GTK_EDITABLE (data->type_entry),
224 type = gl_merge_long_text_to_type (type_text);
227 src = gl_merge_ui_src_get_value (GL_MERGE_UI_SRC (data->src_entry));
228 gl_merge_ui_field_ws_set_type_src (GL_MERGE_UI_FIELD_WS
229 (data->field_ws), type, src);
232 /*--------------------------------------------------------------------------*/
233 /* PRIVATE. response callback. */
234 /*--------------------------------------------------------------------------*/
236 response_cb (GtkDialog * dialog,
238 PropertyDialogPassback * data)
245 case GTK_RESPONSE_OK:
247 merge = gl_merge_new();
250 gtk_editable_get_chars (GTK_EDITABLE (data->type_entry),
252 merge->type = gl_merge_long_text_to_type (type_text);
256 gl_merge_ui_src_get_value (GL_MERGE_UI_SRC (data->src_entry));
259 gl_merge_ui_field_ws_get_field_defs (GL_MERGE_UI_FIELD_WS
262 gl_label_set_merge (data->label, merge);
264 gl_merge_free (&merge);
269 gtk_widget_destroy (data->dialog);