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

Diff of /trunk/Src/wptPreferencesDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 150 by twoaday, Wed Jan 18 11:52:45 2006 UTC revision 248 by twoaday, Fri Jul 28 11:11:09 2006 UTC
# Line 1  Line 1 
1  /* wptPreferencesDlg.cpp - Dialog for the preferences  /* wptPreferencesDlg.cpp - Dialog for the preferences
2   *      Copyright (C) 2001, 2002, 2003, 2005 Timo Schulz   *      Copyright (C) 2001, 2002, 2003, 2005, 2006 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 43  Line 43 
43  static int hotkeys[] = {  static int hotkeys[] = {
44      IDC_PREFS_CLIP_ENCRYPT,      IDC_PREFS_CLIP_ENCRYPT,
45      IDC_PREFS_CLIP_DECRYPT_VERIFY,      IDC_PREFS_CLIP_DECRYPT_VERIFY,
     IDC_PREFS_CLIP_SIGN,  
46      IDC_PREFS_CLIP_SIGNENC,      IDC_PREFS_CLIP_SIGNENC,
47        IDC_PREFS_CLIP_SIGN,    
48      IDC_PREFS_CWS_ENCRYPT,      IDC_PREFS_CWS_ENCRYPT,
49      IDC_PREFS_CWS_DECRYPT_VERIFY,      IDC_PREFS_CWS_DECRYPT_VERIFY,
50      IDC_PREFS_CWS_SIGN,      IDC_PREFS_CWS_SIGN,
# Line 55  static int hotkeys[] = { Line 55  static int hotkeys[] = {
55    
56  /* Check that the given hotkey is in A..Z or a..z. */  /* Check that the given hotkey is in A..Z or a..z. */
57  static int  static int
58  check_hotkey (char * key)  check_hotkey (char *key)
59  {  {
60      if (*key >= 'A' && *key <= 'Z')      if (*key >= 'A' && *key <= 'Z')
61          return 1;          return 1;
# Line 94  enable_backup_items (HWND dlg, int val) Line 94  enable_backup_items (HWND dlg, int val)
94  }  }
95    
96    
 /* Initialize the combox in the dialog @dlg with the valid list modes. */  
 static void  
 init_keylist_modes (HWND dlg)  
 {  
     HWND cb = GetDlgItem (dlg, IDC_PREFS_LISTMODE);  
     combox_add_string (cb, (char *)"NORMAL");  
     combox_add_string (cb, (char *)"MINIMAL");  
     SendMessage (cb, CB_SETCURSEL, (WPARAM)reg_prefs.keylist_mode, 0);  
 }  
   
   
