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

Diff of /trunk/Src/wptClipEditDlg.cpp

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

revision 48 by werner, Mon Oct 31 21:14:11 2005 UTC revision 271 by twoaday, Sun Nov 5 08:57:45 2006 UTC
# Line 1  Line 1 
1  /* wptClipEditDlg.cpp - Clipboard Editor dialog  /* wptClipEditDlg.cpp - Clipboard Editor dialog
2   *      Copyright (C) 2000-2005 Timo Schulz   *      Copyright (C) 2000-2006 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 17  Line 17 
17   * along with WinPT; if not, write to the Free Software Foundation,   * along with WinPT; if not, write to the Free Software Foundation,
18   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19   */   */
   
20  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
21  #include <config.h>  #include <config.h>
22  #endif  #endif
# Line 32  Line 31 
31  #include "wptGPG.h"  #include "wptGPG.h"
32  #include "wptNLS.h"  #include "wptNLS.h"
33  #include "resource.h"  #include "resource.h"
34    #include "wptCommonCtl.h"
35    #include "wptContext.h"
36    #include "wptKeylist.h"
37    
38    
39    /* XXX: it would be really nice to have tempest prevention fonts. */
40    
41    void verify_get_clip_info (gpgme_signature_t sig,
42                               char **r_header, char **r_footer);
43    
44    
45  /* Load the clipboard contents into the text field in @dlg.  /* Load the clipboard contents into the text field in @dlg.
46       Optinally @header and @footer can be used to set a header and footer.
47     Return value: 0 on success. */     Return value: 0 on success. */
48  static int  static int
49  load_clipboard (HWND dlg)  load_clipboard (HWND dlg, const char *header, const char *footer)
50  {  {
51      HANDLE clipmem;      HANDLE clipmem;
52      char *cliptext;      char *cliptext;
53      char *p;      char *p, *pp;
54    
55      CloseClipboard (); /* make sure it is closed. */      CloseClipboard (); /* make sure it is closed. */
56      if (OpenClipboard (NULL) == FALSE) {      if (OpenClipboard (NULL) == FALSE) {
# Line 66  load_clipboard (HWND dlg) Line 75  load_clipboard (HWND dlg)
75      strcpy (p, cliptext);      strcpy (p, cliptext);
76            
77      GlobalUnlock (clipmem);      GlobalUnlock (clipmem);
78      CloseClipboard ();        CloseClipboard ();
79      SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);      
80        if (header && footer) {
81            const char *fmt = "%s\r\n%s\r\n%s";
82            int len;
83    
84            len = strlen (header) + strlen (footer) + strlen (fmt) + strlen (p);
85            pp = new char[len + 1];
86            if (!pp)
87                BUG (0);
88            _snprintf (pp, len, fmt, header, p, footer);
89            SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, pp);
90            free_if_alloc (pp);
91        }
92        else
93            SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
94      free_if_alloc (p);      free_if_alloc (p);
       
95      return 0;      return 0;
96  }  }
97    
# Line 81  load_clipboard_from_file (HWND dlg) Line 103  load_clipboard_from_file (HWND dlg)
103      OPENFILENAME open;      OPENFILENAME open;
104      FILE *fp;      FILE *fp;
105      char *p;      char *p;
106      char file[300] = "";      char file[MAX_PATH+64] = "";
107      DWORD size;      DWORD size;
108      int id;      int id;
109    
110      memset (&open, 0, sizeof (open));      memset (&open, 0, sizeof (open));
111      open.lStructSize = sizeof (OPENFILENAME);            open.lStructSize = sizeof (OPENFILENAME);
112      open.hInstance = glob_hinst;                  open.hInstance = glob_hinst;
113      open.lpstrTitle = _("File Open");            open.lpstrTitle = _("File Open");
114      open.lpstrFilter = (char *)_("All Files (*.*)\0*.*\0\0");            open.lpstrFilter = "All Files (*.*)\0*.*\0\0";
115      open.hwndOwner = dlg;                open.hwndOwner = dlg;          
116      open.lpstrFile = file;                        open.lpstrFile = file;                  
117      open.nMaxFile = sizeof (file)-1;                      open.nMaxFile = DIM (file)-1;                  
118      open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;      open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
119                            
120      if (GetOpenFileName (&open)) {      if (GetOpenFileName (&open)) {
121          if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {                if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {
122              id = msg_box (dlg, _("The file you want to add is very large.\n"              id = msg_box (dlg, _("The file you want to add is very large.\n"
123                                   "Still proceed?"), _("Clipboard"), MB_INFO|MB_YESNO);                                         "Continue?"), _("Clipboard"),
124              if (id == IDNO)                                MB_INFO|MB_YESNO);
125                if (id == IDNO)
126                  return -1;                  return -1;
127          }          }
128          fp = fopen (file, "rb");          fp = fopen (file, "rb");
129          if (!fp) {          if (!fp) {
130              msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN), _("Clipboard"), MB_ERR);              msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN),
131              return FALSE;                       _("Clipboard"), MB_ERR);
132                return -1;
133          }          }
134          p = new char[size+1];          p = new char[size+1];
135          if (!p)          if (!p)
136              BUG (0);              BUG (0);
137          fread (p, 1, size, fp);          memset (p, 0, size+1);
138          p[size] = '\0';          size = fread (p, 1, size, fp);
139          fclose (fp);          fclose (fp);
140          SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);                  SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);        
141          free_if_alloc (p);          free_if_alloc (p);
# Line 126  save_clipboard_to_file (HWND dlg) Line 150  save_clipboard_to_file (HWND dlg)
150  {  {
151      OPENFILENAME save;      OPENFILENAME save;
152      FILE *fp;      FILE *fp;
153      char *p;      char *p=NULL;
154      char file[300] = "";      char file[300] = "";
155      DWORD nbytes;      DWORD nbytes;
     int id;  
156    
157      memset (&save, 0, sizeof (save));            memset (&save, 0, sizeof (save));      
158      save.lStructSize = sizeof (OPENFILENAME);            save.lStructSize = sizeof (OPENFILENAME);      
159      save.hInstance = glob_hinst;                  save.hInstance = glob_hinst;            
160      save.lpstrTitle = _("File Save");            save.lpstrTitle = _("File Save");      
161      save.lpstrFile = (char *)_("All Files (*.*)\0*.*\0\0");              save.lpstrFile = "All Files (*.*)\0*.*\0\0";
162      save.hwndOwner = dlg;                        save.hwndOwner = dlg;
163      save.lpstrFile = file;                        save.lpstrFile = file;
164      save.nMaxFile = sizeof (file) - 1;      save.nMaxFile = DIM (file) - 1;
165      save.Flags = OFN_OVERWRITEPROMPT;      save.Flags = OFN_OVERWRITEPROMPT;
166                        
167      if( GetSaveFileName( &save ) ) {      if (GetSaveFileName (&save)) {
         if( file_exist_check( file ) == 0 ) {        
             id = log_box (_("Clipboard"), MB_YESNO,  
                           _("\"%s\" already exists.\n"  
                             "Replace existing file?"), file);        
             if( id == IDNO )      
                 return FALSE;  
         }  
168          fp = fopen (file, "wb");          fp = fopen (file, "wb");
169          if (!fp) {          if (!fp) {
170              msg_box (dlg, winpt_strerror (WPTERR_FILE_CREAT), _("Clipboard"), MB_ERR);              msg_box (dlg, winpt_strerror (WPTERR_FILE_CREAT),
171              return FALSE;                       _("Clipboard"), MB_ERR);
172                return -1;
173          }          }
174          /* XXX: there is a NUL-byte at the end. */          nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2,
175          nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_GETTEXTLENGTH, 0, 0);                                       WM_GETTEXTLENGTH, 0, 0);
176          if (nbytes > 0) {          if (nbytes > 0) {
177              p = new char[nbytes+1];              p = new char[nbytes+1];
178              if (!p)              if (!p)
179                  BUG (NULL);                  BUG (NULL);
180              GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);              GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);
181              fwrite (p, 1, nbytes, fp);              fwrite (p, 1, nbytes, fp);
182                
183          }                    }          
184          fclose (fp);          fclose (fp);
185          free_if_alloc (p);          free_if_alloc (p);
186            msg_box (dlg, _("Data successfully written to file."),
187                     _("Clipboard"), MB_OK);
188      }      }
189      return 0;      return 0;
190  }  }
# Line 174  save_clipboard_to_file (HWND dlg) Line 194  save_clipboard_to_file (HWND dlg)
194  BOOL CALLBACK  BOOL CALLBACK
195  clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
196  {  {
197        HMENU menu;
198        char *head=NULL, *foot=NULL;
199        gpgme_data_t txt;
200    
201      switch (msg)  {      switch (msg)  {
202      case WM_INITDIALOG:      case WM_INITDIALOG:        
203            /* If there is a param, we expect a signature and initialize
204               the header and footer variable accordingly. */
205            if (lparam)
206                verify_get_clip_info ((gpgme_signature_t)lparam, &head, &foot);
207            load_clipboard (dlg, head, foot);
208            free_if_alloc (head);
209            free_if_alloc (foot);
210    
211            menu = LoadMenu (glob_hinst, (LPCTSTR)IDR_WINPT_CLIPEDIT);
212            set_menu_text (menu, ID_CLIPEDIT_SEND, _("&Copy"));
213            set_menu_text (menu, ID_CLIPEDIT_CLEAR, _("Clea&r"));
214            set_menu_text (menu, ID_CLIPEDIT_QUOTE, _("&Quote"));
215            set_menu_text (menu, ID_CLIPEDIT_OPEN, _("&Open..."));  
216            set_menu_text (menu, ID_CLIPEDIT_SAVE, _("&Save..."));
217            set_menu_text (menu, ID_CLIPEDIT_PASTE, _("&Paste"));
218            set_menu_text (menu, ID_CLIPEDIT_ENC, _("&Encrypt"));
219            set_menu_text (menu, ID_CLIPEDIT_DEC, _("&Decrypt"));
220            SetMenu (dlg, menu);
221          SetWindowText (dlg, _("Clipboard Editor"));          SetWindowText (dlg, _("Clipboard Editor"));
222          SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));          SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));
         SetDlgItemText (dlg, IDC_CLIPEDIT_CLEAR, _("Clea&r"));  
         SetDlgItemText (dlg, IDC_CLIPEDIT_LOAD, _("&Load"));      
         SetDlgItemText (dlg, IDC_CLIPEDIT_SAVE, _("&Save"));  
   
         load_clipboard (dlg);  
