Added popover dialog for dat entry using calendar

This commit is contained in:
Markus Koch 2017-02-01 17:33:01 +01:00
parent ae843c384d
commit 37afe16a7a
3 changed files with 74 additions and 4 deletions

View File

@ -64,8 +64,8 @@
<object class="GtkEntry" id="dateStart"> <object class="GtkEntry" id="dateStart">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="width_chars">9</property> <property name="width_chars">10</property>
<property name="text" translatable="yes">00.00.0000</property> <property name="text" translatable="yes">0000-00-00</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -89,8 +89,8 @@
<object class="GtkEntry" id="dateEnd"> <object class="GtkEntry" id="dateEnd">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="width_chars">9</property> <property name="width_chars">10</property>
<property name="text" translatable="yes">00.00.0000</property> <property name="text" translatable="yes">0000-00-00</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -185,6 +185,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="mainWindow_chooseWorkspaceClicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -197,4 +198,17 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkPopover" id="popoverDate">
<property name="can_focus">False</property>
<property name="relative_to">dateStart</property>
<child>
<object class="GtkCalendar" id="calendarRange">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="year">2017</property>
<property name="month">1</property>
<property name="day">1</property>
</object>
</child>
</object>
</interface> </interface>

View File

@ -63,6 +63,20 @@ static void mainWindow_configure_treeView(struct mainWindow *mainWindow)
COL_TAGS, "F", COL_TAGS, "F",
COL_TIMESTAMP, 11, COL_TIMESTAMP, 11,
-1); -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() struct mainWindow *mainWindow_new()
@ -79,6 +93,8 @@ struct mainWindow *mainWindow_new()
mainWindow->dateStart = GTK_WIDGET(gtk_builder_get_object(builder, "dateStart")); mainWindow->dateStart = GTK_WIDGET(gtk_builder_get_object(builder, "dateStart"));
mainWindow->dateEnd = GTK_WIDGET(gtk_builder_get_object(builder, "dateEnd")); mainWindow->dateEnd = GTK_WIDGET(gtk_builder_get_object(builder, "dateEnd"));
mainWindow->entryText = GTK_WIDGET(gtk_builder_get_object(builder, "entryText")); 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->entryListView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "entryListView"));
mainWindow->entryListStore = GTK_LIST_STORE(gtk_builder_get_object(builder, "entryListStore")); mainWindow->entryListStore = GTK_LIST_STORE(gtk_builder_get_object(builder, "entryListStore"));
@ -90,3 +106,34 @@ struct mainWindow *mainWindow_new()
return mainWindow; 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));
}

View File

@ -11,10 +11,19 @@ struct mainWindow {
GtkWidget *dateStart; GtkWidget *dateStart;
GtkWidget *dateEnd; GtkWidget *dateEnd;
GtkWidget *entryText; GtkWidget *entryText;
GtkWidget *popoverDate;
GtkWidget *calendarRange;
GtkTreeView *entryListView; GtkTreeView *entryListView;
GtkListStore *entryListStore; GtkListStore *entryListStore;
GtkWidget *selectedDateEntry;
}; };
struct mainWindow *mainWindow_new(); 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 */ #endif /* MAINWINDOW_H */