ali@9: /* ali@9: * Copyright (C) 2010 J. Ali Harlow ali@9: * ali@9: * This program is free software; you can redistribute it and/or modify ali@9: * it under the terms of the GNU General Public License as published by ali@9: * the Free Software Foundation; either version 2 of the License, or ali@9: * (at your option) any later version. ali@9: * ali@9: * This program is distributed in the hope that it will be useful, ali@9: * but WITHOUT ANY WARRANTY; without even the implied warranty of ali@9: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ali@9: * GNU General Public License for more details. ali@9: * ali@9: * You should have received a copy of the GNU General Public License along ali@9: * with this program; if not, write to the Free Software Foundation, Inc., ali@9: * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ali@9: */ ali@9: ali@9: #include "config.h" ali@9: #include ali@9: #include ali@9: #include ali@9: #include ali@9: #include ali@9: #include ali@9: #include "app-manager.h" ali@9: #include "localmedia.h" ali@9: ali@9: #define LOGO_NAME "plover-applications" ali@9: ali@9: GtkBuilder *ui; ali@9: GtkTreeModel *installed,*applications,*location,*local_media; ali@9: ali@9: int main(int argc,char **argv) ali@9: { ali@9: GError *err=0; ali@9: GtkWidget *w; ali@9: gchar *s,*contents; ali@9: gsize len; ali@9: PloverPackageSet *set; ali@9: GOptionEntry options[]={ ali@9: {NULL} ali@9: }; ali@9: if (!gtk_init_with_args(&argc,&argv,NULL,options,NULL,&err)) ali@9: { ali@9: g_printerr("%s",err->message); ali@9: exit(0); ali@9: } ali@9: gtk_window_set_default_icon_name(LOGO_NAME); ali@9: ui=gtk_builder_new(); ali@9: if (!g_file_get_contents("app-manager.ui",&contents,&len,&err) && ali@9: g_error_matches(err,G_FILE_ERROR,G_FILE_ERROR_NOENT)) ali@9: { ali@9: g_clear_error(&err); ali@9: s=g_build_filename(PLOVER_DATADIR,"app-manager.ui",NULL); ali@9: (void)g_file_get_contents(s,&contents,&len,&err); ali@9: g_free(s); ali@9: } ali@9: if (!err) ali@9: { ali@9: (void)gtk_builder_add_from_string(ui,contents,len,&err); ali@9: g_free(contents); ali@9: } ali@9: if (err) ali@9: { ali@9: g_error("%s",err->message); ali@9: exit(0); ali@9: } ali@9: gtk_builder_connect_signals(ui,NULL); ali@9: installed=GTK_TREE_MODEL(plover_package_store_new()); ali@9: set=plover_package_set_new_from_installed("",NULL); ali@9: if (set) ali@9: plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); ali@9: applications=plover_applications_model_new(installed); ali@9: set_package_model(applications); ali@9: gtk_main(); ali@9: g_object_unref(ui); ali@9: exit(0); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void ali@9: on_applications_toggled(GtkToggleToolButton *button,gpointer data) ali@9: { ali@9: if (gtk_toggle_tool_button_get_active(button)) ali@9: { ali@9: if (!applications) ali@9: applications=plover_applications_model_new(installed); ali@9: set_package_model(applications); ali@9: } ali@9: } ali@9: ali@9: G_MODULE_EXPORT void ali@9: on_all_packages_toggled(GtkToggleToolButton *button,gpointer data) ali@9: { ali@9: if (gtk_toggle_tool_button_get_active(button)) ali@9: set_package_model(installed); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void ali@9: on_local_media_toggled(GtkToggleToolButton *button,gpointer data) ali@9: { ali@9: if (gtk_toggle_tool_button_get_active(button)) ali@9: { ali@9: if (!local_media) ali@9: local_media=plover_local_media_store_new(); ali@9: set_package_model(local_media); ali@9: } ali@9: } ali@9: ali@9: G_MODULE_EXPORT void ali@9: on_location_toggled(GtkToggleToolButton *button,gpointer data) ali@9: { ali@9: if (gtk_toggle_tool_button_get_active(button)) ali@9: set_package_model(location); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void on_open_location(GtkWidget *widget) ali@9: { ali@9: GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); ali@9: GtkWidget *dialog; ali@9: gchar *path,*name; ali@9: PloverPackageSet *set; ali@9: GSList *sets; ali@9: GError *err=NULL; ali@9: dialog=gtk_file_chooser_dialog_new("Open Location",GTK_WINDOW(w), ali@9: GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,GTK_STOCK_CANCEL, ali@9: GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL); ali@9: #if GTK_CHECK_VERSION(2,18,0) ali@9: gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(dialog),FALSE); ali@9: #endif ali@9: if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) ali@9: { ali@9: path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); ali@9: set=plover_package_set_new_from_repository(path,&err); ali@9: if (set) ali@9: { ali@9: if (!location) ali@9: location=GTK_TREE_MODEL(plover_package_store_new()); ali@9: while((sets= ali@9: plover_package_store_get_sets(PLOVER_PACKAGE_STORE(location)))) ali@9: plover_package_store_remove_set(PLOVER_PACKAGE_STORE(location), ali@9: PLOVER_PACKAGE_SET(sets->data)); ali@9: plover_package_store_add_set(PLOVER_PACKAGE_STORE(location),set); ali@9: g_object_unref(set); ali@9: w=GTK_WIDGET(gtk_builder_get_object(ui,"LocationButton")); ali@9: name=g_filename_display_basename(path); ali@9: gtk_tool_button_set_label(GTK_TOOL_BUTTON(w),name); ali@9: g_free(name); ali@9: gtk_widget_show(w); ali@9: gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(w),TRUE); ali@9: } ali@9: else ali@9: { ali@9: gtk_widget_destroy(dialog); ali@9: dialog=gtk_message_dialog_new(GTK_WINDOW(w), ali@9: GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR, ali@9: GTK_BUTTONS_CLOSE,"Error loading repository '%s'",path); ali@9: gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), ali@9: "%s",err->message); ali@9: gtk_dialog_run(GTK_DIALOG(dialog)); ali@9: g_error_free(err); ali@9: } ali@9: g_free(path); ali@9: } ali@9: gtk_widget_destroy(dialog); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void on_scan_local_media(GtkWidget *widget) ali@9: { ali@9: if (!local_media) ali@9: local_media=plover_local_media_store_new(); ali@9: plover_local_media_store_scan(PLOVER_LOCAL_MEDIA_STORE(local_media)); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void on_help_about(GtkWidget *widget) ali@9: { ali@9: GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); ali@9: gtk_show_about_dialog(GTK_WINDOW(w),"name",PACKAGE_NAME, ali@9: "version",PACKAGE_VERSION,"comments","Application Manager", ali@9: "copyright","Copyright © 2010 J. Ali Harlow","logo-icon-name",LOGO_NAME, ali@9: NULL); ali@9: } ali@9: ali@9: G_MODULE_EXPORT void on_find_clicked(GtkButton *button) ali@9: { ali@9: gchar *text; ali@9: GtkWidget *w=GTK_WIDGET(gtk_builder_get_object(ui,"SearchEntry")); ali@9: text=g_strdup(gtk_entry_get_text(GTK_ENTRY(w))); ali@9: gtk_entry_set_text(GTK_ENTRY(w),""); ali@9: gtk_entry_set_text(GTK_ENTRY(w),text); ali@9: g_free(text); ali@9: }