2008-09-15 Alberto Garcia <agarcia@igalia.com>
[hildon] / src / hildon-calendar.h
1 /*
2  * This file is a part of hildon
3  *
4  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
5  *
6  * GTK Calendar Widget
7  * Copyright (C) 1998 Cesar Miquel and Shawn T. Amundson
8
9  * HldonCalendar modifications
10  * Copyright (C) 2005, 2006 Nokia Corporation. 
11  *
12  * Contact: Michael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
13  *
14  * This library is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU Lesser General Public
16  * License as published by the Free Software Foundation; either
17  * version 2 of the License, or (at your option) any later version. or (at your option) any later version.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free
26  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27  */
28
29 /*
30  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
31  * file for a list of people on the GTK+ Team.  See the ChangeLog
32  * files for a list of changes.  These files are distributed with
33  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
34  */
35
36 #ifndef                                         __HILDON_CALENDAR_H__
37 #define                                         __HILDON_CALENDAR_H__
38
39 #include                                        <gtk/gtk.h>
40
41 G_BEGIN_DECLS
42
43 #define                                         HILDON_TYPE_CALENDAR \
44                                                 (hildon_calendar_get_type ())
45
46 #define                                         HILDON_CALENDAR(obj) \
47                                                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
48                                                 HILDON_TYPE_CALENDAR, HildonCalendar))
49
50 #define                                         HILDON_CALENDAR_CLASS(klass) \
51                                                 (G_TYPE_CHECK_CLASS_CAST ((klass), \
52                                                 HILDON_TYPE_CALENDAR, HildonCalendarClass))
53
54 #define                                         HILDON_IS_CALENDAR(obj) \
55                                                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HILDON_TYPE_CALENDAR))
56
57 #define                                         HILDON_IS_CALENDAR_CLASS(klass) \
58                                                 (G_TYPE_CHECK_CLASS_TYPE ((klass), HILDON_TYPE_CALENDAR))
59
60 #define                                         HILDON_CALENDAR_GET_CLASS(obj) \
61                                                 (G_TYPE_INSTANCE_GET_CLASS ((obj), HILDON_TYPE_CALENDAR, HildonCalendarClass))
62
63 typedef struct                                  _HildonCalendar HildonCalendar;
64
65 typedef struct                                  _HildonCalendarClass HildonCalendarClass;
66
67 typedef enum
68 {
69     HILDON_CALENDAR_SHOW_HEADING                = 1 << 0,
70     HILDON_CALENDAR_SHOW_DAY_NAMES              = 1 << 1,
71     HILDON_CALENDAR_NO_MONTH_CHANGE             = 1 << 2,
72     HILDON_CALENDAR_SHOW_WEEK_NUMBERS           = 1 << 3,
73     HILDON_CALENDAR_WEEK_START_MONDAY           = 1 << 4
74 } HildonCalendarDisplayOptions;
75
76 struct                                          _HildonCalendar
77 {
78     GtkWidget widget;
79
80     GtkStyle  *header_style;
81     GtkStyle  *label_style;
82
83     gint month;
84     gint year;
85     gint selected_day;
86
87     gint day_month[6][7];
88     gint day[6][7];
89
90     gint num_marked_dates;
91     gint marked_date[31];
92     HildonCalendarDisplayOptions  display_flags;
93     GdkColor marked_date_color[31];
94
95     GdkGC *gc;
96     GdkGC *xor_gc;
97
98     gint focus_row;
99     gint focus_col;
100
101     gint highlight_row;
102     gint highlight_col;
103
104     gpointer private_data;
105     gchar grow_space [32];
106
107     /* Padding for future expansion */
108     void (*_gtk_reserved1) (void);
109     void (*_gtk_reserved2) (void);
110     void (*_gtk_reserved3) (void);
111     void (*_gtk_reserved4) (void);
112 };
113
114 struct                                          _HildonCalendarClass
115 {
116     GtkWidgetClass parent_class;
117
118     /* Signal handlers */
119     void (* month_changed)                      (HildonCalendar *calendar);
120     void (* day_selected)                       (HildonCalendar *calendar);
121     void (* day_selected_double_click)          (HildonCalendar *calendar);
122     void (* prev_month)                         (HildonCalendar *calendar);
123     void (* next_month)                         (HildonCalendar *calendar);
124     void (* prev_year)                          (HildonCalendar *calendar);
125     void (* next_year)                          (HildonCalendar *calendar);
126 };
127
128
129 GType G_GNUC_CONST
130 hildon_calendar_get_type                        (void);
131
132 GtkWidget* 
133 hildon_calendar_new                             (void);
134
135 gboolean   
136 hildon_calendar_select_month                    (HildonCalendar *calendar, 
137                                                  guint month,
138                                                  guint year);
139
140 void       
141 hildon_calendar_select_day                      (HildonCalendar *calendar,
142                                                  guint day);
143
144 gboolean   
145 hildon_calendar_mark_day                        (HildonCalendar *calendar,
146                                                  guint day);
147
148 gboolean   
149 hildon_calendar_unmark_day                      (HildonCalendar *calendar,
150                                                  guint day);
151
152 void    
153 hildon_calendar_clear_marks                     (HildonCalendar *calendar);
154
155 void       
156 hildon_calendar_set_display_options             (HildonCalendar *calendar,
157                                                  HildonCalendarDisplayOptions flags);
158
159 HildonCalendarDisplayOptions
160 hildon_calendar_get_display_options             (HildonCalendar *calendar);
161
162 void       
163 hildon_calendar_get_date                        (HildonCalendar *calendar, 
164                                                  guint *year,
165                                                  guint *month,
166                                                  guint *day);
167
168 void      
169 hildon_calendar_freeze                          (HildonCalendar *calendar);
170
171 void    
172 hildon_calendar_thaw                            (HildonCalendar *calendar);
173
174 G_END_DECLS
175
176 #endif                                          /* __HILDON_CALENDAR_H__ */