]> Pileus Git - ~andy/gtk/commitdiff
Some calendar improvements.
authorMatthias Clasen <matthiasc@src.gnome.org>
Thu, 8 May 2003 00:25:51 +0000 (00:25 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 8 May 2003 00:25:51 +0000 (00:25 +0000)
ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/ChangeLog
docs/reference/gtk/gtk-sections.txt
docs/reference/gtk/tmpl/gtkcalendar.sgml
gtk/gtkcalendar.c
gtk/gtkcalendar.h

index 0e73b9e27119c67c636b44d644502a23f36bd767..50335d78f2e1c2b07a666058a136e4ee217c9e66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkcalendar.[ch] (gtk_calendar_set_display_options): 
+       (gtk_calendar_get_display_options): New functions.
+       (gtk_calendar_display_options): Depreate.  (#64567)
+       (gtk_calendar_class_init): Add boolean properties for the display
+       options.  (#50949)
+
 Tue May  6 16:50:52 2003  Owen Taylor  <otaylor@redhat.com>
 
        Patch from James Henstridge to update to automake-1.7
index 0e73b9e27119c67c636b44d644502a23f36bd767..50335d78f2e1c2b07a666058a136e4ee217c9e66 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkcalendar.[ch] (gtk_calendar_set_display_options): 
+       (gtk_calendar_get_display_options): New functions.
+       (gtk_calendar_display_options): Depreate.  (#64567)
+       (gtk_calendar_class_init): Add boolean properties for the display
+       options.  (#50949)
+
 Tue May  6 16:50:52 2003  Owen Taylor  <otaylor@redhat.com>
 
        Patch from James Henstridge to update to automake-1.7
index 0e73b9e27119c67c636b44d644502a23f36bd767..50335d78f2e1c2b07a666058a136e4ee217c9e66 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkcalendar.[ch] (gtk_calendar_set_display_options): 
+       (gtk_calendar_get_display_options): New functions.
+       (gtk_calendar_display_options): Depreate.  (#64567)
+       (gtk_calendar_class_init): Add boolean properties for the display
+       options.  (#50949)
+
 Tue May  6 16:50:52 2003  Owen Taylor  <otaylor@redhat.com>
 
        Patch from James Henstridge to update to automake-1.7
index 0e73b9e27119c67c636b44d644502a23f36bd767..50335d78f2e1c2b07a666058a136e4ee217c9e66 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkcalendar.[ch] (gtk_calendar_set_display_options): 
+       (gtk_calendar_get_display_options): New functions.
+       (gtk_calendar_display_options): Depreate.  (#64567)
+       (gtk_calendar_class_init): Add boolean properties for the display
+       options.  (#50949)
+
 Tue May  6 16:50:52 2003  Owen Taylor  <otaylor@redhat.com>
 
        Patch from James Henstridge to update to automake-1.7
index 0e73b9e27119c67c636b44d644502a23f36bd767..50335d78f2e1c2b07a666058a136e4ee217c9e66 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkcalendar.[ch] (gtk_calendar_set_display_options): 
+       (gtk_calendar_get_display_options): New functions.
+       (gtk_calendar_display_options): Depreate.  (#64567)
+       (gtk_calendar_class_init): Add boolean properties for the display
+       options.  (#50949)
+
 Tue May  6 16:50:52 2003  Owen Taylor  <otaylor@redhat.com>
 
        Patch from James Henstridge to update to automake-1.7
index ceb1bf6b7decb35e62544666d2638edbd0eabc6c..52f7cd1106ea3983a321069d94d0999de96c31df 100644 (file)
@@ -1,3 +1,9 @@
+2003-05-08  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/tmpl/gtkcalendar.sgml: Deprecate gtk_calendar_display_options().
+
+       * gtk/gtk-sections.txt: Add gtk_calendar_[sg]et_display_options().
+
 2003-05-05  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtk-docs.sgml: 
index c58e148d7d9a19ffa383bdd0ff2065d08bab8834..fca986ac12a46a8409cfc4e02add05a2be3d8c95 100644 (file)
@@ -284,6 +284,8 @@ gtk_calendar_select_day
 gtk_calendar_mark_day
 gtk_calendar_unmark_day
 gtk_calendar_clear_marks
+gtk_calendar_get_display_options
+gtk_calendar_set_display_options
 gtk_calendar_display_options
 gtk_calendar_get_date
 gtk_calendar_freeze
index 439a428331aa9a3bc8be68d6f7ab15ca16a35f74..911f3f8077fd7ca8b95dd0ca29d821f8e1a8aafb 100644 (file)
@@ -21,7 +21,7 @@ Alternative, all marks can be cleared with gtk_calendar_clear_marks().
 </para>
 <para>
 The way in which the calendar itself is displayed can be altered using
-gtk_calendar_display_options().
+gtk_calendar_set_display_options().
 </para>
 <para>
 The selected date can be retrieved from a #GtkCalendar using
@@ -166,6 +166,7 @@ Sets display options (whether to display the heading and the month headings).
 
 @calendar: a #GtkCalendar.
 @flags: the display options to set.
+@Deprecated: Use gtk_calendar_set_display_options() instead
 
 
 <!-- ##### FUNCTION gtk_calendar_get_date ##### -->
index cccdc35c5ab1a724a8035e1c94e8851d0028d123..ee740d569b3ff15292c3d8980ecd5a7f6977a55a 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "gtkcalendar.h"
 #include "gtkmarshalers.h"
+#include "gtkintl.h"
 #include "gdk/gdkkeysyms.h"
 
 /***************************************************************************/
@@ -212,6 +213,20 @@ enum {
   LAST_SIGNAL
 };
 
+enum
+{
+  PROP_0,
+  PROP_YEAR,
+  PROP_MONTH,
+  PROP_DAY,
+  PROP_SHOW_HEADING,
+  PROP_SHOW_DAY_NAMES,
+  PROP_NO_MONTH_CHANGE,
+  PROP_SHOW_WEEK_NUMBERS,
+  PROP_WEEK_START_MONDAY,
+  PROP_LAST
+};
+
 static gint gtk_calendar_signals[LAST_SIGNAL] = { 0 };
 
 static GtkWidgetClass *parent_class = NULL;
@@ -261,6 +276,14 @@ typedef void (*GtkCalendarSignalDate) (GtkObject *object, guint arg1, guint arg2
 static void gtk_calendar_class_init    (GtkCalendarClass *class);
 static void gtk_calendar_init          (GtkCalendar *calendar);
 static void gtk_calendar_finalize      (GObject *calendar);
+static void gtk_calendar_set_property   (GObject      *object,
+                                        guint         prop_id,
+                                        const GValue *value,
+                                        GParamSpec   *pspec);
+static void gtk_calendar_get_property   (GObject      *object,
+                                        guint         prop_id,
+                                        GValue       *value,
+                                        GParamSpec   *pspec);
 static void gtk_calendar_realize       (GtkWidget *widget);
 static void gtk_calendar_unrealize     (GtkWidget *widget);
 static void gtk_calendar_size_request  (GtkWidget *widget,
@@ -347,6 +370,8 @@ gtk_calendar_class_init (GtkCalendarClass *class)
   
   parent_class = g_type_class_peek_parent (class);
   
+  gobject_class->set_property = gtk_calendar_set_property;
+  gobject_class->get_property = gtk_calendar_get_property;
   gobject_class->finalize = gtk_calendar_finalize;
 
   widget_class->realize = gtk_calendar_realize;
@@ -370,6 +395,64 @@ gtk_calendar_class_init (GtkCalendarClass *class)
   class->prev_year = NULL;
   class->next_year = NULL;
 
+  g_object_class_install_property (gobject_class,
+                                   PROP_YEAR,
+                                   g_param_spec_int ("year",
+                                                    _("Year"),
+                                                    _("The selected year"),
+                                                    0, G_MAXINT, 0,
+                                                    G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_MONTH,
+                                   g_param_spec_int ("month",
+                                                    _("Month"),
+                                                    _("The selected month (as a number between 0 and 11)"),
+                                                    0, 11, 0,
+                                                    G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_DAY,
+                                   g_param_spec_int ("day",
+                                                    _("Day"),
+                                                    _("The selected day (as a number between 1 and 31, or 0 to unselect the currently selected day)"),
+                                                    0, 31, 0,
+                                                    G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_SHOW_HEADING,
+                                   g_param_spec_boolean ("show_heading",
+                                                        _("Show Heading"),
+                                                        _("If TRUE, a heading is displayed"),
+                                                        TRUE,
+                                                        G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_SHOW_DAY_NAMES,
+                                   g_param_spec_boolean ("show_day_names",
+                                                        _("Show Day Names"),
+                                                        _("If TRUE, day names are displayed"),
+                                                        TRUE,
+                                                        G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_NO_MONTH_CHANGE,
+                                   g_param_spec_boolean ("no_month_change",
+                                                        _("No Month Change"),
+                                                        _("If TRUE, the selected month can not be changed"),
+                                                        FALSE,
+                                                        G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_SHOW_WEEK_NUMBERS,
+                                   g_param_spec_boolean ("show_week_numbers",
+                                                        _("Show Week Numbers"),
+                                                        _("If TRUE, week numbers are displayed"),
+                                                        FALSE,
+                                                        G_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+                                   PROP_WEEK_START_MONDAY,
+                                   g_param_spec_boolean ("week_start_monday",
+                                                        _("Week Start Monday"),
+                                                        _("If TRUE, Monday is displayed as the first day of the week"),
+                                                        FALSE,
+                                                        G_PARAM_READWRITE));
+
+
   gtk_calendar_signals[MONTH_CHANGED_SIGNAL] =
     g_signal_new ("month_changed",
                  G_OBJECT_CLASS_TYPE (gobject_class),
@@ -1990,32 +2073,56 @@ gtk_calendar_compute_days (GtkCalendar *calendar)
     }
 }
 
-/* ----------------------------------------------------------------------
-   NAME:       gtk_calendar_display_options
-   DESCRIPTION:        Set display options (whether to display the
-   heading and the month headings)
-   
-   flags is can be an XOR of:
-   GTK_CALENDAR_SHOW_HEADING
-   GTK_CALENDAR_SHOW_DAY_NAMES
-   GTK_CALENDAR_NO_MONTH_CHANGE
-   GTK_CALENDAR_SHOW_WEEK_NUMBERS
-   GTK_CALENDAR_WEEK_START_MONDAY
-   ---------------------------------------------------------------------- */
-
 void
 gtk_calendar_display_options (GtkCalendar             *calendar,
                              GtkCalendarDisplayOptions flags)
+{
+  gtk_calendar_set_display_options (calendar, flags);
+}
+
+/**
+ * gtk_calendar_get_display_options:
+ * @calendar: a #GtkCalendar
+ * 
+ * Returns the current display options of @calendar. 
+ * 
+ * Return value: the display options.
+ *
+ * Since: 2.4
+ **/
+GtkCalendarDisplayOptions 
+gtk_calendar_get_display_options (GtkCalendar         *calendar)
+{
+  g_return_val_if_fail (GTK_IS_CALENDAR (calendar), 0);
+
+  return calendar->display_flags;
+}
+
+/**
+ * gtk_calendar_set_display_options:
+ * @calendar: a #GtkCalendar
+ * @flags: the display options to set
+ * 
+ * Sets display options (whether to display the heading and the month  
+ * headings).
+ *
+ * Since: 2.4
+ **/
+void
+gtk_calendar_set_display_options (GtkCalendar         *calendar,
+                                 GtkCalendarDisplayOptions flags)
 {
   GtkCalendarPrivateData *private_data;
   gint resize = 0;
   GtkWidget *widget;
   gint i;
+  GtkCalendarDisplayOptions old_flags;
   
   g_return_if_fail (GTK_IS_CALENDAR (calendar));
   
   widget = GTK_WIDGET (calendar);
   private_data = GTK_CALENDAR_PRIVATE_DATA (calendar);
+  old_flags = calendar->display_flags;
   
   if (GTK_WIDGET_REALIZED (widget))
     {
@@ -2126,6 +2233,18 @@ gtk_calendar_display_options (GtkCalendar               *calendar,
   else
     calendar->display_flags = flags;
   
+  g_object_freeze_notify (G_OBJECT (calendar));
+  if ((old_flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_HEADING)
+    g_object_notify (G_OBJECT (calendar), "show_heading");
+  if ((old_flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_DAY_NAMES)
+    g_object_notify (G_OBJECT (calendar), "show_day_names");
+  if ((old_flags ^ calendar->display_flags) & GTK_CALENDAR_NO_MONTH_CHANGE)
+    g_object_notify (G_OBJECT (calendar), "no_month_change");
+  if ((old_flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
+    g_object_notify (G_OBJECT (calendar), "show_week_numbers");
+  if ((old_flags ^ calendar->display_flags) & GTK_CALENDAR_WEEK_START_MONDAY)
+    g_object_notify (G_OBJECT (calendar), "week_start_monday");
+  g_object_thaw_notify (G_OBJECT (calendar));
 }
 
 gboolean
@@ -2142,6 +2261,12 @@ gtk_calendar_select_month (GtkCalendar *calendar,
   gtk_calendar_compute_days (calendar);
   
   gtk_widget_queue_draw (GTK_WIDGET (calendar));
+
+  g_object_freeze_notify (G_OBJECT (calendar));
+  g_object_notify (G_OBJECT (calendar), "month");
+  g_object_notify (G_OBJECT (calendar), "year");
+  g_object_thaw_notify (G_OBJECT (calendar));
+
   g_signal_emit (calendar,
                 gtk_calendar_signals[MONTH_CHANGED_SIGNAL],
                 0);
@@ -2177,6 +2302,8 @@ gtk_calendar_select_day (GtkCalendar *calendar,
        gtk_calendar_paint_day_num (GTK_WIDGET (calendar), day);
     }
   
+  g_object_notify (G_OBJECT (calendar), "day");
+
   g_signal_emit (calendar,
                 gtk_calendar_signals[DAY_SELECTED_SIGNAL],
                 0);
@@ -2720,3 +2847,129 @@ gtk_calendar_key_press (GtkWidget   *widget,
   
   return return_val;
 }
+
+static void
+gtk_calendar_set_display_option (GtkCalendar              *calendar,
+                                GtkCalendarDisplayOptions flag,
+                                gboolean                  setting)
+{
+  GtkCalendarDisplayOptions flags;
+  if (setting) 
+    flags = calendar->display_flags | flag;
+  else
+    flags = calendar->display_flags & ~flag; 
+  gtk_calendar_display_options (calendar, flags);
+}
+
+static gboolean
+gtk_calendar_get_display_option (GtkCalendar              *calendar,
+                                GtkCalendarDisplayOptions flag)
+{
+  return (calendar->display_flags & flag) != 0;
+}
+
+
+static void 
+gtk_calendar_set_property (GObject      *object,
+                          guint         prop_id,
+                          const GValue *value,
+                          GParamSpec   *pspec)
+{
+  GtkCalendar *calendar;
+
+  calendar = GTK_CALENDAR (object);
+
+  switch (prop_id) 
+    {
+    case PROP_YEAR:
+      gtk_calendar_select_month (calendar,
+                                calendar->month,
+                                g_value_get_int (value));
+      break;
+    case PROP_MONTH:
+      gtk_calendar_select_month (calendar,
+                                g_value_get_int (value),
+                                calendar->year);
+      break;
+    case PROP_DAY:
+      gtk_calendar_select_day (calendar,
+                              g_value_get_int (value));
+      break;
+    case PROP_SHOW_HEADING:
+      gtk_calendar_set_display_option (calendar,
+                                      GTK_CALENDAR_SHOW_HEADING,
+                                      g_value_get_boolean (value));
+      break;
+    case PROP_SHOW_DAY_NAMES:
+      gtk_calendar_set_display_option (calendar,
+                                      GTK_CALENDAR_SHOW_DAY_NAMES,
+                                      g_value_get_boolean (value));
+      break;
+    case PROP_NO_MONTH_CHANGE:
+      gtk_calendar_set_display_option (calendar,
+                                      GTK_CALENDAR_NO_MONTH_CHANGE,
+                                      g_value_get_boolean (value));
+      break;
+    case PROP_SHOW_WEEK_NUMBERS:
+      gtk_calendar_set_display_option (calendar,
+                                      GTK_CALENDAR_SHOW_WEEK_NUMBERS,
+                                      g_value_get_boolean (value));
+      break;
+    case PROP_WEEK_START_MONDAY:
+      gtk_calendar_set_display_option (calendar,
+                                      GTK_CALENDAR_WEEK_START_MONDAY,
+                                      g_value_get_boolean (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void 
+gtk_calendar_get_property (GObject      *object,
+                          guint         prop_id,
+                          GValue       *value,
+                          GParamSpec   *pspec)
+{
+  GtkCalendar *calendar;
+
+  calendar = GTK_CALENDAR (object);
+
+  switch (prop_id) 
+    {
+    case PROP_YEAR:
+      g_value_set_int (value, calendar->year);
+      break;
+    case PROP_MONTH:
+      g_value_set_int (value, calendar->month);
+      break;
+    case PROP_DAY:
+      g_value_set_int (value, calendar->selected_day);
+      break;
+    case PROP_SHOW_HEADING:
+      g_value_set_boolean (value, gtk_calendar_get_display_option (calendar,
+                                                                  GTK_CALENDAR_SHOW_HEADING));
+      break;
+    case PROP_SHOW_DAY_NAMES:
+      g_value_set_boolean (value, gtk_calendar_get_display_option (calendar,
+                                                                  GTK_CALENDAR_SHOW_DAY_NAMES));
+      break;
+    case PROP_NO_MONTH_CHANGE:
+      g_value_set_boolean (value, gtk_calendar_get_display_option (calendar,
+                                                                  GTK_CALENDAR_NO_MONTH_CHANGE));
+      break;
+    case PROP_SHOW_WEEK_NUMBERS:
+      g_value_set_boolean (value, gtk_calendar_get_display_option (calendar,
+                                                                  GTK_CALENDAR_SHOW_WEEK_NUMBERS));
+      break;
+    case PROP_WEEK_START_MONDAY:
+      g_value_set_boolean (value, gtk_calendar_get_display_option (calendar,
+                                                                  GTK_CALENDAR_WEEK_START_MONDAY));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
index 7ecff247dd404e320523aa10c3ff4afdb32c5b64..ef7143588e417484d89422ec251e84d4a6276ad4 100644 (file)
@@ -131,8 +131,14 @@ gboolean   gtk_calendar_unmark_day (GtkCalendar *calendar,
 void      gtk_calendar_clear_marks     (GtkCalendar *calendar);
 
 
+void      gtk_calendar_set_display_options (GtkCalendar              *calendar,
+                                            GtkCalendarDisplayOptions flags);
+GtkCalendarDisplayOptions
+           gtk_calendar_get_display_options (GtkCalendar             *calendar);
+#ifndef GTK_DISABLE_DEPRECATED
 void      gtk_calendar_display_options (GtkCalendar              *calendar,
                                         GtkCalendarDisplayOptions flags);
+#endif
 
 void      gtk_calendar_get_date        (GtkCalendar *calendar, 
                                         guint       *year,