diff --git a/gnoemoe/dialogs/gm-world-logs-dialog.c b/gnoemoe/dialogs/gm-world-logs-dialog.c index 1059d84..c4a5317 100644 --- a/gnoemoe/dialogs/gm-world-logs-dialog.c +++ b/gnoemoe/dialogs/gm-world-logs-dialog.c @@ -7,7 +7,7 @@ #include "../gm-world.h" #include "../gm-support.h" -#define G_WORLD_LOGS_XML PACKAGE_DATA_DIR "/" PACKAGE "/ui/gm-world-info.glade" +#define G_WORLD_LOGS_XML PACKAGE_DATA_DIR "/" PACKAGE "/ui/gm-world-logs.glade" void on_gm_world_logs_dialog_row_activated(GtkTreeView *treeview, GtkTreePath *arg1, @@ -15,47 +15,45 @@ on_gm_world_logs_dialog_row_activated(GtkTreeView *treeview, GtkTreePath *arg1, /* Public */ -GtkDialog * -gm_world_logs_dialog_new(GmWorld *world, GtkTreeView **view, - GtkProgressBar **progress) { - GladeXML *xml = glade_xml_new(G_WORLD_LOGS_XML, "dlgLogs", NULL); - GtkDialog *dlg; +void +gm_world_logs_dialog_build_tree_view(GtkTreeView *tree_view) { GtkTreeModel *model, *smodel; GtkCellRenderer *renderer; GtkTreeViewColumn *column; - gchar *path, *tmp, *tmp2; - const gchar *fname; - GDir *dir; - GError *err; - GtkTreeIter iter; - FILE *f; - long fsize; - int res = 0; - - dlg = GTK_DIALOG(glade_xml_get_widget(xml, "dlgLogs")); - *view = GTK_TREE_VIEW(glade_xml_get_widget(xml, "tvwLogs")); - + model = GTK_TREE_MODEL(gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING)); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Logs"), renderer, "text", 1, NULL); - gtk_tree_view_append_column(*view, column); + gtk_tree_view_append_column(tree_view, column); smodel = gtk_tree_model_sort_new_with_model(model); gtk_tree_view_column_set_sort_column_id(column, 0); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(smodel), 0, GTK_SORT_DESCENDING); - gtk_tree_view_set_model(*view, GTK_TREE_MODEL(smodel)); - + gtk_tree_view_set_model(tree_view, GTK_TREE_MODEL(smodel)); +} + +gint +gm_world_logs_dialog_fill(GmWorld *world, GtkTreeView *view, + GtkTreeModel *model, GError **err) { + gint res = 0; + gchar *path, *tmp, *tmp2; + gchar const *fname; + GDir *dir; + GtkTreeIter iter; + FILE *f; + long fsize; + /* Fill it in */ path = g_strdup_printf("%s/logs/", gm_world_path(world)); - dir = g_dir_open(path, 0, &err); + dir = g_dir_open(path, 0, err); if (dir) { while ((fname = g_dir_read_name(dir)) != NULL) { - res++; + ++res; tmp = g_strconcat(path, fname, NULL); f = fopen(tmp, "r"); @@ -78,30 +76,52 @@ gm_world_logs_dialog_new(GmWorld *world, GtkTreeView **view, } g_dir_close(dir); - - if (res != 0) { - gtk_tree_model_get_iter_first(smodel, &iter); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(*view), &iter); - glade_xml_signal_connect_data(xml, "on_tvwLogs_row_activated", - G_CALLBACK(on_gm_world_logs_dialog_row_activated), dlg); - - *progress = GTK_PROGRESS_BAR(glade_xml_get_widget(xml, - "progressBarLoading")); - } else { - gm_info_dialog(_("There are no log files for this world"), NULL); - gtk_widget_destroy(GTK_WIDGET(dlg)); - dlg = NULL; - } + g_free(path); + return res; } else { - tmp = g_strdup_printf(_("Couldn't open the log directory: %s"), err->message); + g_free(path); + return -1; + } +} + +GtkDialog * +gm_world_logs_dialog_new(GmWorld *world, GtkTreeView **view) { + GladeXML *xml = glade_xml_new(G_WORLD_LOGS_XML, "gm_world_logs_dialog", NULL); + GtkDialog *dlg; + GError *err; + gint res; + gchar *tmp; + GtkTreeModel *model; + GtkTreeIter iter; + + dlg = GTK_DIALOG(glade_xml_get_widget(xml, "gm_world_logs_dialog")); + *view = GTK_TREE_VIEW(glade_xml_get_widget(xml, "tree_view_files")); + + gm_world_logs_dialog_build_tree_view(*view); + model = gtk_tree_view_get_model(*view); + + res = gm_world_logs_dialog_fill(world, *view, model, &err); + + if (res == -1) { + tmp = g_strdup_printf(_("Couldn't open the log directory: %s"), + err->message); gm_error_dialog(tmp, NULL); g_error_free(err); g_free(tmp); gtk_widget_destroy(GTK_WIDGET(dlg)); dlg = NULL; + } else if (res == 0) { + gm_info_dialog(_("There are no log files for this world"), NULL); + gtk_widget_destroy(GTK_WIDGET(dlg)); + dlg = NULL; + } else { + gtk_tree_model_get_iter_first(model, &iter); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(*view), + &iter); + glade_xml_signal_connect_data(xml, "on_tree_view_files_row_activated", + G_CALLBACK(on_gm_world_logs_dialog_row_activated), dlg); } - g_free(path); g_object_unref(xml); return dlg; diff --git a/gnoemoe/dialogs/gm-world-logs-dialog.h b/gnoemoe/dialogs/gm-world-logs-dialog.h index 41694da..b0fcb43 100644 --- a/gnoemoe/dialogs/gm-world-logs-dialog.h +++ b/gnoemoe/dialogs/gm-world-logs-dialog.h @@ -4,7 +4,6 @@ #include #include "../gm-world.h" -GtkDialog *gm_world_logs_dialog_new(GmWorld *world, GtkTreeView **view, - GtkProgressBar **progress); +GtkDialog *gm_world_logs_dialog_new(GmWorld *world, GtkTreeView **view); #endif /* __GM_WORLD_LOGS_DIALOG_H__ */