diff -r 000000000000 -r 8d3b1ddf789c app-manager/app-manager.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app-manager/app-manager.c Sat Feb 20 12:11:02 2010 +0000 @@ -0,0 +1,192 @@ +/* + * 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 +#include +#include "app-manager.h" +#include "localmedia.h" + +#define LOGO_NAME "plover-applications" + +GtkBuilder *ui; +GtkTreeModel *installed,*applications,*location,*local_media; + +int main(int argc,char **argv) +{ + GError *err=0; + GtkWidget *w; + gchar *s,*contents; + gsize len; + PloverPackageSet *set; + GOptionEntry options[]={ + {NULL} + }; + if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err)) + { + g_printerr("%s",err->message); + exit(0); + } + gtk_window_set_default_icon_name(LOGO_NAME); + ui=gtk_builder_new(); + if (!g_file_get_contents("app-manager.ui",&contents,&len,&err) && + g_error_matches(err,G_FILE_ERROR,G_FILE_ERROR_NOENT)) + { + g_clear_error(&err); + s=g_build_filename(PLOVER_DATADIR,"app-manager.ui",NULL); + (void)g_file_get_contents(s,&contents,&len,&err); + g_free(s); + } + if (!err) + { + (void)gtk_builder_add_from_string(ui,contents,len,&err); + g_free(contents); + } + if (err) + { + g_error("%s",err->message); + exit(0); + } + gtk_builder_connect_signals(ui,NULL); + installed=GTK_TREE_MODEL(plover_package_store_new()); + set=plover_package_set_new_from_installed("",NULL); + if (set) + plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); + applications=plover_applications_model_new(installed); + set_package_model(applications); + gtk_main(); + g_object_unref(ui); + exit(0); +} + +G_MODULE_EXPORT void + on_applications_toggled(GtkToggleToolButton *button,gpointer data) +{ + if (gtk_toggle_tool_button_get_active(button)) + { + if (!applications) + applications=plover_applications_model_new(installed); + set_package_model(applications); + } +} + +G_MODULE_EXPORT void + on_all_packages_toggled(GtkToggleToolButton *button,gpointer data) +{ + if (gtk_toggle_tool_button_get_active(button)) + set_package_model(installed); +} + +G_MODULE_EXPORT void + on_local_media_toggled(GtkToggleToolButton *button,gpointer data) +{ + if (gtk_toggle_tool_button_get_active(button)) + { + if (!local_media) + local_media=plover_local_media_store_new(); + set_package_model(local_media); + } +} + +G_MODULE_EXPORT void + on_location_toggled(GtkToggleToolButton *button,gpointer data) +{ + if (gtk_toggle_tool_button_get_active(button)) + set_package_model(location); +} + +G_MODULE_EXPORT void on_open_location(GtkWidget *widget) +{ + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); + GtkWidget *dialog; + gchar *path,*name; + PloverPackageSet *set; + GSList *sets; + GError *err=NULL; + dialog=gtk_file_chooser_dialog_new("Open Location",GTK_WINDOW(w), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL); +#if GTK_CHECK_VERSION(2,18,0) + gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(dialog),FALSE); +#endif + if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) + { + path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + set=plover_package_set_new_from_repository(path,&err); + if (set) + { + if (!location) + location=GTK_TREE_MODEL(plover_package_store_new()); + while((sets= + plover_package_store_get_sets(PLOVER_PACKAGE_STORE(location)))) + plover_package_store_remove_set(PLOVER_PACKAGE_STORE(location), + PLOVER_PACKAGE_SET(sets->data)); + plover_package_store_add_set(PLOVER_PACKAGE_STORE(location),set); + g_object_unref(set); + w=GTK_WIDGET(gtk_builder_get_object(ui,"LocationButton")); + name=g_filename_display_basename(path); + gtk_tool_button_set_label(GTK_TOOL_BUTTON(w),name); + g_free(name); + gtk_widget_show(w); + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(w),TRUE); + } + else + { + gtk_widget_destroy(dialog); + dialog=gtk_message_dialog_new(GTK_WINDOW(w), + GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE,"Error loading repository '%s'",path); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), + "%s",err->message); + gtk_dialog_run(GTK_DIALOG(dialog)); + g_error_free(err); + } + g_free(path); + } + gtk_widget_destroy(dialog); +} + +G_MODULE_EXPORT void on_scan_local_media(GtkWidget *widget) +{ + if (!local_media) + local_media=plover_local_media_store_new(); + plover_local_media_store_scan(PLOVER_LOCAL_MEDIA_STORE(local_media)); +} + +G_MODULE_EXPORT void on_help_about(GtkWidget *widget) +{ + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); + gtk_show_about_dialog(GTK_WINDOW(w),"name",PACKAGE_NAME, + "version",PACKAGE_VERSION,"comments","Application Manager", + "copyright","Copyright © 2010 J. Ali Harlow","logo-icon-name",LOGO_NAME, + NULL); +} + +G_MODULE_EXPORT void on_find_clicked(GtkButton *button) +{ + gchar *text; + GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"SearchEntry")); + text=g_strdup(gtk_entry_get_text(GTK_ENTRY(w))); + gtk_entry_set_text(GTK_ENTRY(w),""); + gtk_entry_set_text(GTK_ENTRY(w),text); + g_free(text); +}