app-manager/app-manager.c
changeset 9 8d3b1ddf789c
child 10 8b50be3e2998
     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 +}