From f4c5990fbc61b3aa8632be9c3850125d91fccd2f Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sat, 1 May 2010 00:26:00 +0000 Subject: [PATCH] Improve date-time support - Add a list of times to the time box - Correct a few callbacks --- data/main.ui.in | 8 ++--- src/aweather-gui.c | 74 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/data/main.ui.in b/data/main.ui.in index 8f811fd..eb543bd 100644 --- a/data/main.ui.in +++ b/data/main.ui.in @@ -12,10 +12,12 @@ - - + + + + @@ -263,7 +265,6 @@ True True - @@ -297,7 +298,6 @@ True times False - diff --git a/src/aweather-gui.c b/src/aweather-gui.c index ef87c47..50f4f60 100644 --- a/src/aweather-gui.c +++ b/src/aweather-gui.c @@ -87,16 +87,25 @@ void on_plugin_toggled(GtkCellRendererToggle *cell, gchar *path_str, AWeatherGui g_free(name); } -void on_time_changed(GtkTreeView *view, GtkTreePath *path, - GtkTreeViewColumn *column, AWeatherGui *self) +void on_time_changed(AWeatherGui *self) { - gchar *time; - GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(view); + g_debug("AWeatherGui: on_time_changed"); + struct tm tm = {}; + + GtkWidget *cal = aweather_gui_get_widget(self, "main_date_cal"); + gtk_calendar_get_date(GTK_CALENDAR(cal), (guint*)&tm.tm_year, + (guint*)&tm.tm_mon, (guint*)&tm.tm_mday); + tm.tm_year -= 1900; + + GtkTreeIter iter; + GtkTreePath *path = NULL; + GtkWidget *view = aweather_gui_get_widget(self, "main_time"); + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view)); + gtk_tree_view_get_cursor(GTK_TREE_VIEW(view), &path, NULL); gtk_tree_model_get_iter(model, &iter, path); - gtk_tree_model_get(model, &iter, 0, &time, -1); - //gis_viewer_set_time(self->viewer, time); - g_free(time); + gtk_tree_model_get(model, &iter, 1, &tm.tm_hour, 2, &tm.tm_min, -1); + + gis_viewer_set_time(self->viewer, mktime(&tm)); } static gboolean gtk_tree_model_find_string(GtkTreeModel *model, @@ -122,17 +131,18 @@ static gboolean gtk_tree_model_find_string(GtkTreeModel *model, return FALSE; } -static void update_time_widget(GisViewer *viewer, const char *time, AWeatherGui *self) +static void update_time_widget(GisViewer *viewer, time_t time, AWeatherGui *self) { - g_debug("AWeatherGui: update_time_widget - time=%s", time); - GtkTreeView *tview = GTK_TREE_VIEW(aweather_gui_get_widget(self, "main_time")); - GtkTreeModel *model = GTK_TREE_MODEL(gtk_tree_view_get_model(tview)); - GtkTreeIter iter; - if (gtk_tree_model_find_string(model, &iter, NULL, 0, time)) { - GtkTreePath *path = gtk_tree_model_get_path(model, &iter); - gtk_tree_view_set_cursor(tview, path, NULL, FALSE); - gtk_tree_path_free(path); - } + g_debug("AWeatherGui: update_time_widget - time=%u", (guint)time); + // FIXME + //GtkTreeView *tview = GTK_TREE_VIEW(aweather_gui_get_widget(self, "main_time")); + //GtkTreeModel *model = GTK_TREE_MODEL(gtk_tree_view_get_model(tview)); + //GtkTreeIter iter; + //if (gtk_tree_model_find_string(model, &iter, NULL, 0, time)) { + // GtkTreePath *path = gtk_tree_model_get_path(model, &iter); + // gtk_tree_view_set_cursor(tview, path, NULL, FALSE); + // gtk_tree_path_free(path); + //} } /* Prefs callbacks */ @@ -204,14 +214,32 @@ static void combo_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, static void time_setup(AWeatherGui *self) { - GtkTreeView *tview = GTK_TREE_VIEW(aweather_gui_get_widget(self, "main_time")); - GtkCellRenderer *rend = gtk_cell_renderer_text_new(); - GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes( + /* Setup UI */ + GtkCalendar *cal = GTK_CALENDAR(aweather_gui_get_widget(self, "main_date_cal")); + GtkTreeView *view = GTK_TREE_VIEW(aweather_gui_get_widget(self, "main_time")); + GtkCellRenderer *rend = gtk_cell_renderer_text_new(); + GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes( "Time", rend, "text", 0, NULL); - - gtk_tree_view_append_column(tview, col); + gtk_tree_view_append_column(view, col); g_object_set(rend, "size-points", 8.0, NULL); + /* Add times */ + GtkListStore *store = GTK_LIST_STORE(aweather_gui_get_object(self, "times")); + for (int hour = 0; hour < 24; hour++) { + for (int min = 0; min < 60; min += 10) { + GtkTreeIter iter; + gchar *str = g_strdup_printf("%02d:%02d", hour, min); + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, str, 1, hour, 2, min, -1); + g_free(str); + } + } + + /* Connect signals */ + g_signal_connect_swapped(cal, "day-selected-double-click", + G_CALLBACK(on_time_changed), self); + g_signal_connect_swapped(view, "row-activated", + G_CALLBACK(on_time_changed), self); g_signal_connect(self->viewer, "time-changed", G_CALLBACK(update_time_widget), self); } -- 2.43.2