aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/weekday-picker.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-01-04 11:47:27 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-01-05 09:22:21 +0800
commit5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a (patch)
tree92b05ad7116690bf2da53a0fa6ba813fcbea50c7 /calendar/gui/weekday-picker.c
parent69945127d8a7933512bb14eb20ff85354704b5cc (diff)
downloadgsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.gz
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.bz2
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.lz
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.xz
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.zst
gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.zip
Coding style and whitespace cleanup.
Diffstat (limited to 'calendar/gui/weekday-picker.c')
-rw-r--r--calendar/gui/weekday-picker.c475
1 files changed, 233 insertions, 242 deletions
diff --git a/calendar/gui/weekday-picker.c b/calendar/gui/weekday-picker.c
index 12c09b43c5..6e9f4bb34f 100644
--- a/calendar/gui/weekday-picker.c
+++ b/calendar/gui/weekday-picker.c
@@ -70,196 +70,19 @@ enum {
LAST_SIGNAL
};
-static void weekday_picker_destroy (GtkObject *object);
-
-static void weekday_picker_realize (GtkWidget *widget);
-static void weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void weekday_picker_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static void weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style);
-static gboolean weekday_picker_focus (GtkWidget *widget, GtkDirectionType direction);
-static void colorize_items (WeekdayPicker *wp);
-
static guint wp_signals[LAST_SIGNAL];
G_DEFINE_TYPE (WeekdayPicker, weekday_picker, GNOME_TYPE_CANVAS)
-/* Class initialization function for the weekday picker */
-static void
-weekday_picker_class_init (WeekdayPickerClass *class)
-{
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
-
- wp_signals[CHANGED] =
- g_signal_new ("changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (WeekdayPickerClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- object_class->destroy = weekday_picker_destroy;
-
- widget_class->realize = weekday_picker_realize;
- widget_class->size_request = weekday_picker_size_request;
- widget_class->size_allocate = weekday_picker_size_allocate;
- widget_class->style_set = weekday_picker_style_set;
- widget_class->focus = weekday_picker_focus;
-
- class->changed = NULL;
-}
-
-static void
-day_clicked (WeekdayPicker *wp, gint index)
-{
- WeekdayPickerPrivate *priv = wp->priv;
- guint8 day_mask;
-
- if (priv->blocked_day_mask & (0x1 << index))
- return;
-
- if (priv->day_mask & (0x1 << index))
- day_mask = priv->day_mask & ~(0x1 << index);
- else
- day_mask = priv->day_mask | (0x1 << index);
-
- weekday_picker_set_days (wp, day_mask);
-}
-
-static gint
-handle_key_press_event (WeekdayPicker *wp, GdkEvent *event)
-{
- WeekdayPickerPrivate *priv = wp->priv;
- guint keyval = event->key.keyval;
-
- if (priv->focus_day == -1)
- priv->focus_day = priv->week_start_day;
-
- switch (keyval) {
- case GDK_Up:
- case GDK_Right:
- priv->focus_day += 1;
- break;
- case GDK_Down:
- case GDK_Left:
- priv->focus_day -= 1;
- break;
- case GDK_space:
- case GDK_Return:
- day_clicked (wp, priv->focus_day);
- return TRUE;
- default:
- return FALSE;
- }
-
- if (priv->focus_day > 6)
- priv->focus_day = 0;
- if (priv->focus_day < 0)
- priv->focus_day = 6;
-
- colorize_items (wp);
- gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]);
- return TRUE;
-}
-
-/* Event handler for the day items */
-static gint
-day_event_cb (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
-{
- WeekdayPicker *wp;
- WeekdayPickerPrivate *priv;
- gint i;
-
- wp = WEEKDAY_PICKER (data);
- priv = wp->priv;
-
- if (event->type == GDK_KEY_PRESS)
- return handle_key_press_event(wp, event);
-
- if (!(event->type == GDK_BUTTON_PRESS && event->button.button == 1))
- return FALSE;
-
- /* Find which box was clicked */
-
- for (i = 0; i < 7; i++)
- if (priv->boxes[i] == item || priv->labels[i] == item)
- break;
-
- g_return_val_if_fail (i != 7, TRUE);
-
- i += priv->week_start_day;
- if (i >= 7)
- i -= 7;
-
- priv->focus_day = i;
- gnome_canvas_item_grab_focus (priv->boxes[i]);
- day_clicked (wp, i);
- return TRUE;
-}
-
-/* Creates the canvas items for the weekday picker. The items are empty until
- * they are configured elsewhere.
- */
-static void
-create_items (WeekdayPicker *wp)
-{
- WeekdayPickerPrivate *priv;
- GnomeCanvasGroup *parent;
- gint i;
-
- priv = wp->priv;
-
- parent = gnome_canvas_root (GNOME_CANVAS (wp));
-
- for (i = 0; i < 7; i++) {
- priv->boxes[i] = gnome_canvas_item_new (parent,
- GNOME_TYPE_CANVAS_RECT,
- NULL);
- g_signal_connect (priv->boxes[i], "event", G_CALLBACK (day_event_cb), wp);
-
- priv->labels[i] = gnome_canvas_item_new (parent,
- GNOME_TYPE_CANVAS_TEXT,
- NULL);
- g_signal_connect (priv->labels[i], "event", G_CALLBACK (day_event_cb), wp);
- }
-}
-
-/* Object initialization function for the weekday picker */
-static void
-weekday_picker_init (WeekdayPicker *wp)
-{
- WeekdayPickerPrivate *priv;
-
- priv = g_new0 (WeekdayPickerPrivate, 1);
-
- wp->priv = priv;
-
- create_items (wp);
- priv->focus_day = -1;
-}
-
-/* Finalize handler for the weekday picker */
-static void
-weekday_picker_destroy (GtkObject *object)
+static gchar *
+get_day_text (gint day_index)
{
- WeekdayPicker *wp;
- WeekdayPickerPrivate *priv;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_WEEKDAY_PICKER (object));
-
- wp = WEEKDAY_PICKER (object);
- priv = wp->priv;
+ GDateWeekday weekday;
- g_free (priv);
- wp->priv = NULL;
+ /* Convert from tm_wday to GDateWeekday. */
+ weekday = (day_index == 0) ? G_DATE_SUNDAY : day_index;
- if (GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy)
- (* GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy) (object);
+ return g_strdup (e_get_weekday_name (weekday, TRUE));
}
static void
@@ -314,18 +137,6 @@ colorize_items (WeekdayPicker *wp)
}
}
-/* Configures the items in the weekday picker by setting their attributes. */
-static gchar *
-get_day_text (gint day_index)
-{
- GDateWeekday weekday;
-
- /* Convert from tm_wday to GDateWeekday. */
- weekday = (day_index == 0) ? G_DATE_SUNDAY : day_index;
-
- return g_strdup (e_get_weekday_name (weekday, TRUE));
-}
-
static void
configure_items (WeekdayPicker *wp)
{
@@ -370,7 +181,25 @@ configure_items (WeekdayPicker *wp)
colorize_items (wp);
}
-/* Realize handler for the weekday picker */
+static void
+weekday_picker_destroy (GtkObject *object)
+{
+ WeekdayPicker *wp;
+ WeekdayPickerPrivate *priv;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (IS_WEEKDAY_PICKER (object));
+
+ wp = WEEKDAY_PICKER (object);
+ priv = wp->priv;
+
+ g_free (priv);
+ wp->priv = NULL;
+
+ /* Chain up to parent's destroy() method. */
+ GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy (object);
+}
+
static void
weekday_picker_realize (GtkWidget *widget)
{
@@ -378,15 +207,15 @@ weekday_picker_realize (GtkWidget *widget)
wp = WEEKDAY_PICKER (widget);
- if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize)
- (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize) (widget);
+ /* Chain up to parent's realize() method. */
+ GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize (widget);
configure_items (wp);
}
-/* Size_request handler for the weekday picker */
static void
-weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition)
+weekday_picker_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
{
WeekdayPicker *wp;
WeekdayPickerPrivate *priv;
@@ -398,27 +227,31 @@ weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition)
requisition->height = (priv->font_ascent + priv->font_descent + 2 * PADDING + 2);
}
-/* Size_allocate handler for the weekday picker */
static void
-weekday_picker_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
+weekday_picker_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
{
+ GtkWidgetClass *widget_class;
WeekdayPicker *wp;
wp = WEEKDAY_PICKER (widget);
- if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->size_allocate)
- (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->size_allocate) (widget, allocation);
+ /* Chain up to parent's size_allocate() method. */
+ widget_class = GTK_WIDGET_CLASS (weekday_picker_parent_class);
+ widget_class->size_allocate (widget, allocation);
- gnome_canvas_set_scroll_region (GNOME_CANVAS (wp),
- 0, 0, allocation->width, allocation->height);
+ gnome_canvas_set_scroll_region (
+ GNOME_CANVAS (wp), 0, 0,
+ allocation->width, allocation->height);
configure_items (wp);
}
-/* Style_set handler for the weekday picker */
static void
-weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style)
+weekday_picker_style_set (GtkWidget *widget,
+ GtkStyle *previous_style)
{
+ GtkWidgetClass *widget_class;
WeekdayPicker *wp;
WeekdayPickerPrivate *priv;
gint max_width;
@@ -434,12 +267,15 @@ weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style)
/* Set up Pango prerequisites */
font_desc = gtk_widget_get_style (widget)->font_desc;
pango_context = gtk_widget_get_pango_context (widget);
- font_metrics = pango_context_get_metrics (pango_context, font_desc,
- pango_context_get_language (pango_context));
+ font_metrics = pango_context_get_metrics (
+ pango_context, font_desc,
+ pango_context_get_language (pango_context));
layout = pango_layout_new (pango_context);
- priv->font_ascent = PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics));
- priv->font_descent = PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics));
+ priv->font_ascent =
+ PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics));
+ priv->font_descent =
+ PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics));
max_width = 0;
@@ -462,11 +298,193 @@ weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style)
g_object_unref (layout);
pango_font_metrics_unref (font_metrics);
- if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->style_set)
- (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->style_set) (widget, previous_style);
+ /* Chain up to parent's style_set() method. */
+ widget_class = GTK_WIDGET_CLASS (weekday_picker_parent_class);
+ widget_class->style_set (widget, previous_style);
}
-
+static gboolean
+weekday_picker_focus (GtkWidget *widget,
+ GtkDirectionType direction)
+{
+ WeekdayPicker *wp;
+ WeekdayPickerPrivate *priv;
+
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (IS_WEEKDAY_PICKER (widget), FALSE);
+ wp = WEEKDAY_PICKER (widget);
+ priv = wp->priv;
+
+ if (!GTK_WIDGET_CAN_FOCUS (widget))
+ return FALSE;
+
+ if (GTK_WIDGET_HAS_FOCUS (widget)) {
+ priv->focus_day = -1;
+ colorize_items (wp);
+ return FALSE;
+ }
+
+ priv->focus_day = priv->week_start_day;
+ gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]);
+ colorize_items (wp);
+
+ return TRUE;
+}
+static void
+weekday_picker_class_init (WeekdayPickerClass *class)
+{
+ GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+
+ object_class = GTK_OBJECT_CLASS (class);
+ object_class->destroy = weekday_picker_destroy;
+
+ widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->realize = weekday_picker_realize;
+ widget_class->size_request = weekday_picker_size_request;
+ widget_class->size_allocate = weekday_picker_size_allocate;
+ widget_class->style_set = weekday_picker_style_set;
+ widget_class->focus = weekday_picker_focus;
+
+ class->changed = NULL;
+
+ wp_signals[CHANGED] = g_signal_new (
+ "changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (WeekdayPickerClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static void
+day_clicked (WeekdayPicker *wp, gint index)
+{
+ WeekdayPickerPrivate *priv = wp->priv;
+ guint8 day_mask;
+
+ if (priv->blocked_day_mask & (0x1 << index))
+ return;
+
+ if (priv->day_mask & (0x1 << index))
+ day_mask = priv->day_mask & ~(0x1 << index);
+ else
+ day_mask = priv->day_mask | (0x1 << index);
+
+ weekday_picker_set_days (wp, day_mask);
+}
+
+static gint
+handle_key_press_event (WeekdayPicker *wp, GdkEvent *event)
+{
+ WeekdayPickerPrivate *priv = wp->priv;
+ guint keyval = event->key.keyval;
+
+ if (priv->focus_day == -1)
+ priv->focus_day = priv->week_start_day;
+
+ switch (keyval) {
+ case GDK_Up:
+ case GDK_Right:
+ priv->focus_day += 1;
+ break;
+ case GDK_Down:
+ case GDK_Left:
+ priv->focus_day -= 1;
+ break;
+ case GDK_space:
+ case GDK_Return:
+ day_clicked (wp, priv->focus_day);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+
+ if (priv->focus_day > 6)
+ priv->focus_day = 0;
+ if (priv->focus_day < 0)
+ priv->focus_day = 6;
+
+ colorize_items (wp);
+ gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]);
+ return TRUE;
+}
+
+/* Event handler for the day items */
+static gint
+day_event_cb (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
+{
+ WeekdayPicker *wp;
+ WeekdayPickerPrivate *priv;
+ gint i;
+
+ wp = WEEKDAY_PICKER (data);
+ priv = wp->priv;
+
+ if (event->type == GDK_KEY_PRESS)
+ return handle_key_press_event(wp, event);
+
+ if (!(event->type == GDK_BUTTON_PRESS && event->button.button == 1))
+ return FALSE;
+
+ /* Find which box was clicked */
+
+ for (i = 0; i < 7; i++)
+ if (priv->boxes[i] == item || priv->labels[i] == item)
+ break;
+
+ g_return_val_if_fail (i != 7, TRUE);
+
+ i += priv->week_start_day;
+ if (i >= 7)
+ i -= 7;
+
+ priv->focus_day = i;
+ gnome_canvas_item_grab_focus (priv->boxes[i]);
+ day_clicked (wp, i);
+ return TRUE;
+}
+
+/* Creates the canvas items for the weekday picker. The items are empty until
+ * they are configured elsewhere.
+ */
+static void
+create_items (WeekdayPicker *wp)
+{
+ WeekdayPickerPrivate *priv;
+ GnomeCanvasGroup *parent;
+ gint i;
+
+ priv = wp->priv;
+
+ parent = gnome_canvas_root (GNOME_CANVAS (wp));
+
+ for (i = 0; i < 7; i++) {
+ priv->boxes[i] = gnome_canvas_item_new (parent,
+ GNOME_TYPE_CANVAS_RECT,
+ NULL);
+ g_signal_connect (priv->boxes[i], "event", G_CALLBACK (day_event_cb), wp);
+
+ priv->labels[i] = gnome_canvas_item_new (parent,
+ GNOME_TYPE_CANVAS_TEXT,
+ NULL);
+ g_signal_connect (priv->labels[i], "event", G_CALLBACK (day_event_cb), wp);
+ }
+}
+
+static void
+weekday_picker_init (WeekdayPicker *wp)
+{
+ WeekdayPickerPrivate *priv;
+
+ priv = g_new0 (WeekdayPickerPrivate, 1);
+
+ wp->priv = priv;
+
+ create_items (wp);
+ priv->focus_day = -1;
+}
/**
* weekday_picker_new:
@@ -614,30 +632,3 @@ weekday_picker_get_week_start_day (WeekdayPicker *wp)
return priv->week_start_day;
}
-/* focus handler for weekday picker */
-static gboolean
-weekday_picker_focus (GtkWidget *widget, GtkDirectionType direction)
-{
- WeekdayPicker *wp;
- WeekdayPickerPrivate *priv;
-
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (IS_WEEKDAY_PICKER (widget), FALSE);
- wp = WEEKDAY_PICKER (widget);
- priv = wp->priv;
-
- if (!GTK_WIDGET_CAN_FOCUS (widget))
- return FALSE;
-
- if (GTK_WIDGET_HAS_FOCUS (widget)) {
- priv->focus_day = -1;
- colorize_items (wp);
- return FALSE;
- }
-
- priv->focus_day = priv->week_start_day;
- gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]);
- colorize_items (wp);
-
- return TRUE;
-}