From c4809f29b24e8e9adc86eb17ca33cf03fdb45f04 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 17 Mar 2018 14:48:17 +0100 Subject: [PATCH] Make date format for new entries customizable --- glade/mainWindow.glade | 40 +++++++++++++++++++++++++-------- src/mainwindow.c | 51 +++++++++++++++++++++++++++++++++++++++--- src/mainwindow.h | 4 ++++ src/settings.c | 13 +++++++++++ 4 files changed, 96 insertions(+), 12 deletions(-) diff --git a/glade/mainWindow.glade b/glade/mainWindow.glade index caff17d..94d7534 100644 --- a/glade/mainWindow.glade +++ b/glade/mainWindow.glade @@ -1,5 +1,5 @@ - + @@ -520,20 +520,21 @@ vertical 4 - + True False - 4 + 4 + 4 True False + end Entry display mode: - False - True - 0 + 0 + 0 @@ -542,9 +543,30 @@ False - False - True - 2 + 1 + 0 + + + + + True + False + end + New entry date format: + + + 0 + 1 + + + + + True + False + + + 1 + 1 diff --git a/src/mainwindow.c b/src/mainwindow.c index 1956f3d..4e5dcce 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -498,6 +498,28 @@ static void mainWindow_settings_combo_changed(GtkComboBox *widget, gpointer user mainWindow_entrySelected(NULL, user_data); } +static void mainWindow_settings_comboNewDateFormat_changed(GtkComboBox *widget, gpointer user_data) +{ + struct mainWindow *mainWindow = (struct mainWindow *)user_data; + + mainWindow_set_new_file_date_format(mainWindow, gtk_combo_box_get_active_id(GTK_COMBO_BOX(mainWindow->settingsDialog.comboNewDateFormat))); +} + +const gchar *newDateFormats[] = {"%d.%m.%Y %H:%M", + "%Y-%m-%d %H:%M", + NULL}; + +void mainWindow_set_new_file_date_format(struct mainWindow *mainWindow, gchar *fmt) +{ + if (!fmt) { + fmt = newDateFormats[0]; + } + g_free(mainWindow->newFileDateFormat); + mainWindow->newFileDateFormat = g_strdup(fmt); + + gtk_combo_box_set_active_id(mainWindow->settingsDialog.comboNewDateFormat, fmt); +} + static gboolean mainWindow_settings_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_hide(widget); @@ -511,6 +533,10 @@ void mainWindow_settings_show(struct mainWindow *mainWindow) static void mainWindow_configure_settings_dialog(struct mainWindow *mainWindow) { + GDateTime *datetime; + int i; + gchar *text; + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(mainWindow->settingsDialog.comboDisplayMode), "text", "Text only"); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(mainWindow->settingsDialog.comboDisplayMode), @@ -518,11 +544,26 @@ static void mainWindow_configure_settings_dialog(struct mainWindow *mainWindow) gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(mainWindow->settingsDialog.comboDisplayMode), "html", "Full HTML with images"); + datetime = g_date_time_new_now_local(); + for (i= 0; newDateFormats[i]; ++i) { + text = g_date_time_format(datetime, newDateFormats[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(mainWindow->settingsDialog.comboNewDateFormat), + newDateFormats[i], text); + g_free(text); + } + g_date_time_unref(datetime); + + g_signal_connect(mainWindow->settingsDialog.comboDisplayMode, "changed", (GCallback) mainWindow_settings_combo_changed, mainWindow); + g_signal_connect(mainWindow->settingsDialog.comboNewDateFormat, + "changed", + (GCallback) mainWindow_settings_comboNewDateFormat_changed, + mainWindow); + g_signal_connect(mainWindow->settingsDialog.settingsDialog, "delete-event", (GCallback) mainWindow_settings_delete_event, @@ -575,8 +616,9 @@ struct mainWindow *mainWindow_new() mainWindow->currentWorkspaceUrl = NULL; - mainWindow->settingsDialog.settingsDialog = GTK_WIDGET(gtk_builder_get_object(builder, "settingsDialog")); - mainWindow->settingsDialog.comboDisplayMode = GTK_WIDGET(gtk_builder_get_object(builder, "comboDisplayMode")); + mainWindow->settingsDialog.settingsDialog = GTK_WIDGET(gtk_builder_get_object(builder, "settingsDialog")); + mainWindow->settingsDialog.comboDisplayMode = GTK_WIDGET(gtk_builder_get_object(builder, "comboDisplayMode")); + mainWindow->settingsDialog.comboNewDateFormat = GTK_WIDGET(gtk_builder_get_object(builder, "comboNewDateFormat")); mainWindow->filterSettings.time_start = 0; mainWindow->filterSettings.time_end = -1; @@ -586,6 +628,8 @@ struct mainWindow *mainWindow_new() mainWindow->renderer = RENDERER_NONE; + mainWindow->newFileDateFormat = NULL; + gtk_builder_connect_signals(builder, NULL); g_object_unref(G_OBJECT(builder)); @@ -601,6 +645,7 @@ struct mainWindow *mainWindow_new() mainWindow_configure_entry_completion(mainWindow); mainWindow_set_meta_information(mainWindow, 0, 0, TRUE); + mainWindow_set_new_file_date_format(mainWindow, NULL); mainWindow_renderer_set(mainWindow, RENDERER_TEXT); return mainWindow; @@ -1107,7 +1152,7 @@ void mainWindow_new_entry_clicked(GtkWidget *widget, gpointer user_data) if (fd) { for (i = 0; default_template[i] != NULL; ++i) { if (default_template[i][0] == '\0') { - default_path = g_date_time_format(datetime, "%d.%m.%Y %H:%M"); + default_path = g_date_time_format(datetime, mainWindow->newFileDateFormat); fwrite(default_path, sizeof(char), strlen(default_path), fd); g_free(default_path); } else { diff --git a/src/mainwindow.h b/src/mainwindow.h index 6f6a0a2..40408d8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -81,9 +81,12 @@ struct mainWindow { GtkListStore *workspaceListStore; GtkTreeModelFilter *workspaceListFiltered; + gchar *newFileDateFormat; + struct settingsDialog { GtkWidget *settingsDialog; GtkWidget *comboDisplayMode; + GtkWidget *comboNewDateFormat; } settingsDialog; }; @@ -113,5 +116,6 @@ void mainWindow_new_entry_clicked(GtkWidget *widget, gpointer user_data); void mainWindow_decrypt_gpg_clicked(GtkWidget *widget, gpointer user_data); void mainWindow_renderer_set(struct mainWindow *mainWindow, enum renderer_mode state); void mainWindow_settings_show(struct mainWindow *mainWindow); +void mainWindow_set_new_file_date_format(struct mainWindow *mainWindow, gchar *fmt); #endif /* MAINWINDOW_H */ diff --git a/src/settings.c b/src/settings.c index e7e8a66..864a3a1 100644 --- a/src/settings.c +++ b/src/settings.c @@ -20,6 +20,14 @@ static void mdiary_settings_parse_line(gchar *line, struct mdiary_settings *sett mainWindow_renderer_set(settings->mainWindow, atoi(g_match_info_fetch(match_info, 1))); } g_regex_unref(regex); + + regex = g_regex_new("^newfileformat = (.*)", G_REGEX_RAW, 0, NULL); + if (g_regex_match(regex, line, 0, &match_info) && + g_regex_get_capture_count(regex) > 0 && + g_match_info_matches(match_info)) { + mainWindow_set_new_file_date_format(settings->mainWindow, g_match_info_fetch(match_info, 1)); + } + g_regex_unref(regex); } gboolean mdiary_load_settings(gchar *filename, struct mdiary_settings *settings) @@ -80,6 +88,11 @@ gboolean mdiary_save_settings(gchar *filename, struct mdiary_settings *settings) output_buffer, strlen(output_buffer), NULL, NULL); g_free(output_buffer); + output_buffer = g_strdup_printf("newfileformat = %s\n", settings->mainWindow->newFileDateFormat); + g_output_stream_write(G_OUTPUT_STREAM(stream), + output_buffer, strlen(output_buffer), NULL, NULL); + g_free(output_buffer); + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter)) { do { gtk_tree_model_get(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter,