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;
56 g_return_if_fail (dqv);
58 for (node = dqv->books; node; node = node->next)
59 guid_free ((
GncGUID*)node->data);
60 g_list_free (dqv->books);
69 g_return_if_fail (dqv);
76 dqv->books = g_list_prepend(dqv->books, guid);
88 (cb->cb_fcn)(item, dqv->user_data);
92 gnc_dialog_query_view_button_clicked (GtkButton *button,
DialogQueryView *dqv)
97 g_return_if_fail (dqv);
98 entry = gnc_query_view_get_selected_entry (GNC_QUERY_VIEW (dqv->qview));
102 cb = g_object_get_data (G_OBJECT (button),
"data");
103 g_return_if_fail (cb);
105 gnc_dialog_query_run_callback (cb, entry, dqv);
109 gnc_dialog_query_view_double_click_entry (
GNCQueryView *qview, gpointer item,
114 g_return_if_fail (dqv);
115 g_return_if_fail (item);
120 gnc_dialog_query_run_callback (dqv->buttons, item, dqv);
124 gnc_dialog_query_view_delete_cb (GtkDialog *dialog, GdkEvent *event,
DialogQueryView *dqv)
126 g_return_val_if_fail (dqv, TRUE);
128 gnc_unregister_gui_component (dqv->component_id);
131 dqv_clear_booklist (dqv);
134 gtk_widget_destroy(dqv->dialog);
140 close_handler (gpointer data)
144 g_return_if_fail (dqv);
145 gnc_dialog_query_view_delete_cb (GTK_DIALOG(dqv->dialog), NULL, dqv);
149 gnc_dialog_query_view_refresh_handler (GHashTable *changes, gpointer user_data)
157 for (node = dqv->books; node; node = node->next)
159 info = gnc_gui_get_entity_events (changes, (
const GncGUID*)(node->data));
160 if (info && (info->event_mask & QOF_EVENT_DESTROY))
162 gnc_close_gui_component (dqv->component_id);
173 gnc_dialog_query_view_destroy (dqv);
180 gnc_dialog_query_view_new (GList *param_list, Query *q)
184 GtkWidget *result_hbox, *close, *scrollWin, *frame, *but_hbox;
188 builder = gtk_builder_new();
189 gnc_builder_add_from_file (builder,
"dialog-query-view.glade",
"Query View Dialog");
192 dqv->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Query View Dialog"));
193 g_object_set_data (G_OBJECT (dqv->dialog),
"dialog-info", dqv);
196 dqv->label = GTK_WIDGET(gtk_builder_get_object (builder,
"dialog_label"));
197 result_hbox = GTK_WIDGET(gtk_builder_get_object (builder,
"result_hbox"));
198 close = GTK_WIDGET(gtk_builder_get_object (builder,
"close_button"));
201 dqv->qview = gnc_query_view_new (param_list, q);
203 frame = gtk_frame_new(NULL);
205 scrollWin = gtk_scrolled_window_new (NULL, NULL);
206 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrollWin),
207 GTK_POLICY_AUTOMATIC,
208 GTK_POLICY_AUTOMATIC);
209 gtk_container_set_border_width(GTK_CONTAINER(scrollWin), 5);
211 gtk_container_add(GTK_CONTAINER(scrollWin), dqv->qview);
212 gtk_container_add(GTK_CONTAINER(frame), scrollWin);
214 gtk_box_pack_start (GTK_BOX (result_hbox), frame, TRUE, TRUE, 3);
217 dqv->button_box = gtk_vbox_new (FALSE, 2);
218 gtk_box_pack_start (GTK_BOX (result_hbox), dqv->button_box, FALSE, FALSE, 3);
221 g_signal_connect (G_OBJECT (dqv->qview),
"double_click_entry",
222 G_CALLBACK(gnc_dialog_query_view_double_click_entry), dqv);
225 g_signal_connect (G_OBJECT (close),
"clicked",
226 G_CALLBACK (gnc_dialog_query_view_close), dqv);
229 g_signal_connect (G_OBJECT (dqv->dialog),
"delete_event",
230 G_CALLBACK (gnc_dialog_query_view_delete_cb), dqv);
233 dqv->component_id = gnc_register_gui_component (
"GNC Dialog Query View",
234 gnc_dialog_query_view_refresh_handler,
238 dqv_build_booklist (dqv, q);
241 for (node = dqv->books; node; node = node->next)
242 gnc_gui_component_watch_entity (dqv->component_id, (
GncGUID*)node->data,
245 g_object_unref(G_OBJECT(builder));
250 void gnc_dialog_query_view_set_title (
DialogQueryView *dqv,
const char *title)
252 if (!dqv || !title)
return;
253 gtk_window_set_title (GTK_WINDOW (dqv->dialog), title);
256 void gnc_dialog_query_view_set_label (
DialogQueryView *dqv,
const char *label)
258 if (!dqv || !label)
return;
259 gtk_label_set_text (GTK_LABEL(dqv->label), label);
269 if (!dqv || !buttons)
return;
270 g_return_if_fail (dqv->buttons == NULL);
272 dqv->buttons = buttons;
273 dqv->user_data = user_data;
276 for (i = 0; buttons[i].label; i++)
280 button = gtk_button_new_with_label (_(buttons[i].label));
281 g_object_set_data (G_OBJECT (button),
"data", &(dqv->buttons[i]));
282 g_signal_connect (G_OBJECT (button),
"clicked",
283 G_CALLBACK(gnc_dialog_query_view_button_clicked), dqv);
284 gtk_box_pack_start (GTK_BOX (dqv->button_box), button, FALSE, FALSE, 3);
288 void gnc_dialog_query_view_set_numerics (
DialogQueryView *dqv, gboolean abs,
293 gnc_query_view_set_numerics (GNC_QUERY_VIEW(dqv->qview), abs, inv_sort);
300 gnc_query_view_refresh (GNC_QUERY_VIEW(dqv->qview));
301 gtk_widget_show_all (dqv->dialog);
307 gnc_close_gui_component (dqv->component_id);
311 gnc_dialog_query_view_create (GList *param_list, Query *q,
312 const char *title,
const char *label,
313 gboolean abs, gboolean inv_sort,
314 gint sort_column, GtkSortType order,
319 if (!param_list || !q)
322 dqv = gnc_dialog_query_view_new (param_list, q);
327 gnc_dialog_query_view_set_title (dqv, title);
330 gnc_dialog_query_view_set_label (dqv, label);
332 gnc_dialog_query_view_set_numerics (dqv, abs, inv_sort);
335 gnc_dialog_query_view_set_buttons (dqv, buttons, user_data);
337 gnc_dialog_query_view_refresh (dqv);
340 gnc_query_sort_order (GNC_QUERY_VIEW (dqv->qview), sort_column, order);
343 gnc_query_view_unselect_all (GNC_QUERY_VIEW (dqv->qview));
GncGUID * guid_malloc(void)
#define qof_book_get_guid(X)
GList * qof_query_get_books(QofQuery *q)