]> saetta.ns0.it Git - libgtkdateentry/commitdiff
Added property editable-with-calendar.
authorAndrea Zagli <azagli@libero.it>
Wed, 11 Nov 2009 17:28:22 +0000 (18:28 +0100)
committerAndrea Zagli <azagli@libero.it>
Wed, 11 Nov 2009 17:28:22 +0000 (18:28 +0100)
configure.ac
docs/reference/gtkdateentry-decl-list.txt
docs/reference/gtkdateentry-decl.txt
docs/reference/gtkdateentry-undocumented.txt
docs/reference/gtkdateentry-unused.txt
docs/reference/gtkdateentry.args
docs/reference/tmpl/gtkdateentry.sgml
src/gtkdateentry.c
src/gtkdateentry.h
tests/date_entry.c

index 53cae48880814f4ec32e976b8912cdb425227475..f1f10f0e15f4e80a9272e9a026dc2628439b5281 100644 (file)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.59)
-AC_INIT([GtkDateEntry], [0.0.2], [azagli@inwind.it])
+AC_INIT([GtkDateEntry], [0.0.3], [azagli@libero.it])
 AC_CONFIG_SRCDIR([src/gtkdateentry.c])
 AC_CONFIG_HEADER([config.h])
 
index 925b073666545520973ee60096e43a48b56bf2a3..b060f65cd3b7f36839fa71eafde1bf6ab3498aec 100644 (file)
@@ -18,6 +18,7 @@ gtk_date_entry_set_date_tm
 gtk_date_entry_set_date_gdate
 gtk_date_entry_is_valid
 gtk_date_entry_set_editable
+gtk_date_entry_set_editable_with_calendar
 gtk_date_entry_set_calendar_button_visible
 <SUBSECTION Standard>
 GTK_IS_DATE
index d017b0549ef6b7e57a8324a69cb928876c1aae8d..b34e66de6b1c1c55e1159a4504cefe03e528a100 100644 (file)
@@ -108,6 +108,11 @@ GtkDateEntry *date
 GtkDateEntry *date,gboolean is_editable
 </FUNCTION>
 <FUNCTION>
+<NAME>gtk_date_entry_set_editable_with_calendar</NAME>
+<RETURNS>void </RETURNS>
+GtkDateEntry *date,gboolean is_editable_with_calendar
+</FUNCTION>
+<FUNCTION>
 <NAME>gtk_date_entry_set_calendar_button_visible</NAME>
 <RETURNS>void </RETURNS>
 GtkDateEntry *date,gboolean is_visible
index 36fc823db13aaeed2b79adf35da5813067eb8769..bc71459fad622e75f5f4afafadae928d114176c6 100644 (file)
@@ -1,5 +1,5 @@
-81% symbol docs coverage.
-13 symbols documented.
+83% symbol docs coverage.
+15 symbols documented.
 0 symbols incomplete.
 3 not documented.
 
index 1ffae143029b1ff7ef3022d8f3b3e15ad0c5b1d1..ccad406bf893ba3f0173c0419c7d16c31722280b 100644 (file)
@@ -7,3 +7,4 @@ gtk_date_entry_set_date_gdate
 gtk_date_entry_set_date_strf
 gtk_date_entry_set_date_tm
 gtk_date_entry_set_editable
+gtk_date_entry_set_editable_with_calendar
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c2ba6066f6bf4cc4814446afb30b0704f06453a9 100644 (file)
@@ -0,0 +1,10 @@
+<ARG>
+<NAME>GtkDateEntry::editable-with-calendar</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Tabulation inside the widget</NICK>
+<BLURB>Whether pressing tab moves between mask's parts or outside the widget.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
index 82935a36e5e7dabfb5b8ca1f8b0f624c9abf4dd5..646042585dc75a19b5b78a3fd9575b7abf03eef8 100644 (file)
@@ -24,6 +24,11 @@ using the functions below.
 </para>
 
 
+<!-- ##### ARG GtkDateEntry:editable-with-calendar ##### -->
+<para>
+
+</para>
+
 <!-- ##### FUNCTION gtk_date_entry_new ##### -->
 <para>
 
index 45baf051fac57f80276aa934e3b74e381a58742b..d62428f5e5bcee07e8a05bf2cb0a47f6c3f148b2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * GtkDateEntry widget for GTK+
  *
- * Copyright (C) 2005-2006 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2005-2009 Andrea Zagli <azagli@libero.it>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
 
 #include "gtkdateentry.h"
 
