Fixed to make it work, factorized
This commit is contained in:
parent
d18ecc7997
commit
3b9f4e0a5f
|
@ -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;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include <gtk/gtk.h>
|
||||
#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__ */
|
||||
|
|
Reference in New Issue