/* * Copyright (C) 2010 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "config.h" #include #include #include #include #include "plover-gtk/package.h" G_DEFINE_TYPE(PloverPackage,plover_package,G_TYPE_OBJECT); typedef struct _PloverPackagePrivate { struct razor_set *set; struct razor_package *pkg; PloverPackageFileStore *file_store; } PloverPackagePrivate; #define PLOVER_PACKAGE_GET_PRIVATE(obj)\ G_TYPE_INSTANCE_GET_PRIVATE(obj,\ PLOVER_TYPE_PACKAGE,PloverPackagePrivate) enum { CHANGED=0, N_SIGNALS }; static guint signals[N_SIGNALS]; static void plover_package_dispose(GObject *obj) { PloverPackagePrivate *priv=PLOVER_PACKAGE_GET_PRIVATE(obj); if (priv->file_store) { g_object_unref(priv->file_store); priv->file_store=NULL; } if (G_OBJECT_CLASS(plover_package_parent_class)->dispose) G_OBJECT_CLASS(plover_package_parent_class)->dispose(obj); } static void plover_package_class_init(PloverPackageClass *klass) { GObjectClass *oclass=G_OBJECT_CLASS(klass); oclass->dispose=plover_package_dispose; g_type_class_add_private(klass,sizeof(PloverPackagePrivate)); signals[CHANGED]=g_signal_newv("changed", G_TYPE_FROM_CLASS(klass),G_SIGNAL_RUN_LAST,NULL,NULL,NULL, g_cclosure_marshal_VOID__VOID,G_TYPE_NONE,0,NULL); } static void plover_package_init(PloverPackage *package) { } PloverPackage *plover_package_new(struct razor_set *set, struct razor_package *pkg) { PloverPackage *package; PloverPackagePrivate *priv; package=g_object_new(PLOVER_TYPE_PACKAGE,NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); priv->set=set; priv->pkg=pkg; return package; } const char *plover_package_get_name(PloverPackage *package) { PloverPackagePrivate *priv; const char *name; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_NAME,&name, RAZOR_DETAIL_LAST); return name; } const char *plover_package_get_summary(PloverPackage *package) { PloverPackagePrivate *priv; const char *summary; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_SUMMARY,&summary, RAZOR_DETAIL_LAST); return summary; } const char *plover_package_get_version(PloverPackage *package) { PloverPackagePrivate *priv; const char *version; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_VERSION,&version, RAZOR_DETAIL_LAST); return version; } const char *plover_package_get_license(PloverPackage *package) { PloverPackagePrivate *priv; const char *license; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_LICENSE,&license, RAZOR_DETAIL_LAST); return license; } const char *plover_package_get_arch(PloverPackage *package) { PloverPackagePrivate *priv; const char *arch; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_ARCH,&arch, RAZOR_DETAIL_LAST); return arch; } const char *plover_package_get_description(PloverPackage *package) { PloverPackagePrivate *priv; const char *description; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_DESCRIPTION, &description,RAZOR_DETAIL_LAST); return description; } const char *plover_package_get_URL(PloverPackage *package) { PloverPackagePrivate *priv; const char *URL; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); razor_package_get_details(priv->set,priv->pkg,RAZOR_DETAIL_URL,&URL, RAZOR_DETAIL_LAST); return URL; } GdkPixbuf *plover_package_get_icon(PloverPackage *package) { g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); return NULL; } PloverPackageFileStore *plover_package_get_file_store(PloverPackage *package) { PloverPackagePrivate *priv; struct razor_file_iterator *iter; g_return_val_if_fail(PLOVER_IS_PACKAGE(package),NULL); priv=PLOVER_PACKAGE_GET_PRIVATE(package); if (!priv->file_store) { iter=razor_file_iterator_create(priv->set,priv->pkg,0); priv->file_store=plover_package_file_store_new(iter); razor_file_iterator_destroy(iter); } return priv->file_store; }