00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "config.h"
00024
00025 #include <gtk/gtk.h>
00026
00027 #include "dialog-utils.h"
00028 #include "gnc-ui.h"
00029 #include "gnc-date-edit.h"
00030 #include "dialog-daterange.h"
00031
00032 typedef struct
00033 {
00034 GtkWidget *enter_from_button;
00035 GtkWidget *enter_to_button;
00036 GtkWidget *from_dateedit;
00037 GtkWidget *to_dateedit;
00038 } DaterangeInfo;
00039
00040 void on_button_toggled (GtkToggleButton *button, gpointer user_data);
00041
00042
00043 gboolean
00044 gnc_hbci_enter_daterange (GtkWidget *parent,
00045 const char *heading,
00046 Timespec *from_date,
00047 gboolean *last_retv_date,
00048 gboolean *first_possible_date,
00049 Timespec *to_date,
00050 gboolean *to_now)
00051 {
00052 GtkWidget *dialog;
00053 GladeXML *xml;
00054 gint result;
00055 DaterangeInfo info;
00056
00057 GtkWidget *heading_label;
00058 GtkWidget *last_retrieval_button;
00059 GtkWidget *first_button;
00060 GtkWidget *now_button;
00061
00062 xml = gnc_glade_xml_new ("hbci.glade", "HBCI_daterange_dialog");
00063
00064 dialog = glade_xml_get_widget (xml, "HBCI_daterange_dialog");
00065
00066 if (parent)
00067 gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
00068
00069 heading_label = glade_xml_get_widget (xml, "heading_label");
00070 last_retrieval_button = glade_xml_get_widget (xml, "last_retrieval_button");
00071 first_button = glade_xml_get_widget (xml, "first_button");
00072 info.enter_from_button = glade_xml_get_widget (xml, "enter_from_button");
00073 info.enter_to_button = glade_xml_get_widget (xml, "enter_to_button");
00074 now_button = glade_xml_get_widget (xml, "now_button");
00075
00076 info.from_dateedit = gnc_date_edit_new_ts (*from_date, FALSE, FALSE);
00077 gtk_container_add (GTK_CONTAINER (glade_xml_get_widget
00078 (xml, "enter_from_box")),
00079 info.from_dateedit);
00080
00081 info.to_dateedit = gnc_date_edit_new_ts (*to_date, FALSE, FALSE);
00082 gtk_container_add (GTK_CONTAINER (glade_xml_get_widget
00083 (xml, "enter_to_box")),
00084 info.to_dateedit);
00085
00086 if (*last_retv_date == FALSE)
00087 {
00088 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (first_button), TRUE);
00089 gtk_widget_set_sensitive (last_retrieval_button, FALSE);
00090 }
00091
00092 gtk_widget_set_sensitive (info.from_dateedit, FALSE);
00093 gtk_widget_set_sensitive (info.to_dateedit, FALSE);
00094 g_signal_connect (info.enter_from_button, "toggled",
00095 G_CALLBACK (on_button_toggled), &info);
00096 g_signal_connect (info.enter_to_button, "toggled",
00097 G_CALLBACK (on_button_toggled), &info);
00098
00099 gtk_dialog_set_default_response (GTK_DIALOG (dialog), 1);
00100
00101 if (heading)
00102 gtk_label_set_text (GTK_LABEL (heading_label), heading);
00103
00104 gtk_widget_grab_focus (glade_xml_get_widget (xml, "ok_button"));
00105
00106 gtk_widget_show_all (GTK_WIDGET (dialog));
00107
00108 result = gtk_dialog_run (GTK_DIALOG (dialog));
00109 if (result >= 0)
00110 gtk_widget_hide (GTK_WIDGET (dialog));
00111
00112 if (result == 1)
00113 {
00114 *from_date = gnc_date_edit_get_date_ts (GNC_DATE_EDIT (info.from_dateedit));
00115 *last_retv_date = gtk_toggle_button_get_active
00116 (GTK_TOGGLE_BUTTON (last_retrieval_button));
00117 *first_possible_date = gtk_toggle_button_get_active
00118 (GTK_TOGGLE_BUTTON (first_button));
00119 *to_date = gnc_date_edit_get_date_ts (GNC_DATE_EDIT (info.to_dateedit));
00120 *to_now = gtk_toggle_button_get_active
00121 (GTK_TOGGLE_BUTTON (now_button));
00122
00123 gtk_widget_destroy (GTK_WIDGET (dialog));
00124 return TRUE;
00125 }
00126
00127 if (result >= 0)
00128 gtk_widget_destroy (GTK_WIDGET (dialog));
00129 return FALSE;
00130 }
00131
00132 void on_button_toggled (GtkToggleButton *button, gpointer user_data)
00133 {
00134 DaterangeInfo *info = user_data;
00135 g_assert (info);
00136
00137 gtk_widget_set_sensitive (info->from_dateedit,
00138 gtk_toggle_button_get_active
00139 (GTK_TOGGLE_BUTTON (info->enter_from_button)));
00140 gtk_widget_set_sensitive (info->to_dateedit,
00141 gtk_toggle_button_get_active
00142 (GTK_TOGGLE_BUTTON (info->enter_to_button)));
00143 }