/* PSPPIRE - a graphical user interface for PSPP.
Copyright (C) 2007 Free Software Foundation, Inc.
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 3 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, see . */
#include
#include
#include "window-manager.h"
#include "output-viewer.h"
#include "helper.h"
#include
#include
static void
cancel_urgency (GtkWindow *window, gpointer data)
{
gtk_window_set_urgency_hint (window, FALSE);
}
/*
Create a new output viewer
*/
struct output_viewer *
new_output_viewer (void)
{
GladeXML *xml = XML_NEW ("output-viewer.glade");
struct output_viewer *ov ;
struct editor_window *e;
connect_help (xml);
ov = g_malloc (sizeof (*ov));
e = (struct editor_window *)ov;
e->window = GTK_WINDOW (get_widget_assert (xml, "output-viewer-window"));
ov->textview = get_widget_assert (xml, "output-viewer-textview");
ov->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (ov->textview));
g_signal_connect (e->window,
"focus-in-event",
G_CALLBACK (cancel_urgency),
NULL);
{
/* Output uses ascii characters for tabular material.
So we need a monospaced font otherwise it'll look silly */
PangoFontDescription *font_desc =
pango_font_description_from_string ("monospace");
gtk_widget_modify_font (ov->textview, font_desc);
pango_font_description_free (font_desc);
}
ov->fp = NULL;
g_object_unref (xml);
return ov;
}
void
reload_viewer (struct output_viewer *ov)
{
GtkTextIter end_iter;
int c;
gboolean backspace = FALSE;
GtkTextMark *mark ;
if ( ov->fp == NULL)
{
ov->fp = fopen ("pspp.list", "r");
if ( ov->fp == NULL)
{
g_print ("Cannot open pspp.list\n");
return;
}
}
gtk_text_buffer_get_end_iter (ov->buffer, &end_iter);
mark = gtk_text_buffer_create_mark (ov->buffer, NULL, &end_iter, TRUE);
/* Read in the next lot of text */
while ((c = fgetc (ov->fp)) != EOF)
{
if ( backspace == TRUE)
{
backspace = FALSE;
continue;
}
if ( isprint (c) || c == '\n' || c == '\t')
gtk_text_buffer_insert (ov->buffer, &end_iter, (gchar *) &c, 1);
if ( c == 0x08 )
backspace = TRUE;
}
/* Scroll to where the start of this lot of text begins */
gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (ov->textview),
mark,
0.1, TRUE, 0.0, 0.0);
gtk_window_set_urgency_hint ( ((struct editor_window *)ov)->window, TRUE);
}