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

Annotation of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26