40 #include "gnc-date-format.h" 41 #include "dialog-utils.h" 45 #define MAX_DATE_LEN 80 48 G_GNUC_UNUSED
static QofLogModule log_module = GNC_MOD_GUI;
62 GtkWidget* format_combobox;
67 GtkWidget* months_label;
68 GtkWidget* months_number;
69 GtkWidget* months_abbrev;
70 GtkWidget* months_name;
72 GtkWidget* years_label;
73 GtkWidget* years_button;
75 GtkWidget* custom_label;
76 GtkWidget* custom_entry;
78 GtkWidget* sample_label;
81 static guint date_format_signals [LAST_SIGNAL] = { 0 };
83 static void gnc_date_format_finalize (GObject *
object);
84 static void gnc_date_format_compute_format(GNCDateFormat *gdf);
86 void gnc_ui_date_format_changed_cb(GtkWidget *unused, gpointer user_data);
88 G_DEFINE_TYPE(GNCDateFormat, gnc_date_format, GTK_TYPE_BOX)
91 gnc_date_format_class_init (GNCDateFormatClass *klass)
93 GObjectClass *gobject_class = (GObjectClass *) klass;
95 gobject_class->finalize = gnc_date_format_finalize;
97 date_format_signals [FORMAT_CHANGED] =
98 g_signal_new (
"format_changed",
99 G_OBJECT_CLASS_TYPE (gobject_class),
104 g_cclosure_marshal_VOID__VOID,
111 gnc_date_format_init (GNCDateFormat *gdf)
116 g_return_if_fail(gdf);
117 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
119 gtk_orientable_set_orientation (GTK_ORIENTABLE(gdf), GTK_ORIENTATION_HORIZONTAL);
122 gtk_widget_set_name (GTK_WIDGET(gdf),
"gnc-id-date-format");
125 builder = gtk_builder_new();
126 gnc_builder_add_from_file (builder,
"gnc-date-format.glade",
"format-liststore");
127 gnc_builder_add_from_file (builder,
"gnc-date-format.glade",
"gnc_date_format_window");
129 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, gdf);
132 gdf->label = GTK_WIDGET(gtk_builder_get_object (builder,
"widget_label"));
133 gdf->format_combobox = GTK_WIDGET(gtk_builder_get_object (builder,
"format_combobox"));
135 gdf->months_label = GTK_WIDGET(gtk_builder_get_object (builder,
"months_label"));
136 gdf->months_number = GTK_WIDGET(gtk_builder_get_object (builder,
"month_number_button"));
137 gdf->months_abbrev = GTK_WIDGET(gtk_builder_get_object (builder,
"month_abbrev_button"));
138 gdf->months_name = GTK_WIDGET(gtk_builder_get_object (builder,
"month_name_button"));
140 gdf->years_label = GTK_WIDGET(gtk_builder_get_object (builder,
"years_label"));
141 gdf->years_button = GTK_WIDGET(gtk_builder_get_object (builder,
"years_button"));
143 gdf->custom_label = GTK_WIDGET(gtk_builder_get_object (builder,
"format_label"));
144 gdf->custom_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"format_entry"));
146 gdf->sample_label = GTK_WIDGET(gtk_builder_get_object (builder,
"sample_label"));
152 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"gnc_date_format_window"));
154 gdf->table = GTK_WIDGET(gtk_builder_get_object (builder,
"date_format_table"));
155 g_object_ref (G_OBJECT(gdf->table));
156 gtk_container_remove (GTK_CONTAINER(dialog), gdf->table);
157 gtk_container_add (GTK_CONTAINER(gdf), gdf->table);
158 g_object_unref (G_OBJECT(gdf->table));
160 g_object_unref(G_OBJECT(builder));
163 gtk_widget_destroy(dialog);
168 gnc_date_format_finalize (GObject *
object)
170 g_return_if_fail(
object != NULL);
171 g_return_if_fail(GNC_IS_DATE_FORMAT(
object));
173 G_OBJECT_CLASS(gnc_date_format_parent_class)->finalize (
object);
186 gnc_date_format_new (
void)
188 return gnc_date_format_new_with_label (NULL);
193 gnc_date_format_new_without_label (
void)
195 GtkWidget *widget = gnc_date_format_new_with_label(NULL);
196 GNCDateFormat *gdf = GNC_DATE_FORMAT(widget);
199 gtk_grid_remove_column (GTK_GRID(gdf->table), 0);
215 gnc_date_format_new_with_label (
const char *label)
219 gdf = g_object_new(GNC_TYPE_DATE_FORMAT, NULL);
222 gtk_label_set_text(GTK_LABEL(gdf->label), label);
224 gnc_date_format_compute_format(gdf);
225 return GTK_WIDGET(gdf);
230 gnc_date_format_set_format (GNCDateFormat *gdf,
QofDateFormat format)
232 g_return_if_fail(gdf);
233 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
235 gtk_combo_box_set_active(GTK_COMBO_BOX(gdf->format_combobox), format);
236 gnc_date_format_compute_format(gdf);
241 gnc_date_format_get_format (GNCDateFormat *gdf)
246 return gtk_combo_box_get_active(GTK_COMBO_BOX(gdf->format_combobox));
253 GtkWidget *button = NULL;
255 g_return_if_fail(gdf);
256 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
260 case GNCDATE_MONTH_NUMBER:
261 button = gdf->months_number;
263 case GNCDATE_MONTH_ABBREV:
264 button = gdf->months_abbrev;
266 case GNCDATE_MONTH_NAME:
267 button = gdf->months_name;
273 g_return_if_fail(button);
275 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
276 gnc_date_format_compute_format(gdf);
281 gnc_date_format_get_months (GNCDateFormat *gdf)
283 g_return_val_if_fail(gdf, GNCDATE_MONTH_NUMBER);
284 g_return_val_if_fail(GNC_IS_DATE_FORMAT(gdf), GNCDATE_MONTH_NUMBER);
286 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->months_number)))
287 return GNCDATE_MONTH_NUMBER;
288 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->months_abbrev)))
289 return GNCDATE_MONTH_ABBREV;
290 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->months_name)))
291 return GNCDATE_MONTH_NAME;
295 return GNCDATE_MONTH_NUMBER;
300 gnc_date_format_set_years (GNCDateFormat *gdf, gboolean include_century)
302 g_return_if_fail(gdf);
303 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
305 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gdf->years_button),
307 gnc_date_format_compute_format(gdf);
312 gnc_date_format_get_years (GNCDateFormat *gdf)
314 g_return_val_if_fail(gdf, FALSE);
315 g_return_val_if_fail(GNC_IS_DATE_FORMAT(gdf), FALSE);
317 return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->years_button));
322 gnc_date_format_set_custom (GNCDateFormat *gdf,
const char *format)
324 g_return_if_fail(gdf);
325 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
327 if (format == NULL || *format ==
'\0')
330 gtk_entry_set_text(GTK_ENTRY(gdf->custom_entry), format);
331 gnc_date_format_compute_format(gdf);
336 gnc_date_format_get_custom (GNCDateFormat *gdf)
338 g_return_val_if_fail(gdf,
"");
339 g_return_val_if_fail(GNC_IS_DATE_FORMAT(gdf),
"");
341 return gtk_entry_get_text(GTK_ENTRY(gdf->custom_entry));
346 gnc_ui_date_format_changed_cb(GtkWidget *unused, gpointer user_data)
348 GNCDateFormat * gdf = user_data;
350 gnc_date_format_compute_format(gdf);
355 gnc_date_format_enable_month (GNCDateFormat *gdf, gboolean sensitive)
357 gtk_widget_set_sensitive(gdf->months_label, sensitive);
358 gtk_widget_set_sensitive(gdf->months_number, sensitive);
359 gtk_widget_set_sensitive(gdf->months_abbrev, sensitive);
360 gtk_widget_set_sensitive(gdf->months_name, sensitive);
365 gnc_date_format_enable_year (GNCDateFormat *gdf, gboolean sensitive)
367 gtk_widget_set_sensitive(gdf->years_label, sensitive);
368 gtk_widget_set_sensitive(gdf->years_button, sensitive);
373 gnc_date_format_enable_format (GNCDateFormat *gdf, gboolean sensitive)
375 gtk_widget_set_sensitive(gdf->custom_label, sensitive);
376 gtk_widget_set_sensitive(gdf->custom_entry, sensitive);
381 gnc_date_format_refresh (GNCDateFormat *gdf)
384 gboolean enable_year, enable_month, enable_custom, check_modifiers;
385 static gchar *format, *c;
386 gchar date_string[MAX_DATE_LEN];
390 g_return_if_fail(gdf);
391 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
394 gtk_combo_box_get_active(GTK_COMBO_BOX(gdf->format_combobox));
399 format = g_strdup(gtk_entry_get_text(GTK_ENTRY(gdf->custom_entry)));
400 enable_year = enable_month = check_modifiers = FALSE;
401 enable_custom = TRUE;
408 enable_year = enable_month = check_modifiers = enable_custom = FALSE;
412 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gdf->months_number), TRUE);
413 enable_year = check_modifiers = TRUE;
414 enable_month = enable_custom = FALSE;
418 enable_year = enable_month = check_modifiers = TRUE;
419 enable_custom = FALSE;
424 gnc_date_format_enable_year(gdf, enable_year);
425 gnc_date_format_enable_month(gdf, enable_month);
426 gnc_date_format_enable_format(gdf, enable_custom);
431 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->months_number)))
438 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->months_name)))
440 c = strchr(format,
'b');
445 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gdf->years_button)))
447 c = strchr(format,
'y');
458 g_signal_handlers_block_matched(gdf->custom_entry, G_SIGNAL_MATCH_DATA,
459 0, 0, NULL, NULL, gdf);
460 gtk_entry_set_text(GTK_ENTRY(gdf->custom_entry), format);
461 g_signal_handlers_unblock_matched(gdf->custom_entry, G_SIGNAL_MATCH_DATA,
462 0, 0, NULL, NULL, gdf);
467 qof_strftime(date_string, MAX_DATE_LEN, format, &today);
468 gtk_label_set_text(GTK_LABEL(gdf->sample_label), date_string);
474 gnc_date_format_compute_format(GNCDateFormat *gdf)
476 g_return_if_fail(gdf);
477 g_return_if_fail(GNC_IS_DATE_FORMAT(gdf));
480 gnc_date_format_refresh(gdf);
483 g_signal_emit(G_OBJECT(gdf), date_format_signals[FORMAT_CHANGED], 0);
gsize qof_strftime(gchar *buf, gsize max, const gchar *format, const struct tm *tm)
qof_strftime calls qof_format_time to print a given time and afterwards tries to put the result into ...
Used by the check printing code.
No Fancy Date Format, use Global.
struct tm * gnc_localtime_r(const time64 *secs, struct tm *time)
fill out a time struct from a 64-bit time value adjusted for the current time zone.
UTC: 2004-12-12T23:39:11Z.
GNCDateMonthFormat
This is how to format the month, as a number, an abbreviated string, or the full name.
All type declarations for the whole Gnucash engine.
const gchar * qof_date_text_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing a date using words and numbers (e...
time64 gnc_time(time64 *tbuf)
get the current time
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Take from locale information.
const gchar * qof_date_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing an all numeric date (e...
QofDateFormat
Enum for determining a date format.