29 #include <glib/gi18n.h> 33 #include "dialog-utils.h" 34 #include "gnc-component-manager.h" 36 #include "dialog-query-view.h" 37 #include "gnc-query-view.h" 44 GtkWidget * button_box;
46 const gchar * pref_group;
53 dqv_clear_booklist (DialogQueryView *dqv)
57 g_return_if_fail (dqv);
59 for (node = dqv->books; node; node = node->next)
60 guid_free ((
GncGUID*)node->data);
61 g_list_free (dqv->books);
66 dqv_build_booklist (DialogQueryView *dqv,
Query *q)
70 g_return_if_fail (dqv);
74 QofBook *book = node->data;
77 dqv->books = g_list_prepend(dqv->books, guid);
89 (cb->cb_fcn)(GTK_WINDOW (dqv->dialog), item, dqv->user_data);
93 gnc_dialog_query_view_button_clicked (GtkButton *button, DialogQueryView *dqv)
98 g_return_if_fail (dqv);
99 entry = gnc_query_view_get_selected_entry (GNC_QUERY_VIEW (dqv->qview));
103 cb = g_object_get_data (G_OBJECT (button),
"data");
104 g_return_if_fail (cb);
106 gnc_dialog_query_run_callback (cb, entry, dqv);
110 gnc_dialog_query_view_double_click_entry (GNCQueryView *qview, gpointer item,
113 DialogQueryView *dqv = user_data;
115 g_return_if_fail (dqv);
116 g_return_if_fail (item);
121 gnc_dialog_query_run_callback (dqv->buttons, item, dqv);
125 dqv_save_window_size (DialogQueryView *dqv)
127 g_return_if_fail (dqv);
130 gnc_save_window_size (dqv->pref_group, GTK_WINDOW(dqv->dialog));
134 gnc_dialog_query_view_delete_cb (GtkDialog *dialog, GdkEvent *event, DialogQueryView *dqv)
136 g_return_val_if_fail (dqv, TRUE);
138 dqv_save_window_size (dqv);
140 gnc_unregister_gui_component (dqv->component_id);
143 dqv_clear_booklist (dqv);
146 gtk_widget_destroy(dqv->dialog);
152 close_handler (gpointer data)
154 DialogQueryView *dqv = data;
156 g_return_if_fail (dqv);
157 gnc_dialog_query_view_delete_cb (GTK_DIALOG(dqv->dialog), NULL, dqv);
161 gnc_dialog_query_view_refresh_handler (GHashTable *changes, gpointer user_data)
163 DialogQueryView *dqv = (DialogQueryView *)user_data;
169 for (node = dqv->books; node; node = node->next)
171 info = gnc_gui_get_entity_events (changes, (
const GncGUID*)(node->data));
172 if (info && (info->event_mask & QOF_EVENT_DESTROY))
174 gnc_close_gui_component (dqv->component_id);
182 gnc_dialog_query_view_close (GtkButton *button, DialogQueryView *dqv)
184 dqv_save_window_size (dqv);
187 gnc_dialog_query_view_destroy (dqv);
191 dqv_window_key_press_cb (GtkWidget *widget, GdkEventKey *event,
194 DialogQueryView *dqv = user_data;
196 if (event->keyval == GDK_KEY_Escape)
197 dqv_save_window_size (dqv);
206 gnc_dialog_query_view_new (GtkWindow *parent, GList *param_list,
Query *q,
const gchar *pref_group)
209 DialogQueryView *dqv;
210 GtkWidget *result_hbox, *close, *scrollWin, *frame;
213 dqv = g_new0 (DialogQueryView, 1);
214 builder = gtk_builder_new();
215 gnc_builder_add_from_file (builder,
"dialog-query-view.glade",
"query_view_dialog");
216 dqv->pref_group = pref_group;
219 dqv->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"query_view_dialog"));
220 g_object_set_data (G_OBJECT (dqv->dialog),
"dialog-info", dqv);
221 gtk_window_set_transient_for(GTK_WINDOW(dqv->dialog), parent);
224 gtk_widget_set_name (GTK_WIDGET(dqv->dialog),
"gnc-id-query-view");
227 dqv->label = GTK_WIDGET(gtk_builder_get_object (builder,
"dialog_label"));
228 result_hbox = GTK_WIDGET(gtk_builder_get_object (builder,
"result_hbox"));
229 close = GTK_WIDGET(gtk_builder_get_object (builder,
"close_button"));
232 dqv->qview = gnc_query_view_new (param_list, q);
234 frame = gtk_frame_new(NULL);
236 scrollWin = gtk_scrolled_window_new (NULL, NULL);
237 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrollWin),
238 GTK_POLICY_AUTOMATIC,
239 GTK_POLICY_AUTOMATIC);
240 gtk_container_set_border_width(GTK_CONTAINER(scrollWin), 5);
242 gtk_container_add(GTK_CONTAINER(scrollWin), dqv->qview);
243 gtk_container_add(GTK_CONTAINER(frame), scrollWin);
245 gtk_box_pack_start (GTK_BOX (result_hbox), frame, TRUE, TRUE, 3);
248 dqv->button_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
249 gtk_box_set_homogeneous (GTK_BOX (dqv->button_box), FALSE);
251 gtk_box_pack_start (GTK_BOX (result_hbox), dqv->button_box, FALSE, FALSE, 3);
254 g_signal_connect (G_OBJECT (dqv->qview),
"double_click_entry",
255 G_CALLBACK(gnc_dialog_query_view_double_click_entry), dqv);
258 g_signal_connect (G_OBJECT (close),
"clicked",
259 G_CALLBACK (gnc_dialog_query_view_close), dqv);
262 g_signal_connect (G_OBJECT (dqv->dialog),
"delete_event",
263 G_CALLBACK (gnc_dialog_query_view_delete_cb), dqv);
266 dqv->component_id = gnc_register_gui_component (
"GNC Dialog Query View",
267 gnc_dialog_query_view_refresh_handler,
271 dqv_build_booklist (dqv, q);
274 for (node = dqv->books; node; node = node->next)
275 gnc_gui_component_watch_entity (dqv->component_id, (
GncGUID*)node->data,
278 g_signal_connect (G_OBJECT (dqv->dialog),
"key_press_event",
279 G_CALLBACK (dqv_window_key_press_cb), dqv);
282 gnc_restore_window_size (pref_group, GTK_WINDOW(dqv->dialog), GTK_WINDOW(parent));
285 g_object_unref(G_OBJECT(builder));
290 void gnc_dialog_query_view_set_title (DialogQueryView *dqv,
const char *title)
292 if (!dqv || !title)
return;
293 gtk_window_set_title (GTK_WINDOW (dqv->dialog), title);
296 void gnc_dialog_query_view_set_label (DialogQueryView *dqv,
const char *label)
298 if (!dqv || !label)
return;
299 gtk_label_set_text (GTK_LABEL(dqv->label), label);
302 void gnc_dialog_query_view_set_buttons (DialogQueryView *dqv,
309 if (!dqv || !buttons)
return;
310 g_return_if_fail (dqv->buttons == NULL);
312 dqv->buttons = buttons;
313 dqv->user_data = user_data;
316 for (i = 0; buttons[i].label; i++)
320 button = gtk_button_new_with_label (_(buttons[i].label));
321 g_object_set_data (G_OBJECT (button),
"data", &(dqv->buttons[i]));
322 g_signal_connect (G_OBJECT (button),
"clicked",
323 G_CALLBACK(gnc_dialog_query_view_button_clicked), dqv);
324 gtk_box_pack_start (GTK_BOX (dqv->button_box), button, FALSE, FALSE, 3);
328 void gnc_dialog_query_view_set_numerics (DialogQueryView *dqv, gboolean abs,
333 gnc_query_view_set_numerics (GNC_QUERY_VIEW(dqv->qview), abs, inv_sort);
336 void gnc_dialog_query_view_refresh (DialogQueryView *dqv)
340 gnc_query_view_refresh (GNC_QUERY_VIEW(dqv->qview));
341 gtk_widget_show_all (dqv->dialog);
344 void gnc_dialog_query_view_destroy (DialogQueryView *dqv)
347 gnc_close_gui_component (dqv->component_id);
351 gnc_dialog_query_view_create (GtkWindow *parent, GList *param_list,
Query *q,
352 const char *title,
const char *label,
353 gboolean abs, gboolean inv_sort,
354 gint sort_column, GtkSortType order,
357 const gchar *pref_group, gpointer user_data)
359 DialogQueryView *dqv;
361 if (!param_list || !q)
364 dqv = gnc_dialog_query_view_new (parent, param_list, q, pref_group);
369 gnc_dialog_query_view_set_title (dqv, title);
372 gnc_dialog_query_view_set_label (dqv, label);
374 gnc_dialog_query_view_set_numerics (dqv, abs, inv_sort);
377 gnc_dialog_query_view_set_buttons (dqv, buttons, user_data);
379 gnc_dialog_query_view_refresh (dqv);
382 gnc_query_sort_order (GNC_QUERY_VIEW (dqv->qview), sort_column, order);
385 gnc_query_set_expand_column (GNC_QUERY_VIEW (dqv->qview), expand_column);
388 gnc_query_view_unselect_all (GNC_QUERY_VIEW (dqv->qview));
GncGUID * guid_malloc(void)
Allocate memory for a GUID.
#define qof_book_get_guid(X)
deprecated
The type used to store guids in C.
GList * qof_query_get_books(QofQuery *q)
Return the list of books we're using.