/[winpt]/trunk/Src/wptPreferencesDlg.cpp
ViewVC logotype

Annotation of /trunk/Src/wptPreferencesDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 248 - (hide annotations)
Fri Jul 28 11:11:09 2006 UTC (18 years, 7 months ago) by twoaday
File size: 11549 byte(s)
Prepare 1.0.0pre2 release.


1 werner 36 /* wptPreferencesDlg.cpp - Dialog for the preferences
2 twoaday 180 * Copyright (C) 2001, 2002, 2003, 2005, 2006 Timo Schulz
3 werner 36 *
4     * This file is part of WinPT.
5     *
6     * WinPT is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * WinPT is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with WinPT; if not, write to the Free Software Foundation,
18     * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19     */
20     #ifdef HAVE_CONFIG_H
21     #include <config.h>
22     #endif
23    
24     #include <windows.h>
25     #include <shlobj.h>
26    
27     #include "wptNLS.h"
28     #include "wptGPG.h"
29     #include "wptCommonCtl.h"
30     #include "wptDlgs.h"
31     #include "wptTypes.h"
32     #include "wptErrors.h"
33     #include "wptRegistry.h"
34     #include "wptHotkey.h"
35     #include "wptW32API.h"
36     #include "wptVersion.h"
37     #include "wptAgent.h"
38     #include "wptKeyserver.h"
39 werner 47 #include "resource.h"
40 werner 36
41    
42     /* Dialog IDs of all hotkeys. */
43     static int hotkeys[] = {
44     IDC_PREFS_CLIP_ENCRYPT,
45     IDC_PREFS_CLIP_DECRYPT_VERIFY,
46     IDC_PREFS_CLIP_SIGNENC,
47 twoaday 180 IDC_PREFS_CLIP_SIGN,
48 werner 36 IDC_PREFS_CWS_ENCRYPT,
49     IDC_PREFS_CWS_DECRYPT_VERIFY,
50     IDC_PREFS_CWS_SIGN,
51     IDC_PREFS_CWS_SIGNENC,
52     0
53     };
54    
55    
56     /* Check that the given hotkey is in A..Z or a..z. */
57     static int
58 twoaday 180 check_hotkey (char *key)
59 werner 36 {
60     if (*key >= 'A' && *key <= 'Z')
61     return 1;
62     else if (*key >= 'a' && *key <= 'z') {
63     *key = *key - 32;
64     return 1;
65     }
66     return 0;
67 twoaday 32 }
68 werner 36
69    
70     /* Disable all hotkey controls in the dialog @dlg if val is 1. */
71     static void
72     disable_hotkey_items (HWND dlg, int val)
73     {
74     int mode = val? FALSE : TRUE;
75     int i, id;
76    
77     for (i=0; (id = hotkeys[i]); i++)
78     EnableWindow (GetDlgItem (dlg, id), mode);
79     }
80    
81    
82    
83     /* En- or disable the backup items in the dialog @dlg.
84     If val != 0 activate them, disable them otherwise. */
85     static void
86     enable_backup_items (HWND dlg, int val)
87     {
88     int mode = val? TRUE : FALSE;
89    
90     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKHOME), mode);
91     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKUSER), mode);
92     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), mode);
93     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), mode);
94     }
95    
96    
97     /* Initialize the combobox in the dialog @dlg with the valid wipe modes. */
98     static void
99     init_wipe_modes (HWND dlg)
100     {
101     HWND cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
102     combox_add_string (cb, (char *)"Simple");
103     combox_add_string (cb, (char *)"DoD");
104     combox_add_string (cb, (char *)"Gutmann");
105     SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.wipe_mode, 0);
106     }
107    
108    
109 twoaday 176 /* Helper function to prepare dialog. */
110     static void
111     on_init_dialog (HWND dlg)
112     {
113     struct gettext_tab_s prefs[] = {
114     {IDC_PREFS_SECMODE, _("Do not use any &temporary files")},
115     {IDC_PREFS_VIEWER, _("Use clipboard &viewer to display the plaintext")},
116     {IDC_PREFS_WWINFO, _("Word wrap cleartext &signatures at column")},
117     {IDC_PREFS_DISABLE_HOTKEYS, _("&Disable hotkeys (Not recommended!)")},
118     {IDC_PREFS_TRUST, _("Skip key validation and assume that keys are always fully trusted")},
119     {IDC_PREFS_AUTOBACKUP, _("&Automatic keyring backup when WinPT closes")},
120     {IDC_PREFS_BAKHOME, _("Backup to &keyring folder")},
121     {IDC_PREFS_BAKUSER, _("Backup to:")},
122     {IDC_PREFS_KEYLISTINF, _("Select &key list mode")},
123     {IDC_PREFS_WIPEINF, _("Select &wipe mode")},
124     {IDC_PREFS_KSINF, _("Keyserver &config")},
125 twoaday 180 {IDC_PREFS_CACHEINF, _("Cache &passphrases for 'n' minutes")},
126 twoaday 176 {IDC_PREFS_CACHEHINT, _("(CTRL+ALT+F to clear the cache)")},
127     {IDC_PREFS_ALLOPTINF, _("General options")},
128     {IDC_PREFS_CLIPINF, _("Clipboard hotkeys")},
129     {IDC_PREFS_CURRINF, _("Current window hotkeys")},
130     {IDC_PREFS_KSELFILE, _("Browse...")},
131     {IDC_PREFS_BAKSELECT, _("Browse...")},
132 twoaday 218 {IDC_PREFS_EXTINF, _("Default extension for encrypted files")},
133 twoaday 222 {IDC_PREFS_BAKSECRING, _("&Backup includes secret keyring")},
134 twoaday 176 {IDCANCEL, _("&Cancel")},
135     {0, NULL}};
136     int i;
137 twoaday 218 HWND cb;
138 twoaday 176
139     gettext_localize_dialog (dlg, prefs, _("WinPT Preferences"));
140 twoaday 180
141     SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time/60, TRUE);
142 twoaday 176 SetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE);
143     if (reg_prefs.backup.path)
144     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);
145    
146 twoaday 180 for (i=0; hotkeys[i]; i++) {
147     if (!wpt_hotkeys[i].enabled)
148     continue;
149     char key[2];
150     key[0] = wpt_hotkeys[i].key;
151     key[1] = 0;
152     SetDlgItemText (dlg, hotkeys[i], key);
153     }
154 twoaday 218 cb = GetDlgItem (dlg, IDC_PREFS_DEFEXT);
155 twoaday 222 combox_add_string (cb, "GnuPG (.gpg)");
156     combox_add_string (cb, "PGP (.pgp)");
157 twoaday 218 SendMessage (cb, CB_SETCURSEL, 0, 0);
158    
159 twoaday 176 CheckDlgButton (dlg, IDC_PREFS_DISABLE_HOTKEYS,
160     reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED);
161     CheckDlgButton (dlg, IDC_PREFS_VIEWER,
162     reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED);
163     CheckDlgButton (dlg, IDC_PREFS_TRUST,
164     reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED);
165     CheckDlgButton (dlg, IDC_PREFS_AUTOBACKUP,
166     reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED);
167     CheckDlgButton (dlg, IDC_PREFS_BAKHOME,
168     reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED);
169     CheckDlgButton (dlg, IDC_PREFS_BAKUSER,
170     reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED);
171 twoaday 222 CheckDlgButton (dlg, IDC_PREFS_BAKSECRING,
172     reg_prefs.backup.include_secr? BST_CHECKED :BST_UNCHECKED);
173 twoaday 218 SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_SETCURSEL,
174     reg_prefs.default_ext, 0);
175 twoaday 176 if (reg_prefs.no_hotkeys)
176     disable_hotkey_items (dlg, 1);
177     if (!reg_prefs.auto_backup)
178     enable_backup_items (dlg, 0);
179     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),
180     reg_prefs.backup.mode==1?FALSE : TRUE);
181     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),
182     reg_prefs.backup.mode==1? FALSE : TRUE);
183     init_wipe_modes (dlg);
184     center_window (dlg, NULL);
185     SetForegroundWindow (dlg);
186     }
187    
188    
189 werner 36 /* Dialog box procedure for the WinPT preferences. */
190     BOOL CALLBACK
191     prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
192     {
193     int rc;
194 twoaday 176 int i;
195 twoaday 180 char t[3];
196 twoaday 176 char path[256], *p;
197 werner 36 HWND cb;
198    
199 twoaday 88 switch (msg) {
200 werner 36 case WM_INITDIALOG:
201 twoaday 176 on_init_dialog (dlg);
202 werner 36 return TRUE;
203    
204     case WM_SYSCOMMAND:
205     if (LOWORD (wparam) == SC_CLOSE)
206 twoaday 176 EndDialog (dlg, FALSE);
207 werner 36 return FALSE;
208    
209     case WM_COMMAND:
210 twoaday 180 switch (HIWORD (wparam)) {
211 werner 36 case BN_CLICKED:
212 twoaday 180 switch ((int)LOWORD (wparam)) {
213 werner 36 case IDC_PREFS_DISABLE_HOTKEYS:
214     reg_prefs.no_hotkeys ^= 1;
215 twoaday 117 disable_hotkey_items (dlg, reg_prefs.no_hotkeys);
216 werner 36 break;
217    
218     case IDC_PREFS_TRUST:
219     reg_prefs.always_trust ^= 1;
220 twoaday 117 if (reg_prefs.always_trust) {
221 werner 36 msg_box (dlg,
222     _("In most cases it is not a good idea to enable this setting.\n"
223 twoaday 248 "If you know what you are doing, you can enable this flag, otherwise\n"
224 werner 36 "it is safe to leave this flag untouched."),
225 twoaday 117 _("Preferences"), MB_ICONWARNING|MB_OK);
226 werner 36 }
227     break;
228    
229     case IDC_PREFS_AUTOBACKUP:
230     reg_prefs.auto_backup ^= 1;
231     enable_backup_items (dlg, reg_prefs.auto_backup);
232     if (reg_prefs.auto_backup == 1) {
233     if (!IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
234     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
235     CheckDlgButton (dlg, IDC_PREFS_BAKHOME, BST_CHECKED);
236     }
237 twoaday 130 if (IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME))
238     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
239 werner 36 break;
240    
241     case IDC_PREFS_BAKHOME:
242     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), FALSE);
243     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
244     break;
245    
246     case IDC_PREFS_BAKUSER:
247     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), TRUE);
248     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), TRUE);
249     break;
250     }
251     break;
252     }
253 twoaday 180 switch (LOWORD (wparam)) {
254 werner 36 case IDC_PREFS_BAKSELECT:
255     const char *bpath;
256     bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);
257     if (bpath)
258     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, bpath);
259     break;
260    
261     case IDOK:
262 twoaday 180 rc = GetDlgItemInt (dlg, IDC_PREFS_CACHETIME, NULL, FALSE);
263 twoaday 181 if (rc <= 0) {
264 werner 36 reg_prefs.cache_time = 0;
265 twoaday 181 agent_flush_cache ();
266     }
267 twoaday 180 else if (rc > 720) {
268     msg_box( dlg, _("Please enter a value that is between 1-720.\nIt is not "
269     "a good idea to cache the passphrase more than 12 hours."),
270 twoaday 117 _("Preferences"), MB_ERR);
271     SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);
272 werner 36 return TRUE;
273     }
274     if (reg_prefs.cache_time != rc)
275     agent_flush_cache ();
276 twoaday 180 reg_prefs.cache_time = rc*60;
277 twoaday 117 rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);
278 twoaday 180 if (rc <= 0)
279 werner 36 reg_prefs.word_wrap = 0;
280 twoaday 117 else if (rc > 80) {
281 twoaday 176 msg_box (dlg, _("Please enter a value between 1-80."),
282     _("Preferences"), MB_ERR);
283 werner 36 return TRUE;
284     }
285 twoaday 218 reg_prefs.default_ext = SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_GETCURSEL, 0, 0);
286 werner 36 reg_prefs.word_wrap = rc;
287 twoaday 180 reg_prefs.use_viewer = IsDlgButtonChecked (dlg, IDC_PREFS_VIEWER)? 1 : 0;
288     reg_prefs.backup.mode = IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME ) ? 1 :
289     IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER)? 2 : 0;
290 twoaday 222 reg_prefs.backup.include_secr = IsDlgButtonChecked (dlg, IDC_PREFS_BAKSECRING)? 1 : 0;
291 twoaday 180 if (reg_prefs.backup.mode == 2) {
292     if (!GetDlgItemText (dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1)
293     || dir_exist_check (path)) {
294     msg_box (dlg, _("The specified backup folder is invalid."),
295     _("Preferences"), MB_ERR);
296 werner 36 return TRUE;
297     }
298     free_if_alloc (reg_prefs.backup.path);
299     p = reg_prefs.backup.path = m_strdup (path);
300     if (!p)
301     BUG (0);
302     }
303    
304 twoaday 180 cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
305     reg_prefs.wipe_mode = SendMessage (cb, CB_GETCURSEL, 0, 0);
306 werner 36
307     if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
308     hotkeys_unregister (glob_hwnd);
309     reg_prefs.no_hotkeys = 1;
310     }
311     else {
312     reg_prefs.no_hotkeys = 0;
313 twoaday 180 for (i = 0; hotkeys[i]; i++) {
314     rc = GetDlgItemText (dlg, hotkeys[i], t, sizeof (t)-1);
315     if (rc > 0 && check_hotkey (&t[0]))
316     hotkey_enable (&wpt_hotkeys[i], t);
317 werner 36 else
318 twoaday 180 hotkey_disable (&wpt_hotkeys[i]);
319 werner 36 }
320     set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
321     reg_prefs.no_hotkeys = 0;
322     }
323    
324 twoaday 180 rc = set_reg_winpt_prefs (&reg_prefs);
325     if (rc)
326 werner 36 msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
327    
328     if (reg_prefs.no_hotkeys == 0) {
329     hotkeys_unregister (glob_hwnd);
330 twoaday 180 rc = hotkeys_register (glob_hwnd);
331     if (rc)
332 werner 36 msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
333     }
334     EndDialog (dlg, TRUE);
335     return TRUE;
336    
337     case IDCANCEL:
338 twoaday 117 /* Reset backup mode if no mode was chosen. */
339     if (reg_prefs.auto_backup == 1 &&
340     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
341     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
342     reg_prefs.auto_backup = 0;
343     EndDialog (dlg, FALSE);
344 werner 36 return FALSE;
345     }
346     break;
347     }
348    
349     return FALSE;
350     }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26