]> www.fi.muni.cz Git - evince.git/blob - libdocument/ev-form-field.h
Add EvPage so that we can hold a reference to the backend page. Form
[evince.git] / libdocument / ev-form-field.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
2 /* this file is part of evince, a gnome document viewer
3  *
4  *  Copyright (C) 2006 Julien Rebetez
5  *
6  * Evince is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Evince is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef EV_FORM_FIELD_H
22 #define EV_FORM_FIELD_H
23
24 #include <glib-object.h>
25
26 #include "ev-document.h"
27
28 G_BEGIN_DECLS
29
30 #define EV_TYPE_FORM_FIELD                        (ev_form_field_get_type())
31 #define EV_FORM_FIELD(object)                     (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD, EvFormField))
32 #define EV_FORM_FIELD_CLASS(klass)                (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD, EvFormFieldClass))
33 #define EV_IS_FORM_FIELD(object)                  (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD))
34 #define EV_IS_FORM_FIELD_CLASS(klass)             (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD))
35 #define EV_FORM_FIELD_GET_CLASS(object)           (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD, EvFormFieldClass)) 
36
37 #define EV_TYPE_FORM_FIELD_TEXT                   (ev_form_field_text_get_type())
38 #define EV_FORM_FIELD_TEXT(object)                (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldText))
39 #define EV_FORM_FIELD_TEXT_CLASS(klass)           (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldTextClass))
40 #define EV_IS_FORM_FIELD_TEXT(object)             (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_TEXT))
41 #define EV_IS_FORM_FIELD_TEXT_CLASS(klass)        (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_TEXT))
42 #define EV_FORM_FIELD_TEXT_GET_CLASS(object)      (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldTextClass))
43
44 #define EV_TYPE_FORM_FIELD_BUTTON                 (ev_form_field_button_get_type())
45 #define EV_FORM_FIELD_BUTTON(object)              (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButton))
46 #define EV_FORM_FIELD_BUTTON_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButtonClass))
47 #define EV_IS_FORM_FIELD_BUTTON(object)           (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_BUTTON))
48 #define EV_IS_FORM_FIELD_BUTTON_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_BUTTON))
49 #define EV_FORM_FIELD_BUTTON_GET_CLASS(object)    (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButtonClass))
50
51 #define EV_TYPE_FORM_FIELD_CHOICE                 (ev_form_field_choice_get_type())
52 #define EV_FORM_FIELD_CHOICE(object)              (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoice))
53 #define EV_FORM_FIELD_CHOICE_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoiceClass))
54 #define EV_IS_FORM_FIELD_CHOICE(object)           (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_CHOICE))
55 #define EV_IS_FORM_FIELD_CHOICE_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_CHOICE))
56 #define EV_FORM_FIELD_CHOICE_GET_CLASS(object)    (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoiceClass))
57
58 #define EV_TYPE_FORM_FIELD_SIGNATURE              (ev_form_field_signature_get_type())
59 #define EV_FORM_FIELD_SIGNATURE(object)           (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignature))
60 #define EV_FORM_FIELD_SIGNATURE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignatureClass))
61 #define EV_IS_FORM_FIELD_SIGNATURE(object)        (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_SIGNATURE))
62 #define EV_IS_FORM_FIELD_SIGNATURE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_SIGNATURE))
63 #define EV_FORM_FIELD_SIGNATURE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignatureClass))
64
65 typedef struct _EvFormField               EvFormField;
66 typedef struct _EvFormFieldClass          EvFormFieldClass;
67
68 typedef struct _EvFormFieldText           EvFormFieldText;
69 typedef struct _EvFormFieldTextClass      EvFormFieldTextClass;
70
71 typedef struct _EvFormFieldButton         EvFormFieldButton;
72 typedef struct _EvFormFieldButtonClass    EvFormFieldButtonClass;
73
74 typedef struct _EvFormFieldChoice         EvFormFieldChoice;
75 typedef struct _EvFormFieldChoiceClass    EvFormFieldChoiceClass;
76
77 typedef struct _EvFormFieldSignature      EvFormFieldSignature;
78 typedef struct _EvFormFieldSignatureClass EvFormFieldSignatureClass;
79
80 typedef enum
81 {
82         EV_FORM_FIELD_TEXT_NORMAL,
83         EV_FORM_FIELD_TEXT_MULTILINE,
84         EV_FORM_FIELD_TEXT_FILE_SELECT
85 } EvFormFieldTextType;
86
87 typedef enum
88 {
89         EV_FORM_FIELD_BUTTON_PUSH,
90         EV_FORM_FIELD_BUTTON_CHECK,
91         EV_FORM_FIELD_BUTTON_RADIO
92 } EvFormFieldButtonType;
93
94 typedef enum
95 {
96         EV_FORM_FIELD_CHOICE_COMBO,
97         EV_FORM_FIELD_CHOICE_LIST
98 } EvFormFieldChoiceType;
99
100 struct _EvFormField
101 {
102         GObject parent;
103
104         gint     id;
105         gboolean is_read_only;
106         gdouble  font_size;
107
108         EvPage  *page;
109         gboolean changed;
110 };
111
112 struct _EvFormFieldClass
113 {
114         GObjectClass parent_class;
115 };
116         
117 struct _EvFormFieldText
118 {
119         EvFormField partent;
120         
121         EvFormFieldTextType type;
122         
123         gboolean do_spell_check : 1;
124         gboolean do_scroll : 1;
125         gboolean comb : 1;
126         gboolean is_rich_text : 1;
127         gboolean is_password;
128
129         gint   max_len;
130         gchar *text;
131 };
132
133 struct _EvFormFieldTextClass
134 {
135         EvFormFieldClass partent_class;
136 };
137
138 struct _EvFormFieldButton
139 {
140         EvFormField partent;
141         
142         EvFormFieldButtonType type;
143
144         gboolean state;
145 };
146
147 struct _EvFormFieldButtonClass
148 {
149         EvFormFieldClass partent_class;
150 };
151
152 struct _EvFormFieldChoice
153 {
154         EvFormField partent;
155
156         EvFormFieldChoiceType type;
157         
158         gboolean multi_select : 1;
159         gboolean is_editable : 1;
160         gboolean do_spell_check : 1;
161         gboolean commit_on_sel_change : 1;
162
163         GList *selected_items;
164         gchar *text;
165 };
166
167 struct _EvFormFieldChoiceClass
168 {
169         EvFormFieldClass partent_class;
170 };
171
172 struct _EvFormFieldSignature
173 {
174         EvFormField partent;
175         
176         /* TODO */
177 };
178
179 struct _EvFormFieldSignatureClass
180 {
181         EvFormFieldClass partent_class;
182 };
183
184 /* EvFormField base class */
185 GType        ev_form_field_get_type           (void) G_GNUC_CONST;
186
187 /* EvFormFieldText */
188 GType        ev_form_field_text_get_type      (void) G_GNUC_CONST;
189 EvFormField *ev_form_field_text_new           (gint                  id,
190                                                EvFormFieldTextType   type);
191
192 /* EvFormFieldButton */
193 GType        ev_form_field_button_get_type    (void) G_GNUC_CONST;
194 EvFormField *ev_form_field_button_new         (gint                  id,
195                                                EvFormFieldButtonType type);
196
197 /* EvFormFieldChoice */
198 GType        ev_form_field_choice_get_type    (void) G_GNUC_CONST;
199 EvFormField *ev_form_field_choice_new         (gint                  id,
200                                                EvFormFieldChoiceType type);
201
202 /* EvFormFieldSignature */
203 GType        ev_form_field_signature_get_type (void) G_GNUC_CONST;
204 EvFormField *ev_form_field_signature_new      (gint                  id);
205
206
207 /* FormField Mapping stuff */
208 typedef struct _EvFormFieldMapping EvFormFieldMapping;
209 struct _EvFormFieldMapping {
210         EvFormField *field;
211         gdouble x1;
212         gdouble y1;
213         gdouble x2;
214         gdouble y2;
215 };
216
217 void         ev_form_field_mapping_free       (GList        *field_mapping);
218 EvFormField *ev_form_field_mapping_find       (GList        *field_mapping,
219                                                gdouble       x,
220                                                gdouble       y);
221 void         ev_form_field_mapping_get_area   (GList        *field_mapping,
222                                                EvFormField  *field,
223                                                EvRectangle  *area);
224 EvFormField *ev_form_field_mapping_find_by_id (GList        *form_field_mapping,
225                                                gint          id);
226
227 G_END_DECLS
228
229 #endif /* !EV_FORM_FIELD_H */
230