datetime: Start implementing new UI designs
New UI design from Jakub Steiner and Hylke Bons
This commit is contained in:
parent
ac72f76543
commit
45218a7991
5 changed files with 529 additions and 307 deletions
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include "cc-timezone-map.h"
|
||||
#include "set-timezone.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE (CcDateTimePanel, cc_date_time_panel, CC_TYPE_PANEL)
|
||||
|
||||
|
@ -36,6 +38,8 @@ enum {
|
|||
CITY_NUM_COLS
|
||||
};
|
||||
|
||||
#define W(x) (GtkWidget*) gtk_builder_get_object (priv->builder, x)
|
||||
|
||||
struct _CcDateTimePanelPrivate
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
|
@ -47,6 +51,9 @@ struct _CcDateTimePanelPrivate
|
|||
|
||||
GtkTreeModel *locations;
|
||||
GtkTreeModelFilter *city_filter;
|
||||
|
||||
guint hour;
|
||||
guint minute;
|
||||
};
|
||||
|
||||
|
||||
|
@ -130,16 +137,25 @@ update_time (CcDateTimePanel *self)
|
|||
GtkWidget *widget;
|
||||
gchar label[32];
|
||||
time_t t;
|
||||
struct tm time_info;
|
||||
|
||||
g_get_current_time (&timeval);
|
||||
|
||||
priv->timeout = gdk_threads_add_timeout (1000 - timeval.tv_usec / 1000,
|
||||
(GSourceFunc) update_time, self);
|
||||
|
||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
||||
"label_current_time");
|
||||
t = time (NULL);
|
||||
strftime (label, 32, "%X", localtime (&t));
|
||||
|
||||
localtime_r (&t, &time_info);
|
||||
|
||||
priv->hour = time_info.tm_hour;
|
||||
priv->minute = time_info.tm_min;
|
||||
|
||||
/* Update the hours label */
|
||||
strftime (label, 32, "%H", &time_info);
|
||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "hours_label");
|
||||
gtk_label_set_text (GTK_LABEL (widget), label);
|
||||
|
||||
/* Update the minutes label */
|
||||
strftime (label, 32, "%M", &time_info);
|
||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "minutes_label");
|
||||
gtk_label_set_text (GTK_LABEL (widget), label);
|
||||
|
||||
return FALSE;
|
||||
|
@ -171,24 +187,22 @@ static void
|
|||
apply_button_clicked_cb (GtkButton *button,
|
||||
CcDateTimePanel *self)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
CcDateTimePanelPrivate *priv = self->priv;
|
||||
guint h, mon, y, min, d;
|
||||
guint mon, y, d;
|
||||
struct tm fulltime;
|
||||
time_t unixtime;
|
||||
gchar *filename;
|
||||
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_hour");
|
||||
h = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_minute");
|
||||
min = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
|
||||
mon = 1 + gtk_combo_box_get_active (GTK_COMBO_BOX (W ("month-combobox")));
|
||||
|
||||
y = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (W ("year-spinbutton")));
|
||||
d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (W ("day-spinbutton")));
|
||||
|
||||
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "calendar");
|
||||
gtk_calendar_get_date (GTK_CALENDAR (widget), &y, &mon, &d);
|
||||
|
||||
fulltime.tm_sec = 0;
|
||||
fulltime.tm_min = min;
|
||||
fulltime.tm_hour = h;
|
||||
fulltime.tm_min = priv->minute;
|
||||
fulltime.tm_hour = priv->hour;
|
||||
fulltime.tm_mday = d;
|
||||
fulltime.tm_mon = mon;
|
||||
fulltime.tm_year = y - 1900;
|
||||
|
@ -217,7 +231,6 @@ location_changed_cb (CcTimezoneMap *map,
|
|||
GtkWidget *widget;
|
||||
time_t t;
|
||||
struct tm *ltime;
|
||||
gchar slabel[32];
|
||||
gchar **split;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
|
@ -230,16 +243,6 @@ location_changed_cb (CcTimezoneMap *map,
|
|||
t = time (NULL);
|
||||
ltime = localtime (&t);
|
||||
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_hour");
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), ltime->tm_hour);
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_minute");
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), ltime->tm_min);
|
||||
|
||||
widget = (GtkWidget*) gtk_builder_get_object (priv->builder,
|
||||
"label_current_time");
|
||||
strftime (slabel, 32, "%X", localtime (&t));
|
||||
gtk_label_set_text (GTK_LABEL (widget), slabel);
|
||||
|
||||
split = g_strsplit (location->zone, "/", 2);
|
||||
|
||||
/* remove underscores */
|
||||
|
@ -433,18 +436,59 @@ city_changed_cb (GtkComboBox *box,
|
|||
inside = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
change_time (GtkButton *button,
|
||||
CcDateTimePanel *panel)
|
||||
{
|
||||
CcDateTimePanelPrivate *priv = panel->priv;
|
||||
const gchar *widget_name;
|
||||
gchar *new_str;
|
||||
guint *value, max, min;
|
||||
GtkWidget *label;
|
||||
|
||||
widget_name = gtk_buildable_get_name (GTK_BUILDABLE (button));
|
||||
|
||||
min = 0;
|
||||
if (widget_name[0] == 'h')
|
||||
{
|
||||
/* change hour */
|
||||
label = W ("hours_label");
|
||||
max = 23;
|
||||
value = &priv->hour;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* change minute */
|
||||
label = W ("minutes_label");
|
||||
max = 59;
|
||||
value = &priv->minute;
|
||||
}
|
||||
|
||||
if (strstr (widget_name, "up"))
|
||||
*value = *value + 1;
|
||||
else
|
||||
*value = *value - 1;
|
||||
|
||||
if (*value > max)
|
||||
*value = min;
|
||||
else if (*value < min)
|
||||
*value = max;
|
||||
|
||||
new_str = g_strdup_printf ("%02d", *value);
|
||||
gtk_label_set_text (GTK_LABEL (label), new_str);
|
||||
g_free (new_str);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_date_time_panel_init (CcDateTimePanel *self)
|
||||
{
|
||||
CcDateTimePanelPrivate *priv;
|
||||
gchar *objects[] = { "datetime-panel", "adjustment_min", "adjustment_hour",
|
||||
"adjustment_sec", "region-liststore", "city-liststore",
|
||||
"city-modelfilter", "city-modelsort", NULL };
|
||||
gchar *objects[] = { "datetime-panel", "region-liststore", "city-liststore",
|
||||
"month-liststore", "city-modelfilter", "city-modelsort", NULL };
|
||||
GtkWidget *widget;
|
||||
GtkAdjustment *adjustment;
|
||||
GError *err = NULL;
|
||||
GDate *date;
|
||||
struct tm *ltime;
|
||||
time_t t;
|
||||
GtkTreeModelFilter *city_modelfilter;
|
||||
GtkTreeModelSort *city_modelsort;
|
||||
int ret;
|
||||
|
@ -464,6 +508,37 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
|||
return;
|
||||
}
|
||||
|
||||
/* set up time editing widgets */
|
||||
g_signal_connect (W("hour_up_button"), "clicked", G_CALLBACK (change_time),
|
||||
self);
|
||||
g_signal_connect (W("hour_down_button"), "clicked", G_CALLBACK (change_time),
|
||||
self);
|
||||
g_signal_connect (W("min_up_button"), "clicked", G_CALLBACK (change_time),
|
||||
self);
|
||||
g_signal_connect (W("min_down_button"), "clicked", G_CALLBACK (change_time),
|
||||
self);
|
||||
|
||||
/* set up date editing widgets */
|
||||
date = g_date_new ();
|
||||
g_date_set_time_t (date, time (NULL));
|
||||
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX (W ("month-combobox")),
|
||||
g_date_get_month (date) - 1);
|
||||
|
||||
adjustment = (GtkAdjustment*) gtk_adjustment_new (g_date_get_day (date), 0,
|
||||
31, 1, 10, 1);
|
||||
gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (W ("day-spinbutton")),
|
||||
adjustment);
|
||||
|
||||
adjustment = (GtkAdjustment*) gtk_adjustment_new (g_date_get_year (date),
|
||||
G_MINDOUBLE, G_MAXDOUBLE, 1,
|
||||
10, 1);
|
||||
gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (W ("year-spinbutton")),
|
||||
adjustment);
|
||||
g_date_free (date);
|
||||
date = NULL;
|
||||
|
||||
/* set up timezone map */
|
||||
priv->map = widget = (GtkWidget *) cc_timezone_map_new ();
|
||||
g_signal_connect (widget, "location-changed",
|
||||
G_CALLBACK (location_changed_cb), self);
|
||||
|
@ -477,26 +552,11 @@ cc_date_time_panel_init (CcDateTimePanel *self)
|
|||
GTK_WIDGET (gtk_builder_get_object (priv->builder,
|
||||
"datetime-panel")));
|
||||
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "calendar");
|
||||
date = g_date_new ();
|
||||
g_date_set_time_t (date, time (NULL));
|
||||
gtk_calendar_select_day (GTK_CALENDAR (widget), g_date_get_day (date));
|
||||
gtk_calendar_select_month (GTK_CALENDAR (widget), g_date_get_month (date) -1,
|
||||
g_date_get_year (date));
|
||||
g_date_free (date);
|
||||
date = NULL;
|
||||
|
||||
update_time (self);
|
||||
|
||||
t = time (NULL);
|
||||
ltime = localtime (&t);
|
||||
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_hour");
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), ltime->tm_hour);
|
||||
widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_minute");
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), ltime->tm_min);
|
||||
|
||||
g_signal_connect ((GtkWidget*) gtk_builder_get_object (priv->builder, "button_apply"),
|
||||
g_signal_connect ((GtkWidget*) gtk_builder_get_object (priv->builder,
|
||||
"button_apply"),
|
||||
"clicked",
|
||||
G_CALLBACK (apply_button_clicked_cb),
|
||||
self);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue