00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00030 #include "config.h"
00031
00032 #include "dialog-daterange.h"
00033 #include "dialog-utils.h"
00034 #include "gnc-date-edit.h"
00035
00036
00037 static QofLogModule log_module = G_LOG_DOMAIN;
00038
00039 typedef struct _DaterangeInfo DaterangeInfo;
00040
00041 void ddr_toggled_cb(GtkToggleButton *button, gpointer user_data);
00042
00043 struct _DaterangeInfo
00044 {
00045 GtkWidget *enter_from_button;
00046 GtkWidget *enter_to_button;
00047 GtkWidget *from_dateedit;
00048 GtkWidget *to_dateedit;
00049 };
00050
00051 gboolean
00052 gnc_ab_enter_daterange(GtkWidget *parent,
00053 const char *heading,
00054 Timespec *from_date,
00055 gboolean *last_retv_date,
00056 gboolean *first_possible_date,
00057 Timespec *to_date,
00058 gboolean *to_now)
00059 {
00060 GladeXML *xml;
00061 GtkWidget *dialog;
00062 GtkWidget *heading_label;
00063 GtkWidget *first_button;
00064 GtkWidget *last_retrieval_button;
00065 GtkWidget *now_button;
00066 DaterangeInfo info;
00067 gint result;
00068
00069 xml = gnc_glade_xml_new("aqbanking.glade", "Date Range Dialog");
00070
00071 dialog = glade_xml_get_widget(xml, "Date Range Dialog");
00072 g_object_set_data_full(G_OBJECT(dialog), "xml", xml, g_object_unref);
00073 glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func,
00074 &info);
00075
00076 if (parent)
00077 gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent));
00078
00079 heading_label = glade_xml_get_widget(xml, "heading_label");
00080 first_button = glade_xml_get_widget(xml, "first_button");
00081 last_retrieval_button = glade_xml_get_widget(xml, "last_retrieval_button");
00082 info.enter_from_button = glade_xml_get_widget(xml, "enter_from_button");
00083 now_button = glade_xml_get_widget(xml, "now_button");
00084 info.enter_to_button = glade_xml_get_widget(xml, "enter_to_button");
00085
00086 info.from_dateedit = gnc_date_edit_new_ts(*from_date, FALSE, FALSE);
00087 gtk_container_add(GTK_CONTAINER(glade_xml_get_widget(xml, "enter_from_box")),
00088 info.from_dateedit);
00089 gtk_widget_show(info.from_dateedit);
00090
00091 info.to_dateedit = gnc_date_edit_new_ts(*to_date, FALSE, FALSE);
00092 gtk_container_add(GTK_CONTAINER(glade_xml_get_widget(xml, "enter_to_box")),
00093 info.to_dateedit);
00094 gtk_widget_show(info.to_dateedit);
00095
00096 if (*last_retv_date)
00097 {
00098 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_retrieval_button),
00099 TRUE);
00100 }
00101 else
00102 {
00103 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(first_button), TRUE);
00104 gtk_widget_set_sensitive(last_retrieval_button, FALSE);
00105 }
00106
00107 gtk_widget_set_sensitive(info.from_dateedit, FALSE);
00108 gtk_widget_set_sensitive(info.to_dateedit, FALSE);
00109
00110 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
00111
00112 if (heading)
00113 gtk_label_set_text(GTK_LABEL(heading_label), heading);
00114
00115 gtk_widget_show(dialog);
00116
00117 result = gtk_dialog_run(GTK_DIALOG(dialog));
00118 gtk_widget_hide(dialog);
00119
00120 if (result == GTK_RESPONSE_OK)
00121 {
00122 *from_date = gnc_date_edit_get_date_ts(
00123 GNC_DATE_EDIT(info.from_dateedit));
00124 *last_retv_date = gtk_toggle_button_get_active(
00125 GTK_TOGGLE_BUTTON(last_retrieval_button));
00126 *first_possible_date = gtk_toggle_button_get_active(
00127 GTK_TOGGLE_BUTTON(first_button));
00128 *to_date = gnc_date_edit_get_date_ts(
00129 GNC_DATE_EDIT(info.to_dateedit));
00130 *to_now = gtk_toggle_button_get_active(
00131 GTK_TOGGLE_BUTTON(now_button));
00132 }
00133
00134 gtk_widget_destroy(dialog);
00135
00136 return result == GTK_RESPONSE_OK;
00137 }
00138
00139 void
00140 ddr_toggled_cb(GtkToggleButton *button, gpointer user_data)
00141 {
00142 DaterangeInfo *info = user_data;
00143
00144 g_return_if_fail(info);
00145
00146 gtk_widget_set_sensitive(info->from_dateedit,
00147 gtk_toggle_button_get_active(
00148 GTK_TOGGLE_BUTTON(info->enter_from_button)));
00149 gtk_widget_set_sensitive(info->to_dateedit,
00150 gtk_toggle_button_get_active(
00151 GTK_TOGGLE_BUTTON(info->enter_to_button)));
00152 }