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

Legend:
Removed from v.23  
changed lines
  Added in v.105

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26