+enum
+{
+       PROP_0,
+       PROP_EDITABLE_WITH_CALENDAR
+};
+
 static void gtk_date_entry_class_init (GtkDateEntryClass *klass);
 static void gtk_date_entry_init (GtkDateEntry *date);
 
@@ -56,6 +62,15 @@ static void calendar_on_day_selected (GtkCalendar *calendar,
 static void calendar_on_day_selected_double_click (GtkCalendar *calendar,
                                                    gpointer user_data);
 
+static void gtk_date_entry_set_property (GObject *object,
+                                           guint property_id,
+                                           const GValue *value,
+                                           GParamSpec *pspec);
+static void gtk_date_entry_get_property (GObject *object,
+                                           guint property_id,
+                                           GValue *value,
+                                           GParamSpec *pspec);
+
 static GtkWidgetClass *parent_class = NULL;
 
 
@@ -71,6 +86,7 @@ struct _GtkDateEntryPrivate
 
                gchar separator;
                gchar *format;
+               gboolean editable_with_calendar;
        };
 
 GType
@@ -111,6 +127,16 @@ gtk_date_entry_class_init (GtkDateEntryClass *klass)
 
        widget_class = (GtkWidgetClass*) klass;
        parent_class = g_type_class_peek_parent (klass);
+
+       object_class->set_property = gtk_date_entry_set_property;
+       object_class->get_property = gtk_date_entry_get_property;
+
+       g_object_class_install_property (object_class, PROP_EDITABLE_WITH_CALENDAR,
+                                        g_param_spec_boolean ("editable-with-calendar",
+                                                              "Tabulation inside the widget",
+                                                              "Whether pressing tab moves between mask's parts or outside the widget",
+                                                              FALSE,
+                                                              G_PARAM_READWRITE));
 }
 
 static void
@@ -629,6 +655,24 @@ gtk_date_entry_set_editable (GtkDateEntry *date,
        gtk_widget_set_sensitive (priv->btnCalendar, is_editable);
 }
 
