Add infrastructure for GtkCalendar details. (#339540)
* gtk/gtkcalendar.c, gtk/gtkcalendar.h, gtk/gtk.symbols: Add "detail-width-chars" and "detail-height-rows" properties, and gtk_calendar_set_detail_func function. svn path=/trunk/; revision=19251
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2007-12-27 Mathias Hasselmann <mathias@openismus.com>
|
||||||
|
|
||||||
|
Add infrastructure for GtkCalendar details. (#339540)
|
||||||
|
|
||||||
|
* gtk/gtkcalendar.c, gtk/gtkcalendar.h, gtk/gtk.symbols:
|
||||||
|
Add "detail-width-chars" and "detail-height-rows" properties,
|
||||||
|
and gtk_calendar_set_detail_func function.
|
||||||
|
|
||||||
2007-12-27 Xan Lopez <xan@gnome.org>
|
2007-12-27 Xan Lopez <xan@gnome.org>
|
||||||
|
|
||||||
* gtk/gtk.symbols:
|
* gtk/gtk.symbols:
|
||||||
|
|||||||
@ -1,3 +1,7 @@
|
|||||||
|
2007-12-27 Mathias Hasselmann <mathias@openismus.com>
|
||||||
|
|
||||||
|
* reference/gtk/gtk-sections.txt: Add new GtkCalendar symbols.
|
||||||
|
|
||||||
2007-12-27 Xan Lopez <xan@gnome.org>
|
2007-12-27 Xan Lopez <xan@gnome.org>
|
||||||
|
|
||||||
* gtk/gtk-sections.txt: Add gtk_border_new
|
* gtk/gtk-sections.txt: Add gtk_border_new
|
||||||
|
|||||||
@ -547,19 +547,34 @@ gtk_button_get_type
|
|||||||
<FILE>gtkcalendar</FILE>
|
<FILE>gtkcalendar</FILE>
|
||||||
<TITLE>GtkCalendar</TITLE>
|
<TITLE>GtkCalendar</TITLE>
|
||||||
GtkCalendar
|
GtkCalendar
|
||||||
|
GtkCalendarDetailFunc
|
||||||
GtkCalendarDisplayOptions
|
GtkCalendarDisplayOptions
|
||||||
|
|
||||||
|
<SUBSECTION>
|
||||||
gtk_calendar_new
|
gtk_calendar_new
|
||||||
gtk_calendar_select_month
|
gtk_calendar_select_month
|
||||||
gtk_calendar_select_day
|
gtk_calendar_select_day
|
||||||
gtk_calendar_mark_day
|
gtk_calendar_mark_day
|
||||||
gtk_calendar_unmark_day
|
gtk_calendar_unmark_day
|
||||||
gtk_calendar_clear_marks
|
gtk_calendar_clear_marks
|
||||||
|
|
||||||
|
<SUBSECTION>
|
||||||
gtk_calendar_get_display_options
|
gtk_calendar_get_display_options
|
||||||
gtk_calendar_set_display_options
|
gtk_calendar_set_display_options
|
||||||
gtk_calendar_display_options
|
|
||||||
gtk_calendar_get_date
|
gtk_calendar_get_date
|
||||||
|
|
||||||
|
<SUBSECTION>
|
||||||
|
gtk_calendar_set_detail_func
|
||||||
|
gtk_calendar_get_detail_width_chars
|
||||||
|
gtk_calendar_set_detail_width_chars
|
||||||
|
gtk_calendar_get_detail_height_rows
|
||||||
|
gtk_calendar_set_detail_height_rows
|
||||||
|
|
||||||
|
<SUBSECTION>
|
||||||
|
gtk_calendar_display_options
|
||||||
gtk_calendar_freeze
|
gtk_calendar_freeze
|
||||||
gtk_calendar_thaw
|
gtk_calendar_thaw
|
||||||
|
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GTK_CALENDAR
|
GTK_CALENDAR
|
||||||
GTK_IS_CALENDAR
|
GTK_IS_CALENDAR
|
||||||
|
|||||||
@ -512,12 +512,17 @@ gtk_calendar_thaw
|
|||||||
#endif
|
#endif
|
||||||
gtk_calendar_clear_marks
|
gtk_calendar_clear_marks
|
||||||
gtk_calendar_get_date
|
gtk_calendar_get_date
|
||||||
|
gtk_calendar_get_detail_height_rows
|
||||||
|
gtk_calendar_get_detail_width_chars
|
||||||
gtk_calendar_get_display_options
|
gtk_calendar_get_display_options
|
||||||
gtk_calendar_get_type G_GNUC_CONST
|
gtk_calendar_get_type G_GNUC_CONST
|
||||||
gtk_calendar_mark_day
|
gtk_calendar_mark_day
|
||||||
gtk_calendar_new
|
gtk_calendar_new
|
||||||
gtk_calendar_select_day
|
gtk_calendar_select_day
|
||||||
gtk_calendar_select_month
|
gtk_calendar_select_month
|
||||||
|
gtk_calendar_set_detail_func
|
||||||
|
gtk_calendar_set_detail_height_rows
|
||||||
|
gtk_calendar_set_detail_width_chars
|
||||||
gtk_calendar_set_display_options
|
gtk_calendar_set_display_options
|
||||||
gtk_calendar_unmark_day
|
gtk_calendar_unmark_day
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -232,6 +232,8 @@ enum
|
|||||||
PROP_SHOW_DAY_NAMES,
|
PROP_SHOW_DAY_NAMES,
|
||||||
PROP_NO_MONTH_CHANGE,
|
PROP_NO_MONTH_CHANGE,
|
||||||
PROP_SHOW_WEEK_NUMBERS,
|
PROP_SHOW_WEEK_NUMBERS,
|
||||||
|
PROP_DETAIL_WIDTH_CHARS,
|
||||||
|
PROP_DETAIL_HEIGHT_ROWS,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -280,6 +282,15 @@ struct _GtkCalendarPrivate
|
|||||||
|
|
||||||
gint drag_start_x;
|
gint drag_start_x;
|
||||||
gint drag_start_y;
|
gint drag_start_y;
|
||||||
|
|
||||||
|
/* Optional callback, used to display extra information for each day. */
|
||||||
|
GtkCalendarDetailFunc detail_func;
|
||||||
|
gpointer detail_func_user_data;
|
||||||
|
GDestroyNotify detail_func_destroy;
|
||||||
|
|
||||||
|
/* Size requistion for details provided by the hook. */
|
||||||
|
gint detail_height_rows;
|
||||||
|
gint detail_width_chars;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GTK_CALENDAR_GET_PRIVATE(widget) (GTK_CALENDAR (widget)->priv)
|
#define GTK_CALENDAR_GET_PRIVATE(widget) (GTK_CALENDAR (widget)->priv)
|
||||||
@ -492,6 +503,38 @@ gtk_calendar_class_init (GtkCalendarClass *class)
|
|||||||
FALSE,
|
FALSE,
|
||||||
GTK_PARAM_READWRITE));
|
GTK_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GtkCalendar:detail-width-chars:
|
||||||
|
*
|
||||||
|
* Width of a detail cell, in characters.
|
||||||
|
* A value of 0 allows any width. See gtk_calendar_set_detail_func().
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_DETAIL_WIDTH_CHARS,
|
||||||
|
g_param_spec_int ("detail-width-chars",
|
||||||
|
P_("Details Width"),
|
||||||
|
P_("Details width in characters"),
|
||||||
|
0, 127, 0,
|
||||||
|
GTK_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GtkCalendar:detail-height-rows:
|
||||||
|
*
|
||||||
|
* Height of a detail cell, in rows.
|
||||||
|
* A value of 0 allows any width. See gtk_calendar_set_detail_func().
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_DETAIL_HEIGHT_ROWS,
|
||||||
|
g_param_spec_int ("detail-height-rows",
|
||||||
|
P_("Details Height"),
|
||||||
|
P_("Details height in rows"),
|
||||||
|
0, 127, 0,
|
||||||
|
GTK_PARAM_READWRITE));
|
||||||
|
|
||||||
gtk_calendar_signals[MONTH_CHANGED_SIGNAL] =
|
gtk_calendar_signals[MONTH_CHANGED_SIGNAL] =
|
||||||
g_signal_new (I_("month_changed"),
|
g_signal_new (I_("month_changed"),
|
||||||
G_OBJECT_CLASS_TYPE (gobject_class),
|
G_OBJECT_CLASS_TYPE (gobject_class),
|
||||||
@ -1148,8 +1191,18 @@ gtk_calendar_finalize (GObject *object)
|
|||||||
static void
|
static void
|
||||||
gtk_calendar_destroy (GtkObject *object)
|
gtk_calendar_destroy (GtkObject *object)
|
||||||
{
|
{
|
||||||
|
GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (object);
|
||||||
|
|
||||||
calendar_stop_spinning (GTK_CALENDAR (object));
|
calendar_stop_spinning (GTK_CALENDAR (object));
|
||||||
|
|
||||||
|
/* Call the destroy function for the extra display callback: */
|
||||||
|
if (priv->detail_func_destroy && priv->detail_func_user_data)
|
||||||
|
{
|
||||||
|
priv->detail_func_destroy (priv->detail_func_user_data);
|
||||||
|
priv->detail_func_user_data = NULL;
|
||||||
|
priv->detail_func_destroy = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
GTK_OBJECT_CLASS (gtk_calendar_parent_class)->destroy (object);
|
GTK_OBJECT_CLASS (gtk_calendar_parent_class)->destroy (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1220,6 +1273,14 @@ gtk_calendar_set_property (GObject *object,
|
|||||||
GTK_CALENDAR_SHOW_WEEK_NUMBERS,
|
GTK_CALENDAR_SHOW_WEEK_NUMBERS,
|
||||||
g_value_get_boolean (value));
|
g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_DETAIL_WIDTH_CHARS:
|
||||||
|
gtk_calendar_set_detail_width_chars (calendar,
|
||||||
|
g_value_get_int (value));
|
||||||
|
break;
|
||||||
|
case PROP_DETAIL_HEIGHT_ROWS:
|
||||||
|
gtk_calendar_set_detail_height_rows (calendar,
|
||||||
|
g_value_get_int (value));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -1232,9 +1293,8 @@ gtk_calendar_get_property (GObject *object,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
GtkCalendar *calendar;
|
GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (object);
|
||||||
|
GtkCalendar *calendar = GTK_CALENDAR (object);
|
||||||
calendar = GTK_CALENDAR (object);
|
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
@ -1263,6 +1323,12 @@ gtk_calendar_get_property (GObject *object,
|
|||||||
g_value_set_boolean (value, calendar_get_display_option (calendar,
|
g_value_set_boolean (value, calendar_get_display_option (calendar,
|
||||||
GTK_CALENDAR_SHOW_WEEK_NUMBERS));
|
GTK_CALENDAR_SHOW_WEEK_NUMBERS));
|
||||||
break;
|
break;
|
||||||
|
case PROP_DETAIL_WIDTH_CHARS:
|
||||||
|
g_value_set_int (value, priv->detail_width_chars);
|
||||||
|
break;
|
||||||
|
case PROP_DETAIL_HEIGHT_ROWS:
|
||||||
|
g_value_set_int (value, priv->detail_height_rows);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -3488,6 +3554,142 @@ gtk_calendar_get_date (GtkCalendar *calendar,
|
|||||||
*day = calendar->selected_day;
|
*day = calendar->selected_day;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_calendar_set_detail_func:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
* @func: a function providing details for each day.
|
||||||
|
* @data: data to pass to @func invokations.
|
||||||
|
* @destroy: a function for releasing @data.
|
||||||
|
*
|
||||||
|
* Installs a function which provides Pango markup with detail information
|
||||||
|
* for each day. Examples for such details are holidays or appointments. That
|
||||||
|
* information is shown below each day when #GtkCalendar:show-details is set.
|
||||||
|
* A tooltip containing with full detail information is provided, if the entire
|
||||||
|
* text should not fit into the details area, or if #GtkCalendar:show-details
|
||||||
|
* is not set.
|
||||||
|
*
|
||||||
|
* The size of the details area can be restricted by setting the
|
||||||
|
* #GtkCalendar:detail-width-chars and #GtkCalendar:detail-height-rows
|
||||||
|
* properties.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gtk_calendar_set_detail_func (GtkCalendar *calendar,
|
||||||
|
GtkCalendarDetailFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
GtkCalendarPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_CALENDAR (calendar));
|
||||||
|
|
||||||
|
priv = GTK_CALENDAR_GET_PRIVATE (calendar);
|
||||||
|
|
||||||
|
if (priv->detail_func_destroy)
|
||||||
|
priv->detail_func_destroy (priv->detail_func_user_data);
|
||||||
|
|
||||||
|
priv->detail_func = func;
|
||||||
|
priv->detail_func_user_data = data;
|
||||||
|
priv->detail_func_destroy = destroy;
|
||||||
|
|
||||||
|
gtk_widget_set_has_tooltip (GTK_WIDGET (calendar),
|
||||||
|
NULL != priv->detail_func);
|
||||||
|
gtk_widget_queue_resize (GTK_WIDGET (calendar));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_calendar_set_detail_width_chars:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
* @chars: detail width in characters.
|
||||||
|
*
|
||||||
|
* Updates the width of detail cells.
|
||||||
|
* See #GtkCalendar:detail-width-chars.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gtk_calendar_set_detail_width_chars (GtkCalendar *calendar,
|
||||||
|
gint chars)
|
||||||
|
{
|
||||||
|
GtkCalendarPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_CALENDAR (calendar));
|
||||||
|
|
||||||
|
priv = GTK_CALENDAR_GET_PRIVATE (calendar);
|
||||||
|
|
||||||
|
if (chars != priv->detail_width_chars)
|
||||||
|
{
|
||||||
|
priv->detail_width_chars = chars;
|
||||||
|
g_object_notify (G_OBJECT (calendar), "detail-width-chars");
|
||||||
|
gtk_widget_queue_resize_no_redraw (GTK_WIDGET (calendar));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_calendar_set_detail_height_rows:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
* @rows: detail height in rows.
|
||||||
|
*
|
||||||
|
* Updates the height of detail cells.
|
||||||
|
* See #GtkCalendar:detail-height-rows.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gtk_calendar_set_detail_height_rows (GtkCalendar *calendar,
|
||||||
|
gint rows)
|
||||||
|
{
|
||||||
|
GtkCalendarPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_CALENDAR (calendar));
|
||||||
|
|
||||||
|
priv = GTK_CALENDAR_GET_PRIVATE (calendar);
|
||||||
|
|
||||||
|
if (rows != priv->detail_height_rows)
|
||||||
|
{
|
||||||
|
priv->detail_height_rows = rows;
|
||||||
|
g_object_notify (G_OBJECT (calendar), "detail-height-rows");
|
||||||
|
gtk_widget_queue_resize_no_redraw (GTK_WIDGET (calendar));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_calendar_get_detail_width_chars:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
*
|
||||||
|
* Queries the width of detail cells, in characters.
|
||||||
|
* See #GtkCalendar:detail-width-chars.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*
|
||||||
|
* Return value: The width of detail cells, in characters.
|
||||||
|
*/
|
||||||
|
gint
|
||||||
|
gtk_calendar_get_detail_width_chars (GtkCalendar *calendar)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_CALENDAR (calendar), 0);
|
||||||
|
return GTK_CALENDAR_GET_PRIVATE (calendar)->detail_width_chars;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_calendar_get_detail_height_rows:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
*
|
||||||
|
* Queries the height of detail cells, in rows.
|
||||||
|
* See #GtkCalendar:detail-width-chars.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*
|
||||||
|
* Return value: The height of detail cells, in rows.
|
||||||
|
*/
|
||||||
|
gint
|
||||||
|
gtk_calendar_get_detail_height_rows (GtkCalendar *calendar)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_CALENDAR (calendar), 0);
|
||||||
|
return GTK_CALENDAR_GET_PRIVATE (calendar)->detail_height_rows;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_calendar_freeze:
|
* gtk_calendar_freeze:
|
||||||
* @calendar: a #GtkCalendar
|
* @calendar: a #GtkCalendar
|
||||||
|
|||||||
@ -60,6 +60,28 @@ typedef enum
|
|||||||
GTK_CALENDAR_WEEK_START_MONDAY = 1 << 4
|
GTK_CALENDAR_WEEK_START_MONDAY = 1 << 4
|
||||||
} GtkCalendarDisplayOptions;
|
} GtkCalendarDisplayOptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GtkCalendarDetailFunc:
|
||||||
|
* @calendar: a #GtkCalendar.
|
||||||
|
* @year: the year for which details are needed.
|
||||||
|
* @month: the month for which details are needed.
|
||||||
|
* @day: the day of @month for which details are needed.
|
||||||
|
* @user_data: the data passed with gtk_calendar_set_detail_func().
|
||||||
|
*
|
||||||
|
* This kind of functions provide Pango markup with detail information for the
|
||||||
|
* specified day. Examples for such details are holidays or appointments. The
|
||||||
|
* function returns %NULL when no information is available.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*
|
||||||
|
* Return value: Pango markup with details for the specified day, or %NULL.
|
||||||
|
*/
|
||||||
|
typedef G_CONST_RETURN gchar* (*GtkCalendarDetailFunc) (GtkCalendar *calendar,
|
||||||
|
guint year,
|
||||||
|
guint month,
|
||||||
|
guint day,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
struct _GtkCalendar
|
struct _GtkCalendar
|
||||||
{
|
{
|
||||||
GtkWidget widget;
|
GtkWidget widget;
|
||||||
@ -143,6 +165,20 @@ void gtk_calendar_get_date (GtkCalendar *calendar,
|
|||||||
guint *year,
|
guint *year,
|
||||||
guint *month,
|
guint *month,
|
||||||
guint *day);
|
guint *day);
|
||||||
|
|
||||||
|
void gtk_calendar_set_detail_func (GtkCalendar *calendar,
|
||||||
|
GtkCalendarDetailFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GDestroyNotify destroy);
|
||||||
|
|
||||||
|
void gtk_calendar_set_detail_width_chars (GtkCalendar *calendar,
|
||||||
|
gint chars);
|
||||||
|
void gtk_calendar_set_detail_height_rows (GtkCalendar *calendar,
|
||||||
|
gint rows);
|
||||||
|
|
||||||
|
gint gtk_calendar_get_detail_width_chars (GtkCalendar *calendar);
|
||||||
|
gint gtk_calendar_get_detail_height_rows (GtkCalendar *calendar);
|
||||||
|
|
||||||
#ifndef GTK_DISABLE_DEPRECATED
|
#ifndef GTK_DISABLE_DEPRECATED
|
||||||
void gtk_calendar_freeze (GtkCalendar *calendar);
|
void gtk_calendar_freeze (GtkCalendar *calendar);
|
||||||
void gtk_calendar_thaw (GtkCalendar *calendar);
|
void gtk_calendar_thaw (GtkCalendar *calendar);
|
||||||
|
|||||||
Reference in New Issue
Block a user