From 37afe16a7ace1b9dc24852bca053d6be9f3a12ab Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Wed, 1 Feb 2017 17:33:01 +0100 Subject: [PATCH] Added popover dialog for dat entry using calendar --- glade/mainWindow.glade | 22 ++++++++++++++++---- src/mainwindow.c | 47 ++++++++++++++++++++++++++++++++++++++++++ src/mainwindow.h | 9 ++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/glade/mainWindow.glade b/glade/mainWindow.glade index 0efa1a3..93e019e 100644 --- a/glade/mainWindow.glade +++ b/glade/mainWindow.glade @@ -64,8 +64,8 @@ True True - 9 - 00.00.0000 + 10 + 0000-00-00 True @@ -89,8 +89,8 @@ True True - 9 - 00.00.0000 + 10 + 0000-00-00 True @@ -185,6 +185,7 @@ True True True + False @@ -197,4 +198,17 @@ + + False + dateStart + + + True + True + 2017 + 1 + 1 + + + diff --git a/src/mainwindow.c b/src/mainwindow.c index 2178bef..e123aa4 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -63,6 +63,20 @@ static void mainWindow_configure_treeView(struct mainWindow *mainWindow) COL_TAGS, "F", COL_TIMESTAMP, 11, -1); + + /* debug 2 code here */ + g_signal_connect(mainWindow->dateStart, + "focus-in-event", + mainWindow_showPopover, + mainWindow); + g_signal_connect(mainWindow->dateEnd, + "focus-in-event", + mainWindow_showPopover, + mainWindow); + g_signal_connect(mainWindow->calendarRange, + "day-selected", + mainWindow_calendarSelected, + mainWindow); } struct mainWindow *mainWindow_new() @@ -79,6 +93,8 @@ struct mainWindow *mainWindow_new() mainWindow->dateStart = GTK_WIDGET(gtk_builder_get_object(builder, "dateStart")); mainWindow->dateEnd = GTK_WIDGET(gtk_builder_get_object(builder, "dateEnd")); mainWindow->entryText = GTK_WIDGET(gtk_builder_get_object(builder, "entryText")); + mainWindow->popoverDate = GTK_WIDGET(gtk_builder_get_object(builder, "popoverDate")); + mainWindow->calendarRange = GTK_WIDGET(gtk_builder_get_object(builder, "calendarRange")); mainWindow->entryListView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "entryListView")); mainWindow->entryListStore = GTK_LIST_STORE(gtk_builder_get_object(builder, "entryListStore")); @@ -90,3 +106,34 @@ struct mainWindow *mainWindow_new() return mainWindow; } + +void mainWindow_chooseWorkspaceClicked(GtkWidget *widget, gint event, gpointer user_data) +{ + printf("Choose workspace.\n"); + fflush(stdout); +} + +void mainWindow_showPopover(GtkWidget *widget, GdkEvent *event, gpointer user_data) +{ + struct mainWindow *mainWindow = (struct mainWindow *)user_data; + + mainWindow->selectedDateEntry = widget; + + if (!gtk_widget_get_visible(mainWindow->popoverDate)) + gtk_popover_popup(GTK_POPOVER(mainWindow->popoverDate)); + gtk_popover_set_relative_to(GTK_POPOVER(mainWindow->popoverDate), widget); +} + +void mainWindow_calendarSelected(GtkWidget *widget, gpointer user_data) +{ + struct mainWindow *mainWindow = (struct mainWindow *)user_data; + guint year, month, day; + gchar *text; + + gtk_calendar_get_date(GTK_CALENDAR(mainWindow->calendarRange), &year, &month, &day); + text = g_strdup_printf("%d-%02d-%02d", year, month, day); + gtk_entry_set_text(GTK_ENTRY(mainWindow->selectedDateEntry), text); + g_free(text); + + gtk_popover_popdown(GTK_POPOVER(mainWindow->popoverDate)); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 48d78ce..500d4a8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -11,10 +11,19 @@ struct mainWindow { GtkWidget *dateStart; GtkWidget *dateEnd; GtkWidget *entryText; + GtkWidget *popoverDate; + GtkWidget *calendarRange; GtkTreeView *entryListView; GtkListStore *entryListStore; + + GtkWidget *selectedDateEntry; }; struct mainWindow *mainWindow_new(); +/* Slots */ +void mainWindow_showPopover(GtkWidget *widget, GdkEvent *event, gpointer user_data); +void mainWindow_chooseWorkspaceClicked(GtkWidget *widget, gint event, gpointer user_data); +void mainWindow_calendarSelected(GtkWidget *widget, gpointer user_data); + #endif /* MAINWINDOW_H */