223          center_window (dlg, NULL);          center_window (dlg, NULL);
224          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
225          return TRUE;          return TRUE;
226                    
     case WM_SYSCOMMAND:  
         if (LOWORD (wparam) == SC_CLOSE)  
             EndDialog (dlg, TRUE);  
         return TRUE;  
           
227      case WM_COMMAND:      case WM_COMMAND:
228          switch (LOWORD (wparam)) {          switch (LOWORD (wparam)) {
229          case IDOK:                        case IDCANCEL:
230                EndDialog (dlg, FALSE);
231                return TRUE;
232    
233            case IDOK:
234            case ID_CLIPEDIT_QUIT:
235              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
236              return TRUE;              return TRUE;
237                            
238          case IDC_CLIPEDIT_SEND:          case ID_CLIPEDIT_QUOTE:
239              if (IsDlgButtonChecked (dlg, IDC_CLIPEDIT_QUOTE)) {              SendMessage (dlg, WM_COMMAND, ID_CLIPEDIT_COPY, 0);
240                  gpgme_data_t txt;              if (gpg_data_new_from_clipboard (&txt, 0))
                 gpg_data_new_from_clipboard (&txt, 0);  
                 gpg_data_mail_quote (&txt);  
                 gpg_data_release_and_set_clipboard (txt, 0);  
                 SendMessage (dlg, WM_INITDIALOG, 0, 0);  
241                  return TRUE;                  return TRUE;
242              }              gpg_data_mail_quote (&txt);
243                gpg_data_release_and_set_clipboard (txt, 0);
244                load_clipboard (dlg, head, foot);
245                return TRUE;
246    
247            case ID_CLIPEDIT_COPY:
248            case IDC_CLIPEDIT_SEND:
249              SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);              SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);
250              SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);              SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);
251                SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, -1, 0);
252              return TRUE;              return TRUE;
253                            
254          case IDC_CLIPEDIT_CLEAR:          case ID_CLIPEDIT_CLEAR:
255              if (OpenClipboard (NULL) == FALSE) {              if (OpenClipboard (NULL) == FALSE) {
256                  msg_box (dlg,  winpt_strerror (WPTERR_CLIP_OPEN),                  msg_box (dlg,  winpt_strerror (WPTERR_CLIP_OPEN),
257                           _("Clipboard"), MB_ERR);                           _("Clipboard"), MB_ERR);
# Line 224  clip_edit_dlg_proc (HWND dlg, UINT msg, Line 264  clip_edit_dlg_proc (HWND dlg, UINT msg,
264                  SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");                  SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");
265              CloseClipboard ();              CloseClipboard ();
266              return TRUE;              return TRUE;
267    
268            case ID_CLIPEDIT_PASTE:
269                load_clipboard (dlg, NULL, NULL);
270                break;
271                            
272          case IDC_CLIPEDIT_LOAD:          case ID_CLIPEDIT_OPEN:
273              if (!load_clipboard_from_file (dlg)) {              if (!load_clipboard_from_file (dlg))
274                  /* XXX: for some files the code produces a crash! */                  PostMessage (dlg, WM_COMMAND, MAKEWPARAM (IDC_CLIPEDIT_SEND, 0), 0);
                 PostMessage (dlg, WM_COMMAND, MAKEWPARAM(IDC_CLIPEDIT_SEND, 0), NULL);  
             }  
275              return TRUE;              return TRUE;
276                            
277          case IDC_CLIPEDIT_SAVE:          case ID_CLIPEDIT_SAVE:
278              save_clipboard_to_file (dlg);                        save_clipboard_to_file (dlg);          
279              return TRUE;              return TRUE;
280    
281            case ID_CLIPEDIT_ENC:
282                SendMessage (dlg, WM_COMMAND, ID_CLIPEDIT_COPY, 0);
283                SendMessage (glob_hwnd, WM_COMMAND, ID_WINPT_ENCRYPT, 0);
284                load_clipboard (dlg, NULL, NULL);
285                SetForegroundWindow (dlg);
286                break;
287    
288            case ID_CLIPEDIT_DEC:
289                SendMessage (glob_hwnd, WM_COMMAND, ID_WINPT_DECRYPT_VERIFY, 0);
290                load_clipboard (dlg, NULL, NULL);
291                SetForegroundWindow (dlg);
292                break;
293          }          }
294          break;          break;
295      }      }
296            
297      return FALSE;      return FALSE;
298  }  }
   

Legend:
Removed from v.48  
changed lines
  Added in v.271

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26