/* * 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); }