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

Annotation of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26