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

Contents of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 47 - (show annotations)
Mon Oct 31 14:04:59 2005 UTC (19 years, 4 months ago) by werner
File size: 6569 byte(s)
Minor changes; compiles now but gettext is still missing.

1 /* wptClipEditDlg.cpp - Clipboard Editor dialog
2 * Copyright (C) 2000-2005 Timo Schulz
3 *
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
21 #ifdef HAVE_CONFIG_H
22 #include <config.h>
23 #endif
24
25 #include <windows.h>
26 #include <windows.h>
27 #include <stdio.h>
28
29 #include "wptTypes.h"
30 #include "wptW32API.h"
31 #include "wptVersion.h"
32 #include "wptErrors.h"
33 #include "wptGPG.h"
34 #include "wptNLS.h"
35 #include "resource.h"
36
37
38 /* Load the clipboard contents into the text field in @dlg.
39 Return value: 0 on success. */
40 static int
41 load_clipboard (HWND dlg)
42 {
43 HANDLE clipmem;
44 char *cliptext;
45 char *p;
46
47 CloseClipboard (); /* make sure it is closed. */
48 if (OpenClipboard (NULL) == FALSE) {
49 msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN), _("Clipboard"), MB_ERR);
50 return -1;
51 }
52 clipmem = GetClipboardData (CF_TEXT);
53 if (clipmem == NULL) {
54 CloseClipboard ();
55 return -1;
56 }
57
58 cliptext = (char *) GlobalLock (clipmem);
59 if (cliptext == NULL || !strlen (cliptext)) {
60 CloseClipboard ();
61 return -1;
62 }
63
64 p = new char [strlen (cliptext)+2];
65 if (!p)
66 BUG (0);
67 strcpy (p, cliptext);
68
69 GlobalUnlock (clipmem);
70 CloseClipboard ();
71 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
72 free_if_alloc (p);
73
74 return 0;
75 }
76
77
78 /* Load the clipboard from the selected file. */
79 static int
80 load_clipboard_from_file (HWND dlg)
81 {
82 OPENFILENAME open;
83 FILE *fp;
84 char *p;
85 char file[300] = "";
86 DWORD size;
87 int id;
88
89 memset (&open, 0, sizeof (open));
90 open.lStructSize = sizeof (OPENFILENAME);
91 open.hInstance = glob_hinst;
92 open.lpstrTitle = _("File Open");
93 open.lpstrFilter = (char *)_("All Files (*.*)\0*.*\0\0");
94 open.hwndOwner = dlg;
95 open.lpstrFile = file;
96 open.nMaxFile = sizeof (file)-1;
97 open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
98
99 if (GetOpenFileName (&open)) {
100 if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {
101 id = msg_box (dlg, _("The file you want to add is very large.\n"
102 "Still proceed?"), _("Clipboard"), MB_INFO|MB_YESNO);
103 if (id == IDNO)
104 return -1;
105 }
106 fp = fopen (file, "rb");
107 if (!fp) {
108 msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN), _("Clipboard"), MB_ERR);
109 return FALSE;
110 }
111 p = new char[size+1];
112 if (!p)
113 BUG (0);
114 fread (p, 1, size, fp);
115 p[size] = '\0';
116 fclose (fp);
117 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
118 free_if_alloc (p);
119 }
120 return 0;
121 }
122
123
124 /* Save the contents of the clipboard to the selected file. */
125 static int
126 save_clipboard_to_file (HWND dlg)
127 {
128 OPENFILENAME save;
129 FILE *fp;
130 char *p;
131 char file[300] = "";
132 DWORD nbytes;
133 int id;
134
135 memset (&save, 0, sizeof (save));
136 save.lStructSize = sizeof (OPENFILENAME);
137 save.hInstance = glob_hinst;
138 save.lpstrTitle = _("File Save");
139 save.lpstrFile = (char *)_("All Files (*.*)\0*.*\0\0");
140 save.hwndOwner = dlg;
141 save.lpstrFile = file;
142 save.nMaxFile = sizeof (file) - 1;
143 save.Flags = OFN_OVERWRITEPROMPT;
144
145 if( GetSaveFileName( &save ) ) {
146 if( file_exist_check( file ) == 0 ) {
147 id = log_box (_("Clipboard"), MB_YESNO,
148 _("\"%s\" already exists.\n"
149 "Replace existing file?"), file);
150 if( id == IDNO )
151 return FALSE;
152 }
153 fp = fopen (file, "wb");
154 if (!fp) {
155 msg_box (dlg, winpt_strerror (WPTERR_FILE_CREAT), _("Clipboard"), MB_ERR);
156 return FALSE;
157 }
158 /* XXX: there is a NUL-byte at the end. */
159 nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_GETTEXTLENGTH, 0, 0);
160 if (nbytes > 0) {
161 p = new char[nbytes+1];
162 if (!p)
163 BUG (NULL);
164 GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);
165 fwrite (p, 1, nbytes, fp);
166 }
167 fclose (fp);
168 free_if_alloc (p);
169 }
170 return 0;
171 }
172
173
174 /* Dialog box procedure for the clipboard editor. */
175 BOOL CALLBACK
176 clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
177 {
178 switch (msg) {
179 case WM_INITDIALOG:
180 SetWindowText (dlg, _("Clipboard Editor"));
181 SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));
182 SetDlgItemText (dlg, IDC_CLIPEDIT_CLEAR, _("Clea&r"));
183 SetDlgItemText (dlg, IDC_CLIPEDIT_LOAD, _("&Load"));
184 SetDlgItemText (dlg, IDC_CLIPEDIT_SAVE, _("&Save"));
185
186 load_clipboard (dlg);
187 center_window (dlg, NULL);
188 SetForegroundWindow (dlg);
189 return TRUE;
190
191 case WM_SYSCOMMAND:
192 if (LOWORD (wparam) == SC_CLOSE)
193 EndDialog (dlg, TRUE);
194 return TRUE;
195
196 case WM_COMMAND:
197 switch (LOWORD (wparam)) {
198 case IDOK:
199 EndDialog (dlg, TRUE);
200 return TRUE;
201
202 case IDC_CLIPEDIT_SEND:
203 if (IsDlgButtonChecked (dlg, IDC_CLIPEDIT_QUOTE)) {
204 gpgme_data_t txt;
205 gpg_data_new_from_clipboard (&txt, 0);
206 gpg_data_mail_quote (&txt);
207 gpg_data_release_and_set_clipboard (txt, 0);
208 SendMessage (dlg, WM_INITDIALOG, 0, 0);
209 return TRUE;
210 }
211 SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);
212 SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);
213 return TRUE;
214
215 case IDC_CLIPEDIT_CLEAR:
216 if (OpenClipboard (NULL) == FALSE) {
217 msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN),
218 _("Clipboard"), MB_ERR);
219 return TRUE;
220 }
221 if (EmptyClipboard () == FALSE)
222 msg_box (dlg, winpt_strerror (WPTERR_CLIP_EMPTY),
223 _("Clipboard"), MB_ERR);
224 else
225 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");
226 CloseClipboard ();
227 return TRUE;
228
229 case IDC_CLIPEDIT_LOAD:
230 if (!load_clipboard_from_file (dlg)) {
231 /* XXX: for some files the code produces a crash! */
232 PostMessage (dlg, WM_COMMAND, MAKEWPARAM(IDC_CLIPEDIT_SEND, 0), NULL);
233 }
234 return TRUE;
235
236 case IDC_CLIPEDIT_SAVE:
237 save_clipboard_to_file (dlg);
238 return TRUE;
239 }
240 break;
241 }
242
243 return FALSE;
244 }
245

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26