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