97  /* Initialize the combobox in the dialog @dlg with the valid wipe modes. */  /* Initialize the combobox in the dialog @dlg with the valid wipe modes. */
98  static void  static void
99  init_wipe_modes (HWND dlg)  init_wipe_modes (HWND dlg)
# Line 117  init_wipe_modes (HWND dlg) Line 106  init_wipe_modes (HWND dlg)
106  }  }
107    
108    
109    /* 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' minutes")},
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            {IDC_PREFS_EXTINF, _("Default extension for encrypted files")},
133            {IDC_PREFS_BAKSECRING, _("&Backup includes secret keyring")},
134            {IDCANCEL, _("&Cancel")},
135        {0, NULL}};
136        int i;
137        HWND cb;
138    
139        gettext_localize_dialog (dlg, prefs, _("WinPT Preferences"));
140    
141        SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time/60, TRUE);
142        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        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        cb = GetDlgItem (dlg, IDC_PREFS_DEFEXT);
155        combox_add_string (cb, "GnuPG (.gpg)");
156        combox_add_string (cb, "PGP   (.pgp)");
157        SendMessage (cb, CB_SETCURSEL, 0, 0);
158    
159        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        CheckDlgButton (dlg, IDC_PREFS_BAKSECRING,
172                        reg_prefs.backup.include_secr? BST_CHECKED :BST_UNCHECKED);
173        SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_SETCURSEL,
174                            reg_prefs.default_ext, 0);
175        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  /* Dialog box procedure for the WinPT preferences. */  /* Dialog box procedure for the WinPT preferences. */
190  BOOL CALLBACK  BOOL CALLBACK
191  prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
192  {  {
193      int rc;      int rc;
194      int i, id;      int i;
195      char t[2];      char t[3];
196      char path[256], * p;      char path[256], *p;
197      HWND cb;      HWND cb;
198            
199      switch (msg) {      switch (msg) {
200      case WM_INITDIALOG:      case WM_INITDIALOG:
201          SetWindowText (dlg, _("WinPT Preferences"));          on_init_dialog (dlg);
         SetDlgItemText (dlg, IDC_PREFS_SECMODE, _("Do not use any &temporary files"));  
         SetDlgItemText (dlg, IDC_PREFS_VIEWER, _("Use clipboard &viewer to display the plaintext"));  
         SetDlgItemText (dlg, IDC_PREFS_WWINFO, _("Word wrap cleartext &signatures at column"));  
         SetDlgItemText (dlg, IDC_PREFS_DISABLE_HOTKEYS, _("&Disable hotkeys (Not recommended!)"));  
         SetDlgItemText (dlg, IDC_PREFS_TRUST, _("Skip key validation and assume that keys are always fully trusted"));  
         SetDlgItemText (dlg, IDC_PREFS_AUTOBACKUP, _("&Automatic keyring backup when WinPT closes"));  
         SetDlgItemText (dlg, IDC_PREFS_BAKHOME, _("Backup to &keyring folder"));  
         SetDlgItemText (dlg, IDC_PREFS_BAKUSER, _("Backup to:"));  
         SetDlgItemText (dlg, IDC_PREFS_KEYLISTINF, _("Select &key list mode"));  
         SetDlgItemText (dlg, IDC_PREFS_WIPEINF, _("Select &wipe mode"));  
         SetDlgItemText (dlg, IDC_PREFS_KSINF, _("Keyserver &config"));  
         SetDlgItemText (dlg, IDC_PREFS_CACHEINF, _("Cache &passphrases for 'n' seconds"));  
         SetDlgItemText (dlg, IDC_PREFS_CACHEHINT, _("(CTRL+ALT+F to clear the cache)"));  
         SetDlgItemText (dlg, IDC_PREFS_ALLOPTINF, _("General options"));  
         SetDlgItemText (dlg, IDC_PREFS_CLIPINF, _("Clipboard hotkeys"));  
         SetDlgItemText (dlg, IDC_PREFS_CURRINF, _("Current window hotkeys"));  
         SetDlgItemText (dlg, IDC_PREFS_KSELFILE, _("Browse..."));  
         SetDlgItemText (dlg, IDC_PREFS_BAKSELECT, _("Browse..."));  
         SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));  
   
         SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time, TRUE);  
         SetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE);  
         if (reg_prefs.backup.path)  
             SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);  
   
         for (i=0; (id=hotkeys[i]); i++)  
             SetDlgItemText (dlg, id, reg_hotkeys[i].key);  
         CheckDlgButton( dlg, IDC_PREFS_DISABLE_HOTKEYS,  
                         reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_SECMODE,  
                         reg_prefs.use_tmpfiles ? BST_UNCHECKED : BST_CHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_VIEWER,  
                         reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_TRUST,  
                         reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_AUTOBACKUP,  
                         reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_BAKHOME,  
                         reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED );  
         CheckDlgButton( dlg, IDC_PREFS_BAKUSER,  
                         reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED );  
         if (reg_prefs.no_hotkeys)  
             disable_hotkey_items (dlg, 1);  
         if (!reg_prefs.auto_backup)  
             enable_backup_items (dlg, 0);  
         EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),  
                       reg_prefs.backup.mode==1?FALSE : TRUE);  
         EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),  
                       reg_prefs.backup.mode==1? FALSE : TRUE);  
         init_keylist_modes (dlg);  
         init_wipe_modes (dlg);  
         center_window (dlg, NULL);  
         SetForegroundWindow (dlg);  
