]> www.fi.muni.cz Git - evince.git/blobdiff - backend/ev-link.c
Updated evince zh_CN translation.
[evince.git] / backend / ev-link.c
index a325c3525788badbe1921341668a8996e2921f89..8561914b69935e5af88933eb31368f11c130ecb7 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include "ev-link.h"
 
 enum {
        PROP_0,
        PROP_TITLE,
-       PROP_TYPE,
-       PROP_PAGE,
-       PROP_URI,
-       PROP_LEFT,
-       PROP_TOP,
-       PROP_BOTTOM,
-       PROP_RIGHT,
-       PROP_ZOOM,
-       PROP_FILENAME,
-       PROP_PARAMS
+       PROP_ACTION
 };
 
-
 struct _EvLink {
        GObject base_instance;
        EvLinkPrivate *priv;
@@ -50,17 +36,8 @@ struct _EvLinkClass {
 };
 
 struct _EvLinkPrivate {
-       char *title;
-       char *uri;
-       char *filename;
-       char *params;
-       EvLinkType type;
-       int page;
-       double top;
-       double left;
-       double bottom;
-       double right;
-       double zoom;
+       gchar        *title;
+       EvLinkAction *action;
 };
 
 G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
@@ -68,32 +45,7 @@ G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
 #define EV_LINK_GET_PRIVATE(object) \
        (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK, EvLinkPrivate))
 
-GType
-ev_link_type_get_type (void)
-{
-       static GType type = 0;
-
-       if (G_UNLIKELY (type == 0)) {
-               static const GEnumValue values[] = {
-                       { EV_LINK_TYPE_TITLE, "EV_LINK_TYPE_TITLE", "title" },
-                       { EV_LINK_TYPE_PAGE, "EV_LINK_TYPE_PAGE", "page" },
-                       { EV_LINK_TYPE_PAGE_XYZ, "EV_LINK_TYPE_PAGE_XYZ", "page-xyz" },
-                       { EV_LINK_TYPE_PAGE_FIT, "EV_LINK_TYPE_PAGE_FIT", "page-fit" },
-                       { EV_LINK_TYPE_PAGE_FITH, "EV_LINK_TYPE_PAGE_FITH", "page-fith" },
-                       { EV_LINK_TYPE_PAGE_FITV, "EV_LINK_TYPE_PAGE_FITV", "page-fitv" },
-                       { EV_LINK_TYPE_PAGE_FITR, "EV_LINK_TYPE_PAGE_FITR", "page-fitr" },
-                       { EV_LINK_TYPE_EXTERNAL_URI, "EV_LINK_TYPE_EXTERNAL_URI", "external" },
-                       { EV_LINK_TYPE_LAUNCH, "EV_LINK_TYPE_LAUNCH", "launch" },
-                       { 0, NULL, NULL }
-                };
-
-                type = g_enum_register_static ("EvLinkType", values);
-        }
-
-        return type;
-}
-
-const char *
+const gchar *
 ev_link_get_title (EvLink *self)
 {
        g_return_val_if_fail (EV_IS_LINK (self), NULL);
@@ -101,88 +53,18 @@ ev_link_get_title (EvLink *self)
        return self->priv->title;
 }
 
-const char *
-ev_link_get_uri (EvLink *self)
+EvLinkAction *
+ev_link_get_action (EvLink *self)
 {
        g_return_val_if_fail (EV_IS_LINK (self), NULL);
        
-       return self->priv->uri;
-}
-
-EvLinkType
-ev_link_get_link_type (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->type;
-}
-
-int
-ev_link_get_page (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), -1);
-       
-       return self->priv->page;
-}
-
-double
-ev_link_get_top (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->top;
-}
-
-double
-ev_link_get_left (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->left;
-}
-
-double
-ev_link_get_bottom (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->bottom;
-}
-
-double
-ev_link_get_right (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->right;
-}
-
-const char *
-ev_link_get_filename (EvLink *link)
-{
-       g_return_val_if_fail (EV_IS_LINK (link), NULL);
-
-       return link->priv->filename;
-}
-
-const char *
-ev_link_get_params (EvLink *link)
-{
-       g_return_val_if_fail (EV_IS_LINK (link), NULL);
-
-       return link->priv->params;
-}
-
-double
-ev_link_get_zoom (EvLink *self)
-{
-       g_return_val_if_fail (EV_IS_LINK (self), 0);
-       
-       return self->priv->zoom;
+       return self->priv->action;
 }
 
 static void
