~ubuntu-branches/ubuntu/hoary/scilab/hoary

« back to all changes in this revision

Viewing changes to routines/menusX/gxmen_message.c

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2005-01-09 22:58:21 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050109225821-473xr8vhgugxxx5j
Tags: 3.0-12
changed configure.in to build scilab's own malloc.o, closes: #255869

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*------------------------------------------------------------------------
 
2
 *    Scilab Gtk menus 
 
3
 *    Copyright (C) 2001 Enpc/Jean-Philippe Chancelier
 
4
 *    jpc@cermics.enpc.fr 
 
5
 --------------------------------------------------------------------------*/
 
6
 
 
7
#include "men_scilab.h"
 
8
 
 
9
extern SciMess ScilabMessage;
 
10
 
 
11
typedef enum { pOK, pCANCEL , RESET } state; 
 
12
 
 
13
extern void ShellFormCreate(char *, Widget *, Widget *, Display **);
 
14
int ExposeMessageWindow(void);
 
15
int ExposeMessageWindow1(void);
 
16
 
 
17
#include <gtk/gtk.h>
 
18
 
 
19
static GtkWidget *window = NULL; 
 
20
 
 
21
#if GTK_MAJOR_VERSION == 1 
 
22
 
 
23
static void sci_message_ok(GtkWidget *widget,
 
24
                          int *answer)
 
25
{
 
26
  gtk_widget_destroy(window); 
 
27
  *answer = pOK;
 
28
  gtk_main_quit();
 
29
}
 
30
 
 
31
static void sci_message_cancel(GtkWidget *widget,
 
32
                              int *answer)
 
33
{
 
34
  gtk_widget_destroy(window); 
 
35
  *answer = pCANCEL;
 
36
  gtk_main_quit();
 
37
}
 
38
 
 
39
 
 
40
int ExposeMessageWindow1(void)
 
41
 
42
  return  ExposeMessageWindow();
 
43
}
 
44
 
 
45
 
 
46
int ExposeMessageWindow(void)
 
47
{
 
48
  GtkWidget *box1;
 
49
  GtkWidget *box2;
 
50
  GtkWidget *button;
 
51
  GtkWidget *separator;
 
52
  GtkWidget *scrolled_window;
 
53
  GtkWidget *label;
 
54
  static int answer  = RESET ;
 
55
 
 
56
  start_sci_gtk(); /* in case gtk was not initialized */
 
57
  /* do not accept a reenter mode */ 
 
58
  if ( window != NULL) return FALSE ; 
 
59
 
 
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);
 
64
 
 
65
  gtk_signal_connect (GTK_OBJECT (window), "destroy",
 
66
                      GTK_SIGNAL_FUNC(sci_message_cancel),
 
67
                      &answer);
 
68
 
 
69
  gtk_window_set_title (GTK_WINDOW (window), "Scilab message");
 
70
  gtk_container_set_border_width (GTK_CONTAINER (window), 0);
 
71
 
 
72
  box1 = gtk_vbox_new (FALSE, 0);
 
73
  gtk_container_add (GTK_CONTAINER (window), box1);
 
74
  gtk_widget_show (box1);
 
75
 
 
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),
 
79
                                  GTK_POLICY_AUTOMATIC,
 
80
                                  GTK_POLICY_AUTOMATIC);
 
81
  gtk_widget_show (scrolled_window);
 
82
 
 
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);
 
86
 
 
87
  separator = gtk_hseparator_new ();
 
88
  gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
 
89
  gtk_widget_show (separator);
 
90
 
 
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);
 
95
 
 
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),
 
99
                      &answer);
 
100
 
 
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);
 
105
 
 
106
  if ( ScilabMessage.nb == 2) 
 
107
    {
 
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),
 
111
                          &answer);
 
112
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
 
113
      gtk_widget_show (button);
 
114
    }
 
115
 
 
116
  gtk_widget_show (window);
 
117
 
 
118
 
 
119
  while (1) 
 
120
    {
 
121
      /* here we only want to quit gtk_main after a selection in 
 
122
       */
 
123
      gtk_main();
 
124
      if ( answer != RESET ) break;
 
125
    }
 
126
  window = NULL;
 
127
  return (answer == pOK) ? 1 : 2;
 
128
}
 
129
 
 
130
#endif 
 
131
 
 
132
#if GTK_MAJOR_VERSION == 2 
 
133
 
 
134
/*  
 
135
 * message with just an OK button 
 
136
 */  
 
137
 
 
138
char *sci_convert_to_utf8(char *str, int *alloc)
 
139
{
 
140
  gchar *msg_utf8 =NULL;
 
141
  if (g_get_charset (NULL)) 
 
142
    {
 
143
      *alloc = FALSE; 
 
144
      msg_utf8 = str; 
 
145
    }
 
146
  else 
 
147
    {
 
148
      msg_utf8= g_locale_to_utf8 (str, -1, NULL, NULL, NULL);
 
149
      *alloc = TRUE; 
 
150
    }
 
151
  return msg_utf8; 
 
152
}
 
153
  
 
154
 
 
155
int ExposeMessageWindow1(void)
 
156
{
 
157
  int alloc; 
 
158
  GtkWidget *dialog;
 
159
  char *msg_utf8 = sci_convert_to_utf8(ScilabMessage.string,&alloc);
 
160
 
 
161
  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
 
162
                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
 
163
                                   GTK_MESSAGE_INFO,
 
164
                                   GTK_BUTTONS_OK,
 
165
                                   msg_utf8);
 
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);
 
169
  return 1;
 
170
}
 
171
 
 
172
 
 
173
int ExposeMessageWindow(void)
 
174
{
 
175
  int alloc =FALSE;
 
176
  GtkWidget *dialog;
 
177
  GtkWidget *hbox;
 
178
  GtkWidget *stock;
 
179
  GtkWidget *label;
 
180
  gint response;
 
181
  char *ok_mess, *cancel_mess;
 
182
  char *msg_utf8 = sci_convert_to_utf8(ScilabMessage.string,&alloc);
 
183
 
 
184
  ok_mess = ScilabMessage.pButName[0]; 
 
185
  if ( strcasecmp(ok_mess,"Ok")==0 ) ok_mess = GTK_STOCK_OK; 
 
186
  
 
187
  switch ( ScilabMessage.nb ) 
 
188
    {
 
189
    case 0: return 1 ; break;
 
190
    case 1 : 
 
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,
 
194
                                            NULL);
 
195
      break;
 
196
    case 2:
 
197
    default: 
 
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",
 
201
                                            GTK_WINDOW (window),
 
202
                                            GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
 
203
                                            ok_mess, GTK_RESPONSE_OK,
 
204
                                            cancel_mess,  GTK_RESPONSE_CANCEL,
 
205
                                            NULL);
 
206
      break;
 
207
    }
 
208
 
 
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);
 
213
  
 
214
  if ( ScilabMessage.nb >= 2) 
 
215
    stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
 
216
  else
 
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)
 
227
    return 1; 
 
228
  else 
 
229
    return 2; 
 
230
}
 
231
 
 
232
#endif