http://ftp.x.org/contrib/applications/xscreensaver-3.19.tar.gz
[xscreensaver] / driver / dialogs-Gtk.c
1 /* dialogs-Gtk.c --- Gtk widgets for demo, options, and password dialogs.
2  * xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation.  No representations are made about the suitability of this
9  * software for any purpose.  It is provided "as is" without express or 
10  * implied warranty.
11  */
12
13 #ifdef HAVE_CONFIG_H
14 # include "config.h"
15 #endif
16
17 #include <X11/Xlib.h>
18 #include <gtk/gtk.h>
19 #include "resources.h"
20
21 #include <stdio.h>
22
23 GtkWidget *preferences_dialog;
24 GtkWidget *preferences_form;
25 GtkWidget *timeout_text;
26 GtkWidget *cycle_text;
27 GtkWidget *fade_text;
28 GtkWidget *fade_ticks_text;
29 GtkWidget *lock_timeout_text;
30 GtkWidget *passwd_timeout_text;
31 GtkWidget *verbose_toggle;
32 GtkWidget *install_cmap_toggle;
33 GtkWidget *fade_toggle;
34 GtkWidget *unfade_toggle;
35 GtkWidget *lock_toggle;
36 GtkWidget *prefs_done;
37 GtkWidget *prefs_cancel;
38
39 GtkWidget *demo_dialog;
40 GtkWidget *demo_form;
41 GtkWidget *label1;
42 GtkWidget *label2;
43 GtkWidget *demo_list;
44 GtkWidget *text_line;
45 GtkWidget *text_activate;
46 GtkWidget *next;
47 GtkWidget *prev;
48 GtkWidget *edit;
49 GtkWidget *done;
50 GtkWidget *restart;  /* #### */
51
52 /* This is a Gtk program that uses Xrm for localization and preferences --
53    may god forgive me for what I have unleashed. */
54 static char *
55 STR (char *resource)
56 {
57   return (get_string_resource (resource, resource));
58 }
59
60
61 void
62 create_preferences_dialog (void *ignore1, void *ignore2, void *ignore3)
63 {
64   GtkWidget *window, *box1, *box2, *box3;
65   GtkWidget *label;
66   GtkWidget *timeout_label;
67   GtkWidget *cycle_label;
68   GtkWidget *faded_label;
69   GtkWidget *fade_ticks_label;
70   GtkWidget *lock_timeout_label;
71   GtkWidget *passwd_timeout_label;
72   int entry_width;
73
74   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
75   gtk_container_set_border_width (GTK_CONTAINER (window), 10);
76
77   box1 = gtk_vbox_new (FALSE, 6);
78   box2 = gtk_table_new (6, 3, FALSE);
79   box3 = gtk_hbutton_box_new ();
80
81   /* Create the labels. */
82   label = gtk_label_new (STR("preferences_dialog.label1.label"));
83   timeout_label = gtk_label_new (STR("preferences_dialog.timeout.label"));
84   cycle_label = gtk_label_new (STR("preferences_dialog.cycle.label"));
85   faded_label = gtk_label_new (STR("preferences_dialog.fade.label"));
86   fade_ticks_label = gtk_label_new (STR("preferences_dialog.ticks.label"));
87   lock_timeout_label = gtk_label_new(STR("preferences_dialog.lockTime.label"));
88   passwd_timeout_label =
89     gtk_label_new (STR("preferences_dialog.passwdTime.label"));
90
91   /* Make the labels right-justify. */
92   gtk_misc_set_alignment (GTK_MISC (timeout_label), 1.0, 0.5);
93   gtk_misc_set_alignment (GTK_MISC (cycle_label), 1.0, 0.5);
94   gtk_misc_set_alignment (GTK_MISC (faded_label), 1.0, 0.5);
95   gtk_misc_set_alignment (GTK_MISC (fade_ticks_label), 1.0, 0.5);
96   gtk_misc_set_alignment (GTK_MISC (lock_timeout_label), 1.0, 0.5);
97   gtk_misc_set_alignment (GTK_MISC (passwd_timeout_label), 1.0, 0.5);
98
99   prefs_done =
100     gtk_button_new_with_label (STR("preferences_dialog.done.label"));
101   prefs_cancel =
102     gtk_button_new_with_label (STR("preferences_dialog.cancel.label"));
103
104   /* Create the text-entry widgets. */
105   timeout_text = gtk_entry_new_with_max_length (8);
106   cycle_text = gtk_entry_new_with_max_length (8);
107   fade_text = gtk_entry_new_with_max_length (8);
108   fade_ticks_text = gtk_entry_new_with_max_length (8);
109   lock_timeout_text = gtk_entry_new_with_max_length (8);
110   passwd_timeout_text = gtk_entry_new_with_max_length (8);
111
112   /* Set their sizes. */
113   entry_width = gdk_text_width (GTK_WIDGET (timeout_text)->style->font,
114                                 "00:00:00 ", 9);
115   gtk_widget_set_usize (GTK_WIDGET (timeout_text), entry_width, -2);
116   gtk_widget_set_usize (GTK_WIDGET (cycle_text), entry_width, -2);
117   gtk_widget_set_usize (GTK_WIDGET (fade_text), entry_width, -2);
118   gtk_widget_set_usize (GTK_WIDGET (fade_ticks_text), entry_width, -2);
119   gtk_widget_set_usize (GTK_WIDGET (lock_timeout_text), entry_width, -2);
120   gtk_widget_set_usize (GTK_WIDGET (passwd_timeout_text), entry_width, -2);
121
122   verbose_toggle = gtk_check_button_new_with_label
123     (STR("preferences_dialog.buttonbox.verbose.label"));
124   install_cmap_toggle = gtk_check_button_new_with_label
125     (STR("preferences_dialog.buttonbox.cmap.label"));
126   fade_toggle = gtk_check_button_new_with_label
127     (STR("preferences_dialog.buttonbox.fade.label"));
128   unfade_toggle = gtk_check_button_new_with_label
129     (STR("preferences_dialog.buttonbox.unfade.label"));
130   lock_toggle = gtk_check_button_new_with_label
131     (STR("preferences_dialog.buttonbox.lock.label"));
132
133   gtk_box_pack_start (GTK_BOX(box1), label, FALSE, FALSE, 0);
134   gtk_box_pack_start (GTK_BOX(box1), box2, FALSE, FALSE, 0);
135   gtk_box_pack_start (GTK_BOX(box1), box3, FALSE, FALSE, 0);
136
137 # define FROB(widget, x, y) \
138     gtk_table_attach_defaults (GTK_TABLE(box2), widget, x, x+1, y, y+1)
139
140   FROB (timeout_label,          0, 0);
141   FROB (cycle_label,            0, 1);
142   FROB (faded_label,            0, 2);
143   FROB (fade_ticks_label,       0, 3);
144   FROB (lock_timeout_label,     0, 4);
145   FROB (passwd_timeout_label,   0, 5);
146
147   FROB (timeout_text,           1, 0);
148   FROB (cycle_text,             1, 1);
149   FROB (fade_text,              1, 2);
150   FROB (fade_ticks_text,        1, 3);
151   FROB (lock_timeout_text,      1, 4);
152   FROB (passwd_timeout_text,    1, 5);
153
154   FROB (verbose_toggle,         2, 0);
155   FROB (install_cmap_toggle,    2, 1);
156   FROB (fade_toggle,            2, 2);
157   FROB (unfade_toggle,          2, 3);
158   FROB (lock_toggle,            2, 4);
159 # undef FROB
160   gtk_table_set_col_spacings (GTK_TABLE(box2), 10);
161
162   gtk_box_pack_start (GTK_BOX(box3), prefs_done, TRUE, FALSE, 0);
163   gtk_box_pack_start (GTK_BOX(box3), prefs_cancel, TRUE, FALSE, 0);
164
165   gtk_container_add (GTK_CONTAINER (window), box1);
166
167   gtk_widget_show_all (window);
168
169   preferences_dialog = window;
170   preferences_form = window;
171 }
172
173
174 void
175 create_demo_dialog (void *ignore1, void *ignore2, void *ignore3)
176 {
177   GtkWidget *window, *box1, *box2, *box3, *list;
178
179   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
180
181   /* Set the minimum size. */
182   gtk_widget_set_usize (GTK_WIDGET (window), 1, 1);
183
184   /* Set the default size. */
185   gtk_window_set_default_size (GTK_WINDOW (window), 600, 300);
186
187   gtk_container_set_border_width (GTK_CONTAINER (window), 10);
188
189   box1 = gtk_vbox_new (FALSE, 6);
190   box2 = gtk_hbutton_box_new ();
191   box3 = gtk_hbox_new (FALSE, 6);
192   list = gtk_list_new ();
193
194   label1 = gtk_label_new (STR("label1.label"));
195   label2 = gtk_label_new (STR("label2.label"));
196
197   demo_list = gtk_scrolled_window_new (0, 0);
198   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (demo_list),
199                                   GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
200   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (demo_list),
201                                          list);
202   gtk_widget_show (list);
203
204   text_line = gtk_entry_new ();
205   gtk_entry_set_editable (GTK_ENTRY (text_line), TRUE);
206   text_activate = gtk_button_new_with_label (STR("demo_dialog.run.label"));
207
208   GTK_WIDGET (text_line)->style =
209     gtk_style_copy (GTK_WIDGET (text_line)->style);
210   GTK_WIDGET (text_line)->style->font =
211     gdk_font_load (STR("demo_dialog.Text.font"));
212
213   next = gtk_button_new_with_label (STR("demo_dialog.next.label"));
214   prev = gtk_button_new_with_label (STR("demo_dialog.prev.label"));
215   edit = gtk_button_new_with_label (STR("demo_dialog.edit.label"));
216   done = gtk_button_new_with_label (STR("demo_dialog.done.label"));
217
218   gtk_widget_show (box1);
219   gtk_widget_show (box2);
220   gtk_widget_show (box3);
221   gtk_widget_show (label1);
222   gtk_widget_show (label2);
223   gtk_widget_show (demo_list);
224   gtk_widget_show (text_activate);
225   gtk_widget_show (text_line);
226   gtk_widget_show (next);
227   gtk_widget_show (prev);
228   gtk_widget_show (edit);
229   gtk_widget_show (done);
230
231   gtk_box_pack_start (GTK_BOX(box3), text_line, TRUE, TRUE, 0);
232   gtk_box_pack_start (GTK_BOX(box3), text_activate, FALSE, FALSE, 0);
233
234   gtk_box_pack_start (GTK_BOX(box1), label1, FALSE, FALSE, 0);
235   gtk_box_pack_start (GTK_BOX(box1), label2, FALSE, FALSE, 0);
236   gtk_box_pack_start (GTK_BOX(box1), demo_list, TRUE, TRUE, 0);
237   gtk_box_pack_start (GTK_BOX(box1), box3, FALSE, FALSE, 0);
238   gtk_box_pack_start (GTK_BOX(box1), box2, FALSE, FALSE, 0);
239
240   gtk_box_pack_start (GTK_BOX(box2), next, TRUE, FALSE, 0);
241   gtk_box_pack_start (GTK_BOX(box2), prev, TRUE, FALSE, 0);
242   gtk_box_pack_start (GTK_BOX(box2), edit, TRUE, FALSE, 0);
243   gtk_box_pack_start (GTK_BOX(box2), done, TRUE, FALSE, 0);
244
245   gtk_container_add (GTK_CONTAINER (window), box1);
246
247   demo_dialog = window;
248   demo_form = window;
249 }