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

Diff of /trunk/Src/wptClipEditDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 24 by twoaday, Sat Oct 8 10:43:08 2005 UTC revision 231 by twoaday, Tue Jun 20 09:18:44 2006 UTC
# Line 1  Line 1 
1  /* wptClipEditDlg.cpp - Clipboard Editor dialog  /* wptClipEditDlg.cpp - Clipboard Editor dialog
2   *      Copyright (C) 2000-2005 Timo Schulz   *      Copyright (C) 2000-2006 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
6   * WinPT is free software; you can redistribute it and/or modify   * 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   * 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   * the Free Software Foundation; either version 2 of the License, or
9   * (at your option) any later version.   * (at your option) any later version.
10   *   *
11   * WinPT is distributed in the hope that it will be useful,   * WinPT is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
15   *   *
16   * You should have received a copy of the GNU General Public License   * You should have received a copy of the GNU General Public License
17   * along with WinPT; if not, write to the Free Software Foundation,   * along with WinPT; if not, write to the Free Software Foundation,
18   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA   * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19   */   */
20    #ifdef HAVE_CONFIG_H
21  #include <windows.h>  #include <config.h>
22  #include <stdio.h>  #endif
   
 #include "wptTypes.h"  
 #include "wptW32API.h"  
 #include "wptVersion.h"  
 #include "wptErrors.h"  
 #include "wptGPG.h"  
 #include "wptNLS.h"  
 #include "../resource.h"  
   
   
 /* Dialog box procedure for the clipboard editor. */  
 BOOL CALLBACK  
 clip_edit_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  
 {  
     HANDLE clipmem;  
     OPENFILENAME open;  
     FILE * fp;  
     char * cliptext = NULL, * newtext = NULL,  * p;  
     char file[512] = "";  
     int nbytes, id, size;  
       
     switch ( msg )  {  
     case WM_INITDIALOG:  
         #ifndef LANG_DE  
         SetWindowText (dlg, _("Clipboard Editor"));  
         SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));  
         SetDlgItemText (dlg, IDC_CLIPEDIT_CLEAR, _("Clea&r"));  
         SetDlgItemText (dlg, IDC_CLIPEDIT_LOAD, _("&Load"));      
         SetDlgItemText (dlg, IDC_CLIPEDIT_SAVE, _("&Save"));  
         #endif  
         CloseClipboard (); /* make sure it is closed. */  
         if( OpenClipboard( NULL ) == FALSE ) {  
             msg_box( dlg, winpt_strerror( WPTERR_CLIP_OPEN ), _("Clipboard"), MB_ERR );  
             return FALSE;  
         }  
         clipmem = GetClipboardData (CF_TEXT);  
         if (clipmem == NULL) {  
             center_window (dlg, NULL);  
             SetForegroundWindow (dlg);  
             CloseClipboard ();  
             return FALSE;  
         }  
         cliptext = (char *) GlobalLock (clipmem);  
         if (cliptext == NULL || !strlen (cliptext)) {  
             CloseClipboard ();  
             return FALSE;  
         }  
         p = new char [strlen (cliptext)+2];  
         if (!p)  
             BUG (0);  
         strcpy (p, cliptext);  
         GlobalUnlock (clipmem);  
         CloseClipboard ();  
         SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);  
         free_if_alloc (p);  
         center_window (dlg, NULL);  
         SetForegroundWindow (dlg);  
         return TRUE;  
           
     case WM_SYSCOMMAND:  
         if (LOWORD (wparam) == SC_CLOSE)  
             EndDialog (dlg, TRUE);  
         return FALSE;  
           
     case WM_COMMAND:  
         switch (LOWORD (wparam)) {  
         case IDOK:                
             EndDialog (dlg, TRUE);  
             return TRUE;  
               
         case IDC_CLIPEDIT_SEND:  
             if (IsDlgButtonChecked (dlg, IDC_CLIPEDIT_QUOTE)) {  
                 gpgme_data_t txt;  
                 gpg_data_new_from_clipboard (&txt, 0);  
                 gpg_data_mail_quote (&txt);  
                 gpg_data_release_and_set_clipboard (txt, 0);  
                 SendMessage (dlg, WM_INITDIALOG, 0, 0);  
                 return TRUE;  
             }  
             SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);  
             SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);  
             return TRUE;  
               
         case IDC_CLIPEDIT_CLEAR:  
             if( OpenClipboard( NULL ) == FALSE ) {        
                 msg_box( dlg,  winpt_strerror( WPTERR_CLIP_OPEN ), _("Clipboard"), MB_ERR );  
                 return FALSE;  
             }                    
             if (EmptyClipboard () == FALSE) {  
                 CloseClipboard ();  
                 msg_box (dlg, winpt_strerror (WPTERR_CLIP_EMPTY), _("Clipboard"), MB_ERR);  
                 return FALSE;  
             }  
             CloseClipboard ();  
             SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");  
             return TRUE;  
               
         case IDC_CLIPEDIT_LOAD:  
             memset (&open, 0, sizeof (open));  
             open.lStructSize = sizeof (OPENFILENAME);  
             open.hInstance = glob_hinst;  
             open.lpstrTitle = _("File Open");  
             open.lpstrFilter = (char *)_("All Files (*.*)\0*.*\0\0");  
             open.hwndOwner = dlg;  
             open.lpstrFile = file;        
             open.nMaxFile = sizeof (file)-1;      
             open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;  
             if (GetOpenFileName (&open)) {  
                 if( (size=get_file_size( file )) > MAX_CLIPTEXT_SIZE ) {  
                     id = msg_box( dlg, _("The file you want to add is very large.\n"  
                                         "Still proceed?"), _("Clipboard"), MB_INFO|MB_YESNO );  
                     if( id == IDNO )  
                         return FALSE;  
                 }  
                 fp = fopen( file, "rb" );  
                 if (!fp) {  
                     msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN), _("Clipboard"), MB_ERR);  
                     return FALSE;  
                 }  
                 p = new char[size+1];  
                 if (!p)  
                     BUG (0);  
                 fread (p, 1, size, fp);  
                 p[size] = '\0';  
                 fclose (fp);  
                 SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);  
                 free_if_alloc (p);  
                 /* XXX: for some files the code produces a crash! */  
                 PostMessage (dlg, WM_COMMAND, MAKEWPARAM(IDC_CLIPEDIT_SEND, 0), NULL);  
                 return TRUE;  
             }  
             break;  
               
         case IDC_CLIPEDIT_SAVE:  
             memset (&open, 0, sizeof (open));  
             open.lStructSize = sizeof (OPENFILENAME);  
             open.hInstance = glob_hinst;  
             open.lpstrTitle = _("File Save");  
             open.lpstrFile = (char *)_("All Files (*.*)\0*.*\0\0");  
             open.hwndOwner = dlg;        
             open.lpstrFile = file;        
             open.nMaxFile = sizeof (file) - 1;  
             open.Flags = OFN_OVERWRITEPROMPT;  
               
             if( GetSaveFileName( &open ) ) {  
                 if( file_exist_check( file ) == 0 ) {  
                     id = log_box (_("Clipboard"), MB_YESNO,  
                                   _("\"%s\" already exists.\n"  
                                   "Replace existing file?"), file);  
                     if( id == IDNO )  
                         return FALSE;  
                 }  
                 fp = fopen( file, "wb" );  
                 if( !fp ) {  
                     msg_box( dlg, winpt_strerror( WPTERR_FILE_CREAT ), _("Clipboard"), MB_ERR );  
                     return FALSE;                
                 }  
                 nbytes = SendDlgItemMessage( dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_GETTEXTLENGTH, 0, 0 );  
                 if( nbytes > 0 ) {  
                     p = new char[nbytes+1];              
                     if( !p )  
                         BUG( NULL );  
                     GetDlgItemText( dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes );  
                     fwrite( p, 1, nbytes, fp );  
                 }            
                 fclose( fp );    
                 free_if_alloc( p );  
             }  
             break;  
         }  
         break;  
     }  
       
     return FALSE;  
 }  
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    #include "wptCommonCtl.h"
35    #include "wptContext.h"
36    #include "wptKeylist.h"
37    
38    #ifdef _MSC_VER
39    #include "winpt_header.h"
40    
41    static DWORD help_arr[] = {
42        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    #endif
49    
50    
51    /* Load the clipboard contents into the text field in @dlg.
52       Optinally @header and @footer can be used to set a header and footer.
53       Return value: 0 on success. */
54    static int
55    load_clipboard (HWND dlg,
56                    const char *header, const char *footer)
57    {
58        HANDLE clipmem;
59        char *cliptext;
60        char *p, *pp;
61    
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        CloseClipboard ();
86    
87        if (header && footer) {
88            const char *fmt = "%s\r\n%s\r\n%s";
89            int len;
90    
91            len = strlen (header) + strlen (footer) + strlen (fmt) + strlen (p);
92            pp = new char[len + 1];
93            if (!pp)
94                BUG (0);
95            _snprintf (pp, len, fmt, header, p, footer);
96            SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, pp);
97            free_if_alloc (pp);
98        }
99        else
100            SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);
101        free_if_alloc (p);
102        return 0;
103    }
104    
105    
106    /* Load the clipboard from the selected file. */
107    static int
108    load_clipboard_from_file (HWND dlg)
109    {
110        OPENFILENAME open;
111        FILE *fp;
112        char *p;
113        char file[300] = "";
114        DWORD size;
115        int id;
116    
117        memset (&open, 0, sizeof (open));
118        open.lStructSize = sizeof (OPENFILENAME);
119        open.hInstance = glob_hinst;
120        open.lpstrTitle = _("File Open");
121        open.lpstrFilter = "All Files (*.*)\0*.*\0\0";
122        open.hwndOwner = dlg;          
123        open.lpstrFile = file;                  
124        open.nMaxFile = sizeof (file)-1;                
125        open.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
126                
127        if (GetOpenFileName (&open)) {
128            if( (size=get_file_size (file)) > MAX_CLIPTEXT_SIZE) {
129                id = msg_box (dlg, _("The file you want to add is very large.\n"
130                                     "Still proceed?"), _("Clipboard"),
131                              MB_INFO|MB_YESNO);
132                if (id == IDNO)
133                    return -1;
134            }
135            fp = fopen (file, "rb");
136            if (!fp) {
137                msg_box (dlg, winpt_strerror (WPTERR_FILE_OPEN),
138                         _("Clipboard"), MB_ERR);
139                return FALSE;
140            }
141            p = new char[size+1];
142            if (!p)
143                BUG (0);
144            memset (p, 0, size+1);
145            size = fread (p, 1, size, fp);
146            fclose (fp);
147            SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p);        
148            free_if_alloc (p);
149        }
150        return 0;
151    }
152    
153    
154    /* Save the contents of the clipboard to the selected file. */
155    static int
156    save_clipboard_to_file (HWND dlg)
157    {
158        OPENFILENAME save;
159        FILE *fp;
160        char *p=NULL;
161        char file[300] = "";
162        DWORD nbytes;
163        int id;
164    
165        memset (&save, 0, sizeof (save));      
166        save.lStructSize = sizeof (OPENFILENAME);      
167        save.hInstance = glob_hinst;            
168        save.lpstrTitle = _("File Save");      
169        save.lpstrFile = (char *)"All Files (*.*)\0*.*\0\0";
170        save.hwndOwner = dlg;                  
171        save.lpstrFile = file;                  
172        save.nMaxFile = sizeof (file) - 1;
173        save.Flags = OFN_OVERWRITEPROMPT;
174    
175        if (GetSaveFileName (&save)) {
176            if (file_exist_check (file) == 0) {
177                id = log_box (_("Clipboard"), MB_YESNO,
178                              _("\"%s\" already exists.\n"
179                                "Replace existing file?"), file);      
180                if( id == IDNO )    
181                    return FALSE;
182            }
183            fp = fopen (file, "wb");
184            if (!fp) {
185                msg_box (dlg, winpt_strerror (WPTERR_FILE_CREAT),
186                         _("Clipboard"), MB_ERR);
187                return FALSE;
188            }
189            /* XXX: there is a NUL-byte at the end. */
190            nbytes = SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2,
191                                         WM_GETTEXTLENGTH, 0, 0);
192            if (nbytes > 0) {
193                p = new char[nbytes+1];
194                if (!p)
195                    BUG (NULL);
196                GetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, p, nbytes);
197                fwrite (p, 1, nbytes, fp);
198                
199            }          
200            fclose (fp);
201            free_if_alloc (p);
202        }
203        return 0;
204    }
205    
206    
207    void verify_get_clip_info (gpgme_signature_t sig,
208                               char **r_header, char **r_footer);
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        char *head=NULL, *foot=NULL;
215    
216        switch (msg)  {
217        case WM_INITDIALOG:
218            /* XXX: it would be really nice to have tempest prevention fonts. */
219            SetWindowText (dlg, _("Clipboard Editor"));
220            SetDlgItemText (dlg, IDC_CLIPEDIT_SEND, _("&Copy"));
221            SetDlgItemText (dlg, IDC_CLIPEDIT_CLEAR, _("Clea&r"));
222            SetDlgItemText (dlg, IDC_CLIPEDIT_LOAD, _("&Load"));    
223            SetDlgItemText (dlg, IDC_CLIPEDIT_SAVE, _("&Save"));
224            SetDlgItemText (dlg, IDC_CLIPEDIT_QUOTE, _("Add quotes"));
225            SetDlgItemText (dlg, IDOK, _("&Close"));
226            /* If there is a param, we expect a signature and initialize
227               the header and footer variable accordingly. */
228            if (lparam)
229                verify_get_clip_info ((gpgme_signature_t)lparam, &head, &foot);
230            load_clipboard (dlg, head, foot);
231            free_if_alloc (head);
232            free_if_alloc (foot);
233            center_window (dlg, NULL);
234            SetForegroundWindow (dlg);
235            return TRUE;
236    
237        case WM_HELP:
238            html_help_dispatch (lparam, "winpt.chm::winpt_texts.txt", help_arr);
239            break;
240            
241        case WM_COMMAND:
242            switch (LOWORD (wparam)) {
243            case IDCANCEL:
244                EndDialog (dlg, FALSE);
245                return TRUE;
246    
247            case IDOK:              
248                EndDialog (dlg, TRUE);
249                return TRUE;
250                
251            case IDC_CLIPEDIT_SEND:
252                if (IsDlgButtonChecked (dlg, IDC_CLIPEDIT_QUOTE)) {
253                    gpgme_data_t txt;
254                    gpg_data_new_from_clipboard (&txt, 0);
255                    gpg_data_mail_quote (&txt);
256                    gpg_data_release_and_set_clipboard (txt, 0);
257                    SendMessage (dlg, WM_INITDIALOG, 0, 0);
258                    return TRUE;
259                }
260                SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, EM_SETSEL, 0, -1);
261                SendDlgItemMessage (dlg, IDC_CLIPEDIT_CLIPTEXT2, WM_COPY, 0, 0);
262                return TRUE;
263                
264            case IDC_CLIPEDIT_CLEAR:
265                if (OpenClipboard (NULL) == FALSE) {
266                    msg_box (dlg,  winpt_strerror (WPTERR_CLIP_OPEN),
267                             _("Clipboard"), MB_ERR);
268                    return TRUE;
269                }                  
270                if (EmptyClipboard () == FALSE)            
271                    msg_box (dlg, winpt_strerror (WPTERR_CLIP_EMPTY),
272                             _("Clipboard"), MB_ERR);
273                else
274                    SetDlgItemText (dlg, IDC_CLIPEDIT_CLIPTEXT2, "");
275                CloseClipboard ();
276                return TRUE;
277                
278            case IDC_CLIPEDIT_LOAD:
279                if (!load_clipboard_from_file (dlg)) {
280                    CheckDlgButton (dlg, IDC_CLIPEDIT_QUOTE, BST_UNCHECKED);
281                    PostMessage (dlg, WM_COMMAND, MAKEWPARAM (IDC_CLIPEDIT_SEND, 0), 0);
282                }
283                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    }

Legend:
Removed from v.24  
changed lines
  Added in v.231

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26