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

Contents of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 105 - (show annotations)
Wed Nov 30 10:22:00 2005 UTC (19 years, 3 months ago) by twoaday
File size: 6682 byte(s)
Several cleanups and improved translation.


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 #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 #include "resource.h"
34
35
36 /* Load the clipboard contents into the text field in @dlg.
37 Return value: 0 on success. */
38 static int
39 load_clipboard (HWND dlg)
40 {
41 HANDLE clipmem;
42 char *cliptext;
43 char *p;
44
45 CloseClipboard (); /* make sure it is closed. */
46 if (OpenClipboard (NULL) == FALSE) {
47 msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN), _("Clipboard"), MB_ERR);
48 return -1;
49 }
50 clipmem = GetClipboardData (CF_TEXT);
51 if (clipmem == NULL) {
52 CloseClipboard ();
53 return -1;
54 }
55
56 cliptext = (char *) GlobalLock (clipmem);
57 if (cliptext == NULL || !strlen (cliptext)) {
58 CloseClipboard ();
59 return -1;
60 }
61
62 p = new char [strlen (cliptext)+2];
63 if (!p)
64 BUG (0);
65 strcpy (p, cliptext);
66
67 GlobalUnlock (clipmem);
68 CloseClipboard ();
69 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
70 free_if_alloc (p);
71
72 return 0;
73 }
74
75
76 /* Load the clipboard from the selected file. */
77 static int
78 load_clipboard_from_file (HWND dlg)
79 {
80 OPENFILENAME open;
81 FILE *fp;
82 char *p;
83 char file[300] = "";
84 DWORD size;
85 int id;
86
87 memset (&open, 0, sizeof (open));
88 open.lStructSize = sizeof (OPENFILENAME);
89 open.hInstance = glob_hinst;
90 open.lpstrTitle = _("File Open");
91 open.lpstrFilter = (char *)_("All Files (*.*)\0*.*\0\0");
92 open.hwndOwner = dlg;
93 open.lpstrFile = file;
94 open.nMaxFile = sizeof (file)-1;
95 open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
96
97 if (GetOpenFileName (&open)) {
98 if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {
99 id = msg_box (dlg, _("The file you want to add is very large.\n"
100 "Still proceed?"), _("Clipboard"),
101 MB_INFO|MB_YESNO);
102 if (id == IDNO)
103 return -1;
104 }
105 fp = fopen (file, "rb");
106 if (!fp) {
107 msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN),
108 _("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=NULL;
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),
156 _("Clipboard"), MB_ERR);
157 return FALSE;
158 }
159 /* XXX: there is a NUL-byte at the end. */
160 nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2,
161 WM_GETTEXTLENGTH, 0, 0);
162 if (nbytes > 0) {
163 p = new char[nbytes+1];
164 if (!p)
165 BUG (NULL);
166 GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);
167 fwrite (p, 1, nbytes, fp);
168
169 }
170 fclose (fp);
171 free_if_alloc (p);
172 }
173 return 0;
174 }
175
176
177 /* Dialog box procedure for the clipboard editor. */
178 BOOL CALLBACK
179 clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
180 {
181 switch (msg) {
182 case WM_INITDIALOG:
183 SetWindowText (dlg, _("Clipboard Editor"));
184 SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));
185 SetDlgItemText (dlg, IDC_CLIPEDIT_CLEAR, _("Clea&r"));
186 SetDlgItemText (dlg, IDC_CLIPEDIT_LOAD, _("&Load"));
187 SetDlgItemText (dlg, IDC_CLIPEDIT_SAVE, _("&Save"));
188 SetDlgItemText (dlg, IDC_CLIPEDIT_QUOTE, _("Add quotes"));
189 SetDlgItemText (dlg, IDOK, _("&Exit"));
190
191 load_clipboard (dlg);
192 center_window (dlg, NULL);
193 SetForegroundWindow (dlg);
194 return TRUE;
195
196 case WM_SYSCOMMAND:
197 if (LOWORD (wparam) == SC_CLOSE)
198 EndDialog (dlg, TRUE);
199 return TRUE;
200
201 case WM_COMMAND:
202 switch (LOWORD (wparam)) {
203 case IDOK:
204 EndDialog (dlg, TRUE);
205 return TRUE;
206
207 case IDC_CLIPEDIT_SEND:
208 if (IsDlgButtonChecked (dlg, IDC_CLIPEDIT_QUOTE)) {
209 gpgme_data_t txt;
210 gpg_data_new_from_clipboard (&txt, 0);
211 gpg_data_mail_quote (&txt);
212 gpg_data_release_and_set_clipboard (txt, 0);
213 SendMessage (dlg, WM_INITDIALOG, 0, 0);
214 return TRUE;
215 }
216 SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);
217 SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);
218 return TRUE;
219
220 case IDC_CLIPEDIT_CLEAR:
221 if (OpenClipboard (NULL) == FALSE) {
222 msg_box (dlg, winpt_strerror (WPTERR_CLIP_OPEN),
223 _("Clipboard"), MB_ERR);
224 return TRUE;
225 }
226 if (EmptyClipboard () == FALSE)
227 msg_box (dlg, winpt_strerror (WPTERR_CLIP_EMPTY),
228 _("Clipboard"), MB_ERR);
229 else
230 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");
231 CloseClipboard ();
232 return TRUE;
233
234 case IDC_CLIPEDIT_LOAD:
235 if (!load_clipboard_from_file (dlg)) {
236 /* XXX: for some files the code produces a crash! */
237 PostMessage (dlg, WM_COMMAND, MAKEWPARAM(IDC_CLIPEDIT_SEND, 0), 0);
238 }
239 return TRUE;
240
241 case IDC_CLIPEDIT_SAVE:
242 save_clipboard_to_file (dlg);
243 return TRUE;
244 }
245 break;
246 }
247
248 return FALSE;
249 }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26