plover-gtk/package.c
author J. Ali Harlow <ali@juiblex.co.uk>
Sat Feb 20 12:11:02 2010 +0000 (2010-02-20)
changeset 9 8d3b1ddf789c
child 10 8b50be3e2998
permissions -rw-r--r--
First cut at an applications manager
     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 <razor.h>
    24 #include "plover-gtk/package.h"
    25 
    26 G_DEFINE_TYPE(PloverPackage,plover_package,G_TYPE_OBJECT);
    27 
    28 typedef struct _PloverPackagePrivate {
    29     struct razor_set *set;
    30     struct razor_package *pkg;
    31     PloverPackageFileStore *file_store;
    32 } PloverPackagePrivate;
    33 
    34 #define PLOVER_PACKAGE_GET_PRIVATE(obj)\
    35 				G_TYPE_INSTANCE_GET_PRIVATE(obj,\
    36 				  PLOVER_TYPE_PACKAGE,PloverPackagePrivate)
    37 
    38 enum {
    39     CHANGED=0,
    40     N_SIGNALS
    41 };
    42 
    43 static guint signals[N_SIGNALS];
    44 
    45 static void plover_package_dispose(GObject *obj)
    46 {
    47     PloverPackagePrivate *priv=PLOVER_PACKAGE_GET_PRIVATE(obj);
    48     if (priv->file_store)
    49     {
    50 	g_object_unref(priv->file_store);
    51 	priv->file_store=NULL;
    52     }
    53     if (G_OBJECT_CLASS(plover_package_parent_class)->dispose)
    54 	G_OBJECT_CLASS(plover_package_parent_class)->dispose(obj);
    55 }
    56 
    57 static void plover_package_class_init(PloverPackageClass *klass)
    58 {
    59     GObjectClass *oclass=G_OBJECT_CLASS(klass);
    60     oclass->dispose=plover_package_dispose;
    61     g_type_class_add_private(klass,sizeof(PloverPackagePrivate));
    62     signals[CHANGED]=g_signal_newv("changed",
    63       G_TYPE_FROM_CLASS(klass),G_SIGNAL_RUN_LAST,NULL,NULL,NULL,
    64       g_cclosure_marshal_VOID__VOID,G_TYPE_NONE,0,NULL);
    65 }
    66 
    67 static void plover_package_init(PloverPackage *package)
    68 {
    69 }
    70 
    71 PloverPackage *plover_package_new(struct razor_set *set,
    72   struct razor_package *pkg)
    73 {
    74     PloverPackage *package;
    75     PloverPackagePrivate *priv;
    76     package=g_object_new(PLOVER_TYPE_PACKAGE,NULL);
    77     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
    78     priv->set=set;
    79     priv->pkg=pkg;
    80     return package;
    81 }
    82 
    83 const char *plover_package_get_name(PloverPackage *package)
    84 {
    85     PloverPackagePrivate *priv;
    86     const char *name;
    87     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
    88     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
    89     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_NAME,&name,
    90       RAZOR_DETAIL_LAST);
    91     return name;
    92 }
    93 
    94 const char *plover_package_get_summary(PloverPackage *package)
    95 {
    96     PloverPackagePrivate *priv;
    97     const char *summary;
    98     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
    99     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   100     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_SUMMARY,&summary,
   101       RAZOR_DETAIL_LAST);
   102     return summary;
   103 }
   104 
   105 const char *plover_package_get_version(PloverPackage *package)
   106 {
   107     PloverPackagePrivate *priv;
   108     const char *version;
   109     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   110     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   111     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_VERSION,&version,
   112       RAZOR_DETAIL_LAST);
   113     return version;
   114 }
   115 
   116 const char *plover_package_get_license(PloverPackage *package)
   117 {
   118     PloverPackagePrivate *priv;
   119     const char *license;
   120     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   121     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   122     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_LICENSE,&license,
   123       RAZOR_DETAIL_LAST);
   124     return license;
   125 }
   126 
   127 const char *plover_package_get_arch(PloverPackage *package)
   128 {
   129     PloverPackagePrivate *priv;
   130     const char *arch;
   131     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   132     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   133     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_ARCH,&arch,
   134       RAZOR_DETAIL_LAST);
   135     return arch;
   136 }
   137 
   138 const char *plover_package_get_description(PloverPackage *package)
   139 {
   140     PloverPackagePrivate *priv;
   141     const char *description;
   142     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   143     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   144     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_DESCRIPTION,
   145       &description,RAZOR_DETAIL_LAST);
   146     return description;
   147 }
   148 
   149 const char *plover_package_get_URL(PloverPackage *package)
   150 {
   151     PloverPackagePrivate *priv;
   152     const char *URL;
   153     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   154     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   155     razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_URL,&URL,
   156       RAZOR_DETAIL_LAST);
   157     return URL;
   158 }
   159 
   160 GdkPixbuf *plover_package_get_icon(PloverPackage *package)
   161 {
   162     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   163     return NULL;
   164 }
   165 
   166 PloverPackageFileStore *plover_package_get_file_store(PloverPackage *package)
   167 {
   168     PloverPackagePrivate *priv;
   169     struct razor_file_iterator *iter;
   170     g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL);
   171     priv=PLOVER_PACKAGE_GET_PRIVATE(package);
   172     if (!priv->file_store)
   173     {
   174 	iter=razor_file_iterator_create(priv->set,priv->pkg,0);
   175 	priv->file_store=plover_package_file_store_new(iter);
   176 	razor_file_iterator_destroy(iter);
   177     }
   178     return priv->file_store;
   179 }