1 /* this file is part of evince, a gnome document viewer
3 * Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
4 * Copyright (C) 2005 Red Hat, Inc.
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 #include "ev-link-action.h"
23 #include "ev-document-type-builtins.h"
38 struct _EvLinkAction {
39 GObject base_instance;
41 EvLinkActionPrivate *priv;
44 struct _EvLinkActionClass {
45 GObjectClass base_class;
48 struct _EvLinkActionPrivate {
49 EvLinkActionType type;
60 G_DEFINE_TYPE (EvLinkAction, ev_link_action, G_TYPE_OBJECT)
62 #define EV_LINK_ACTION_GET_PRIVATE(object) \
63 (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_ACTION, EvLinkActionPrivate))
66 ev_link_action_get_action_type (EvLinkAction *self)
68 g_return_val_if_fail (EV_IS_LINK_ACTION (self), 0);
70 return self->priv->type;
74 ev_link_action_get_dest (EvLinkAction *self)
76 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
78 return self->priv->dest;
82 ev_link_action_get_uri (EvLinkAction *self)
84 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
86 return self->priv->uri;
90 ev_link_action_get_filename (EvLinkAction *self)
92 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
94 return self->priv->filename;
98 ev_link_action_get_params (EvLinkAction *self)
100 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
102 return self->priv->params;
106 ev_link_action_get_name (EvLinkAction *self)
108 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
110 return self->priv->name;
114 ev_link_action_get_show_list (EvLinkAction *self)
116 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
118 return self->priv->show_list;
122 ev_link_action_get_hide_list (EvLinkAction *self)
124 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
126 return self->priv->hide_list;
130 ev_link_action_get_toggle_list (EvLinkAction *self)
132 g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
134 return self->priv->toggle_list;
138 ev_link_action_get_property (GObject *object,
141 GParamSpec *param_spec)
145 self = EV_LINK_ACTION (object);
149 g_value_set_enum (value, self->priv->type);
152 g_value_set_pointer (value, self->priv->dest);
155 g_value_set_string (value, self->priv->uri);
158 g_value_set_string (value, self->priv->filename);
161 g_value_set_string (value, self->priv->params);
164 g_value_set_string (value, self->priv->name);
167 g_value_set_pointer (value, self->priv->show_list);
170 g_value_set_pointer (value, self->priv->hide_list);
172 case PROP_TOGGLE_LIST:
173 g_value_set_pointer (value, self->priv->toggle_list);
176 G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
184 ev_link_action_set_property (GObject *object,
187 GParamSpec *param_spec)
189 EvLinkAction *self = EV_LINK_ACTION (object);
193 self->priv->type = g_value_get_enum (value);
196 self->priv->dest = g_value_get_pointer (value);
199 g_free (self->priv->uri);
200 self->priv->uri = g_value_dup_string (value);
203 g_free (self->priv->filename);
204 self->priv->filename = g_value_dup_string (value);
207 g_free (self->priv->params);
208 self->priv->params = g_value_dup_string (value);
211 g_free (self->priv->name);
212 self->priv->name = g_value_dup_string (value);
215 self->priv->show_list = g_value_get_pointer (value);
218 self->priv->hide_list = g_value_get_pointer (value);
220 case PROP_TOGGLE_LIST:
221 self->priv->toggle_list = g_value_get_pointer (value);
224 G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
232 ev_link_action_finalize (GObject *object)
234 EvLinkActionPrivate *priv;
236 priv = EV_LINK_ACTION (object)->priv;
239 g_object_unref (priv->dest);
248 if (priv->filename) {
249 g_free (priv->filename);
250 priv->filename = NULL;
254 g_free (priv->params);
263 if (priv->show_list) {
264 g_list_foreach (priv->show_list, (GFunc)g_object_unref, NULL);
265 g_list_free (priv->show_list);
266 priv->show_list = NULL;
269 if (priv->hide_list) {
270 g_list_foreach (priv->hide_list, (GFunc)g_object_unref, NULL);
271 g_list_free (priv->hide_list);
272 priv->hide_list = NULL;
275 if (priv->toggle_list) {
276 g_list_foreach (priv->toggle_list, (GFunc)g_object_unref, NULL);
277 g_list_free (priv->toggle_list);
278 priv->toggle_list = NULL;
281 G_OBJECT_CLASS (ev_link_action_parent_class)->finalize (object);
285 ev_link_action_init (EvLinkAction *ev_link_action)
287 ev_link_action->priv = EV_LINK_ACTION_GET_PRIVATE (ev_link_action);
289 ev_link_action->priv->dest = NULL;
290 ev_link_action->priv->uri = NULL;
291 ev_link_action->priv->filename = NULL;
292 ev_link_action->priv->params = NULL;
293 ev_link_action->priv->name = NULL;
297 ev_link_action_class_init (EvLinkActionClass *ev_link_action_class)
299 GObjectClass *g_object_class;
301 g_object_class = G_OBJECT_CLASS (ev_link_action_class);
303 g_object_class->set_property = ev_link_action_set_property;
304 g_object_class->get_property = ev_link_action_get_property;
306 g_object_class->finalize = ev_link_action_finalize;
308 g_type_class_add_private (g_object_class, sizeof (EvLinkActionPrivate));
310 g_object_class_install_property (g_object_class,
312 g_param_spec_enum ("type",
314 "The link action type",
315 EV_TYPE_LINK_ACTION_TYPE,
316 EV_LINK_ACTION_TYPE_GOTO_DEST,
318 G_PARAM_CONSTRUCT_ONLY));
319 g_object_class_install_property (g_object_class,
321 g_param_spec_pointer ("dest",
322 "Action destination",
323 "The link action destination",
325 G_PARAM_CONSTRUCT_ONLY));
326 g_object_class_install_property (g_object_class,
328 g_param_spec_string ("uri",
330 "The link action URI",
333 G_PARAM_CONSTRUCT_ONLY));
334 g_object_class_install_property (g_object_class,
336 g_param_spec_string ("filename",
338 "The link action filename",
341 G_PARAM_CONSTRUCT_ONLY));
342 g_object_class_install_property (g_object_class,
344 g_param_spec_string ("params",
346 "The link action params",
349 G_PARAM_CONSTRUCT_ONLY));
350 g_object_class_install_property (g_object_class,
352 g_param_spec_string ("name",
354 "The link action name",
357 G_PARAM_CONSTRUCT_ONLY));
358 g_object_class_install_property (g_object_class,
360 g_param_spec_pointer ("show-list",
362 "The list of layers that should be shown",
364 G_PARAM_CONSTRUCT_ONLY));
365 g_object_class_install_property (g_object_class,
367 g_param_spec_pointer ("hide-list",
369 "The list of layers that should be hidden",
371 G_PARAM_CONSTRUCT_ONLY));
372 g_object_class_install_property (g_object_class,
374 g_param_spec_pointer ("toggle-list",
376 "The list of layers that should be toggled",
378 G_PARAM_CONSTRUCT_ONLY));
382 ev_link_action_new_dest (EvLinkDest *dest)
384 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
386 "type", EV_LINK_ACTION_TYPE_GOTO_DEST,
391 ev_link_action_new_remote (EvLinkDest *dest,
392 const gchar *filename)
394 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
396 "filename", filename,
397 "type", EV_LINK_ACTION_TYPE_GOTO_REMOTE,
402 ev_link_action_new_external_uri (const gchar *uri)
404 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
406 "type", EV_LINK_ACTION_TYPE_EXTERNAL_URI,
411 ev_link_action_new_launch (const gchar *filename,
414 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
415 "filename", filename,
417 "type", EV_LINK_ACTION_TYPE_LAUNCH,
422 ev_link_action_new_named (const gchar *name)
424 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
426 "type", EV_LINK_ACTION_TYPE_NAMED,
431 ev_link_action_new_layers_state (GList *show_list,
435 return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
436 "show-list", show_list,
437 "hide-list", hide_list,
438 "toggle-list", toggle_list,
439 "type", EV_LINK_ACTION_TYPE_LAYERS_STATE,