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

Annotation of /trunk/Src/wptPreferencesDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 176 - (hide annotations)
Mon Feb 13 09:38:03 2006 UTC (19 years ago) by twoaday
File size: 10904 byte(s)


1 werner 36 /* wptPreferencesDlg.cpp - Dialog for the preferences
2     * Copyright (C) 2001, 2002, 2003, 2005 Timo Schulz
3     *
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_SIGN,
47     IDC_PREFS_CLIP_SIGNENC,
48     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     check_hotkey (char * key)
59     {
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     {IDC_PREFS_CACHEINF, _("Cache &passphrases for 'n' seconds")},
126     {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     {IDCANCEL, _("&Cancel")},
133     {0, NULL}};
134     int i;
135    
136     gettext_localize_dialog (dlg, prefs, _("WinPT Preferences"));
137     SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time, TRUE);
138    
139     SetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE);
140     if (reg_prefs.backup.path)
141     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);
142    
143    
144     for (i=0; hotkeys[i]; i++)
145     SetDlgItemText (dlg, hotkeys[i], reg_hotkeys[i].key);
146     CheckDlgButton (dlg, IDC_PREFS_DISABLE_HOTKEYS,
147     reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED);
148     CheckDlgButton (dlg, IDC_PREFS_SECMODE,
149     reg_prefs.use_tmpfiles ? BST_UNCHECKED : BST_CHECKED);
150     CheckDlgButton (dlg, IDC_PREFS_VIEWER,
151     reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED);
152     CheckDlgButton (dlg, IDC_PREFS_TRUST,
153     reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED);
154     CheckDlgButton (dlg, IDC_PREFS_AUTOBACKUP,
155     reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED);
156     CheckDlgButton (dlg, IDC_PREFS_BAKHOME,
157     reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED);
158     CheckDlgButton (dlg, IDC_PREFS_BAKUSER,
159     reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED);
160     if (reg_prefs.no_hotkeys)
161     disable_hotkey_items (dlg, 1);
162     if (!reg_prefs.auto_backup)
163     enable_backup_items (dlg, 0);
164     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),
165     reg_prefs.backup.mode==1?FALSE : TRUE);
166     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),
167     reg_prefs.backup.mode==1? FALSE : TRUE);
168     init_wipe_modes (dlg);
169     center_window (dlg, NULL);
170     SetForegroundWindow (dlg);
171     }
172    
173    
174 werner 36 /* Dialog box procedure for the WinPT preferences. */
175     BOOL CALLBACK
176     prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
177     {
178     int rc;
179 twoaday 176 int i;
180 werner 36 char t[2];
181 twoaday 176 char path[256], *p;
182 werner 36 HWND cb;
183    
184 twoaday 88 switch (msg) {
185 werner 36 case WM_INITDIALOG:
186 twoaday 176 on_init_dialog (dlg);
187 werner 36 return TRUE;
188    
189     case WM_SYSCOMMAND:
190     if (LOWORD (wparam) == SC_CLOSE)
191 twoaday 176 EndDialog (dlg, FALSE);
192 werner 36 return FALSE;
193    
194     case WM_COMMAND:
195     switch( HIWORD(wparam) ) {
196     case BN_CLICKED:
197     switch( (int)LOWORD( wparam ) ) {
198     case IDC_PREFS_DISABLE_HOTKEYS:
199     reg_prefs.no_hotkeys ^= 1;
200 twoaday 117 disable_hotkey_items (dlg, reg_prefs.no_hotkeys);
201 werner 36 break;
202    
203     case IDC_PREFS_TRUST:
204     reg_prefs.always_trust ^= 1;
205 twoaday 117 if (reg_prefs.always_trust) {
206 werner 36 msg_box (dlg,
207     _("In most cases it is not a good idea to enable this setting.\n"
208     "If you know what you are doing let this flag enabled, otherwise\n"
209     "it is safe to leave this flag untouched."),
210 twoaday 117 _("Preferences"), MB_ICONWARNING|MB_OK);
211 werner 36 }
212     break;
213    
214     case IDC_PREFS_AUTOBACKUP:
215     reg_prefs.auto_backup ^= 1;
216     enable_backup_items (dlg, reg_prefs.auto_backup);
217     if (reg_prefs.auto_backup == 1) {
218     if (!IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
219     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
220     CheckDlgButton (dlg, IDC_PREFS_BAKHOME, BST_CHECKED);
221     }
222 twoaday 130 if (IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME))
223     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
224 werner 36 break;
225    
226     case IDC_PREFS_BAKHOME:
227     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), FALSE);
228     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
229     break;
230    
231     case IDC_PREFS_BAKUSER:
232     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), TRUE);
233     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), TRUE);
234     break;
235     }
236     break;
237     }
238     switch( LOWORD( wparam ) ) {
239     case IDC_PREFS_BAKSELECT:
240     const char *bpath;
241     bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);
242     if (bpath)
243     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, bpath);
244     break;
245    
246     case IDOK:
247     rc = GetDlgItemInt( dlg, IDC_PREFS_CACHETIME, NULL, FALSE );
248 twoaday 117 if (!rc)
249 werner 36 reg_prefs.cache_time = 0;
250 twoaday 117 else if (rc > 3600) {
251 werner 36 msg_box( dlg, _("Please enter a value that is between 1-3600.\nIt is not "
252     "a good idea to cache the passphrase more than one hour."),
253 twoaday 117 _("Preferences"), MB_ERR);
254     SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);
255 werner 36 return TRUE;
256     }
257     if (reg_prefs.cache_time != rc)
258     agent_flush_cache ();
259     reg_prefs.cache_time = rc;
260 twoaday 117 rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);
261     if (!rc)
262 werner 36 reg_prefs.word_wrap = 0;
263 twoaday 117 else if (rc > 80) {
264 twoaday 176 msg_box (dlg, _("Please enter a value between 1-80."),
265     _("Preferences"), MB_ERR);
266 werner 36 return TRUE;
267     }
268     reg_prefs.word_wrap = rc;
269     reg_prefs.use_tmpfiles = IsDlgButtonChecked( dlg, IDC_PREFS_SECMODE )? 0 : 1;
270     reg_prefs.use_viewer = IsDlgButtonChecked( dlg, IDC_PREFS_VIEWER )? 1 : 0;
271     reg_prefs.backup.mode = IsDlgButtonChecked( dlg, IDC_PREFS_BAKHOME ) ? 1 :
272     IsDlgButtonChecked( dlg, IDC_PREFS_BAKUSER )? 2 : 0;
273     if( reg_prefs.backup.mode == 2 ) {
274     if( !GetDlgItemText( dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1 )
275     || dir_exist_check( path ) ) {
276     msg_box( dlg, _("The specified backup folder is invalid."),
277     _("Preferences"), MB_ERR );
278     return TRUE;
279     }
280     free_if_alloc (reg_prefs.backup.path);
281     p = reg_prefs.backup.path = m_strdup (path);
282     if (!p)
283     BUG (0);
284     }
285    
286     cb = GetDlgItem( dlg, IDC_PREFS_WIPEMODE );
287     reg_prefs.wipe_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );
288    
289     if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
290     hotkeys_unregister (glob_hwnd);
291     reg_prefs.no_hotkeys = 1;
292     }
293     else {
294     reg_prefs.no_hotkeys = 0;
295 twoaday 176 for( i = 0; hotkeys[i]; i++ ) {
296     rc = GetDlgItemText (dlg, hotkeys[i], t, 2);
297 werner 36 if( rc && check_hotkey( &t[0] ) )
298     hotkey_enable( &reg_hotkeys[i], t );
299     else
300     hotkey_disable( &reg_hotkeys[i] );
301     }
302     set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
303     reg_prefs.no_hotkeys = 0;
304     }
305    
306     if ((rc = set_reg_winpt_prefs (&reg_prefs)))
307     msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
308    
309     if (reg_prefs.no_hotkeys == 0) {
310     hotkeys_unregister (glob_hwnd);
311     hotkeys_modify ();
312     if ((rc = hotkeys_register (glob_hwnd)))
313     msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
314     }
315     EndDialog (dlg, TRUE);
316     return TRUE;
317    
318     case IDCANCEL:
319 twoaday 117 /* Reset backup mode if no mode was chosen. */
320     if (reg_prefs.auto_backup == 1 &&
321     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
322     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
323     reg_prefs.auto_backup = 0;
324     EndDialog (dlg, FALSE);
325 werner 36 return FALSE;
326     }
327     break;
328     }
329    
330     return FALSE;
331     }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26