]> www.fi.muni.cz Git - evince.git/blob - libdocument/ev-link-dest.c
Reorganize source tree.
[evince.git] / libdocument / ev-link-dest.c
1 /* this file is part of evince, a gnome document viewer
2  *
3  *  Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
4  *  Copyright (C) 2005 Red Hat, Inc.
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 #include "ev-link-dest.h"
22
23 enum {
24         PROP_0,
25         PROP_TYPE,
26         PROP_PAGE,
27         PROP_LEFT,
28         PROP_TOP,
29         PROP_BOTTOM,
30         PROP_RIGHT,
31         PROP_ZOOM,
32         PROP_NAMED,
33         PROP_PAGE_LABEL
34 };
35
36 struct _EvLinkDest {
37         GObject base_instance;
38         
39         EvLinkDestPrivate *priv;
40 };
41
42 struct _EvLinkDestClass {
43         GObjectClass base_class;
44 };
45
46 struct _EvLinkDestPrivate {
47         EvLinkDestType type;
48         int            page;
49         double         top;
50         double         left;
51         double         bottom;
52         double         right;
53         double         zoom;
54         gchar         *named;
55         gchar         *page_label;
56 };
57
58 G_DEFINE_TYPE (EvLinkDest, ev_link_dest, G_TYPE_OBJECT)
59
60 #define EV_LINK_DEST_GET_PRIVATE(object) \
61         (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_DEST, EvLinkDestPrivate))
62
63 GType
64 ev_link_dest_type_get_type (void)
65 {
66         static GType type = 0;
67
68         if (G_UNLIKELY (type == 0)) {
69                 static const GEnumValue values[] = {
70                         { EV_LINK_DEST_TYPE_PAGE, "EV_LINK_DEST_TYPE_PAGE", "page" },
71                         { EV_LINK_DEST_TYPE_XYZ, "EV_LINK_DEST_TYPE_XYZ", "xyz" },
72                         { EV_LINK_DEST_TYPE_FIT, "EV_LINK_DEST_TYPE_FIT", "fit" },
73                         { EV_LINK_DEST_TYPE_FITH, "EV_LINK_DEST_TYPE_FITH", "fith" },
74                         { EV_LINK_DEST_TYPE_FITV, "EV_LINK_DEST_TYPE_FITV", "fitv" },
75                         { EV_LINK_DEST_TYPE_FITR, "EV_LINK_DEST_TYPE_FITR", "fitr" },
76                         { EV_LINK_DEST_TYPE_NAMED, "EV_LINK_DEST_TYPE_NAMED", "named" },
77                         { EV_LINK_DEST_TYPE_PAGE_LABEL, "EV_LINK_DEST_TYPE_PAGE_LABEL", "page_label" },
78                         { EV_LINK_DEST_TYPE_UNKNOWN, "EV_LINK_DEST_TYPE_UNKNOWN", "unknown" },
79                         { 0, NULL, NULL }
80                 };
81
82                 type = g_enum_register_static ("EvLinkDestType", values);
83         }
84
85         return type;
86 }
87
88 EvLinkDestType
89 ev_link_dest_get_dest_type (EvLinkDest *self)
90 {
91         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
92
93         return self->priv->type;
94 }
95
96 gint
97 ev_link_dest_get_page (EvLinkDest *self)
98 {
99         g_return_val_if_fail (EV_IS_LINK_DEST (self), -1);
100
101         return self->priv->page;
102 }
103
104 gdouble
105 ev_link_dest_get_top (EvLinkDest *self)
106 {
107         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
108
109         return self->priv->top;
110 }
111
112 gdouble
113 ev_link_dest_get_left (EvLinkDest *self)
114 {
115         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
116
117         return self->priv->left;
118 }
119
120 gdouble
121 ev_link_dest_get_bottom (EvLinkDest *self)
122 {
123         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
124
125         return self->priv->bottom;
126 }
127
128 gdouble
129 ev_link_dest_get_right (EvLinkDest *self)
130 {
131         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
132
133         return self->priv->right;
134 }
135
136 gdouble
137 ev_link_dest_get_zoom (EvLinkDest *self)
138 {
139         g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
140
141         return self->priv->zoom;
142 }
143
144 const gchar *
145 ev_link_dest_get_named_dest (EvLinkDest *self)
146 {
147         g_return_val_if_fail (EV_IS_LINK_DEST (self), NULL);
148
149         return self->priv->named;
150 }
151
152 const gchar *
153 ev_link_dest_get_page_label (EvLinkDest *self)
154 {
155         g_return_val_if_fail (EV_IS_LINK_DEST (self), NULL);
156
157         return self->priv->page_label;
158 }
159
160 static void
161 ev_link_dest_get_property (GObject    *object,
162                            guint       prop_id,
163                            GValue     *value,
164                            GParamSpec *param_spec)
165 {
166         EvLinkDest *self;
167
168         self = EV_LINK_DEST (object);
169
170         switch (prop_id) {
171                 case PROP_TYPE:
172                         g_value_set_enum (value, self->priv->type);
173                         break;
174                 case PROP_PAGE:
175                         g_value_set_int (value, self->priv->page);
176                         break;
177                 case PROP_TOP:
178                         g_value_set_double (value, self->priv->top);
179                         break;
180                 case PROP_LEFT:
181                         g_value_set_double (value, self->priv->left);
182                         break;
183                 case PROP_BOTTOM:
184                         g_value_set_double (value, self->priv->bottom);
185                         break;
186                 case PROP_RIGHT:
187                         g_value_set_double (value, self->priv->left);
188                         break;
189                 case PROP_ZOOM:
190                         g_value_set_double (value, self->priv->zoom);
191                         break;
192                 case PROP_NAMED:
193                         g_value_set_string (value, self->priv->named);
194                         break;
195                 case PROP_PAGE_LABEL:
196                         g_value_set_string (value, self->priv->page_label);
197                         break;
198                 default:
199                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
200                                                            prop_id,
201                                                            param_spec);
202                         break;
203         }
204 }
205
206 static void
207 ev_link_dest_set_property (GObject      *object,
208                            guint         prop_id,
209                            const GValue *value,
210                            GParamSpec   *param_spec)
211 {
212         EvLinkDest *self = EV_LINK_DEST (object);
213
214         switch (prop_id) {
215                 case PROP_TYPE:
216                         self->priv->type = g_value_get_enum (value);
217                         break;
218                 case PROP_PAGE:
219                         self->priv->page = g_value_get_int (value);
220                         break;
221                 case PROP_TOP:
222                         self->priv->top = g_value_get_double (value);
223                         break;
224                 case PROP_LEFT:
225                         self->priv->left = g_value_get_double (value);
226                         break;
227                 case PROP_BOTTOM:
228                         self->priv->bottom = g_value_get_double (value);
229                         break;
230                 case PROP_RIGHT:
231                         self->priv->right = g_value_get_double (value);
232                         break;
233                 case PROP_ZOOM:
234                         self->priv->zoom = g_value_get_double (value);
235                         break;
236                 case PROP_NAMED:
237                         self->priv->named = g_value_dup_string (value);
238                         break;
239                 case PROP_PAGE_LABEL:
240                         self->priv->page_label = g_value_dup_string (value);
241                         break;
242                 default:
243                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
244                                                            prop_id,
245                                                            param_spec);
246                         break;
247         }
248 }
249
250 static void
251 ev_link_dest_finalize (GObject *object)
252 {
253         EvLinkDestPrivate *priv;
254
255         priv = EV_LINK_DEST (object)->priv;
256
257         if (priv->named) {
258                 g_free (priv->named);
259                 priv->named = NULL;
260         }
261         if (priv->page_label) {
262                 g_free (priv->page_label);
263                 priv->page_label = NULL;
264         }
265
266         G_OBJECT_CLASS (ev_link_dest_parent_class)->finalize (object);
267 }
268
269 static void
270 ev_link_dest_init (EvLinkDest *ev_link_dest)
271 {
272         ev_link_dest->priv = EV_LINK_DEST_GET_PRIVATE (ev_link_dest);
273
274         ev_link_dest->priv->named = NULL;
275 }
276
277 static void
278 ev_link_dest_class_init (EvLinkDestClass *ev_link_dest_class)
279 {
280         GObjectClass *g_object_class;
281
282         g_object_class = G_OBJECT_CLASS (ev_link_dest_class);
283
284         g_object_class->set_property = ev_link_dest_set_property;
285         g_object_class->get_property = ev_link_dest_get_property;
286
287         g_object_class->finalize = ev_link_dest_finalize;
288
289         g_type_class_add_private (g_object_class, sizeof (EvLinkDestPrivate));
290
291         g_object_class_install_property (g_object_class,
292                                          PROP_TYPE,
293                                          g_param_spec_enum  ("type",
294                                                              "Dest Type",
295                                                              "The destination type",
296                                                              EV_TYPE_LINK_DEST_TYPE,
297                                                              EV_LINK_DEST_TYPE_UNKNOWN,
298                                                              G_PARAM_READWRITE |
299                                                              G_PARAM_CONSTRUCT_ONLY));
300         g_object_class_install_property (g_object_class,
301                                          PROP_PAGE,
302                                          g_param_spec_int ("page",
303                                                            "Dest Page",
304                                                            "The destination page",
305                                                            -1,
306                                                            G_MAXINT,
307                                                            0,
308                                                            G_PARAM_READWRITE |
309                                                            G_PARAM_CONSTRUCT_ONLY));
310         g_object_class_install_property (g_object_class,
311                                          PROP_LEFT,
312                                          g_param_spec_double ("left",
313                                                               "Left coordinate",
314                                                               "The left coordinate",
315                                                               -G_MAXDOUBLE,
316                                                               G_MAXDOUBLE,
317                                                               0,
318                                                               G_PARAM_READWRITE |
319                                                               G_PARAM_CONSTRUCT_ONLY));
320         g_object_class_install_property (g_object_class,
321                                          PROP_TOP,
322                                          g_param_spec_double ("top",
323                                                               "Top coordinate",
324                                                               "The top coordinate",
325                                                               -G_MAXDOUBLE,
326                                                               G_MAXDOUBLE,
327                                                               0,
328                                                               G_PARAM_READWRITE |
329                                                               G_PARAM_CONSTRUCT_ONLY));
330         g_object_class_install_property (g_object_class,
331                                          PROP_BOTTOM,
332                                          g_param_spec_double ("bottom",
333                                                               "Bottom coordinate",
334                                                               "The bottom coordinate",
335                                                               -G_MAXDOUBLE,
336                                                               G_MAXDOUBLE,
337                                                               0,
338                                                               G_PARAM_READWRITE |
339                                                               G_PARAM_CONSTRUCT_ONLY));
340         g_object_class_install_property (g_object_class,
341                                          PROP_RIGHT,
342                                          g_param_spec_double ("right",
343                                                               "Right coordinate",
344                                                               "The right coordinate",
345                                                               -G_MAXDOUBLE,
346                                                               G_MAXDOUBLE,
347                                                               0,
348                                                               G_PARAM_READWRITE |
349                                                               G_PARAM_CONSTRUCT_ONLY));
350
351         g_object_class_install_property (g_object_class,
352                                          PROP_ZOOM,
353                                          g_param_spec_double ("zoom",
354                                                               "Zoom",
355                                                               "Zoom",
356                                                               0,
357                                                               G_MAXDOUBLE,
358                                                               0,
359                                                               G_PARAM_READWRITE |
360                                                               G_PARAM_CONSTRUCT_ONLY));
361         g_object_class_install_property (g_object_class,
362                                          PROP_NAMED,
363                                          g_param_spec_string ("named",
364                                                               "Named destination",
365                                                               "The named destination",
366                                                               NULL,
367                                                               G_PARAM_READWRITE |
368                                                               G_PARAM_CONSTRUCT_ONLY));
369         g_object_class_install_property (g_object_class,
370                                          PROP_PAGE_LABEL,
371                                          g_param_spec_string ("page_label",
372                                                               "Label of the page",
373                                                               "The label of the destination page",
374                                                               NULL,
375                                                               G_PARAM_READWRITE |
376                                                               G_PARAM_CONSTRUCT_ONLY));
377 }
378
379 EvLinkDest *
380 ev_link_dest_new_page (gint page)
381 {
382         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
383                                            "page", page,
384                                            "type", EV_LINK_DEST_TYPE_PAGE,
385                                            NULL));
386 }
387
388 EvLinkDest *
389 ev_link_dest_new_xyz (gint    page,
390                       gdouble left,
391                       gdouble top,
392                       gdouble zoom)
393 {
394         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
395                                            "page", page,
396                                            "type", EV_LINK_DEST_TYPE_XYZ,
397                                            "left", left,
398                                            "top", top,
399                                            "zoom", zoom,
400                                            NULL));
401 }
402
403 EvLinkDest *
404 ev_link_dest_new_fit (gint page)
405 {
406         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
407                                            "page", page,
408                                            "type", EV_LINK_DEST_TYPE_FIT,
409                                            NULL));
410 }
411
412 EvLinkDest *
413 ev_link_dest_new_fith (gint    page,
414                        gdouble top)
415 {
416         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
417                                            "page", page,
418                                            "type", EV_LINK_DEST_TYPE_FITH,
419                                            "top", top,
420                                            NULL));
421 }
422
423 EvLinkDest *
424 ev_link_dest_new_fitv (gint    page,
425                        gdouble left)
426 {
427         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
428                                            "page", page,
429                                            "type", EV_LINK_DEST_TYPE_FITV,
430                                            "left", left,
431                                            NULL));
432 }
433
434 EvLinkDest *
435 ev_link_dest_new_fitr (gint    page,
436                        gdouble left,
437                        gdouble bottom,
438                        gdouble right,
439                        gdouble top)
440 {
441         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
442                                            "page", page,
443                                            "type", EV_LINK_DEST_TYPE_FITR,
444                                            "left", left,
445                                            "bottom", bottom,
446                                            "right", right,
447                                            "top", top,
448                                            NULL));
449 }
450
451 EvLinkDest *
452 ev_link_dest_new_named (const gchar *named_dest)
453 {
454         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
455                                            "named", named_dest,
456                                            "type", EV_LINK_DEST_TYPE_NAMED,
457                                            NULL));
458 }
459
460 EvLinkDest *
461 ev_link_dest_new_page_label (const gchar *page_label)
462 {
463         return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
464                                            "page_label", page_label,
465                                            "type", EV_LINK_DEST_TYPE_PAGE_LABEL,
466                                            NULL));
467 }