+/**
+ * gtk_date_entry_set_editable_with_calendar:
+ * @date:  a #GtkDateEntry.
+ * @is_editable_with_calendar: TRUE if the user is allowed to edit the text
+ * in the widget only from the calendar.
+ *
+ * Determines if the user can edit the text in the #GtkDateEntry widget only
+ * from the calendar or not.
+ */
+void
+gtk_date_entry_set_editable_with_calendar (GtkDateEntry *date,
+                                  gboolean is_editable_with_calendar)
+{
+       GtkDateEntryPrivate *priv = GTK_DATE_ENTRY_GET_PRIVATE (date);
+
+       gtk_editable_set_editable (GTK_EDITABLE (priv->day), !is_editable_with_calendar);
+}
+
 /**
  * gtk_date_entry_set_calendar_button_visible:
  * @date: a #GtkDateEntry.
@@ -844,3 +888,41 @@ calendar_on_day_selected_double_click (GtkCalendar *calendar,
 {
        hide_popup ((GtkWidget *)user_data);
 }
+
+static void
+gtk_date_entry_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
+{
+       GtkDateEntry *date_entry = GTK_DATE_ENTRY (object);
+
+       GtkDateEntryPrivate *priv = GTK_DATE_ENTRY_GET_PRIVATE (date_entry);
+
+       switch (property_id)
+               {
+                       case PROP_EDITABLE_WITH_CALENDAR:
+                               gtk_date_entry_set_editable_with_calendar (date_entry, g_value_get_boolean (value));
+                               break;
+
+                       default:
+                               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+                               break;
+               }
+}
+
+static void
+gtk_date_entry_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
+{
+       GtkDateEntry *date_entry = GTK_DATE_ENTRY (object);
+
+       GtkDateEntryPrivate *priv = GTK_DATE_ENTRY_GET_PRIVATE (date_entry);
+
+       switch (property_id)
+               {
+                       case PROP_EDITABLE_WITH_CALENDAR:
+                               g_value_set_boolean (value, priv->editable_with_calendar);
+                               break;
+
+                       default:
+                               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+                               break;
+               }
+}
index 7c0d83d29f3f1e0a209b328b100ffc0264864c8c..89cc9e6b08cca92b92a756058eac8762e1bcbb15 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * GtkDateEntry widget for GTK+
  *
- * Copyright (C) 2005-2006 Andrea Zagli <azagli@libero.it>
+ * Copyright (C) 2005-2009 Andrea Zagli <azagli@libero.it>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -86,6 +86,8 @@ gboolean gtk_date_entry_is_valid (GtkDateEntry *date);
 
 void gtk_date_entry_set_editable (GtkDateEntry *date,
                                   gboolean is_editable);
+void gtk_date_entry_set_editable_with_calendar (GtkDateEntry *date,
+                                  gboolean is_editable_with_calendar);
 
 void gtk_date_entry_set_calendar_button_visible (GtkDateEntry *date,
                                                  gboolean is_visible);
index 029923b96368b8492bfa8801bc4ccd974ed7196c..f538a6cbf8486d6f110a1e7c89b47236222b848f 100644 (file)
@@ -1,20 +1,42 @@
+/*
+ * GtkDateEntry widget for GTK+
+ *
+ * Copyright (C) 2005-2009 Andrea Zagli <azagli@libero.it>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
 #include <gtk/gtk.h>
 
 #include <gtkdateentry.h>
 
-GtkWidget *window,
-          *table,
-          *date,
-          *separator,
-          *btnSeparator,
-          *format,
-          *btnFormat,
-                                       *txtSetStrf,
-                                       *txtSetStrfFormat,
-                                       *txtSetStrfSep,
-                                       *btnSetStrf,
-                                       *tbtnEditable,
-                                       *tbtnSensitive;
+GtkWidget *window;
+GtkWidget *table;
+GtkWidget *date;
+GtkWidget *separator;
+GtkWidget *btnSeparator;
+GtkWidget *format;
+GtkWidget *btnFormat;
+GtkWidget *txtSetStrf;
+GtkWidget *txtSetStrfFormat;
+GtkWidget *txtSetStrfSep;
+GtkWidget *btnSetStrf;
+GtkWidget *tbtnEditable;
+GtkWidget *tbtnEditableWithCalendar;
+GtkWidget *tbtnSensitive;
 
 static void
 on_btnSeparator_clicked (GtkButton *button,
@@ -61,6 +83,22 @@ on_tbtnEditable_toggled (GtkToggleButton *togglebutton,
                }
 }
 
+static void
+on_tbtnEditableWithCalendar_toggled (GtkToggleButton *togglebutton,
+                         gpointer user_data)
+{
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tbtnEditableWithCalendar)))
+               {
+                       gtk_date_entry_set_editable_with_calendar (GTK_DATE_ENTRY (date), TRUE);
+                       gtk_button_set_label (GTK_BUTTON (tbtnEditableWithCalendar), "Editable only with calendar");
+               }
+       else
+               {
+                       gtk_date_entry_set_editable_with_calendar (GTK_DATE_ENTRY (date), FALSE);
+                       gtk_button_set_label (GTK_BUTTON (tbtnEditableWithCalendar), "Editable also with calendar");
+               }
+}
+
 static void
 on_tbtnSensitive_toggled (GtkToggleButton *togglebutton,
                           gpointer user_data)
@@ -82,93 +120,100 @@ main (int argc, char **argv)
 {
        GtkWidget *label;
 
-  gtk_init (&argc, &argv);
+       gtk_init (&argc, &argv);
 
-  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
-  gtk_window_set_title (GTK_WINDOW (window), "GtkDateEntry Test");
+       gtk_window_set_title (GTK_WINDOW (window), "GtkDateEntry Test");
 
-  g_signal_connect (G_OBJECT (window), "destroy",
-                               G_CALLBACK (gtk_main_quit), NULL);
+       g_signal_connect (G_OBJECT (window), "destroy",
+                       G_CALLBACK (gtk_main_quit), NULL);
 
-  table = gtk_table_new (5, 3, FALSE);
-  gtk_container_add (GTK_CONTAINER (window), table);
-  gtk_widget_show (table);
+       table = gtk_table_new (5, 3, FALSE);
+       gtk_container_add (GTK_CONTAINER (window), table);
+       gtk_widget_show (table);
 
        label = gtk_label_new ("GtkDateEntry");
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (label);
+       gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (label);
 
-  date = gtk_date_entry_new ("dmY", '/', TRUE);
-  gtk_table_attach (GTK_TABLE (table), date, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (date);
+       date = gtk_date_entry_new ("dmY", '/', TRUE);
+       gtk_table_attach (GTK_TABLE (table), date, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (date);
 
        label = gtk_label_new ("Separator");
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (label);
+       gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (label);
 
-  separator = gtk_entry_new ();
+       separator = gtk_entry_new ();
        gtk_entry_set_text (GTK_ENTRY (separator), "/");
        gtk_entry_set_max_length (GTK_ENTRY (separator), 1);
-  gtk_table_attach (GTK_TABLE (table), separator, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (separator);
+       gtk_table_attach (GTK_TABLE (table), separator, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (separator);
 
-  btnSeparator = gtk_button_new_with_label ("Set separator");
-  gtk_table_attach (GTK_TABLE (table), btnSeparator, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (btnSeparator);
+       btnSeparator = gtk_button_new_with_label ("Set separator");
+       gtk_table_attach (GTK_TABLE (table), btnSeparator, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (btnSeparator);
 
        g_signal_connect (G_OBJECT (btnSeparator), "clicked",
-                         G_CALLBACK (on_btnSeparator_clicked), NULL);
+                     G_CALLBACK (on_btnSeparator_clicked), NULL);
 
        label = gtk_label_new ("Format");
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (label);
+       gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (label);
 
-  format = gtk_entry_new ();
+       format = gtk_entry_new ();
        gtk_entry_set_text (GTK_ENTRY (format), "dmY");
        gtk_entry_set_max_length (GTK_ENTRY (format), 3);
-  gtk_table_attach (GTK_TABLE (table), format, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (format);
+       gtk_table_attach (GTK_TABLE (table), format, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (format);
 
-  btnFormat = gtk_button_new_with_label ("Set format");
-  gtk_table_attach (GTK_TABLE (table), btnFormat, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (btnFormat);
+       btnFormat = gtk_button_new_with_label ("Set format");
+       gtk_table_attach (GTK_TABLE (table), btnFormat, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (btnFormat);
 
        g_signal_connect (G_OBJECT (btnFormat), "clicked",
                          G_CALLBACK (on_btnFormat_clicked), NULL);
 
        label = gtk_label_new ("Strf");
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (label);
+       gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (label);
 
-  txtSetStrf = gtk_entry_new ();
-  gtk_table_attach (GTK_TABLE (table), txtSetStrf, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (txtSetStrf);
+       txtSetStrf = gtk_entry_new ();
+       gtk_table_attach (GTK_TABLE (table), txtSetStrf, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (txtSetStrf);
 
-  btnSetStrf = gtk_button_new_with_label ("set_date_strf");
-  gtk_table_attach (GTK_TABLE (table), btnSetStrf, 2, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (btnSetStrf);
+       btnSetStrf = gtk_button_new_with_label ("set_date_strf");
+       gtk_table_attach (GTK_TABLE (table), btnSetStrf, 2, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (btnSetStrf);
 
        g_signal_connect (G_OBJECT (btnSetStrf), "clicked",
                          G_CALLBACK (on_btnSetStrf_clicked), NULL);
 
        tbtnEditable = gtk_toggle_button_new_with_label ("Editable");
-  gtk_table_attach (GTK_TABLE (table), tbtnEditable, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (tbtnEditable);
+       gtk_table_attach (GTK_TABLE (table), tbtnEditable, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (tbtnEditable);
 
        g_signal_connect (G_OBJECT (tbtnEditable), "toggled",
                          G_CALLBACK (on_tbtnEditable_toggled), NULL);
 
+       tbtnEditableWithCalendar = gtk_toggle_button_new_with_label ("Editable also with calendar");
+       gtk_table_attach (GTK_TABLE (table), tbtnEditableWithCalendar, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (tbtnEditableWithCalendar);
+
+       g_signal_connect (G_OBJECT (tbtnEditableWithCalendar), "toggled",
+                         G_CALLBACK (on_tbtnEditableWithCalendar_toggled), NULL);
+
        tbtnSensitive = gtk_toggle_button_new_with_label ("Sensitive");
-  gtk_table_attach (GTK_TABLE (table), tbtnSensitive, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  gtk_widget_show (tbtnSensitive);
+       gtk_table_attach (GTK_TABLE (table), tbtnSensitive, 2, 3, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+       gtk_widget_show (tbtnSensitive);
 
        g_signal_connect (G_OBJECT (tbtnSensitive), "toggled",
                          G_CALLBACK (on_tbtnSensitive_toggled), NULL);
 
        gtk_widget_show (window);
   
-  gtk_main ();
-  
-  return 0;
+       gtk_main ();
+
+       return 0;
 }