34 #include <glib/gi18n.h> 39 #include "gnc-general-select.h" 40 #include "dialog-utils.h" 50 static void gnc_general_select_dispose (GObject *
object);
51 static void gnc_general_select_finalize (GObject *
object);
53 static guint general_select_signals[LAST_SIGNAL];
58 gnc_general_select_forall (GtkContainer *container, gboolean include_internals,
59 GtkCallback callback, gpointer callback_data)
61 g_return_if_fail (container != NULL);
62 g_return_if_fail (GNC_IS_GENERAL_SELECT (container));
63 g_return_if_fail (callback != NULL);
67 if (!include_internals)
70 if (!GTK_CONTAINER_CLASS (gnc_general_select_parent_class)->forall)
73 GTK_CONTAINER_CLASS (gnc_general_select_parent_class)->forall (container,
82 GObjectClass *object_class = (GObjectClass *) klass;
83 GtkContainerClass *container_class = (GtkContainerClass *) klass;
85 object_class = (GObjectClass*) klass;
87 general_select_signals[SELECTION_CHANGED] =
88 g_signal_new(
"changed",
89 G_TYPE_FROM_CLASS(object_class),
94 g_cclosure_marshal_VOID__VOID,
97 container_class->forall = gnc_general_select_forall;
99 object_class->dispose = gnc_general_select_dispose;
100 object_class->finalize = gnc_general_select_finalize;
102 klass->changed = NULL;
108 gtk_orientable_set_orientation (GTK_ORIENTABLE(gsl), GTK_ORIENTATION_HORIZONTAL);
111 gtk_widget_set_name (GTK_WIDGET(gsl),
"gnc-id-general-select");
113 gsl->disposed = FALSE;
114 gsl->selected_item = NULL;
118 gnc_general_select_finalize (GObject *
object)
120 g_return_if_fail (
object != NULL);
121 g_return_if_fail (GNC_IS_GENERAL_SELECT (
object));
123 G_OBJECT_CLASS (gnc_general_select_parent_class)->finalize (
object);
127 gnc_general_select_dispose (GObject *
object)
131 g_return_if_fail (
object != NULL);
132 g_return_if_fail (GNC_IS_GENERAL_SELECT (
object));
134 gsl = GNC_GENERAL_SELECT (
object);
139 gsl->disposed = TRUE;
142 gtk_widget_destroy(GTK_WIDGET(gsl->entry));
145 gtk_widget_destroy(GTK_WIDGET(gsl->button));
148 G_OBJECT_CLASS (gnc_general_select_parent_class)->dispose (
object);
152 select_cb(GtkButton * button, gpointer user_data)
155 gpointer new_selection;
158 toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
160 new_selection = (gsl->new_select)(gsl->cb_arg, gsl->selected_item,
164 if (new_selection == NULL)
167 gnc_general_select_set_selected (gsl, new_selection);
173 gsl->entry = gtk_entry_new ();
174 gtk_editable_set_editable (GTK_EDITABLE (gsl->entry), FALSE);
175 gtk_box_pack_start (GTK_BOX (gsl), gsl->entry, TRUE, TRUE, 0);
176 gtk_widget_show (gsl->entry);
178 if (type == GNC_GENERAL_SELECT_TYPE_SELECT)
179 gsl->button = gtk_button_new_with_label (_(
"Select…"));
180 else if (type == GNC_GENERAL_SELECT_TYPE_EDIT)
181 gsl->button = gtk_button_new_with_label (_(
"Edit…"));
182 else if (type == GNC_GENERAL_SELECT_TYPE_VIEW)
183 gsl->button = gtk_button_new_with_label (_(
"View…"));
185 gtk_box_pack_start (GTK_BOX (gsl), gsl->button, FALSE, FALSE, 0);
186 g_signal_connect (G_OBJECT (gsl->button),
"clicked",
187 G_CALLBACK (select_cb), gsl);
188 gtk_widget_show (gsl->button);
200 gnc_general_select_new (GNCGeneralSelectType type,
201 GNCGeneralSelectGetStringCB get_string,
202 GNCGeneralSelectNewSelectCB new_select,
206 g_return_val_if_fail (get_string != NULL, NULL);
207 g_return_val_if_fail (new_select != NULL, NULL);
209 gsl = g_object_new(GNC_TYPE_GENERAL_SELECT, NULL, NULL);
211 create_children (gsl, type);
212 gsl->get_string = get_string;
213 gsl->new_select = new_select;
214 gsl->cb_arg = cb_arg;
216 return GTK_WIDGET (gsl);
227 gnc_general_select_get_printname (
GNCGeneralSelect *gsl, gpointer selection)
229 g_return_val_if_fail (gsl != NULL, NULL);
230 g_return_val_if_fail (selection != NULL, NULL);
232 return (gsl->get_string)(selection);
249 g_return_if_fail(gsl != NULL);
250 g_return_if_fail(GNC_IS_GENERAL_SELECT(gsl));
252 gsl->selected_item = selection;
254 if (selection == NULL)
257 text = gnc_general_select_get_printname(gsl, selection);
259 gtk_entry_set_text(GTK_ENTRY(gsl->entry), text);
261 g_signal_emit(gsl, general_select_signals[SELECTION_CHANGED], 0);
273 g_return_val_if_fail(gsl != NULL, NULL);
274 g_return_val_if_fail(GNC_IS_GENERAL_SELECT(gsl), NULL);
276 return gsl->selected_item;
288 gnc_general_select_make_mnemonic_target (
GNCGeneralSelect *gsl, GtkWidget *label)
290 g_return_if_fail(gsl);
291 g_return_if_fail(GNC_IS_GENERAL_SELECT(gsl));
292 g_return_if_fail(label);
294 gtk_label_set_mnemonic_widget (GTK_LABEL(label), gsl->entry);