plover-gtk/package.c
author J. Ali Harlow <ali@juiblex.co.uk>
Fri Mar 23 20:29:24 2012 +0000 (2012-03-23)
changeset 21 4da45725031f
parent 9 8d3b1ddf789c
permissions -rw-r--r--
Start 0.4.3
     1 /*
     2  * Copyright (C) 2010  J. Ali Harlow <ali@juiblex.co.uk>
     3  *
     4  * This program is free software; you can redistribute it and/or modify
     5  * it under the terms of the GNU General Public License as published by
     6  * the Free Software Foundation; either version 2 of the License, or
     7  * (at your option) any later version.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License along
    15  * with this program; if not, write to the Free Software Foundation, Inc.,
    16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    17  */
    18 
    19 #include "config.h"
    20 #include <stdlib.h>
    21 #include <string.h>
    22 #include <glib-object.h>
    23 #include <gtk/gtk.h>
    24 #include <razor.h>
    25 #include "plover-gtk/package.h"
    26 
    27 G_DEFINE_TYPE(PloverPackage,plover_package,G_TYPE_OBJECT);
    28 
    29 typedef struct _PloverPackagePrivate {
    30     struct razor_set *set;
    31     struct razor_package *pkg;
    32     PloverPackageFileStore *file_store;
    33 } PloverPackagePrivate;
    34 
    35 #define PLOVER_PACKAGE_GET_PRIVATE(obj)\
    36 				G_TYPE_INSTANCE_GET_PRIVATE(obj,\
    37 				  PLOVER_TYPE_PACKAGE,PloverPackagePrivate)
    38 
    39 enum {
    40     CHANGED=0,
    41     N_SIGNALS
    42 };
    43 
    44 static guint signals[N_SIGNALS];
    45 
    46 static void plover_package_dispose(GObject *obj)
    47 {
    48     PloverPackagePrivate *priv=PLOVER_PACKAGE_GET_PRIVATE(obj);
    49     if (priv->file_store)
    50     {
    51 	g_object_unref(priv->file_store);
    52 	priv->file_store=NULL;
    53     }
    54     if (G_OBJECT_CLASS(plover_package_parent_class)->dispose)
    55 	G_OBJECT_CLASS(plover_package_parent_class)->dispose(obj);
    56 }
    57 
    58 static void plover_package_class_init(PloverPackageClass *klass)
    59 {
    60     GObjectClass *oclass=G_OBJECT_CLASS(klass);
    61     oclass->dispose=plover_package_dispose;
    62     g_type_class_add_private(klass,sizeof(PloverPackagePrivate));
    63     signals[CHANGED]=g_signal_newv("changed",
    64       G_TYPE_FROM_CLASS(klass),G_SIGNAL_RUN_LAST,NULL,NULL,NULL,
    65       g_cclosure_marshal_VOID__VOID,G_TYPE_NONE,0,NULL);
    66 }
    67 
    68 static void plover_package_init(PloverPackage *package)
    69 {
    70 }
    71 
    72 PloverPackage *plover_package_new(struct razor_set *set,
    73   struct razor_package *pkg)
    74 {
    75     PloverPackage *package;
    76     PloverPackagePrivate *priv;
    77     package=g_object_new(PLOVER_TYPE_PACKAGE,NULL);
    78     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
    79     priv->set=set;
    80     priv->pkg=pkg;
    81     return package;
    82 }
    83 
    84 const char *plover_package_get_name(PloverPackage *package)
    85 {
    86     PloverPackagePrivate *priv;
    87     const char *name=NULL;
    88     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
    89     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
    90     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_NAME,&name,
    91       RAZOR_DETAIL_LAST);
    92     return name;
    93 }
    94 
    95 const char *plover_package_get_summary(PloverPackage *package)
    96 {
    97     PloverPackagePrivate *priv;
    98     const char *summary=NULL;
    99     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   100     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   101     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_SUMMARY,&summary,
   102       RAZOR_DETAIL_LAST);
   103     return summary;
   104 }
   105 
   106 const char *plover_package_get_version(PloverPackage *package)
   107 {
   108     PloverPackagePrivate *priv;
   109     const char *version=NULL;
   110     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   111     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   112     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_VERSION,&version,
   113       RAZOR_DETAIL_LAST);
   114     return version;
   115 }
   116 
   117 const char *plover_package_get_license(PloverPackage *package)
   118 {
   119     PloverPackagePrivate *priv;
   120     const char *license=NULL;
   121     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   122     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   123     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_LICENSE,&license,
   124       RAZOR_DETAIL_LAST);
   125     return license;
   126 }
   127 
   128 const char *plover_package_get_arch(PloverPackage *package)
   129 {
   130     PloverPackagePrivate *priv;
   131     const char *arch=NULL;
   132     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   133     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   134     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_ARCH,&arch,
   135       RAZOR_DETAIL_LAST);
   136     return arch;
   137 }
   138 
   139 const char *plover_package_get_description(PloverPackage *package)
   140 {
   141     PloverPackagePrivate *priv;
   142     const char *description=NULL;
   143     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   144     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   145     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_DESCRIPTION,
   146       &description,RAZOR_DETAIL_LAST);
   147     return description;
   148 }
   149 
   150 const char *plover_package_get_URL(PloverPackage *package)
   151 {
   152     PloverPackagePrivate *priv;
   153     const char *URL=NULL;
   154     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   155     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   156     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_URL,&URL,
   157       RAZOR_DETAIL_LAST);
   158     return URL;
   159 }
   160 
   161 GdkPixbuf *plover_package_get_icon(PloverPackage *package)
   162 {
   163     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   164     return NULL;
   165 }
   166 
   167 PloverPackageFileStore *plover_package_get_file_store(PloverPackage *package)
   168 {
   169     PloverPackagePrivate *priv;
   170     struct razor_file_iterator *iter;
   171     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   172     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   173     if (!priv->file_store)
   174     {
   175 	iter=razor_file_iterator_create(priv->set,priv->pkg,0);
   176 	priv->file_store=plover_package_file_store_new(iter);
   177 	razor_file_iterator_destroy(iter);
   178     }
   179     return priv->file_store;
   180 }