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

Annotation of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 328 - (hide annotations)
Fri Sep 25 16:07:38 2009 UTC (15 years, 5 months ago) by twoaday
File size: 8148 byte(s)


1 werner 36 /* wptClipEditDlg.cpp - Clipboard Editor dialog
2 twoaday 225 * Copyright (C) 2000-2006 Timo Schulz
3 werner 36 *
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     #ifdef HAVE_CONFIG_H
17     #include <config.h>
18     #endif
19    
20     #include <windows.h>
21     #include <stdio.h>
22    
23     #include "wptTypes.h"
24     #include "wptW32API.h"
25     #include "wptVersion.h"
26     #include "wptErrors.h"
27     #include "wptGPG.h"
28     #include "wptNLS.h"
29 werner 47 #include "resource.h"
30 twoaday 229 #include "wptCommonCtl.h"
31     #include "wptContext.h"
32     #include "wptKeylist.h"
33 werner 36
34 twoaday 121
35 twoaday 246 /* XXX: it would be really nice to have tempest prevention fonts. */
36 werner 36
37 twoaday 236 void verify_get_clip_info (gpgme_signature_t sig,
38     char **r_header, char **r_footer);
39    
40    
41 werner 36 /* Load the clipboard contents into the text field in @dlg.
42 twoaday 229 Optinally @header and @footer can be used to set a header and footer.
43 werner 36 Return value: 0 on success. */
44     static int
45 twoaday 246 load_clipboard (HWND dlg, const char *header, const char *footer)
46 werner 36 {
47     HANDLE clipmem;
48     char *cliptext;
49 twoaday 229 char *p, *pp;
50 werner 36
51     CloseClipboard (); /* make sure it is closed. */
52     if (OpenClipboard (NULL) == FALSE) {
53     msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN), _("Clipboard"), MB_ERR);
54     return -1;
55     }
56     clipmem = GetClipboardData (CF_TEXT);
57     if (clipmem == NULL) {
58     CloseClipboard ();
59     return -1;
60     }
61    
62     cliptext = (char *) GlobalLock (clipmem);
63     if (cliptext == NULL || !strlen (cliptext)) {
64     CloseClipboard ();
65     return -1;
66     }
67    
68     p = new char [strlen (cliptext)+2];
69     if (!p)
70     BUG (0);
71     strcpy (p, cliptext);
72    
73     GlobalUnlock (clipmem);
74 twoaday 225 CloseClipboard ();
75 twoaday 229
76     if (header && footer) {
77     const char *fmt = "%s\r\n%s\r\n%s";
78 twoaday 231 int len;
79 twoaday 229
80 twoaday 231 len = strlen (header) + strlen (footer) + strlen (fmt) + strlen (p);
81 twoaday 229 pp = new char[len + 1];
82     if (!pp)
83     BUG (0);
84     _snprintf (pp, len, fmt, header, p, footer);
85     SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, pp);
86     free_if_alloc (pp);
87     }
88     else
89     SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
90 werner 36 free_if_alloc (p);
91     return 0;
92     }
93    
94    
95     /* Load the clipboard from the selected file. */
96     static int
97     load_clipboard_from_file (HWND dlg)
98     {
99     OPENFILENAME open;
100     FILE *fp;
101     char *p;
102 twoaday 246 char file[MAX_PATH+64] = "";
103 werner 36 DWORD size;
104     int id;
105    
106     memset (&open, 0, sizeof (open));
107 twoaday 225 open.lStructSize = sizeof (OPENFILENAME);
108     open.hInstance = glob_hinst;
109     open.lpstrTitle = _("File Open");
110     open.lpstrFilter = "All Files (*.*)\0*.*\0\0";
111 werner 36 open.hwndOwner = dlg;
112     open.lpstrFile = file;
113 twoaday 271 open.nMaxFile = DIM (file)-1;
114 werner 36 open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
115    
116     if (GetOpenFileName (&open)) {
117 twoaday 225 if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {
118 werner 36 id = msg_box (dlg, _("The file you want to add is very large.\n"
119 twoaday 248 "Continue?"), _("Clipboard"),
120 twoaday 105 MB_INFO|MB_YESNO);
121     if (id == IDNO)
122 werner 36 return -1;
123     }
124     fp = fopen (file, "rb");
125     if (!fp) {
126 twoaday 105 msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN),
127     _("Clipboard"), MB_ERR);
128 twoaday 236 return -1;
129 werner 36 }
130     p = new char[size+1];
131     if (!p)
132     BUG (0);
133 twoaday 225 memset (p, 0, size+1);
134     size = fread (p, 1, size, fp);
135 werner 36 fclose (fp);
136     SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
137     free_if_alloc (p);
138     }
139     return 0;
140     }
141    
142    
143     /* Save the contents of the clipboard to the selected file. */
144     static int
145     save_clipboard_to_file (HWND dlg)
146     {
147     OPENFILENAME save;
148     FILE *fp;
149 twoaday 65 char *p=NULL;
150 werner 36 char file[300] = "";
151     DWORD nbytes;
152    
153     memset (&save, 0, sizeof (save));
154     save.lStructSize = sizeof (OPENFILENAME);
155     save.hInstance = glob_hinst;
156     save.lpstrTitle = _("File Save");
157 twoaday 328 save.lpstrFile = (char*)"All Files (*.*)\0*.*\0\0";
158 twoaday 236 save.hwndOwner = dlg;
159     save.lpstrFile = file;
160 twoaday 271 save.nMaxFile = DIM (file) - 1;
161 werner 36 save.Flags = OFN_OVERWRITEPROMPT;
162 twoaday 225
163     if (GetSaveFileName (&save)) {
164 werner 36 fp = fopen (file, "wb");
165     if (!fp) {
166 twoaday 105 msg_box (dlg, winpt_strerror (WPTERR_FILE_CREAT),
167     _("Clipboard"), MB_ERR);
168 twoaday 236 return -1;
169 werner 36 }
170 twoaday 105 nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2,
171     WM_GETTEXTLENGTH, 0, 0);
172 werner 36 if (nbytes > 0) {
173     p = new char[nbytes+1];
174     if (!p)
175     BUG (NULL);
176     GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);
177     fwrite (p, 1, nbytes, fp);
178 twoaday 105
179 werner 36 }
180     fclose (fp);
181     free_if_alloc (p);
182 twoaday 246 msg_box (dlg, _("Data successfully written to file."),
183     _("Clipboard"), MB_OK);
184 werner 36 }
185     return 0;
186     }
187    
188    
189     /* Dialog box procedure for the clipboard editor. */
190     BOOL CALLBACK
191     clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
192     {
193 twoaday 246 HMENU menu;
194 twoaday 229 char *head=NULL, *foot=NULL;
195 twoaday 236 gpgme_data_t txt;
196 twoaday 229
197 werner 36 switch (msg) {
198 twoaday 246 case WM_INITDIALOG:
199 twoaday 229 /* If there is a param, we expect a signature and initialize
200     the header and footer variable accordingly. */
201     if (lparam)
202     verify_get_clip_info ((gpgme_signature_t)lparam, &head, &foot);
203     load_clipboard (dlg, head, foot);
204     free_if_alloc (head);
205     free_if_alloc (foot);
206 twoaday 246
207     menu = LoadMenu (glob_hinst, (LPCTSTR)IDR_WINPT_CLIPEDIT);
208 twoaday 328
209     set_menu_text_bypos (menu, 0, _("&File"));
210     set_menu_text_bypos (menu, 1, _("&Edit"));
211    
212     set_menu_text (menu, ID_CLIPEDIT_COPY, _("&Copy"));
213 twoaday 246 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 twoaday 328 set_menu_text (menu, ID_CLIPEDIT_QUIT, _("&Exit"));
221 twoaday 246 SetMenu (dlg, menu);
222     SetWindowText (dlg, _("Clipboard Editor"));
223     SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));
224 werner 36 center_window (dlg, NULL);
225     SetForegroundWindow (dlg);
226     return TRUE;
227    
228     case WM_COMMAND:
229     switch (LOWORD (wparam)) {
230 twoaday 201 case IDCANCEL:
231     EndDialog (dlg, FALSE);
232     return TRUE;
233    
234 twoaday 246 case IDOK:
235     case ID_CLIPEDIT_QUIT:
236 werner 36 EndDialog (dlg, TRUE);
237     return TRUE;
238    
239 twoaday 246 case ID_CLIPEDIT_QUOTE:
240     SendMessage (dlg, WM_COMMAND, ID_CLIPEDIT_COPY, 0);
241 twoaday 236 if (gpg_data_new_from_clipboard (&txt, 0))
242     return TRUE;
243     gpg_data_mail_quote (&txt);
244 twoaday 328 gpg_data_release_to_clipboard (txt, 0);
245 twoaday 236 load_clipboard (dlg, head, foot);
246     return TRUE;
247    
248 twoaday 246 case ID_CLIPEDIT_COPY:
249 werner 36 case IDC_CLIPEDIT_SEND:
250     SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);
251     SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);
252 twoaday 246 SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, -1, 0);
253 werner 36 return TRUE;
254    
255 twoaday 246 case ID_CLIPEDIT_CLEAR:
256 werner 36 if (OpenClipboard (NULL) == FALSE) {
257     msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN),
258     _("Clipboard"), MB_ERR);
259     return TRUE;
260     }
261     if (EmptyClipboard () == FALSE)
262     msg_box (dlg, winpt_strerror (WPTERR_CLIP_EMPTY),
263     _("Clipboard"), MB_ERR);
264     else
265     SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");
266     CloseClipboard ();
267     return TRUE;
268 twoaday 246
269     case ID_CLIPEDIT_PASTE:
270     load_clipboard (dlg, NULL, NULL);
271     break;
272 werner 36
273 twoaday 246 case ID_CLIPEDIT_OPEN:
274 twoaday 236 if (!load_clipboard_from_file (dlg))
275 twoaday 225 PostMessage (dlg, WM_COMMAND, MAKEWPARAM (IDC_CLIPEDIT_SEND, 0), 0);
276 werner 36 return TRUE;
277    
278 twoaday 246 case ID_CLIPEDIT_SAVE:
279 werner 36 save_clipboard_to_file (dlg);
280     return TRUE;
281 twoaday 246
282     case ID_CLIPEDIT_ENC:
283     SendMessage (dlg, WM_COMMAND, ID_CLIPEDIT_COPY, 0);
284     SendMessage (glob_hwnd, WM_COMMAND, ID_WINPT_ENCRYPT, 0);
285     load_clipboard (dlg, NULL, NULL);
286     SetForegroundWindow (dlg);
287     break;
288    
289     case ID_CLIPEDIT_DEC:
290     SendMessage (glob_hwnd, WM_COMMAND, ID_WINPT_DECRYPT_VERIFY, 0);
291     load_clipboard (dlg, NULL, NULL);
292     SetForegroundWindow (dlg);
293     break;
294 werner 36 }
295     break;
296     }
297    
298     return FALSE;
299     }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26