-ev_link_get_property (GObject *object, guint prop_id, GValue *value,
+ev_link_get_property (GObject    *object,
+                     guint       prop_id,
+                     GValue     *value,
                      GParamSpec *param_spec)
 {
        EvLink *self;
@@ -190,103 +72,48 @@ ev_link_get_property (GObject *object, guint prop_id, GValue *value,
        self = EV_LINK (object);
 
        switch (prop_id) {
-       case PROP_TITLE:
-               g_value_set_string (value, self->priv->title);
-               break;
-       case PROP_URI:
-               g_value_set_string (value, self->priv->uri);
-               break;
-       case PROP_TYPE:
-               g_value_set_enum (value, self->priv->type);
-               break;
-       case PROP_PAGE:
-               g_value_set_int (value, self->priv->page);
-               break;
-       case PROP_TOP:
-               g_value_set_double (value, self->priv->top);
-               break;
-       case PROP_LEFT:
-               g_value_set_double (value, self->priv->left);
-               break;
-       case PROP_BOTTOM:
-               g_value_set_double (value, self->priv->bottom);
-               break;
-       case PROP_RIGHT:
-               g_value_set_double (value, self->priv->left);
-               break;
-       case PROP_ZOOM:
-               g_value_set_double (value, self->priv->zoom);
-               break;
-       case PROP_FILENAME:
-               g_value_set_string (value, self->priv->filename);
-       case PROP_PARAMS:
-               g_value_set_string (value, self->priv->params);
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
-                                                  prop_id,
-                                                  param_spec);
-               break;
+               case PROP_TITLE:
+                       g_value_set_string (value, self->priv->title);
+                       break;
+               case PROP_ACTION:
+                       g_value_set_pointer (value, self->priv->action);
+                       break;
+               default:
+                       G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+                                                          prop_id,
+                                                          param_spec);
+                       break;
        }
 }
 
 static void
-ev_link_set_property (GObject *object, guint prop_id, const GValue *value,
-                     GParamSpec *param_spec)
+ev_link_set_property (GObject      *object,
+                     guint         prop_id,
+                     const GValue *value,
+                     GParamSpec   *param_spec)
 {
-       EvLink *link = EV_LINK (object);
+       EvLink *self = EV_LINK (object);
        
        switch (prop_id) {
-       case PROP_TITLE:
-               link->priv->title = g_strdup (g_value_get_string (value));      
-               break;
-       case PROP_URI:
-               link->priv->uri = g_strdup (g_value_get_string (value));
-               break;
-       case PROP_TYPE:
-               link->priv->type = g_value_get_enum (value);
-               break;
-       case PROP_PAGE:
-               link->priv->page = g_value_get_int (value);
-               break;
-       case PROP_TOP:
-               link->priv->top = g_value_get_double (value);
-               break;
-       case PROP_LEFT:
-               link->priv->left = g_value_get_double (value);
-               break;
-       case PROP_BOTTOM:
-               link->priv->bottom = g_value_get_double (value);
-               break;
-       case PROP_RIGHT:
-               link->priv->right = g_value_get_double (value);
-               break;
-       case PROP_ZOOM:
-               link->priv->zoom = g_value_get_double (value);
-               break;
-       case PROP_FILENAME:
-               g_free (link->priv->filename);
-               link->priv->filename = g_strdup (g_value_get_string (value));
-               break;
-       case PROP_PARAMS:
-               g_free (link->priv->params);
-               link->priv->params = g_strdup (g_value_get_string (value));
-               break;
-
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
-                                                  prop_id,
-                                                  param_spec);
-               break;
+               case PROP_TITLE:
+                       self->priv->title = g_value_dup_string (value); 
+                       break;
+               case PROP_ACTION:
+                       self->priv->action = g_value_get_pointer (value);
+                       break;
+               default:
+                       G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+                                                          prop_id,
+                                                          param_spec);
+                       break;
        }
 }
 
 static void
