/[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 218 by twoaday, Wed May 24 07:53:24 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            {IDCANCEL, _("&Cancel")},
134        {0, NULL}};
135        int i;
136        HWND cb;
137    
138        gettext_localize_dialog (dlg, prefs, _("WinPT Preferences"));
139    
140        SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, reg_prefs.cache_time/60, TRUE);
141        SetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, reg_prefs.word_wrap, TRUE);
142        if (reg_prefs.backup.path)
143            SetDlgItemText (dlg, IDC_PREFS_BAKPATH, reg_prefs.backup.path);
144            
145        for (i=0; hotkeys[i]; i++) {
146            if (!wpt_hotkeys[i].enabled)
147                continue;
148            char key[2];
149            key[0] = wpt_hotkeys[i].key;
150            key[1] = 0;
151            SetDlgItemText (dlg, hotkeys[i], key);
152        }
153        cb = GetDlgItem (dlg, IDC_PREFS_DEFEXT);
154        combox_add_string (cb, _("GnuPG (.gpg)"));
155        combox_add_string (cb, _("PGP   (.pgp)"));
156        SendMessage (cb, CB_SETCURSEL, 0, 0);
157    
158        CheckDlgButton (dlg, IDC_PREFS_DISABLE_HOTKEYS,
159                        reg_prefs.no_hotkeys ? BST_CHECKED : BST_UNCHECKED);
160        CheckDlgButton (dlg, IDC_PREFS_VIEWER,
161                        reg_prefs.use_viewer ? BST_CHECKED: BST_UNCHECKED);
162        CheckDlgButton (dlg, IDC_PREFS_TRUST,
163                        reg_prefs.always_trust? BST_CHECKED : BST_UNCHECKED);
164        CheckDlgButton (dlg, IDC_PREFS_AUTOBACKUP,
165                        reg_prefs.auto_backup? BST_CHECKED : BST_UNCHECKED);
166        CheckDlgButton (dlg, IDC_PREFS_BAKHOME,
167                        reg_prefs.backup.mode==1? BST_CHECKED : BST_UNCHECKED);
168        CheckDlgButton (dlg, IDC_PREFS_BAKUSER,
169                        reg_prefs.backup.mode==2? BST_CHECKED : BST_UNCHECKED);
170        SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_SETCURSEL,
171                            reg_prefs.default_ext, 0);
172        if (reg_prefs.no_hotkeys)
173            disable_hotkey_items (dlg, 1);
174        if (!reg_prefs.auto_backup)
175            enable_backup_items (dlg, 0);
176        EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKPATH),
177                          reg_prefs.backup.mode==1?FALSE : TRUE);
178        EnableWindow (GetDlgItem (dlg, IDC_PREFS_BAKSELECT),
179                          reg_prefs.backup.mode==1? FALSE : TRUE);
180        init_wipe_modes (dlg);
181        center_window (dlg, NULL);    
182        SetForegroundWindow (dlg);
183    }
184    
185    
186  /* Dialog box procedure for the WinPT preferences. */  /* Dialog box procedure for the WinPT preferences. */
187  BOOL CALLBACK  BOOL CALLBACK
188  prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  prefs_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
189  {  {
190      int rc;      int rc;
191      int i, id;      int i;
192      char t[2];      char t[3];
193      char path[256], * p;      char path[256], *p;
194      HWND cb;      HWND cb;
195            
196      switch (msg) {      switch (msg) {
197      case WM_INITDIALOG:      case WM_INITDIALOG:
198          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);  
199          return TRUE;          return TRUE;
200                    
201      case WM_SYSCOMMAND:      case WM_SYSCOMMAND:
202          if (LOWORD (wparam) == SC_CLOSE)          if (LOWORD (wparam) == SC_CLOSE)
203              EndDialog (dlg, TRUE);              EndDialog (dlg, FALSE);
204          return FALSE;          return FALSE;
205                    
206      case WM_COMMAND:      case WM_COMMAND:
207          switch( HIWORD(wparam) ) {          switch (HIWORD (wparam)) {
208          case BN_CLICKED:          case BN_CLICKED:
209              switch( (int)LOWORD( wparam ) ) {              switch ((int)LOWORD (wparam)) {
210              case IDC_PREFS_DISABLE_HOTKEYS:                          case IDC_PREFS_DISABLE_HOTKEYS:            
211                  reg_prefs.no_hotkeys ^= 1;                  reg_prefs.no_hotkeys ^= 1;
212                  disable_hotkey_items (dlg, reg_prefs.no_hotkeys);                  disable_hotkey_items (dlg, reg_prefs.no_hotkeys);
# Line 234  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 247  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
247              }              }
248              break;              break;
249          }          }
250          switch( LOWORD( wparam ) ) {          switch (LOWORD (wparam)) {
251          case IDC_PREFS_BAKSELECT:          case IDC_PREFS_BAKSELECT:
252              const char *bpath;              const char *bpath;
253              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 256  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
256              break;              break;
257    
258          case IDOK:          case IDOK:
259              rc = GetDlgItemInt( dlg, IDC_PREFS_CACHETIME, NULL, FALSE );              rc = GetDlgItemInt (dlg, IDC_PREFS_CACHETIME, NULL, FALSE);
260              if (!rc)              if (rc <= 0) {
261                  reg_prefs.cache_time = 0;                  reg_prefs.cache_time = 0;
262              else if (rc > 3600) {                  agent_flush_cache ();
263                  msg_box( dlg, _("Please enter a value that is between 1-3600.\nIt is not "              }
264                                  "a good idea to cache the passphrase more than one hour."),              else if (rc > 720) {
265                    msg_box( dlg, _("Please enter a value that is between 1-720.\nIt is not "
266                                    "a good idea to cache the passphrase more than 12 hours."),
267                                  _("Preferences"), MB_ERR);                                  _("Preferences"), MB_ERR);
268                  SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);                  SetDlgItemInt (dlg, IDC_PREFS_CACHETIME, 0, FALSE);
269                  return TRUE;                  return TRUE;
270              }              }
271              if (reg_prefs.cache_time != rc)              if (reg_prefs.cache_time != rc)
272                  agent_flush_cache ();                  agent_flush_cache ();
273              reg_prefs.cache_time = rc;              reg_prefs.cache_time = rc*60;
274              rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);              rc = GetDlgItemInt (dlg, IDC_PREFS_WORDWRAP, NULL, FALSE);
275              if (!rc)              if (rc <= 0)
276                  reg_prefs.word_wrap = 0;                  reg_prefs.word_wrap = 0;
277              else if (rc > 80) {              else if (rc > 80) {
278                  msg_box (dlg, _("Please enter a value between 1-80."), _("Preferences"), MB_ERR);                  msg_box (dlg, _("Please enter a value between 1-80."),
279                             _("Preferences"), MB_ERR);
280                  return TRUE;                  return TRUE;
281              }              }
282                reg_prefs.default_ext = SendDlgItemMessage (dlg, IDC_PREFS_DEFEXT, CB_GETCURSEL, 0, 0);
283              reg_prefs.word_wrap = rc;              reg_prefs.word_wrap = rc;
284              reg_prefs.use_tmpfiles = IsDlgButtonChecked( dlg, IDC_PREFS_SECMODE )? 0 : 1;              reg_prefs.use_viewer = IsDlgButtonChecked (dlg, IDC_PREFS_VIEWER)? 1 : 0;
285              reg_prefs.use_viewer = IsDlgButtonChecked( dlg, IDC_PREFS_VIEWER )? 1 : 0;              reg_prefs.backup.mode = IsDlgButtonChecked (dlg, IDC_PREFS_BAKHOME ) ? 1 :
286              reg_prefs.backup.mode = IsDlgButtonChecked( dlg, IDC_PREFS_BAKHOME ) ? 1 :                                      IsDlgButtonChecked (dlg, IDC_PREFS_BAKUSER)? 2 : 0;
287                                      IsDlgButtonChecked( dlg, IDC_PREFS_BAKUSER )? 2 : 0;              if (reg_prefs.backup.mode == 2) {
288              if( reg_prefs.backup.mode == 2 ) {                  if (!GetDlgItemText (dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1)
289                  if( !GetDlgItemText( dlg, IDC_PREFS_BAKPATH, path, sizeof (path)-1 )                      || dir_exist_check (path)) {
290                      || dir_exist_check( path ) ) {                      msg_box (dlg, _("The specified backup folder is invalid."),
291                      msg_box( dlg, _("The specified backup folder is invalid."),                               _("Preferences"), MB_ERR);
                              _("Preferences"), MB_ERR );  
292                      return TRUE;                      return TRUE;
293                  }                  }
294                  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 297  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
297                      BUG (0);                      BUG (0);
298              }              }
299    
300              cb = GetDlgItem( dlg, IDC_PREFS_LISTMODE );              cb = GetDlgItem (dlg, IDC_PREFS_WIPEMODE);
301              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 );  
302                            
303              if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {              if (IsDlgButtonChecked (dlg, IDC_PREFS_DISABLE_HOTKEYS)) {
304                  hotkeys_unregister (glob_hwnd);                  hotkeys_unregister (glob_hwnd);
# Line 293  prefs_dlg_proc (HWND dlg, UINT msg, WPAR Line 306  prefs_dlg_proc (HWND dlg, UINT msg, WPAR
306              }              }
307              else {              else {
308                  reg_prefs.no_hotkeys = 0;                  reg_prefs.no_hotkeys = 0;
309                  for( i = 0; (id = hotkeys[i]); i++ ) {                  for (i = 0; hotkeys[i]; i++) {
310                      rc = GetDlgItemText( dlg, id, t, 2 );                      rc = GetDlgItemText (dlg, hotkeys[i], t, sizeof (t)-1);
311                      if( rc && check_hotkey( &t[0] ) )                      if (rc > 0 && check_hotkey (&t[0]))
312                          hotkey_enable( &reg_hotkeys[i], t );                          hotkey_enable (&wpt_hotkeys[i], t);
313                      else                      else
314                          hotkey_disable( &reg_hotkeys[i] );                          hotkey_disable (&wpt_hotkeys[i]);
315                  }                  }
316                  set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");                  set_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "DisableHotkeys", "0");
317                  reg_prefs.no_hotkeys = 0;                  reg_prefs.no_hotkeys = 0;
318              }              }
319    
320              if ((rc = set_reg_winpt_prefs (&reg_prefs)))              rc = set_reg_winpt_prefs (&reg_prefs);
321                if (rc)
322                  msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);                  msg_box (dlg, winpt_strerror (rc), _("Preferences"), MB_ERR);
323                            
324              if (reg_prefs.no_hotkeys == 0) {              if (reg_prefs.no_hotkeys == 0) {
325                  hotkeys_unregister (glob_hwnd);                  hotkeys_unregister (glob_hwnd);
326                  hotkeys_modify ();                  rc = hotkeys_register (glob_hwnd);
327                  if ((rc = hotkeys_register (glob_hwnd)))                  if (rc)
328                      msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);                      msg_box (NULL, winpt_strerror (rc), _("Hotkeys"), MB_ERR);
329              }              }
330              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26