1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/app-manager/app-manager.c Sat Feb 20 12:11:02 2010 +0000
1.3 @@ -0,0 +1,192 @@
1.4 +/*
1.5 + * Copyright (C) 2010 J. Ali Harlow <ali@juiblex.co.uk>
1.6 + *
1.7 + * This program is free software; you can redistribute it and/or modify
1.8 + * it under the terms of the GNU General Public License as published by
1.9 + * the Free Software Foundation; either version 2 of the License, or
1.10 + * (at your option) any later version.
1.11 + *
1.12 + * This program is distributed in the hope that it will be useful,
1.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1.15 + * GNU General Public License for more details.
1.16 + *
1.17 + * You should have received a copy of the GNU General Public License along
1.18 + * with this program; if not, write to the Free Software Foundation, Inc.,
1.19 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1.20 + */
1.21 +
1.22 +#include "config.h"
1.23 +#include <stdlib.h>
1.24 +#include <string.h>
1.25 +#include <glib.h>
1.26 +#include <gio/gio.h>
1.27 +#include <gtk/gtk.h>
1.28 +#include <plover-gtk/packageset.h>
1.29 +#include "app-manager.h"
1.30 +#include "localmedia.h"
1.31 +
1.32 +#define LOGO_NAME "plover-applications"
1.33 +
1.34 +GtkBuilder *ui;
1.35 +GtkTreeModel *installed,*applications,*location,*local_media;
1.36 +
1.37 +int main(int argc,char **argv)
1.38 +{
1.39 + GError *err=0;
1.40 + GtkWidget *w;
1.41 + gchar *s,*contents;
1.42 + gsize len;
1.43 + PloverPackageSet *set;
1.44 + GOptionEntry options[]={
1.45 + {NULL}
1.46 + };
1.47 + if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err))
1.48 + {
1.49 + g_printerr("%s",err->message);
1.50 + exit(0);
1.51 + }
1.52 + gtk_window_set_default_icon_name(LOGO_NAME);
1.53 + ui=gtk_builder_new();
1.54 + if (!g_file_get_contents("app-manager.ui",&contents,&len,&err) &&
1.55 + g_error_matches(err,G_FILE_ERROR,G_FILE_ERROR_NOENT))
1.56 + {
1.57 + g_clear_error(&err);
1.58 + s=g_build_filename(PLOVER_DATADIR,"app-manager.ui",NULL);
1.59 + (void)g_file_get_contents(s,&contents,&len,&err);
1.60 + g_free(s);
1.61 + }
1.62 + if (!err)
1.63 + {
1.64 + (void)gtk_builder_add_from_string(ui,contents,len,&err);
1.65 + g_free(contents);
1.66 + }
1.67 + if (err)
1.68 + {
1.69 + g_error("%s",err->message);
1.70 + exit(0);
1.71 + }
1.72 + gtk_builder_connect_signals(ui,NULL);
1.73 + installed=GTK_TREE_MODEL(plover_package_store_new());
1.74 + set=plover_package_set_new_from_installed("",NULL);
1.75 + if (set)
1.76 + plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set);
1.77 + applications=plover_applications_model_new(installed);
1.78 + set_package_model(applications);
1.79 + gtk_main();
1.80 + g_object_unref(ui);
1.81 + exit(0);
1.82 +}
1.83 +
1.84 +G_MODULE_EXPORT void
1.85 + on_applications_toggled(GtkToggleToolButton *button,gpointer data)
1.86 +{
1.87 + if (gtk_toggle_tool_button_get_active(button))
1.88 + {
1.89 + if (!applications)
1.90 + applications=plover_applications_model_new(installed);
1.91 + set_package_model(applications);
1.92 + }
1.93 +}
1.94 +
1.95 +G_MODULE_EXPORT void
1.96 + on_all_packages_toggled(GtkToggleToolButton *button,gpointer data)
1.97 +{
1.98 + if (gtk_toggle_tool_button_get_active(button))
1.99 + set_package_model(installed);
1.100 +}
1.101 +
1.102 +G_MODULE_EXPORT void
1.103 + on_local_media_toggled(GtkToggleToolButton *button,gpointer data)
1.104 +{
1.105 + if (gtk_toggle_tool_button_get_active(button))
1.106 + {
1.107 + if (!local_media)
1.108 + local_media=plover_local_media_store_new();
1.109 + set_package_model(local_media);
1.110 + }
1.111 +}
1.112 +
1.113 +G_MODULE_EXPORT void
1.114 + on_location_toggled(GtkToggleToolButton *button,gpointer data)
1.115 +{
1.116 + if (gtk_toggle_tool_button_get_active(button))
1.117 + set_package_model(location);
1.118 +}
1.119 +
1.120 +G_MODULE_EXPORT void on_open_location(GtkWidget *widget)
1.121 +{
1.122 + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow"));
1.123 + GtkWidget *dialog;
1.124 + gchar *path,*name;
1.125 + PloverPackageSet *set;
1.126 + GSList *sets;
1.127 + GError *err=NULL;
1.128 + dialog=gtk_file_chooser_dialog_new("Open Location",GTK_WINDOW(w),
1.129 + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,GTK_STOCK_CANCEL,
1.130 + GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL);
1.131 +#if GTK_CHECK_VERSION(2,18,0)
1.132 + gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(dialog),FALSE);
1.133 +#endif
1.134 + if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT)
1.135 + {
1.136 + path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
1.137 + set=plover_package_set_new_from_repository(path,&err);
1.138 + if (set)
1.139 + {
1.140 + if (!location)
1.141 + location=GTK_TREE_MODEL(plover_package_store_new());
1.142 + while((sets=
1.143 + plover_package_store_get_sets(PLOVER_PACKAGE_STORE(location))))
1.144 + plover_package_store_remove_set(PLOVER_PACKAGE_STORE(location),
1.145 + PLOVER_PACKAGE_SET(sets->data));
1.146 + plover_package_store_add_set(PLOVER_PACKAGE_STORE(location),set);
1.147 + g_object_unref(set);
1.148 + w=GTK_WIDGET(gtk_builder_get_object(ui,"LocationButton"));
1.149 + name=g_filename_display_basename(path);
1.150 + gtk_tool_button_set_label(GTK_TOOL_BUTTON(w),name);
1.151 + g_free(name);
1.152 + gtk_widget_show(w);
1.153 + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(w),TRUE);
1.154 + }
1.155 + else
1.156 + {
1.157 + gtk_widget_destroy(dialog);
1.158 + dialog=gtk_message_dialog_new(GTK_WINDOW(w),
1.159 + GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR,
1.160 + GTK_BUTTONS_CLOSE,"Error loading repository '%s'",path);
1.161 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
1.162 + "%s",err->message);
1.163 + gtk_dialog_run(GTK_DIALOG(dialog));
1.164 + g_error_free(err);
1.165 + }
1.166 + g_free(path);
1.167 + }
1.168 + gtk_widget_destroy(dialog);
1.169 +}
1.170 +
1.171 +G_MODULE_EXPORT void on_scan_local_media(GtkWidget *widget)
1.172 +{
1.173 + if (!local_media)
1.174 + local_media=plover_local_media_store_new();
1.175 + plover_local_media_store_scan(PLOVER_LOCAL_MEDIA_STORE(local_media));
1.176 +}
1.177 +
1.178 +G_MODULE_EXPORT void on_help_about(GtkWidget *widget)
1.179 +{
1.180 + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow"));
1.181 + gtk_show_about_dialog(GTK_WINDOW(w),"name",PACKAGE_NAME,
1.182 + "version",PACKAGE_VERSION,"comments","Application Manager",
1.183 + "copyright","Copyright © 2010 J. Ali Harlow","logo-icon-name",LOGO_NAME,
1.184 + NULL);
1.185 +}
1.186 +
1.187 +G_MODULE_EXPORT void on_find_clicked(GtkButton *button)
1.188 +{
1.189 + gchar *text;
1.190 + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"SearchEntry"));
1.191 + text=g_strdup(gtk_entry_get_text(GTK_ENTRY(w)));
1.192 + gtk_entry_set_text(GTK_ENTRY(w),"");
1.193 + gtk_entry_set_text(GTK_ENTRY(w),text);
1.194 + g_free(text);
1.195 +}