1 #include <string.h>
2 #include <gtk/gtk.h>
3 #include "gstamp.h"
4 
5 #include "../pixmaps/file.xpm"
6 #include "../pixmaps/stamp_not_working.xpm"
7 #include "../pixmaps/stamp_working.xpm"
8 #include "../pixmaps/transfer_not_working.xpm"
9 #include "../pixmaps/transfer_working.xpm"
10 
11 /*
12    this makes the whole ui.
13    It's as clean as it can get. :)
14 */
15 
make_menubar(UI_Struct * ui)16 void make_menubar(UI_Struct *ui){
17 
18   GtkWidget *menu_bar;
19   GtkWidget *menu;
20   GtkWidget *menu_item;
21 
22   menu_bar = gtk_menu_bar_new();
23   gtk_box_pack_start(GTK_BOX(ui->Vbox), menu_bar, FALSE, FALSE, 0);
24   gtk_widget_show( menu_bar );
25 
26   menu = gtk_menu_new(); /* File menu */
27   menu_item = gtk_menu_item_new_with_label("File");
28   gtk_widget_show(menu_item);
29   gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu_item), menu );
30   gtk_menu_bar_append( GTK_MENU_BAR (menu_bar), menu_item );
31 
32   menu_item = gtk_menu_item_new_with_label("Open RC"); /* add the open choice to the menu */
33   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
34 		       GTK_SIGNAL_FUNC(main_load_callback), ui);
35   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
36   gtk_widget_show( menu_item );
37 
38   menu_item = gtk_menu_item_new_with_label("Save RC"); /* add the open choice to the menu */
39   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
40 		       GTK_SIGNAL_FUNC(update_callback), ui);
41   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
42   gtk_widget_show( menu_item );
43 
44   menu_item = gtk_menu_item_new_with_label("Save RC As"); /* add the open choice to the menu */
45   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
46 		       GTK_SIGNAL_FUNC(main_save_callback), ui);
47   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
48   gtk_widget_show( menu_item );
49 
50   menu_item = gtk_menu_item_new();
51   gtk_menu_append(GTK_MENU(menu), menu_item);
52   gtk_widget_show(menu_item);
53 
54   menu_item = gtk_menu_item_new_with_label("Exit"); /* add the open choice to the menu */
55   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
56 		       GTK_SIGNAL_FUNC(main_delete_event), NULL);
57   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
58   gtk_widget_show( menu_item );
59 
60   /* - Image Menu - */
61   menu = gtk_menu_new(); /* Image menu */
62   menu_item = gtk_menu_item_new_with_label("Image");
63   gtk_widget_show(menu_item);
64   gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu_item), menu );
65   gtk_menu_bar_append( GTK_MENU_BAR (menu_bar), menu_item );
66 
67   menu_item = gtk_menu_item_new_with_label("Preview Image"); /* add the open choice to the menu */
68   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
69 		       GTK_SIGNAL_FUNC(preview_callback), ui);
70   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
71   gtk_widget_show( menu_item );
72 
73   menu_item = gtk_menu_item_new();
74   gtk_menu_append(GTK_MENU(menu), menu_item);
75   gtk_widget_show(menu_item);
76 
77   menu_item = gtk_menu_item_new_with_label("Stamp Image"); /* add the open choice to the menu */
78   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
79 		       GTK_SIGNAL_FUNC(stamp_callback), ui);
80   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
81   gtk_widget_show( menu_item );
82 
83   menu_item = gtk_menu_item_new_with_label("Stamp and Send Image"); /* add the open choice to the menu */
84   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
85 		       GTK_SIGNAL_FUNC(stamp_send_callback), ui);
86   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
87   gtk_widget_show( menu_item );
88 
89 
90   /* - Help Menu - */
91   menu = gtk_menu_new(); /* Image menu */
92   menu_item = gtk_menu_item_new_with_label("Help");
93   gtk_menu_item_right_justify(GTK_MENU_ITEM(menu_item));
94   gtk_widget_show(menu_item);
95   gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu_item), menu );
96   gtk_menu_bar_append( GTK_MENU_BAR (menu_bar), menu_item );
97 
98   menu_item = gtk_menu_item_new_with_label("About"); /* add the open choice to the menu */
99   gtk_signal_connect ( GTK_OBJECT(menu_item), "activate",
100 		       GTK_SIGNAL_FUNC(help_about_callback), ui);
101   gtk_menu_append( GTK_MENU(menu), menu_item); /* add the item to the menu */
102   gtk_widget_show( menu_item );
103 }
104 
make_main_buttons(UI_Struct * ui)105 void make_main_buttons(UI_Struct *ui){
106 
107   GtkWidget *label;
108   GtkWidget *button;
109   GtkWidget *hbox;
110 
111   hbox = gtk_hbox_new(FALSE, 5);
112   gtk_box_pack_start(GTK_BOX(ui->Vbox), hbox, FALSE, FALSE, 0);
113   gtk_widget_show(hbox);
114 
115   /* create "Preview" button */
116   button = gtk_button_new_with_label ("Update RC");
117   gtk_widget_set_usize( button, 80,0 );
118   gtk_signal_connect (GTK_OBJECT (button), "clicked",
119                       GTK_SIGNAL_FUNC (update_callback), ui);
120   gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
121   gtk_widget_show (button);
122 
123   /* create "Preview" button */
124   button = gtk_button_new_with_label ("Preview");
125   gtk_widget_set_usize( button, 80,0 );
126   gtk_signal_connect (GTK_OBJECT (button), "clicked",
127                       GTK_SIGNAL_FUNC (preview_callback), ui);
128   gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
129   gtk_widget_show (button);
130 
131   /* create "Stamp" button */
132   button = gtk_button_new_with_label ("Stamp");
133   gtk_widget_set_usize( button, 80,0 );
134   gtk_signal_connect (GTK_OBJECT (button), "clicked",
135                       GTK_SIGNAL_FUNC (stamp_callback), ui);
136   gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
137   gtk_widget_show (button);
138 
139   /* create "Stamp/Send" button */
140   button = gtk_button_new_with_label ("Stamp/Send");
141   gtk_widget_set_usize( button, 80,0 );
142   gtk_signal_connect (GTK_OBJECT (button), "clicked",
143                       GTK_SIGNAL_FUNC (stamp_send_callback), ui);
144   gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
145   gtk_widget_show (button);
146 
147   /* create "Quit" button */
148   button = gtk_button_new_with_label ("Quit");
149   gtk_widget_set_usize( button, 80,0 );
150   gtk_signal_connect (GTK_OBJECT (button), "clicked",
151                       GTK_SIGNAL_FUNC (main_delete_event), NULL);
152   gtk_box_pack_end(GTK_BOX(hbox), button, TRUE, FALSE, 5);
153   gtk_widget_show (button);
154 
155 }
156 
make_main_icons(UI_Struct * ui)157 void make_main_icons(UI_Struct *ui){
158 
159   GtkWidget *frame;
160   GtkWidget *hbox1;
161   GtkWidget *pixmapwid;
162   GtkWidget *label;
163   GdkPixmap *pixmap;
164   GdkBitmap *mask;
165   GtkStyle *style;
166 
167   /* ---------------------- begin Main icons -----------------------*/
168 
169   frame = gtk_frame_new(NULL);
170   gtk_widget_show(frame);
171   gtk_box_pack_start(GTK_BOX(ui->Vbox), frame, FALSE, FALSE, 5);
172 
173   hbox1 = gtk_hbox_new(FALSE, 0);
174   gtk_widget_show(hbox1);
175   gtk_container_add (GTK_CONTAINER (frame), hbox1);
176   style = gtk_widget_get_style( frame );
177 
178   /* make the stamping image */
179   ui->yes_stamp = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
180 					       &style->bg[GTK_STATE_NORMAL],
181 					       (gchar **)stamp_working_xpm);
182 
183   ui->yes_stamp_mask = mask;
184   /* make the nonstamping image and display it. */
185   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
186 					&style->bg[GTK_STATE_NORMAL],
187 					(gchar **)stamp_not_working_xpm);
188   ui->no_stamp_mask = mask;
189   ui->no_stamp = pixmap;
190 
191   pixmapwid = gtk_pixmap_new( pixmap, mask );
192   gtk_widget_show( pixmapwid );
193 
194   ui->stamp_pix = pixmapwid;
195 
196   gtk_box_pack_end(GTK_BOX(hbox1), pixmapwid, FALSE, FALSE, 2);
197 
198   /* make the transfer image */
199   ui->yes_transfer = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
200 						  &style->bg[GTK_STATE_NORMAL],
201 						  (gchar **)transfer_working_xpm);
202 
203   ui->yes_transfer_mask = mask;
204   /* make the nontransfer image and display it. */
205   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
206 					&style->bg[GTK_STATE_NORMAL],
207 					(gchar **)transfer_not_working_xpm);
208   ui->no_transfer_mask = mask;
209   ui->no_transfer = pixmap;
210 
211   pixmapwid = gtk_pixmap_new( pixmap, mask );
212   ui->transfer_pix = pixmapwid;
213 
214   gtk_widget_show( pixmapwid );
215   gtk_box_pack_end(GTK_BOX(hbox1), pixmapwid, FALSE, FALSE, 2);
216 
217   label = gtk_label_new("GTK Stamp! - ");
218   gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 2);
219   gtk_widget_show(label);
220 
221   ui->Status = gtk_label_new("Idle");
222   gtk_box_pack_start(GTK_BOX(hbox1), ui->Status, FALSE, FALSE, 2);
223   gtk_widget_show(ui->Status);
224 
225   /* ---------------------- end Main icons -----------------------*/
226 
227 }
228 
make_file_page(UI_Struct * ui)229 void make_file_page(UI_Struct *ui){
230 
231   GtkWidget *label;
232   GtkWidget *vbox;
233   GtkWidget *button;
234   GtkWidget *hbox1;
235   GtkWidget *hbox2;
236   GtkWidget *hbox3;
237   GtkWidget *hbox4;
238   GtkWidget *hbox5;
239   GtkWidget *pixmapwid;
240   GdkPixmap *pixmap;
241   GdkBitmap *mask;
242   GtkStyle *style;
243   GtkWidget *adjustment;
244 
245 
246   label = gtk_label_new ("Files");
247   vbox = gtk_vbox_new(FALSE, 0);
248   gtk_notebook_append_page( GTK_NOTEBOOK(ui->notebook),vbox,label );
249   gtk_widget_show(vbox);
250 
251   hbox1 = gtk_hbox_new(FALSE, 10);
252   gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, TRUE, 5);
253   gtk_widget_show(hbox1);
254 
255   hbox2 = gtk_hbox_new(FALSE, 10);
256   gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 5);
257   gtk_widget_show(hbox2);
258 
259   hbox3 = gtk_hbox_new(FALSE, 10);
260   gtk_box_pack_start(GTK_BOX(vbox), hbox3, TRUE, TRUE, 5);
261   gtk_widget_show(hbox3);
262 
263   hbox4 = gtk_hbox_new(FALSE, 10);
264   gtk_box_pack_start(GTK_BOX(vbox), hbox4, TRUE, TRUE, 5);
265   gtk_widget_show(hbox4);
266 
267   hbox5 = gtk_hbox_new(FALSE, 10);
268   gtk_box_pack_start(GTK_BOX(vbox), hbox5, TRUE, TRUE, 5);
269   gtk_widget_show(hbox5);
270 
271   ui->Infile = gtk_entry_new();
272   label = gtk_label_new ("Input JPEG");
273   gtk_widget_set_usize( label, 80,0 );
274   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
275   gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 10);
276   gtk_box_pack_start(GTK_BOX(hbox2), ui->Infile, TRUE, TRUE, 5);
277   gtk_widget_show(label);
278   gtk_widget_show(ui->Infile);
279 
280   button = gtk_button_new();
281 
282   gtk_widget_set_usize( button, 0, 0);
283   gtk_signal_connect (GTK_OBJECT (button), "clicked",
284 		      GTK_SIGNAL_FUNC (input_file_browse_callback), ui);
285   gtk_box_pack_start(GTK_BOX(hbox2), button, FALSE, FALSE, 5);
286   style = gtk_widget_get_style( button );
287 
288   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
289 					 &style->bg[GTK_STATE_NORMAL],
290 					 (gchar **)filexpm );
291   pixmapwid = gtk_pixmap_new( pixmap, mask );
292   gtk_widget_show( pixmapwid );
293   gtk_container_add( GTK_CONTAINER(button), pixmapwid );
294   gtk_widget_show (button);
295 
296 
297   ui->Outfile = gtk_entry_new();
298   label = gtk_label_new ("Output JPEG");
299   gtk_widget_set_usize( label, 80,0 );
300   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
301   gtk_box_pack_start(GTK_BOX(hbox3), label, FALSE, FALSE, 10);
302   gtk_box_pack_start(GTK_BOX(hbox3), ui->Outfile, TRUE, TRUE, 5);
303   gtk_widget_show(label);
304   gtk_widget_show(ui->Outfile);
305 
306   style = gtk_widget_get_style( ui->window );
307   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
308 					 &style->bg[GTK_STATE_NORMAL],
309 					 (gchar **)filexpm );
310 
311   pixmapwid = gtk_pixmap_new( pixmap, mask );
312   gtk_widget_show( pixmapwid );
313 
314   button = gtk_button_new();
315   gtk_container_add( GTK_CONTAINER(button), pixmapwid );
316 
317   gtk_widget_set_usize( button, 0,0 );
318   gtk_signal_connect (GTK_OBJECT (button), "clicked",
319 		      GTK_SIGNAL_FUNC (output_file_browse_callback), ui);
320   gtk_box_pack_end(GTK_BOX(hbox3), button, FALSE, FALSE, 5);
321   gtk_widget_show (button);
322 
323   /* now the quality settings */
324   label = gtk_label_new ("JPEG Quality") ;
325   gtk_widget_set_usize( label, 80,0 );
326   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
327   gtk_box_pack_start(GTK_BOX(hbox4), label, FALSE, FALSE, 10);
328   gtk_widget_show (label);
329 
330   adjustment = (GtkWidget *) gtk_adjustment_new(0.0, 0.0, 101.0, 1.0, 1.0, 1.0);
331   ui->Quality = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
332   gtk_scale_set_digits (GTK_SCALE(ui->Quality), 0) ;
333   gtk_range_set_update_policy (GTK_RANGE (ui->Quality), GTK_UPDATE_CONTINUOUS);
334   gtk_widget_show (ui->Quality);
335   gtk_box_pack_start(GTK_BOX(hbox4), ui->Quality, TRUE, TRUE, 5);
336 
337   /* preview file */
338   ui->Previewfile = gtk_entry_new();
339   label = gtk_label_new ("Preview JPEG");
340   gtk_widget_set_usize( label, 80,0 );
341   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
342   gtk_box_pack_start(GTK_BOX(hbox5), label, FALSE, FALSE, 10);
343   gtk_box_pack_start(GTK_BOX(hbox5), ui->Previewfile, TRUE, TRUE, 5);
344   gtk_widget_show(label);
345   gtk_widget_show(ui->Previewfile);
346 
347   style = gtk_widget_get_style( ui->window );
348   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
349 					&style->bg[GTK_STATE_NORMAL],
350 					(gchar **)filexpm );
351 
352   pixmapwid = gtk_pixmap_new( pixmap, mask );
353   gtk_widget_show( pixmapwid );
354 
355   button = gtk_button_new();
356   gtk_container_add( GTK_CONTAINER(button), pixmapwid );
357 
358   gtk_widget_set_usize( button, 0,0 );
359   gtk_signal_connect (GTK_OBJECT (button), "clicked",
360 		      GTK_SIGNAL_FUNC (preview_file_browse_callback), ui);
361   gtk_box_pack_end(GTK_BOX(hbox5), button, FALSE, FALSE, 5);
362   gtk_widget_show (button);
363 
364 
365   /* ---------------------- End Files Frame -----------------------*/
366 }
367 
make_strings_page(UI_Struct * ui)368 void make_strings_page(UI_Struct *ui){
369 
370   GtkWidget *label;
371   GtkWidget *vbox;
372   GtkWidget *button;
373   GtkWidget *hbox1;
374   GtkWidget *hbox2;
375   GtkWidget *hbox3;
376   GtkWidget *hbox4;
377   GtkWidget *hbox5;
378   GtkWidget *pixmapwid;
379   GdkPixmap *pixmap;
380   GdkBitmap *mask;
381   GtkStyle *style;
382 
383   label = gtk_label_new ("Strings");
384   vbox = gtk_vbox_new(TRUE, 0);
385   gtk_notebook_append_page( GTK_NOTEBOOK(ui->notebook),vbox,label );
386   gtk_widget_show(vbox);
387 
388   hbox1 = gtk_hbox_new(FALSE, 10);
389   gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, TRUE, 5);
390   gtk_widget_show(hbox1);
391 
392   hbox2 = gtk_hbox_new(FALSE, 10);
393   gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 5);
394   gtk_widget_show(hbox2);
395 
396   hbox3 = gtk_hbox_new(FALSE, 10);
397   gtk_box_pack_start(GTK_BOX(vbox), hbox3, TRUE, TRUE, 5);
398   gtk_widget_show(hbox3);
399 
400   hbox4 = gtk_hbox_new(FALSE, 10);
401   gtk_box_pack_start(GTK_BOX(vbox), hbox4, TRUE, TRUE, 5);
402   gtk_widget_show(hbox4);
403 
404   hbox5 = gtk_hbox_new(FALSE, 10);
405   gtk_box_pack_start(GTK_BOX(vbox), hbox5, TRUE, TRUE, 5);
406   gtk_widget_show(hbox5);
407 
408   ui->UpperString = gtk_entry_new();
409   label = gtk_label_new ("Upper String");
410   gtk_widget_set_usize( label, 80,0 );
411   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
412   gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 10);
413   gtk_box_pack_start(GTK_BOX(hbox1), ui->UpperString, TRUE, TRUE, 5);
414   gtk_widget_show(label);
415   gtk_widget_show(ui->UpperString);
416 
417   ui->UStringExec = gtk_check_button_new_with_label ("Execute");
418   gtk_box_pack_end(GTK_BOX(hbox1), ui->UStringExec, FALSE, FALSE, 0);
419   gtk_widget_show(ui->UStringExec);
420 
421   /* begin upper font */
422   ui->UpperFont = gtk_entry_new();
423   label = gtk_label_new ("Upper Font");
424   gtk_widget_set_usize( label, 80,0 );
425   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
426   gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 10);
427   gtk_box_pack_start(GTK_BOX(hbox2), ui->UpperFont, TRUE, TRUE, 5);
428   gtk_widget_show(label);
429   gtk_widget_show(ui->UpperFont);
430 
431   style = gtk_widget_get_style( ui->window );
432   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
433 					 &style->bg[GTK_STATE_NORMAL],
434 					 (gchar **)filexpm );
435 
436   pixmapwid = gtk_pixmap_new( pixmap, mask );
437   gtk_widget_show( pixmapwid );
438 
439   button = gtk_button_new();
440   gtk_container_add( GTK_CONTAINER(button), pixmapwid );
441 
442   gtk_widget_set_usize( button, 0,0 );
443   gtk_signal_connect (GTK_OBJECT (button), "clicked",
444 		      GTK_SIGNAL_FUNC (upper_font_browse_callback), ui);
445   gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 5);
446   gtk_widget_show (button);
447   /* end upper font */
448 
449   ui->LowerString = gtk_entry_new();
450   label = gtk_label_new ("Lower String");
451   gtk_widget_set_usize( label, 80,0 );
452   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
453   gtk_box_pack_start(GTK_BOX(hbox3), label, FALSE, FALSE, 10);
454   gtk_box_pack_start(GTK_BOX(hbox3), ui->LowerString, TRUE, TRUE, 5);
455   gtk_widget_show(label);
456   gtk_widget_show(ui->LowerString);
457 
458 
459   ui->LStringExec = gtk_check_button_new_with_label ("Execute");
460   gtk_box_pack_end(GTK_BOX(hbox3), ui->LStringExec, FALSE, FALSE, 0);
461   gtk_widget_show(ui->LStringExec);
462 
463   /* begin lower font */
464   ui->LowerFont = gtk_entry_new();
465   label = gtk_label_new ("Lower Font");
466   gtk_widget_set_usize( label, 80,0 );
467   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
468   gtk_box_pack_start(GTK_BOX(hbox4), label, FALSE, FALSE, 10);
469   gtk_box_pack_start(GTK_BOX(hbox4), ui->LowerFont, TRUE, TRUE, 5);
470   gtk_widget_show(label);
471   gtk_widget_show(ui->LowerFont);
472 
473   style = gtk_widget_get_style( ui->window );
474   pixmap = gdk_pixmap_create_from_xpm_d(ui->window->window, &mask,
475 					 &style->bg[GTK_STATE_NORMAL],
476 					 (gchar **)filexpm );
477 
478   pixmapwid = gtk_pixmap_new( pixmap, mask );
479   gtk_widget_show( pixmapwid );
480 
481   button = gtk_button_new();
482   gtk_container_add( GTK_CONTAINER(button), pixmapwid );
483 
484   gtk_widget_set_usize( button, 0,0 );
485   gtk_signal_connect (GTK_OBJECT (button), "clicked",
486 		      GTK_SIGNAL_FUNC (lower_font_browse_callback), ui);
487   gtk_box_pack_end(GTK_BOX(hbox4), button, FALSE, FALSE, 5);
488   gtk_widget_show (button);
489   /* end lower font */
490 
491   ui->Use3D = gtk_check_button_new_with_label ("Use 3D");
492   gtk_box_pack_end(GTK_BOX(hbox5), GTK_WIDGET(ui->Use3D), FALSE, FALSE, 5);
493   gtk_widget_show(ui->Use3D);
494 
495   ui->Rotate = gtk_check_button_new_with_label ("Sideways");
496   gtk_box_pack_end(GTK_BOX(hbox5), ui->Rotate, FALSE, FALSE, 5);
497   gtk_widget_show(ui->Rotate);
498 
499   /* ---------------------- End Strings Frame -----------------------*/
500 
501 }
502 
make_color_page(UI_Struct * ui)503 void make_color_page(UI_Struct *ui) {
504 
505   GtkWidget *label;
506   GtkWidget *vbox;
507   GtkWidget *button;
508   GtkWidget *hbox1;
509   GtkWidget *hbox2;
510   GtkWidget *hbox3;
511   GtkWidget *hbox4;
512   GtkWidget *adjustment;
513 
514   label = gtk_label_new ("Color");
515 
516   vbox = gtk_vbox_new(FALSE, 5);
517   gtk_notebook_append_page( GTK_NOTEBOOK(ui->notebook),vbox,label );
518   gtk_widget_show(vbox);
519 
520   hbox1 = gtk_hbox_new(FALSE, 0);
521   gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0);
522   gtk_widget_show(hbox1);
523 
524   hbox2 = gtk_hbox_new(FALSE, 0);
525   gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, FALSE, 0);
526   gtk_widget_show(hbox2);
527 
528   hbox3 = gtk_hbox_new(FALSE, 0);
529   gtk_box_pack_start(GTK_BOX(vbox), hbox3, TRUE, FALSE, 0);
530   gtk_widget_show(hbox3);
531 
532   hbox4 = gtk_hbox_new(FALSE, 0);
533   gtk_box_pack_start(GTK_BOX(vbox), hbox4, TRUE, FALSE, 0);
534   gtk_widget_show(hbox4);
535 
536   /* begin color button 1 */
537   ui->ColorButton1 = gtk_button_new_with_label ("");
538   gtk_widget_set_usize( ui->ColorButton1, 30,0 );
539   label = gtk_label_new ("Text Color");
540   gtk_widget_set_usize( label, 80,0 );
541   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
542   gtk_signal_connect (GTK_OBJECT (ui->ColorButton1), "clicked",
543 		      GTK_SIGNAL_FUNC (color_callback_1), ui);
544   gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 10);
545   gtk_box_pack_start(GTK_BOX(hbox1), ui->ColorButton1, TRUE, FALSE, 5);
546   gtk_widget_show (label);
547   gtk_widget_show (ui->ColorButton1);
548 
549   /* end color button 1 */
550 
551   /* begin color button 2 */
552   ui->ColorButton2 = gtk_button_new_with_label ("");
553   gtk_widget_set_usize( ui->ColorButton2, 30,0 );
554   label = gtk_label_new ("Shade Color");
555   gtk_widget_set_usize( label, 80,0 );
556   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
557   gtk_signal_connect (GTK_OBJECT (ui->ColorButton2), "clicked",
558 		      GTK_SIGNAL_FUNC (color_callback_2), ui);
559   gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 10);
560   gtk_box_pack_start(GTK_BOX(hbox2), ui->ColorButton2, TRUE, FALSE, 5);
561   gtk_widget_show (label);
562   gtk_widget_show (ui->ColorButton2);
563 
564   /* now the shaderate */
565   label = gtk_label_new ("Shade Rate");
566   gtk_widget_set_usize( label, 80,0 );
567   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
568   gtk_box_pack_start(GTK_BOX(hbox3), label, FALSE, FALSE, 10);
569   gtk_widget_show (label);
570 
571   adjustment = (GtkWidget *) gtk_adjustment_new(0.0, 0.0, 256.0, 1.0, 1.0, 1.0);
572 
573   ui->ShadeRate = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
574   gtk_scale_set_digits (GTK_SCALE(ui->ShadeRate), 0) ;
575   gtk_range_set_update_policy (GTK_RANGE (ui->ShadeRate), GTK_UPDATE_CONTINUOUS);
576   gtk_widget_show (ui->ShadeRate);
577 
578   gtk_box_pack_start(GTK_BOX(hbox3), ui->ShadeRate, TRUE, TRUE, 5);
579 
580   ui->UseColors = gtk_check_button_new_with_label ("Color Shading");
581   gtk_box_pack_end(GTK_BOX(hbox4), GTK_WIDGET(ui->UseColors), FALSE, FALSE, 5);
582   gtk_widget_show(ui->UseColors);
583 
584 
585   /* ---------------------- End color Frame -----------------------*/
586 }
587 
588 
make_ftp_page(UI_Struct * ui)589 void make_ftp_page(UI_Struct *ui){
590 
591   GtkWidget *label;
592   GtkWidget *vbox;
593   GtkWidget *button;
594   GtkWidget *hbox1;
595   GtkWidget *hbox2;
596   GtkWidget *hbox3;
597   GtkWidget *hbox4;
598   GtkWidget *hbox5;
599 
600   label = gtk_label_new ("FTP");
601 
602   vbox = gtk_vbox_new(TRUE, 0);
603   gtk_notebook_append_page( GTK_NOTEBOOK(ui->notebook),vbox,label );
604   gtk_widget_show(vbox);
605 
606   hbox1 = gtk_hbox_new(FALSE, 5);
607   gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, TRUE, 5);
608   gtk_widget_show(hbox1);
609 
610   hbox2 = gtk_hbox_new(FALSE, 5);
611   gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 5);
612   gtk_widget_show(hbox2);
613 
614   hbox3 = gtk_hbox_new(FALSE, 5);
615   gtk_box_pack_start(GTK_BOX(vbox), hbox3, TRUE, TRUE, 5);
616   gtk_widget_show(hbox3);
617 
618   hbox4 = gtk_hbox_new(FALSE, 5);
619   gtk_box_pack_start(GTK_BOX(vbox), hbox4, TRUE, TRUE, 5);
620   gtk_widget_show(hbox4);
621 
622   hbox5 = gtk_hbox_new(FALSE, 5);
623   gtk_box_pack_start(GTK_BOX(vbox), hbox5, TRUE, TRUE, 5);
624   gtk_widget_show(hbox5);
625 
626 
627   ui->Host = gtk_entry_new();
628   label = gtk_label_new ("Host");
629   gtk_widget_set_usize( label, 80,0 );
630   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
631   gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 10);
632   gtk_box_pack_start(GTK_BOX(hbox1), ui->Host, TRUE, TRUE, 5);
633   gtk_widget_show(label);
634   gtk_widget_show(ui->Host);
635 
636   ui->Login = gtk_entry_new();
637   gtk_widget_set_usize( ui->Login, 80,0 );
638   label = gtk_label_new ("Login");
639   gtk_widget_set_usize( label, 80,0 );
640   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
641   gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 10);
642   gtk_box_pack_start(GTK_BOX(hbox2), ui->Login, TRUE, TRUE, 5);
643   gtk_widget_show(label);
644   gtk_widget_show(ui->Login);
645 
646   ui->Passwd = gtk_entry_new();
647   gtk_entry_set_visibility(GTK_ENTRY(ui->Passwd),FALSE);
648   gtk_widget_set_usize( ui->Passwd, 80,0 );
649   label = gtk_label_new ("Password");
650   gtk_widget_set_usize( label, 0,0 );
651   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
652   gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 10);
653   gtk_box_pack_start(GTK_BOX(hbox2), ui->Passwd, TRUE, TRUE, 5);
654   gtk_widget_show(label);
655   gtk_widget_show(ui->Passwd);
656 
657   ui->Path = gtk_entry_new();
658   label = gtk_label_new ("Path");
659   gtk_widget_set_usize( label, 80,0 );
660   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
661   gtk_box_pack_start(GTK_BOX(hbox3), label, FALSE, FALSE, 10);
662   gtk_box_pack_start(GTK_BOX(hbox3), ui->Path, TRUE, TRUE, 5);
663   gtk_widget_show(label);
664   gtk_widget_show(ui->Path);
665 
666   ui->Upload = gtk_entry_new();
667   label = gtk_label_new ("Upload File Name");
668   gtk_widget_set_usize( label, 80,0 );
669   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
670   gtk_box_pack_start(GTK_BOX(hbox4), label, FALSE, FALSE, 10);
671   gtk_box_pack_start(GTK_BOX(hbox4), ui->Upload, TRUE, TRUE, 5);
672   gtk_widget_show(label);
673   gtk_widget_show(ui->Upload);
674 
675   label = gtk_label_new ("Remember to call stamp with the -f option to use these settings.");
676   gtk_widget_set_usize( label, 0, 0);
677   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
678   gtk_box_pack_start(GTK_BOX(hbox5), label, FALSE, FALSE, 10);
679   gtk_widget_show(label);
680 
681 }
682 
make_about_page(UI_Struct * ui)683 void make_about_page(UI_Struct *ui){
684   GtkWidget *label;
685   GtkWidget *hbox;
686   char tmpstring[1024];
687 
688   label = gtk_label_new ("About");
689   hbox = gtk_hbox_new(TRUE, 1);
690   gtk_notebook_append_page( GTK_NOTEBOOK(ui->notebook),hbox,label );
691   sprintf(tmpstring, "GTK Stamp - Version %s\n",VERSION);
692   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.");
693   label = gtk_label_new (tmpstring);
694   GTK_LABEL(label)->jtype = GTK_JUSTIFY_LEFT;
695   gtk_widget_show(label);
696   gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 10);
697   gtk_widget_show(hbox);
698 
699 }
700 
make_tooltips(UI_Struct * ui)701 void make_tooltips (UI_Struct *ui){
702   ui->tooltips = (GtkWidget *)gtk_tooltips_new();
703 
704   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Infile,
705 			"This is the original JPEG image on which stamp will be executed.", NULL) ;
706 
707   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Outfile,
708 			"This is the name of the file where stamp will place the freshly-stamped JPEG image.", NULL) ;
709 
710   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Quality,
711 			"This is the quality setting for the resulting JPEG.", NULL) ;
712 
713   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Previewfile,
714 			"This is the name of the file that will be used for the Preview.", NULL) ;
715 
716   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->UpperString,
717 			"The string to place along the top of the JPEG image.", NULL) ;
718 
719   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->UStringExec,
720 			"If this button is checked, the string will be executed as a command and the ouput of the command will be placed onto the image.",
721 			NULL);
722 
723   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->UpperFont,
724 			"This is the font which will be used on the upper string.", NULL) ;
725 
726   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->LowerString,
727 			"The string to place along the bottom of the JPEG image.", NULL) ;
728 
729   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->LStringExec,
730 			"If this button is checked, the string will be executed as a command and the ouput of the command will be placed onto the image.",
731 			NULL);
732 
733   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->LowerFont,
734 			"This is the font which will be used on the lower string.", NULL) ;
735 
736   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Use3D,
737 			"When checked, text in the upper and lower strings will be given a 3 dimensional look.", NULL) ;
738 
739   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Rotate,
740 			"When checked, the upper string will be placed vertically along the right hand side of the image, and the lower string will be placed vertically along the left hand side of the image.  In other words, sideways.", NULL) ;
741 
742   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->ColorButton1,
743 			"Choose a text color.", NULL) ;
744 
745   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->ColorButton2,
746 			"Choose a shade color.", NULL) ;
747 
748   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->ShadeRate,
749 			"This specifies how many shades darker each successive line in the shade area becomes.  A value of 0 will eliminate the shading entirely.  Increasingly higher values will cause the shade area to become darker more quickly.", NULL) ;
750 
751   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->UseColors,
752 			"If this is specified, then the shade color will be used when shading the image.  Otherwise, the image will be shaded transparently.", NULL) ;
753 
754   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Host,
755 			"This is the host where the resulting JPEG file will be sent.", NULL) ;
756 
757   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Login,
758 			"This is the login name that will be used when connecting to the FTP host.", NULL) ;
759 
760   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Passwd,
761 			"This is the password that will be used when connecting to the FTP host.  For security, your password will not be shown.", NULL) ;
762 
763   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Path,
764 			"This is the path where the resulting file will be placed on the host.", NULL) ;
765 
766   gtk_tooltips_set_tip( GTK_TOOLTIPS(ui->tooltips), ui->Upload,
767 			"This is the name of the file as it will be uploaded.", NULL) ;
768 
769 
770 }
771 
make_ui(struct ArgStruct * arg)772 UI_Struct *make_ui (struct ArgStruct *arg) {
773 
774   char *titlestring ;
775   UI_Struct *ui;
776   GtkWidget *window;       /* Main Application Window */
777   GtkWidget *label;
778   GtkWidget *button;
779   GtkWidget *adjustment;
780   GtkWidget *scroll;
781   GtkWidget *tmp;
782   GtkWidget *pixmapwid;
783   GdkPixmap *pixmap;
784   GdkBitmap *mask;
785   GtkStyle *style;
786 
787 
788 
789 
790   /* Make our global ui structure, and zero it out just in case */
791   ui = (UI_Struct *)g_malloc (sizeof(UI_Struct));
792   bzero(ui, sizeof(UI_Struct));
793 
794 
795   /* Misc Window setup. */
796 
797   /* make the main window */
798   ui->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
799 
800   /* make the title */
801   titlestring = g_malloc(strlen("GTK Stamp! - ") +
802 			 strlen(arg->RCFile)+ strlen(VERSION) + 5) ;
803   ui->Titlebase = g_malloc(strlen("GTK Stamp! - ") + strlen(VERSION) + 5) ;
804   strcpy(titlestring, "GTK Stamp! ") ;
805   strcat(titlestring, VERSION) ;
806   strcat(titlestring, " - ") ;
807   strcpy(ui->Titlebase, titlestring);
808   strcat(titlestring, arg->RCFile) ;
809   gtk_window_set_title(GTK_WINDOW (ui->window), titlestring) ;
810   g_free(titlestring);
811 
812   /* main window delete signal */
813   gtk_signal_connect (GTK_OBJECT (ui->window), "delete_event",
814 		      GTK_SIGNAL_FUNC (main_delete_event), NULL);
815   gtk_container_border_width (GTK_CONTAINER (ui->window), 5);
816   gtk_window_position (GTK_WINDOW(ui->window), GTK_WIN_POS_CENTER);
817   gtk_widget_realize(ui->window);
818 
819   /* --- Begin The main vbox --- */
820   ui->Vbox = gtk_vbox_new(FALSE, 0);
821   gtk_container_add (GTK_CONTAINER (ui->window), ui->Vbox);
822   gtk_widget_show (ui->Vbox);
823   /* --- Begin The main vbox --- */
824 
825 
826   make_menubar(ui);
827 
828   /* --- Initialize the Notebook --- */
829   ui->notebook = gtk_notebook_new();
830   gtk_box_pack_start(GTK_BOX(ui->Vbox), ui->notebook, TRUE, TRUE, 5);
831   /* --- End Initialize the Notebook --- */
832 
833   make_main_buttons(ui);
834   make_main_icons(ui);
835   make_file_page(ui);
836   make_strings_page(ui);
837   make_color_page(ui);
838   make_ftp_page(ui);
839   /* don't need this anymore since we have the Help menu.
840      make_about_page(ui);
841   */
842   make_tooltips(ui);
843   gtk_widget_show (ui->notebook);
844 
845   /* now make our helper dialogs */
846   make_file_dialog(ui);
847   make_yes_no_dialog(ui);
848   make_colorsel_dialog(ui);
849   make_preview_dialog(ui);
850   make_message_dialog(ui);
851 
852   /* copy the stamp structure into the ui */
853   args_to_ui(arg, ui);
854 
855   /* we're not currently stamping */
856   ui->GSTMP_STAMPING = 0;
857 
858   /* show our window */
859   gtk_widget_show (ui->window);
860 
861   return ui;
862 }
863 
864 
865