202          return TRUE;          return TRUE;
203                    
204      case WM_SYSCOMMAND:      case WM_SYSCOMMAND:
205          if (LOWORD (wparam) == SC_CLOSE)          if (LOWORD (wparam) == SC_CLOSE)
206              EndDialog (dlg, TRUE);              EndDialog (dlg, FALSE);
207          return FALSE;          return FALSE;
208                    
209      case WM_COMMAND:      case WM_COMMAND:
210          switch( HIWORD(wparam) ) {          switch (HIWORD (wparam)) {
211          case BN_CLICKED:          case BN_CLICKED:
212              switch( (int)LOWORD( wparam ) ) {              switch ((int)LOWORD (wparam)) {
213              case IDC_PREFS_DISABLE_HOTKEYS:                          case IDC_PREFS_DISABLE_HOTKEYS:            
214                  reg_prefs.no_hotkeys ^= 1;                  reg_prefs.no_hotkeys ^= 1;
215                  disable_hotkey_items (dlg, reg_prefs.no_hotkeys);                  disable_hotkey_items (dlg, reg_prefs.no_hotkeys);
# Line 204  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 220  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
220                  if (reg_prefs.always_trust) {                  if (reg_prefs.always_trust) {
221                      msg_box (dlg,                      msg_box (dlg,
222                  _("In most cases it is not a good idea to enable this setting.\n"                  _("In most cases it is not a good idea to enable this setting.\n"
223                    "If you know what you are doing let this flag enabled, otherwise\n"                    "If you know what you are doing, you can enable this flag, otherwise\n"
224                    "it is safe to leave this flag untouched."),                    "it is safe to leave this flag untouched."),
225                    _("Preferences"), MB_ICONWARNING|MB_OK);                    _("Preferences"), MB_ICONWARNING|MB_OK);
226                  }                  }
# Line 234  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 250  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
250              }              }
251              break;              break;
252          }          }
253          switch( LOWORD( wparam ) ) {          switch (LOWORD (wparam)) {
254          case IDC_PREFS_BAKSELECT:          case IDC_PREFS_BAKSELECT:
255              const char *bpath;              const char *bpath;
256              bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);              bpath = get_folder_dlg (dlg, _("Select GPG backup path"), NULL);
# Line 243  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 259  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
259              break;              break;
260    
261          case IDOK:          case IDOK:
262              rc = GetDlgItemInt( dlg, IDC_PREFS_CACHETIME, NULL, FALSE );              rc = GetDlgItemInt (dlg, IDC_PREFS_CACHETIME, NULL, FALSE);
263              if (!rc)              if (rc <= 0) {
264                  reg_prefs.cache_time = 0;                  reg_prefs.cache_time = 0;
265              else if (rc > 3600) {                  agent_flush_cache ();
266                  msg_box( dlg, _("Please enter a value that is between 1-3600.\nIt is not "              }
267                                  "a good idea to cache the passphrase more than one hour."),              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                                  _("Preferences"), MB_ERR);                                  _("Preferences"), MB_ERR);
271                  SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);                  SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);
272                  return TRUE;                  return TRUE;
273              }              }
274              if (reg_prefs.cache_time != rc)              if (reg_prefs.cache_time != rc)
275                  agent_flush_cache ();                  agent_flush_cache ();
276              reg_prefs.cache_time = rc;              reg_prefs.cache_time = rc*60;
277              rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);              rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);
278              if (!rc)              if (rc <= 0)
279                  reg_prefs.word_wrap = 0;                  reg_prefs.word_wrap = 0;
280              else if (rc > 80) {              else if (rc > 80) {
281                  msg_box (dlg, _("Please enter a value between 1-80."), _("Preferences"), MB_ERR);                  msg_box (dlg, _("Please enter a value between 1-80."),
282                             _("Preferences"), MB_ERR);
283                  return TRUE;                  return TRUE;
284              }              }
285                reg_prefs.default_ext = SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_GETCURSEL, 0, 0);
286              reg_prefs.word_wrap = rc;              reg_prefs.word_wrap = rc;
287              reg_prefs.use_tmpfiles = IsDlgButtonChecked( dlg, IDC_PREFS_SECMODE )? 0 : 1;              reg_prefs.use_viewer = IsDlgButtonChecked (dlg, IDC_PREFS_VIEWER)? 1 : 0;
288              reg_prefs.use_viewer = IsDlgButtonChecked( dlg, IDC_PREFS_VIEWER )? 1 : 0;              reg_prefs.backup.mode = IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME ) ? 1 :
289              reg_prefs.backup.mode = IsDlgButtonChecked( dlg, IDC_PREFS_BAKHOME ) ? 1 :                                      IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER)? 2 : 0;
290                                      IsDlgButtonChecked( dlg, IDC_PREFS_BAKUSER )? 2 : 0;              reg_prefs.backup.include_secr = IsDlgButtonChecked (dlg, IDC_PREFS_BAKSECRING)? 1 : 0;
291              if( reg_prefs.backup.mode == 2 ) {              if (reg_prefs.backup.mode == 2) {
292                  if( !GetDlgItemText( dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1 )                  if (!GetDlgItemText (dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1)
293                      || dir_exist_check( path ) ) {                      || dir_exist_check (path)) {
294                      msg_box( dlg, _("The specified backup folder is invalid."),                      msg_box (dlg, _("The specified backup folder is invalid."),
295                               _("Preferences"), MB_ERR );                               _("Preferences"), MB_ERR);
296                      return TRUE;                      return TRUE;
297                  }                  }
298                  free_if_alloc (reg_prefs.backup.path);                  free_if_alloc (reg_prefs.backup.path);
# Line 281  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 301  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
301                      BUG (0);                      BUG (0);
302              }              }
303    
304              cb = GetDlgItem( dlg, IDC_PREFS_LISTMODE );              cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
305              reg_prefs.keylist_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );              reg_prefs.wipe_mode = SendMessage (cb, CB_GETCURSEL, 0, 0);
   
             cb = GetDlgItem( dlg, IDC_PREFS_WIPEMODE );  
             reg_prefs.wipe_mode = SendMessage( cb, CB_GETCURSEL, 0, 0 );  
