1 /* dialogs-Gtk.c --- Gtk widgets for demo, options, and password dialogs.
2 * xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
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
19 #include "resources.h"
23 GtkWidget *preferences_dialog;
24 GtkWidget *preferences_form;
25 GtkWidget *timeout_text;
26 GtkWidget *cycle_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;
39 GtkWidget *demo_dialog;
45 GtkWidget *text_activate;
50 GtkWidget *restart; /* #### */
52 /* This is a Gtk program that uses Xrm for localization and preferences --
53 may god forgive me for what I have unleashed. */
57 return (get_string_resource (resource, resource));
62 create_preferences_dialog (void *ignore1, void *ignore2, void *ignore3)
64 GtkWidget *window, *box1, *box2, *box3;
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;
74 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
75 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
77 box1 = gtk_vbox_new (FALSE, 6);
78 box2 = gtk_table_new (6, 3, FALSE);
79 box3 = gtk_hbutton_box_new ();
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"));
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);
100 gtk_button_new_with_label (STR("preferences_dialog.done.label"));
102 gtk_button_new_with_label (STR("preferences_dialog.cancel.label"));
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);
112 /* Set their sizes. */
113 entry_width = gdk_text_width (GTK_WIDGET (timeout_text)->style->font,
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);
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"));
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);
137 # define FROB(widget, x, y) \
138 gtk_table_attach_defaults (GTK_TABLE(box2), widget, x, x+1, y, y+1)
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);
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);
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);
160 gtk_table_set_col_spacings (GTK_TABLE(box2), 10);
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);
165 gtk_container_add (GTK_CONTAINER (window), box1);
167 gtk_widget_show_all (window);
169 preferences_dialog = window;
170 preferences_form = window;
175 create_demo_dialog (void *ignore1, void *ignore2, void *ignore3)
177 GtkWidget *window, *box1, *box2, *box3, *list;
179 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
181 /* Set the minimum size. */
182 gtk_widget_set_usize (GTK_WIDGET (window), 1, 1);
184 /* Set the default size. */
185 gtk_window_set_default_size (GTK_WINDOW (window), 600, 300);
187 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
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 ();
194 label1 = gtk_label_new (STR("label1.label"));
195 label2 = gtk_label_new (STR("label2.label"));
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),
202 gtk_widget_show (list);
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"));
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"));
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"));
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);
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);
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);
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);
245 gtk_container_add (GTK_CONTAINER (window), box1);
247 demo_dialog = window;