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

Annotation of /trunk/Src/wptPreferencesDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 88 - (hide annotations)
Mon Nov 21 12:06:59 2005 UTC (19 years, 3 months ago) by twoaday
File size: 12329 byte(s)
2005-11-21  Timo Schulz  <ts@g10code.com>
 
        * WinPT.cpp (WinMain): Implement --stop switch.
        * wptClipEditDlg.cpp (clip_edit_dlg_proc): Localize
        missing string.
        * wptPreferencesDlg.cpp (prefs_dlg_proc): Likewise.
        * wptKeygenDlg.cpp (keygen_dlg_proc): Verify valid context
        first. Thanks to Ralf.
        * wptFileManagerDlg.cpp (update_ui_items): New.
        * wptFileManager.cpp (fm_set_status): New sigmode param.
        Changed all callers.


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 combox in the dialog @dlg with the valid list modes. */
98     static void
99     init_keylist_modes (HWND dlg)
100     {
101     HWND cb = GetDlgItem (dlg, IDC_PREFS_LISTMODE);
102     combox_add_string (cb, (char *)"NORMAL");
103     combox_add_string (cb, (char *)"MINIMAL");
104     SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.keylist_mode, 0);
105     }
106    
107    
108     /* Initialize the combobox in the dialog @dlg with the valid wipe modes. */
109     static void
110     init_wipe_modes (HWND dlg)
111     {
112     HWND cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
113     combox_add_string (cb, (char *)"Simple");
114     combox_add_string (cb, (char *)"DoD");
115     combox_add_string (cb, (char *)"Gutmann");
116     SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.wipe_mode, 0);
117     }
118    
119    
120     /* Dialog box procedure for the WinPT preferences. */
121     BOOL CALLBACK
122     prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
123     {
124     int rc;
125     int i, id;
126     char t[2];
127     char path[256], * p;
128     HWND cb;
129    
130 twoaday 88 switch (msg) {
131 werner 36 case WM_INITDIALOG:
132     SetWindowText (dlg, _("WinPT Preferences"));
133     SetDlgItemText (dlg, IDC_PREFS_SECMODE, _("Do not use any &temporary files"));
134     SetDlgItemText (dlg, IDC_PREFS_VIEWER, _("Use clipboard &viewer to display the plaintext"));
135     SetDlgItemText (dlg, IDC_PREFS_WWINFO, _("Word wrap cleartext &signatures at column"));
136     SetDlgItemText (dlg, IDC_PREFS_DISABLE_HOTKEYS, _("&Disable hotkeys (Not recommended!)"));
137     SetDlgItemText (dlg, IDC_PREFS_TRUST, _("Skip key validation and assume that keys are always fully trusted"));
138     SetDlgItemText (dlg, IDC_PREFS_AUTOBACKUP, _("&Automatic keyring backup when WinPT closes"));
139     SetDlgItemText (dlg, IDC_PREFS_BAKHOME, _("Backup to GPG &home folder"));
140     SetDlgItemText (dlg, IDC_PREFS_BAKUSER, _("Backup to:"));
141 twoaday 80 SetDlgItemText (dlg, IDC_PREFS_KEYLISTINF, _("Select &key list mode"));
142     SetDlgItemText (dlg, IDC_PREFS_WIPEINF, _("Select &wipe mode"));
143     SetDlgItemText (dlg, IDC_PREFS_KSINF, _("Keyserver &config"));
144     SetDlgItemText (dlg, IDC_PREFS_CACHEINF, _("Cache &passphrases for 'n' seconds"));
145     SetDlgItemText (dlg, IDC_PREFS_CACHEHINT, _("(CTRL+ALT+F to clear the cache)"));
146 twoaday 88 SetDlgItemText (dlg, IDC_PREFS_ALLOPTINF, _("General options"));
147     SetDlgItemText (dlg, IDC_PREFS_CLIPINF, _("Clipboard hotkeys"));
148     SetDlgItemText (dlg, IDC_PREFS_CURRINF, _("Current window hotkeys"));
149 twoaday 80
150 werner 36 SetDlgItemInt( dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time, TRUE );
151     SetDlgItemInt( dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE );
152     if (reg_prefs.backup.path)
153     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);
154     if (reg_prefs.kserv_conf)
155     SetDlgItemText (dlg, IDC_PREFS_KSERVER, reg_prefs.kserv_conf);
156    
157     for (i=0; (id=hotkeys[i]); i++)
158     SetDlgItemText (dlg, id, reg_hotkeys[i].key);
159     CheckDlgButton( dlg, IDC_PREFS_DISABLE_HOTKEYS,
160     reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED );
161     CheckDlgButton( dlg, IDC_PREFS_SECMODE,
162     reg_prefs.use_tmpfiles ? BST_UNCHECKED : BST_CHECKED );
163     CheckDlgButton( dlg, IDC_PREFS_VIEWER,
164     reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED );
165     CheckDlgButton( dlg, IDC_PREFS_TRUST,
166     reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED );
167     CheckDlgButton( dlg, IDC_PREFS_AUTOBACKUP,
168     reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED );
169     CheckDlgButton( dlg, IDC_PREFS_BAKHOME,
170     reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED );
171     CheckDlgButton( dlg, IDC_PREFS_BAKUSER,
172     reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED );
173     if( reg_prefs.no_hotkeys )
174     disable_hotkey_items( dlg, 1 );
175     if (!reg_prefs.auto_backup)
176     enable_backup_items (dlg, 0);
177     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),
178     reg_prefs.backup.mode==1?FALSE : TRUE);
179     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),
180     reg_prefs.backup.mode==1? FALSE : TRUE);
181     init_keylist_modes (dlg);
182     init_wipe_modes (dlg);
183     center_window (dlg, NULL);
184     SetForegroundWindow (dlg);
185     return TRUE;
186    
187     case WM_SYSCOMMAND:
188     if (LOWORD (wparam) == SC_CLOSE)
189     EndDialog (dlg, TRUE);
190     return FALSE;
191    
192     case WM_COMMAND:
193     switch( HIWORD(wparam) ) {
194     case BN_CLICKED:
195     switch( (int)LOWORD( wparam ) ) {
196     case IDC_PREFS_DISABLE_HOTKEYS:
197     reg_prefs.no_hotkeys ^= 1;
198     disable_hotkey_items( dlg, reg_prefs.no_hotkeys );
199     break;
200    
201     case IDC_PREFS_TRUST:
202     reg_prefs.always_trust ^= 1;
203     if( reg_prefs.always_trust ) {
204     msg_box (dlg,
205     _("In most cases it is not a good idea to enable this setting.\n"
206     "If you know what you are doing let this flag enabled, otherwise\n"
207     "it is safe to leave this flag untouched."),
208     _("Preferences"), MB_ICONWARNING|MB_OK );
209     }
210     break;
211    
212     case IDC_PREFS_AUTOBACKUP:
213     reg_prefs.auto_backup ^= 1;
214     enable_backup_items (dlg, reg_prefs.auto_backup);
215     if (reg_prefs.auto_backup == 1) {
216     if (!IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME) &&
217     !IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER))
218     CheckDlgButton (dlg, IDC_PREFS_BAKHOME, BST_CHECKED);
219     }
220     break;
221    
222     case IDC_PREFS_BAKHOME:
223     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), FALSE);
224     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), FALSE);
225     break;
226    
227     case IDC_PREFS_BAKUSER:
228     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT), TRUE);
229     EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH), TRUE);
230     break;
231     }
232     break;
233     }
234     switch( LOWORD( wparam ) ) {
235     case IDC_PREFS_BAKSELECT:
236     const char *bpath;
237     bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);
238     if (bpath)
239     SetDlgItemText (dlg, IDC_PREFS_BAKPATH, bpath);
240     break;
241    
242     case IDC_PREFS_KSELFILE: {
243     const char * name;
244 twoaday 77 name = get_fileopen_dlg (dlg, _("Please select a keyserver.conf file"),
245 werner 36 NULL, NULL);
246     if (name != NULL)
247     SetDlgItemText (dlg, IDC_PREFS_KSERVER, name);
248     break; }
249    
250     case IDOK:
251     rc = GetDlgItemInt( dlg, IDC_PREFS_CACHETIME, NULL, FALSE );
252     if( !rc )
253     reg_prefs.cache_time = 0;
254     else if( rc > 3600 ) {
255     msg_box( dlg, _("Please enter a value that is between 1-3600.\nIt is not "
256     "a good idea to cache the passphrase more than one hour."),
257     _("Preferences"), MB_ERR );
258     SetDlgItemInt( dlg, IDC_PREFS_CACHETIME, 0, FALSE );
259     return TRUE;
260     }
261     if (reg_prefs.cache_time != rc)
262     agent_flush_cache ();
263     reg_prefs.cache_time = rc;
264     rc = GetDlgItemInt( dlg, IDC_PREFS_WORDWRAP, NULL, FALSE );
265     if( !rc )
266     reg_prefs.word_wrap = 0;
267     else if( rc > 80 ) {
268     msg_box( dlg, _("Please enter a value between 1-80."), _("Preferences"), MB_ERR );
269     return TRUE;
270     }
271     reg_prefs.word_wrap = rc;
272     reg_prefs.use_tmpfiles = IsDlgButtonChecked( dlg, IDC_PREFS_SECMODE )? 0 : 1;
273     reg_prefs.use_viewer = IsDlgButtonChecked( dlg, IDC_PREFS_VIEWER )? 1 : 0;
274     reg_prefs.backup.mode = IsDlgButtonChecked( dlg, IDC_PREFS_BAKHOME ) ? 1 :
275     IsDlgButtonChecked( dlg, IDC_PREFS_BAKUSER )? 2 : 0;
276     if( reg_prefs.backup.mode == 2 ) {
277     if( !GetDlgItemText( dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1 )
278     || dir_exist_check( path ) ) {
279     msg_box( dlg, _("The specified backup folder is invalid."),
280     _("Preferences"), MB_ERR );
281     return TRUE;
282     }
283     free_if_alloc (reg_prefs.backup.path);
284     p = reg_prefs.backup.path = m_strdup (path);
285     if (!p)
286     BUG (0);
287     }
288     free_if_alloc (reg_prefs.kserv_conf);
289     if (!GetDlgItemText (dlg, IDC_PREFS_KSERVER, path, sizeof (path)-1)
290     || file_exist_check (path)) {
291     rc = msg_box (dlg, _("The specified keyserver config file is invalid.\n\n"
292     "Create new default config file?"),
293     _("Preferences"), MB_ERR|MB_YESNO);
294     if (rc == IDNO)
295     return TRUE;
296     else
297     {
298     char cwd[256], * fn;
299     FILE * fp = fopen ("keyserver.conf", "wb");
300     if (fp) {
301     fprintf (fp, "%s\r\n", DEF_HKP_KEYSERVER);
302     fclose (fp);
303     }
304     GetCurrentDirectory (DIM (cwd)-1, cwd);
305     fn = make_filename (cwd, "keyserver", "conf");
306     memset (path, 0, sizeof( path));
307     strncpy (path, fn, DIM (path)-1);
308     free_if_alloc (fn);
309     }
310     }
311     p = reg_prefs.kserv_conf = m_strdup (path);
312     if (!p)
313     BUG (0);
314    
315     cb = GetDlgItem( dlg, IDC_PREFS_LISTMODE );
316     reg_prefs.keylist_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );
317    
318     cb = GetDlgItem( dlg, IDC_PREFS_WIPEMODE );
319     reg_prefs.wipe_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );
320    
321     if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
322     hotkeys_unregister (glob_hwnd);
323     reg_prefs.no_hotkeys = 1;
324     }
325     else {
326     reg_prefs.no_hotkeys = 0;
327     for( i = 0; (id = hotkeys[i]); i++ ) {
328     rc = GetDlgItemText( dlg, id, t, 2 );
329     if( rc && check_hotkey( &t[0] ) )
330     hotkey_enable( &reg_hotkeys[i], t );
331     else
332     hotkey_disable( &reg_hotkeys[i] );
333     }
334     set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
335     reg_prefs.no_hotkeys = 0;
336     }
337    
338     if ((rc = set_reg_winpt_prefs (&reg_prefs)))
339     msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
340    
341     if (reg_prefs.no_hotkeys == 0) {
342     hotkeys_unregister (glob_hwnd);
343     hotkeys_modify ();
344     if ((rc = hotkeys_register (glob_hwnd)))
345     msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
346     }
347     EndDialog (dlg, TRUE);
348     return TRUE;
349    
350     case IDCANCEL:
351     EndDialog( dlg, FALSE );
352     return FALSE;
353     }
354     break;
355     }
356    
357     return FALSE;
358     }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26