306                            
307              if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {              if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
308                  hotkeys_unregister (glob_hwnd);                  hotkeys_unregister (glob_hwnd);
# Line 293  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 310  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
310              }              }
311              else {              else {
312                  reg_prefs.no_hotkeys = 0;                  reg_prefs.no_hotkeys = 0;
313                  for( i = 0; (id = hotkeys[i]); i++ ) {                  for (i = 0; hotkeys[i]; i++) {
314                      rc = GetDlgItemText( dlg, id, t, 2 );                      rc = GetDlgItemText (dlg, hotkeys[i], t, sizeof (t)-1);
315                      if( rc && check_hotkey( &t[0] ) )                      if (rc > 0 && check_hotkey (&t[0]))
316                          hotkey_enable( &reg_hotkeys[i], t );                          hotkey_enable (&wpt_hotkeys[i], t);
317                      else                      else
318                          hotkey_disable( &reg_hotkeys[i] );                          hotkey_disable (&wpt_hotkeys[i]);
319                  }                  }
320                  set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");                  set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
321                  reg_prefs.no_hotkeys = 0;                  reg_prefs.no_hotkeys = 0;
322              }              }
323    
324              if ((rc = set_reg_winpt_prefs (&reg_prefs)))              rc = set_reg_winpt_prefs (&reg_prefs);
325                if (rc)
326                  msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);                  msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
327                            
328              if (reg_prefs.no_hotkeys == 0) {              if (reg_prefs.no_hotkeys == 0) {
329                  hotkeys_unregister (glob_hwnd);                  hotkeys_unregister (glob_hwnd);
330                  hotkeys_modify ();                  rc = hotkeys_register (glob_hwnd);
331                  if ((rc = hotkeys_register (glob_hwnd)))                  if (rc)
332                      msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);                      msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
333              }              }
334              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);

Legend:
Removed from v.150  
changed lines
  Added in v.248

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26