1
/*------------------------------------------------------------------------
3
* Copyright (C) 2001 Enpc/Jean-Philippe Chancelier
5
--------------------------------------------------------------------------*/
7
#include "men_scilab.h"
9
extern SciMess ScilabMessage;
11
typedef enum { pOK, pCANCEL , RESET } state;
13
extern void ShellFormCreate(char *, Widget *, Widget *, Display **);
14
int ExposeMessageWindow(void);
15
int ExposeMessageWindow1(void);
19
static GtkWidget *window = NULL;
21
#if GTK_MAJOR_VERSION == 1
23
static void sci_message_ok(GtkWidget *widget,
26
gtk_widget_destroy(window);
31
static void sci_message_cancel(GtkWidget *widget,
34
gtk_widget_destroy(window);
40
int ExposeMessageWindow1(void)
42
return ExposeMessageWindow();
46
int ExposeMessageWindow(void)
52
GtkWidget *scrolled_window;
54
static int answer = RESET ;
56
start_sci_gtk(); /* in case gtk was not initialized */
57
/* do not accept a reenter mode */
58
if ( window != NULL) return FALSE ;
60
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
61
gtk_widget_set_name (window, "Scilab message");
62
gtk_widget_set_usize (window, 300,300);
63
gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
65
gtk_signal_connect (GTK_OBJECT (window), "destroy",
66
GTK_SIGNAL_FUNC(sci_message_cancel),
69
gtk_window_set_title (GTK_WINDOW (window), "Scilab message");
70
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
72
box1 = gtk_vbox_new (FALSE, 0);
73
gtk_container_add (GTK_CONTAINER (window), box1);
74
gtk_widget_show (box1);
76
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
77
gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
78
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
80
GTK_POLICY_AUTOMATIC);
81
gtk_widget_show (scrolled_window);
83
label = gtk_label_new (ScilabMessage.string);
84
gtk_widget_show (label);
85
gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW (scrolled_window), label);
87
separator = gtk_hseparator_new ();
88
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
89
gtk_widget_show (separator);
91
box2 = gtk_hbox_new (FALSE, 10);
92
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
93
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
94
gtk_widget_show (box2);
96
button = gtk_button_new_with_label (ScilabMessage.pButName[0]);
97
gtk_signal_connect (GTK_OBJECT (button), "clicked",
98
GTK_SIGNAL_FUNC(sci_message_ok),
101
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
102
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
103
gtk_widget_grab_default (button);
104
gtk_widget_show (button);
106
if ( ScilabMessage.nb == 2)
108
button = gtk_button_new_with_label (ScilabMessage.pButName[1]);
109
gtk_signal_connect (GTK_OBJECT (button), "clicked",
110
GTK_SIGNAL_FUNC(sci_message_cancel),
112
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
113
gtk_widget_show (button);
116
gtk_widget_show (window);
121
/* here we only want to quit gtk_main after a selection in
124
if ( answer != RESET ) break;
127
return (answer == pOK) ? 1 : 2;
132
#if GTK_MAJOR_VERSION == 2
135
* message with just an OK button
138
char *sci_convert_to_utf8(char *str, int *alloc)
140
gchar *msg_utf8 =NULL;
141
if (g_get_charset (NULL))
148
msg_utf8= g_locale_to_utf8 (str, -1, NULL, NULL, NULL);
155
int ExposeMessageWindow1(void)
159
char *msg_utf8 = sci_convert_to_utf8(ScilabMessage.string,&alloc);
161
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
162
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
166
g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
167
gtk_widget_show (dialog);
168
if ( alloc == TRUE) g_free (msg_utf8);
173
int ExposeMessageWindow(void)
181
char *ok_mess, *cancel_mess;
182
char *msg_utf8 = sci_convert_to_utf8(ScilabMessage.string,&alloc);
184
ok_mess = ScilabMessage.pButName[0];
185
if ( strcasecmp(ok_mess,"Ok")==0 ) ok_mess = GTK_STOCK_OK;
187
switch ( ScilabMessage.nb )
189
case 0: return 1 ; break;
191
dialog = gtk_dialog_new_with_buttons ("Scilab Dialog", GTK_WINDOW (window),
192
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
193
ok_mess, GTK_RESPONSE_OK,
198
cancel_mess = ScilabMessage.pButName[1];
199
if ( strcasecmp(cancel_mess,"Cancel")==0 ) cancel_mess = GTK_STOCK_CANCEL;
200
dialog = gtk_dialog_new_with_buttons ("Scilab Dialog",
202
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
203
ok_mess, GTK_RESPONSE_OK,
204
cancel_mess, GTK_RESPONSE_CANCEL,
209
hbox = gtk_hbox_new (FALSE, 8);
210
gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
211
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 0);
212
gtk_widget_show (hbox);
214
if ( ScilabMessage.nb >= 2)
215
stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
217
stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG);
218
gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
219
gtk_widget_show (stock);
220
label = gtk_label_new (msg_utf8);
221
gtk_box_pack_start (GTK_BOX (hbox),label, TRUE, TRUE, 0);
222
gtk_widget_show (label);
223
response = gtk_dialog_run (GTK_DIALOG (dialog));
224
gtk_widget_destroy (dialog);
225
if ( alloc == TRUE) g_free (msg_utf8);
226
if (response == GTK_RESPONSE_OK)