-ev_window_dispose (GObject *object)
+ev_link_finalize (GObject *object)
 {
        EvLinkPrivate *priv;
 
-       g_return_if_fail (EV_IS_LINK (object));
-
        priv = EV_LINK (object)->priv;
 
        if (priv->title) {
@@ -294,30 +121,21 @@ ev_window_dispose (GObject *object)
                priv->title = NULL;
        }
 
-       if (priv->uri) {
-               g_free (priv->uri);
-               priv->uri = NULL;
-       }
-
-       if (priv->filename) {
-               g_free (priv->filename);
-               priv->filename = NULL;
-       }
-
-       if (priv->params) {
-               g_free (priv->params);
-               priv->params = NULL;
+       if (priv->action) {
+               g_object_unref (priv->action);
+               priv->action = NULL;
        }
 
-       G_OBJECT_CLASS (ev_link_parent_class)->dispose (object);
+       G_OBJECT_CLASS (ev_link_parent_class)->finalize (object);
 }
 
 static void
 ev_link_init (EvLink *ev_link)
 {
        ev_link->priv = EV_LINK_GET_PRIVATE (ev_link);
-       ev_link->priv->page = -1;
-       ev_link->priv->type = EV_LINK_TYPE_TITLE;
+
+       ev_link->priv->title = NULL;
+       ev_link->priv->action = NULL;
 }
 
 static void
@@ -326,10 +144,12 @@ ev_link_class_init (EvLinkClass *ev_window_class)
        GObjectClass *g_object_class;
 
        g_object_class = G_OBJECT_CLASS (ev_window_class);
-       g_object_class->dispose = ev_window_dispose;
+
        g_object_class->set_property = ev_link_set_property;
        g_object_class->get_property = ev_link_get_property;
 
+       g_object_class->finalize = ev_link_finalize;
+
        g_type_class_add_private (g_object_class, sizeof (EvLinkPrivate));
 
        g_object_class_install_property (g_object_class,
@@ -341,216 +161,25 @@ ev_link_class_init (EvLinkClass *ev_window_class)
                                                              G_PARAM_READWRITE |
                                                              G_PARAM_CONSTRUCT_ONLY));
        g_object_class_install_property (g_object_class,
-                                        PROP_URI,
-                                        g_param_spec_string ("uri",
-                                                             "Link URI",
-                                                             "The link URI",
-                                                             NULL,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_FILENAME,
-                                        g_param_spec_string ("filename",
-                                                             "Filename",
-                                                             "The link filename",
-                                                             NULL,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_PARAMS,
-                                        g_param_spec_string ("params",
-                                                             "Params",
-                                                             "The link params",
-                                                             NULL,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_TYPE,
-                                        g_param_spec_enum  ("type",
-                                                            "Link Type",
-                                                            "The link type",
-                                                            EV_TYPE_LINK_TYPE,
-                                                            EV_LINK_TYPE_TITLE,
-                                                            G_PARAM_READWRITE |
-                                                            G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_PAGE,
-                                        g_param_spec_int ("page",
-                                                          "Link Page",
-                                                          "The link page",
-                                                           -1,
-                                                           G_MAXINT,
-                                                           0,
-                                                           G_PARAM_READWRITE |
-                                                           G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_LEFT,
-                                        g_param_spec_double ("left",
-                                                             "Left coordinate",
-                                                             "The left coordinate",
-                                                             -G_MAXDOUBLE,
-                                                             G_MAXDOUBLE,
-                                                             0,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_TOP,
-                                        g_param_spec_double ("top",
-                                                             "Top coordinate",
-                                                             "The top coordinate",
-                                                             -G_MAXDOUBLE,
-                                                             G_MAXDOUBLE,
-                                                             0,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_BOTTOM,
-                                        g_param_spec_double ("bottom",
-                                                             "Bottom coordinate",
-                                                             "The bottom coordinate",
-                                                             -G_MAXDOUBLE,
-                                                             G_MAXDOUBLE,
-                                                             0,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-       g_object_class_install_property (g_object_class,
-                                        PROP_RIGHT,
-                                        g_param_spec_double ("right",
-                                                             "Right coordinate",
-                                                             "The right coordinate",
-                                                             -G_MAXDOUBLE,
-                                                             G_MAXDOUBLE,
-                                                             0,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-
-       g_object_class_install_property (g_object_class,
-                                        PROP_ZOOM,
-                                        g_param_spec_double ("zoom",
-                                                             "Zoom",
-                                                             "Zoom",
-                                                             0,
-                                                             G_MAXDOUBLE,
-                                                             0,
-                                                             G_PARAM_READWRITE |
-                                                             G_PARAM_CONSTRUCT_ONLY));
-}
-
-EvLink *
-ev_link_new_title (const char *title)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "type", EV_LINK_TYPE_TITLE,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page (const char *title, int page)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page_xyz (const char *title,
-                     int         page,
-                     double      left,
-                     double      top,
-                     double      zoom)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE_XYZ,
-                                     "left", left,
-                                     "top", top,
-                                     "zoom", zoom,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page_fit (const char *title,
-                     int         page)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE_FIT,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page_fith (const char *title,
-                      int         page,
-                      double      top)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE_FITH,
-                                     "top", top,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page_fitv (const char *title,
-                      int         page,
-                      double      left)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE_FITV,
-                                     "left", left,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_page_fitr (const char     *title,
-                      int             page,
-                      double          left,
-                      double          bottom,
-                      double          right,
-                      double          top)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "page", page,
-                                     "type", EV_LINK_TYPE_PAGE_FITR,
-                                     "left", left,
-                                     "bottom", bottom,
-                                     "right", right,
-                                     "top", top,
-                                     NULL));
+                                        PROP_ACTION,
+                                        g_param_spec_pointer ("action",
+                                                              "Link Action",
+                                                              "The link action",
+                                                              G_PARAM_READWRITE |
+                                                              G_PARAM_CONSTRUCT_ONLY));
 }
 
 EvLink *
-ev_link_new_external (const char *title, const char *uri)
+ev_link_new (const char   *title,
+            EvLinkAction *action)
 {
        return EV_LINK (g_object_new (EV_TYPE_LINK,
                                      "title", title,
-                                     "uri", uri,
-                                     "type", EV_LINK_TYPE_EXTERNAL_URI,
-                                     NULL));
-}
-
-EvLink *
-ev_link_new_launch (const char *title,
-                   const char *filename,
-                   const char *params)
-{
-       return EV_LINK (g_object_new (EV_TYPE_LINK,
-                                     "title", title,
-                                     "filename", filename,
-                                     "params", params,
-                                     "type", EV_LINK_TYPE_LAUNCH,
+                                     "action", action,
                                      NULL));
 }
 
+/* Link Mapping stuff */
 static void
 ev_link_mapping_free_foreach (EvLinkMapping *mapping)
 {
@@ -568,7 +197,6 @@ ev_link_mapping_free (GList *link_mapping)
        g_list_free (link_mapping);
 }
 
-
 EvLink *
 ev_link_mapping_find (GList   *link_mapping,
                      gdouble  x,