/* * Copyright (C) 2004-2005 Vadim Berezniker * http://www.kryptolus.com * * 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, 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 GNU Make; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * http://www.gnu.org/copyleft/gpl.html * */ #include "stdafx.h" #include "common.h" #include "sabbu.h" extern struct sabbu app; gboolean gui_main_error_dialog_show(char *header, char *footer, kryList *error_list) { GtkLabel *label_header = GTK_LABEL(gtk_label_new(header)); GtkLabel *label_footer = GTK_LABEL(gtk_label_new(footer)); GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); GtkTreeIter treeiter; GtkDialog *dialog = GTK_DIALOG(gtk_dialog_new_with_buttons("Errors", app.ui.window, (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_OPEN, GTK_RESPONSE_OK, "Don't Open", GTK_RESPONSE_CLOSE, NULL)); GtkListStore *store = GTK_LIST_STORE(gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING)); GtkTreeView *tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store))); GtkCellRendererText *renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new()); GtkTreeViewColumn *column_line = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes(__("ErrorDialog|Line"), GTK_CELL_RENDERER(renderer), "text", 0, NULL)); GtkTreeViewColumn *column_message = GTK_TREE_VIEW_COLUMN(gtk_tree_view_column_new_with_attributes(__("ErrorDialog|Message"), GTK_CELL_RENDERER(renderer), "text", 1, NULL)); gtk_tree_view_append_column(tree_view, column_line); gtk_tree_view_append_column(tree_view, column_message); kryListIterator iter; error_list->GetIterator(&iter); while(kryTextParseError *error = iter.GetNext()) { char *line_number; if(error->GetLine() != -1) line_number = kry_strdup_printf(KRY_LOC "%d", error->GetLine()); else line_number = kry_strdup(""); gtk_list_store_append(store, &treeiter); gtk_list_store_set(GTK_LIST_STORE(store), &treeiter, 0, line_number, 1, error->GetMessage(), -1); kry_free(line_number); } gtk_widget_set_size_request(GTK_WIDGET(dialog), 500, 300); gtk_misc_set_padding(GTK_MISC(label_header), 4, 4); gtk_misc_set_padding(GTK_MISC(label_footer), 4, 4); gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(tree_view)); gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(label_header), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(sw), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(label_footer), FALSE, TRUE, 0); gtk_widget_show_all(GTK_WIDGET(dialog)); int rv = gtk_dialog_run(dialog); gui_main_focus(); gtk_widget_destroy(GTK_WIDGET(dialog)); if(rv == GTK_RESPONSE_OK) return TRUE; else return FALSE; }