1 /* Signal Handlers for GTK Stamp Config!
2 Eric Werner - 19 FEB 1999
3 ebw@city-net.com
4 */
5 #include <gtk/gtk.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include "gstamp.h"
9 #include "../lib/rcfile.h"
10
11 extern char *stamperror[] ;
12
13
help_about_callback(GtkWidget * w,UI_Struct * ui)14 void help_about_callback(GtkWidget *w, UI_Struct *ui) {
15 char tmpstring[1024];
16
17 sprintf(tmpstring, "GTK Stamp - Version %s\n",VERSION);
18 strcat(tmpstring, "Copyright (C) 1999 Patrick Keane, Joshua Kirby, Eric Werner\nThis program comes with NO WARRANTY. You may redistribute\ncopies of this program under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.");
19
20 message_set_text(ui, tmpstring);
21 message_show(ui);
22 }
23
24
message_delete_event(GtkWidget * w,UI_Struct * ui)25 gint message_delete_event (GtkWidget *w, UI_Struct *ui) {
26 gtk_widget_hide (GTK_WIDGET(w));
27 gtk_grab_remove(GTK_WIDGET(w));
28 return TRUE;
29 }
30
message_ok_sel(GtkWidget * w,UI_Struct * ui)31 void message_ok_sel(GtkWidget *w, UI_Struct *ui){
32
33 gtk_widget_hide(GTK_WIDGET(ui->message->window));
34 gtk_grab_remove(GTK_WIDGET(ui->message->window));
35
36 }
37
38 /* delete event for the preview dialog */
preview_delete_event(GtkObject * w,UI_Struct * ui)39 gint preview_delete_event(GtkObject *w, UI_Struct *ui){
40 gtk_widget_hide (GTK_WIDGET(w));
41 return TRUE;
42 }
43
44 /* callback function for the Preview Button */
preview_callback(GtkWidget * widget,UI_Struct * ui)45 void preview_callback (GtkWidget * widget, UI_Struct *ui) {
46 Preview(ui);
47 }
48
stamp_callback(GtkWidget * widget,UI_Struct * ui)49 void stamp_callback (GtkWidget * widget, UI_Struct *ui) {
50 int stamp_return;
51 ui_to_args(ui, ui->args);
52 stamp_return = gstmp_stampit(ui, ui->args, 0);
53 if (stamp_return) {
54 message_set_text(ui, stamperror[stamp_return]);
55 message_show(ui);
56 }
57 return;
58 }
59
stamp_send_callback(GtkWidget * widget,UI_Struct * ui)60 void stamp_send_callback (GtkWidget * widget, UI_Struct *ui) {
61 int stamp_return;
62 ui_to_args(ui, ui->args);
63 stamp_return = gstmp_stampit(ui, ui->args, 1);
64 if (stamp_return) {
65 message_set_text(ui, stamperror[stamp_return]);
66 message_show(ui);
67 }
68 return;
69 }
70
71
72 /* the close the window and get the hell outta dodge routine */
main_delete_event(GtkWidget * widget,GdkEvent * event,gpointer data)73 void main_delete_event (GtkWidget * widget, GdkEvent * event, gpointer data){
74 gtk_main_quit ();
75 }
76
77 /* the die die die routine ( does this ever actually get executed? ) */
main_destroy_event(GtkWidget * widget,gpointer data)78 void main_destroy_event (GtkWidget *widget, gpointer data)
79 {
80 gtk_main_quit ();
81 }
82
83 /* callback for selecting "Yes" in the yes/no dialog */
yes_no_yes_sel(GtkWidget * w,UI_Struct * ui)84 void yes_no_yes_sel (GtkWidget *w, UI_Struct *ui){
85 char *title;
86
87 title = g_malloc(sizeof(char) * (strlen(ui->Titlebase)
88 + strlen(gtk_file_selection_get_filename (GTK_FILE_SELECTION (ui->filew))) + 2));
89 strcpy (title, ui->Titlebase);
90 strcat(title, gtk_file_selection_get_filename (GTK_FILE_SELECTION (ui->filew)));
91 gtk_widget_hide (GTK_WIDGET(ui->yesno->window));
92 gtk_grab_remove(GTK_WIDGET(ui->yesno->window));
93 gtk_window_set_title (GTK_WINDOW(ui->window), title);
94 write_config_file((char *) gtk_file_selection_get_filename (GTK_FILE_SELECTION (ui->filew)), ui);
95 g_free(title);
96 }
97
98 /* callback for selecting "No" in the yes/no dialog */
yes_no_no_sel(GtkWidget * w,UI_Struct * ui)99 void yes_no_no_sel (GtkWidget *w, UI_Struct *ui) {
100 gtk_widget_hide (GTK_WIDGET(ui->yesno->window));
101 gtk_grab_remove(GTK_WIDGET(ui->yesno->window));
102 main_save_callback (NULL, ui);
103 }
104
105 /* callback for selecting "Cancel" in the yes/no dialog */
yes_no_cancel_sel(GtkWidget * w,UI_Struct * ui)106 void yes_no_cancel_sel (GtkWidget *w, UI_Struct *ui)
107 {
108 gtk_widget_hide (GTK_WIDGET(ui->yesno->window));
109 gtk_grab_remove(GTK_WIDGET(ui->yesno->window));
110 }
111
112 /* delete event for the yes/no dialog */
yes_no_delete_event(GtkObject * w,UI_Struct * ui)113 gint yes_no_delete_event(GtkObject *w, UI_Struct *ui){
114 gtk_widget_hide (GTK_WIDGET(w));
115 gtk_grab_remove(GTK_WIDGET(w));
116 return TRUE;
117 }
118
update_callback(GtkWidget * widget,UI_Struct * ui)119 void update_callback(GtkWidget * widget, UI_Struct *ui) {
120 char tmp[255];
121 /* i have to do this because write_config_file rewrites
122 ui->RCFile. */
123
124 strcpy(tmp, ui->RCFile);
125 write_config_file(tmp, ui);
126 }
127
128 /* callback for the "Save" button in the main window*/
main_save_callback(GtkWidget * widget,UI_Struct * ui)129 void main_save_callback (GtkWidget * widget, UI_Struct *ui) {
130 ui->GSTMP_FILE_VISIBLE = TRUE;
131 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_SAVEAS;
132 /* this should take the default rcfile from the args struct */
133 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), ui->RCFile);
134 gtk_widget_show (ui->filew);
135 gtk_grab_add(ui->filew);
136 }
137
138 /* callback for the "LOAD" button in the main window*/
main_load_callback(GtkWidget * widget,UI_Struct * ui)139 void main_load_callback (GtkWidget * widget, UI_Struct *ui) {
140 ui->GSTMP_FILE_VISIBLE = TRUE;
141 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_LOAD;
142 /* this should take the default rcfile from the args struct */
143 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), ui->RCFile);
144 gtk_widget_show (ui->filew);
145 gtk_grab_add(ui->filew);
146 }
147
148 /* callback for the Input File "Browse" button */
input_file_browse_callback(GtkWidget * w,UI_Struct * ui)149 void input_file_browse_callback(GtkWidget *w, UI_Struct *ui){
150 gchar *filename;
151 ui->GSTMP_FILE_VISIBLE = TRUE;
152 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_INFILE;
153
154 filename = gtk_entry_get_text (GTK_ENTRY(ui->Infile));
155 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), filename);
156 gtk_widget_show (ui->filew);
157 gtk_grab_add(ui->filew);
158 }
159
160 /* callback for the Output File "Browse" button */
output_file_browse_callback(GtkWidget * w,UI_Struct * ui)161 void output_file_browse_callback(GtkWidget *w, UI_Struct *ui){
162 gchar *filename;
163 ui->GSTMP_FILE_VISIBLE = TRUE;
164 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_OUTFILE;
165
166 filename = gtk_entry_get_text (GTK_ENTRY(ui->Outfile));
167 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), filename);
168 gtk_widget_show (ui->filew);
169 gtk_grab_add(ui->filew);
170 }
171
172 /* callback for the Upper Font "Browse" button */
upper_font_browse_callback(GtkWidget * w,UI_Struct * ui)173 void upper_font_browse_callback(GtkWidget *w, UI_Struct *ui){
174 gchar *filename;
175 ui->GSTMP_FILE_VISIBLE = TRUE;
176 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_UPPERFONT;
177
178 filename = gtk_entry_get_text (GTK_ENTRY(ui->UpperFont));
179 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), filename);
180 gtk_widget_show (ui->filew);
181 gtk_grab_add(ui->filew);
182 }
183
184 /* callback for the Lower Font "Browse" button */
lower_font_browse_callback(GtkWidget * w,UI_Struct * ui)185 void lower_font_browse_callback(GtkWidget *w, UI_Struct *ui){
186 gchar *filename;
187 ui->GSTMP_FILE_VISIBLE = TRUE;
188 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_LOWERFONT;
189
190 filename = gtk_entry_get_text (GTK_ENTRY(ui->LowerFont));
191 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), filename);
192 gtk_widget_show (ui->filew);
193 gtk_grab_add(ui->filew);
194 }
195
196 /* callback for the preview file browse button */
preview_file_browse_callback(GtkWidget * w,UI_Struct * ui)197 void preview_file_browse_callback(GtkWidget *w, UI_Struct *ui){
198 gchar *filename;
199 ui->GSTMP_FILE_VISIBLE = TRUE;
200 ui->GSTMP_FILE_BUTTON = GSTMP_BROWSE_PREVIEW;
201
202 filename = gtk_entry_get_text (GTK_ENTRY(ui->Previewfile));
203 gtk_file_selection_set_filename (GTK_FILE_SELECTION (ui->filew), filename);
204 gtk_widget_show (ui->filew);
205 gtk_grab_add(ui->filew);
206 }
207
208 /* delete event callback for file dialog */
file_delete_event(GtkWidget * w,UI_Struct * ui)209 gint file_delete_event(GtkWidget *w, UI_Struct *ui){
210 ui->GSTMP_FILE_VISIBLE = FALSE;
211 ui->GSTMP_FILE_BUTTON = 0;
212 gtk_widget_hide (GTK_WIDGET(w));
213 gtk_grab_remove(GTK_WIDGET(w));
214 return TRUE;
215 }
216
217 /* callback for the "Cancel" button on the file dialog */
file_cancel_sel(GtkWidget * w,UI_Struct * ui)218 void file_cancel_sel (GtkWidget *w, UI_Struct *ui){
219 ui->GSTMP_FILE_VISIBLE = FALSE;
220 ui->GSTMP_FILE_BUTTON = 0;
221 gtk_widget_hide (GTK_WIDGET(ui->filew));
222 gtk_grab_remove(GTK_WIDGET(ui->filew));
223 }
224
225 /* callback for the "Ok" button on the file dialog */
file_ok_sel(GtkWidget * w,UI_Struct * ui)226 void file_ok_sel (GtkWidget *w, UI_Struct *ui)
227 {
228
229 char *filename;
230 const char *q1 = " exists, overwrite?";
231 char *fullquestion;
232 FILE *file;
233 char *title;
234
235 gtk_widget_hide(GTK_WIDGET(ui->filew));
236 gtk_grab_remove(GTK_WIDGET(ui->filew));
237
238 filename = (char *) gtk_file_selection_get_filename (GTK_FILE_SELECTION (ui->filew));
239 /* handle the case for SAVE RC */
240 if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_SAVEAS) {
241 file = fopen(filename, "r");
242 if (file != NULL){
243 ui->GSTMP_FILE_VISIBLE = FALSE;
244 ui->GSTMP_FILE_BUTTON = 0;
245 fclose (file);
246 yes_no_set_title(ui, "Overwrite existing file?");
247 fullquestion = (char *) g_malloc(sizeof (char) * (strlen(q1) + strlen(filename) + 1));
248 strcpy (fullquestion, filename);
249 strcat (fullquestion, q1);
250 yes_no_set_question(ui, fullquestion);
251 yes_no_show(ui);
252 } else {
253 title = g_malloc(sizeof(char) * (strlen(ui->Titlebase)
254 + strlen(filename) + 2));
255 strcpy (title, ui->Titlebase);
256 strcat(title, filename);
257 gtk_window_set_title (GTK_WINDOW(ui->window), title);
258 write_config_file(filename, ui);
259 g_free(title);
260 }
261 }
262 /* SETTING INFILE */
263 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_INFILE) {
264 ui->GSTMP_FILE_VISIBLE = FALSE;
265 ui->GSTMP_FILE_BUTTON = 0;
266 gtk_entry_set_text (GTK_ENTRY(ui->Infile), (gchar *)filename );
267
268 }
269 /* SETTING OUTFILE */
270 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_OUTFILE) {
271 ui->GSTMP_FILE_VISIBLE = FALSE;
272 ui->GSTMP_FILE_BUTTON = 0;
273 gtk_entry_set_text (GTK_ENTRY(ui->Outfile), (gchar *)filename);
274 }
275 /* SETTING UPPERFONT */
276 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_UPPERFONT) {
277 ui->GSTMP_FILE_VISIBLE = FALSE;
278 ui->GSTMP_FILE_BUTTON = 0;
279 gtk_entry_set_text (GTK_ENTRY(ui->UpperFont), (gchar *)filename);
280 }
281 /* SETTING LOWERFONT */
282 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_LOWERFONT) {
283 ui->GSTMP_FILE_VISIBLE = FALSE;
284 ui->GSTMP_FILE_BUTTON = 0;
285 gtk_entry_set_text (GTK_ENTRY(ui->LowerFont), (gchar *)filename);
286 }
287 /* SETTING PREVIEWFILE */
288 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_PREVIEW) {
289 ui->GSTMP_FILE_VISIBLE = FALSE;
290 ui->GSTMP_FILE_BUTTON = 0;
291 gtk_entry_set_text (GTK_ENTRY(ui->Previewfile), (gchar *)filename);
292 }
293 /* LOAD RC FILE */
294 else if (ui->GSTMP_FILE_BUTTON == GSTMP_BROWSE_LOAD) {
295 ui->GSTMP_FILE_VISIBLE = FALSE;
296 ui->GSTMP_FILE_BUTTON = 0;
297 g_free(ui->args->RCFile);
298 ui->args->RCFile = (char *)malloc(sizeof(char) * strlen(filename) + 1);
299 strcpy(ui->args->RCFile, filename);
300 RC_load(ui->args);
301 args_to_ui(ui->args, ui);
302 title = g_malloc(sizeof(char) * (strlen(ui->Titlebase)
303 + strlen(filename) + 2));
304 strcpy (title, ui->Titlebase);
305 strcat(title, filename);
306 gtk_window_set_title (GTK_WINDOW(ui->window), title);
307 g_free(title);
308 }
309
310 }
311
312
313 /* delete event for color picker dialog */
color_delete_event(GtkObject * w,UI_Struct * ui)314 gint color_delete_event(GtkObject *w, UI_Struct *ui){
315 ui->GSTMP_COLOR_VISIBLE = FALSE;
316 ui->GSTMP_CURRENT_COLOR_BUTTON = 0;
317 gtk_widget_hide (GTK_WIDGET(w));
318 gtk_grab_remove(GTK_WIDGET(w));
319 return TRUE;
320 }
321
322 /* callback for the "Cancel" button on the color dialog */
color_cancel_sel(GtkWidget * w,UI_Struct * ui)323 void color_cancel_sel(GtkWidget *w, UI_Struct *ui)
324 {
325 ui->GSTMP_COLOR_VISIBLE = FALSE;
326 ui->GSTMP_CURRENT_COLOR_BUTTON = 0;
327 gtk_widget_hide (ui->ColorSel);
328 gtk_grab_remove(ui->ColorSel);
329 }
330
331 /* callback for the Foreground Color button */
color_callback_1(GtkWidget * w,UI_Struct * ui)332 void color_callback_1(GtkWidget *w, UI_Struct *ui){
333 GtkStyle *style;
334 gdouble colors[3];
335
336 ui->GSTMP_COLOR_VISIBLE = TRUE;
337 ui->GSTMP_CURRENT_COLOR_BUTTON = 1;
338 style = gtk_widget_get_style(ui->ColorButton1);
339 colors[0] = ((gdouble) style->bg[GTK_STATE_NORMAL].red )/65535.0;
340 colors[1] = ((gdouble) style->bg[GTK_STATE_NORMAL].green )/65535.0;
341 colors[2] = ((gdouble) style->bg[GTK_STATE_NORMAL].blue )/65535.0;
342 gtk_color_selection_set_color (GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(ui->ColorSel)->colorsel),colors);
343
344 gtk_widget_show (ui->ColorSel);
345 gtk_grab_add(ui->ColorSel);
346 }
347
348 /* callback for the Background Color button */
color_callback_2(GtkWidget * w,UI_Struct * ui)349 void color_callback_2(GtkWidget *w, UI_Struct *ui){
350 GtkStyle *style;
351 gdouble colors[3];
352
353 ui->GSTMP_COLOR_VISIBLE = TRUE;
354 ui->GSTMP_CURRENT_COLOR_BUTTON = 2;
355 style = gtk_widget_get_style(ui->ColorButton2);
356 colors[0] = ((gdouble) style->bg[GTK_STATE_NORMAL].red )/65535.0;
357 colors[1] = ((gdouble) style->bg[GTK_STATE_NORMAL].green )/65535.0;
358 colors[2] = ((gdouble) style->bg[GTK_STATE_NORMAL].blue )/65535.0;
359 gtk_color_selection_set_color (GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(ui->ColorSel)->colorsel),colors);
360
361 gtk_widget_show (ui->ColorSel);
362 gtk_grab_add(ui->ColorSel);
363 }
364
365 /* no clue - but was in the tutorial. Think it updates the color dialog */
color_selection_changed(GtkWidget * w,GtkColorSelectionDialog * cs)366 void color_selection_changed (GtkWidget *w, GtkColorSelectionDialog *cs)
367 {
368 GtkColorSelection *colorsel;
369 gdouble color[4];
370 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
371 gtk_color_selection_get_color(colorsel,color);
372 }
373
374 /* callback for the "Ok" button in the Color Picker Dialog */
color_changed(GtkWidget * w,UI_Struct * ui)375 void color_changed(GtkWidget *w, UI_Struct *ui){
376 gdouble color[3];
377
378 gtk_color_selection_get_color (GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(ui->ColorSel)->colorsel),color);
379 if ( ui->GSTMP_CURRENT_COLOR_BUTTON == 1 )
380 set_color(ui->ColorButton1, color);
381 else
382 set_color(ui->ColorButton2, color);
383 gtk_widget_hide (GTK_WIDGET(ui->ColorSel));
384 gtk_grab_remove(GTK_WIDGET(ui->ColorSel));
385
386 ui->GSTMP_CURRENT_COLOR_BUTTON = 0;
387 ui->GSTMP_COLOR_VISIBLE = TRUE;
388 }
389
390
391
392
393
394
395
396
397
398
399