1
/* The GIMP -- an image manipulation program
2
* Copyright (C) 1995-1999 Spencer Kimball and Peter Mattis
5
* Copyright (C) 2003 Michael Natterer <mitch@gimp.org>
7
* partly based on errorconsole.c
8
* Copyright (C) 1998 Nick Fetchak <nuke@bayside.net>
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29
#include "libgimpwidgets/gimpwidgets.h"
31
#include "widgets-types.h"
33
#include "core/gimp.h"
35
#include "gimperrorconsole.h"
36
#include "gimpmenufactory.h"
38
#include "gimp-intl.h"
41
static void gimp_error_console_class_init (GimpErrorConsoleClass *klass);
42
static void gimp_error_console_init (GimpErrorConsole *editor);
44
static GObject * gimp_error_console_constructor (GType type,
46
GObjectConstructParam *params);
48
static void gimp_error_console_destroy (GtkObject *object);
49
static void gimp_error_console_unmap (GtkWidget *widget);
51
static gboolean gimp_error_console_button_press (GtkWidget *widget,
52
GdkEventButton *event,
53
GimpErrorConsole *console);
56
static GimpEditorClass *parent_class = NULL;
60
gimp_error_console_get_type (void)
62
static GType view_type = 0;
66
static const GTypeInfo view_info =
68
sizeof (GimpErrorConsoleClass),
70
NULL, /* base_finalize */
71
(GClassInitFunc) gimp_error_console_class_init,
72
NULL, /* class_finalize */
73
NULL, /* class_data */
74
sizeof (GimpErrorConsole),
76
(GInstanceInitFunc) gimp_error_console_init,
79
view_type = g_type_register_static (GIMP_TYPE_EDITOR,
88
gimp_error_console_class_init (GimpErrorConsoleClass *klass)
90
GObjectClass *object_class = G_OBJECT_CLASS (klass);
91
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
92
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
94
parent_class = g_type_class_peek_parent (klass);
96
object_class->constructor = gimp_error_console_constructor;
97
gtk_object_class->destroy = gimp_error_console_destroy;
98
widget_class->unmap = gimp_error_console_unmap;
102
gimp_error_console_init (GimpErrorConsole *console)
104
GtkWidget *scrolled_window;
106
console->text_buffer = gtk_text_buffer_new (NULL);
108
gtk_text_buffer_create_tag (console->text_buffer, "title",
109
"weight", PANGO_WEIGHT_BOLD,
110
"scale", PANGO_SCALE_LARGE,
112
gtk_text_buffer_create_tag (console->text_buffer, "message",
115
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
116
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
117
GTK_POLICY_AUTOMATIC,
118
GTK_POLICY_AUTOMATIC);
119
gtk_container_add (GTK_CONTAINER (console), scrolled_window);
120
gtk_widget_show (scrolled_window);
122
console->text_view = gtk_text_view_new_with_buffer (console->text_buffer);
123
g_object_unref (console->text_buffer);
125
gtk_text_view_set_editable (GTK_TEXT_VIEW (console->text_view), FALSE);
126
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (console->text_view),
128
gtk_container_add (GTK_CONTAINER (scrolled_window), console->text_view);
129
gtk_widget_show (console->text_view);
131
g_signal_connect (console->text_view, "button_press_event",
132
G_CALLBACK (gimp_error_console_button_press),
135
console->file_dialog = NULL;
139
gimp_error_console_constructor (GType type,
141
GObjectConstructParam *params)
144
GimpErrorConsole *console;
146
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
148
console = GIMP_ERROR_CONSOLE (object);
150
console->clear_button =
151
gimp_editor_add_action_button (GIMP_EDITOR (console), "error-console",
152
"error-console-clear", NULL);
154
console->save_button =
155
gimp_editor_add_action_button (GIMP_EDITOR (console), "error-console",
156
"error-console-save-all",
157
"error-console-save-selection",
165
gimp_error_console_destroy (GtkObject *object)
167
GimpErrorConsole *console = GIMP_ERROR_CONSOLE (object);
169
if (console->file_dialog)
170
gtk_widget_destroy (console->file_dialog);
172
console->gimp->message_handler = GIMP_MESSAGE_BOX;
174
GTK_OBJECT_CLASS (parent_class)->destroy (object);
178
gimp_error_console_unmap (GtkWidget *widget)
180
GimpErrorConsole *console = GIMP_ERROR_CONSOLE (widget);
182
if (console->file_dialog)
183
gtk_widget_destroy (console->file_dialog);
185
GTK_WIDGET_CLASS (parent_class)->unmap (widget);
189
gimp_error_console_new (Gimp *gimp,
190
GimpMenuFactory *menu_factory)
192
GimpErrorConsole *console;
194
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
195
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
197
console = g_object_new (GIMP_TYPE_ERROR_CONSOLE,
198
"menu-factory", menu_factory,
199
"menu-identifier", "<ErrorConsole>",
200
"ui-path", "/error-console-popup",
203
console->gimp = gimp;
205
console->gimp->message_handler = GIMP_ERROR_CONSOLE;
207
return GTK_WIDGET (console);
211
gimp_error_console_add (GimpErrorConsole *console,
212
const gchar *stock_id,
214
const gchar *message)
217
GtkTextMark *end_mark;
221
g_return_if_fail (GIMP_IS_ERROR_CONSOLE (console));
222
g_return_if_fail (stock_id != NULL);
223
g_return_if_fail (domain != NULL);
224
g_return_if_fail (message != NULL);
226
gtk_text_buffer_get_end_iter (console->text_buffer, &end);
228
pixbuf = gtk_widget_render_icon (console->text_view, stock_id,
229
GTK_ICON_SIZE_MENU, NULL);
230
gtk_text_buffer_insert_pixbuf (console->text_buffer, &end, pixbuf);
231
g_object_unref (pixbuf);
233
gtk_text_buffer_insert (console->text_buffer, &end, " ", -1);
235
str = g_strdup_printf (_("%s Message"), domain);
236
gtk_text_buffer_insert_with_tags_by_name (console->text_buffer, &end,
242
gtk_text_buffer_insert (console->text_buffer, &end, "\n", -1);
244
gtk_text_buffer_insert_with_tags_by_name (console->text_buffer, &end,
249
gtk_text_buffer_insert (console->text_buffer, &end, "\n\n", -1);
251
end_mark = gtk_text_buffer_create_mark (console->text_buffer,
253
gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (console->text_view), end_mark,
254
FALSE, TRUE, 1.0, 0.0);
255
gtk_text_buffer_delete_mark (console->text_buffer, end_mark);
259
/* private functions */
262
gimp_error_console_button_press (GtkWidget *widget,
263
GdkEventButton *bevent,
264
GimpErrorConsole *console)
266
if (bevent->button == 3 && bevent->type == GDK_BUTTON_PRESS)
268
return gimp_editor_popup_menu (GIMP_EDITOR (console), NULL, NULL);