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

Annotation of /trunk/Src/wptFileManagerDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 328 - (hide annotations)
Fri Sep 25 16:07:38 2009 UTC (15 years, 5 months ago) by twoaday
File size: 22565 byte(s)


1 werner 36 /* wptFileMangerDlg.cpp - File Manager
2 twoaday 328 * Copyright (C) 2001-2006, 2008-2009 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     #ifdef HAVE_CONFIG_H
17     #include <config.h>
18     #endif
19    
20     #include <windows.h>
21     #include <commctrl.h>
22     #include <sys/stat.h>
23 twoaday 77 #include <stdio.h>
24 werner 36
25 werner 47 #include "resource.h"
26 werner 36 #include "wptCommonCtl.h"
27     #include "wptGPG.h"
28     #include "wptW32API.h"
29     #include "wptKeylist.h"
30     #include "wptErrors.h"
31     #include "wptContext.h" /* for passphrase_s */
32     #include "wptDlgs.h"
33     #include "wptTypes.h"
34     #include "wptNLS.h"
35     #include "wptVersion.h"
36     #include "wptFileManager.h"
37     #include "wptRegistry.h"
38 werner 47 #include "wptCrypto.h"
39 werner 36
40     #define FM_SEPARATOR_ID 10001
41    
42     #define send_cmd_id(hwnd, id) \
43 twoaday 328 PostMessage ((hwnd), WM_COMMAND, MAKEWPARAM((id), 0), 0)
44 werner 36
45     static subclass_s filelist_proc;
46    
47    
48 twoaday 219 int is_openpgp_ext (const char *name);
49    
50     /* Return 1 if the selected file in the listview has a valid GPG extension. */
51     static int
52     is_openpgp_file (listview_ctrl_t lv)
53     {
54     char name[MAX_PATH+32];
55    
56 twoaday 271 listview_get_item_text (lv, listview_get_curr_pos (lv), FM_COL_NAME,
57     name, DIM (name)-1);
58 twoaday 219 return is_openpgp_ext (name);
59     }
60    
61    
62 werner 36 /* Dialog procedure for selecting recipients for encryption. */
63     BOOL CALLBACK
64     file_encrypt_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
65     {
66 twoaday 328 static keylist_ctrl_t kl = NULL;
67 werner 36 static fm_state_t c;
68     static keylist_t list = NULL;
69     gpg_keycache_t kc;
70     gpgme_ctx_t ctx;
71 twoaday 68 int force_trust = 0;
72 werner 36
73     switch (msg) {
74     case WM_INITDIALOG:
75     c = (fm_state_t)lparam;
76     if (!c)
77 twoaday 256 BUG (0);
78 werner 36 kc = keycache_get_ctx (KEYCACHE_PUB);
79 twoaday 77 SetWindowText (dlg, _("File Encrypt"));
80     SetDlgItemText (dlg, IDC_ENCRYPT_ARMOR, _("&Text Output"));
81 twoaday 99 SetDlgItemText (dlg, IDC_ENCRYPT_ANON, _("Anonymize (throw keyid)"));
82     SetDlgItemText (dlg, IDC_ENCRYPT_SIGN, _("&Select Key for signing"));
83 twoaday 209 SetDlgItemText (dlg, IDC_ENCRYPT_OPTINF, _("Options"));
84 twoaday 99 SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
85 twoaday 77
86 twoaday 328 // TODO: support --hidden-recipient
87 twoaday 77 EnableWindow (GetDlgItem (dlg, IDC_ENCRYPT_ANON), FALSE);
88    
89 werner 36 if (c->req_signer) {
90     EnableWindow (GetDlgItem (dlg, IDC_ENCRYPT_SIGN), TRUE);
91     seclist_init (dlg, IDC_ENCRYPT_SECLIST, KEYLIST_FLAG_SHORT, &list);
92     }
93 twoaday 328 kl = keylist_load (GetDlgItem (dlg, IDC_ENCRYPT_LIST), kc, NULL,
94 twoaday 176 KEYLIST_ENCRYPT_MIN|KEYLIST_FLAG_FILE,
95     KEY_SORT_USERID);
96 werner 36 SetForegroundWindow (dlg);
97     return TRUE;
98    
99     case WM_DESTROY:
100     seclist_destroy (&list);
101 twoaday 328 if (kl) {
102     keylist_delete (kl);
103     kl = NULL;
104 werner 36 }
105 twoaday 328 balloon_msg_disable ();
106 twoaday 271 break;
107 werner 36
108     case WM_NOTIFY:
109     NMHDR *notify;
110     notify = (NMHDR *)lparam;
111 twoaday 77 if (notify && notify->code == LVN_COLUMNCLICK
112     && notify->idFrom == IDC_ENCRYPT_LIST) {
113 werner 36 NMLISTVIEW *p = (LPNMLISTVIEW) lparam;
114     int sortby = 0;
115    
116 twoaday 77 switch (p->iSubItem) {
117 werner 36 case 0: sortby = KEY_SORT_USERID; break;
118     case 1: sortby = KEY_SORT_KEYID; break;
119     case 2: sortby = KEY_SORT_LEN; break;
120     case 4: sortby = KEY_SORT_VALIDITY; break;
121     default:sortby = KEY_SORT_USERID; break;
122     }
123 twoaday 328 keylist_sort (kl, sortby);
124 werner 36 }
125 twoaday 256 break;
126 werner 36
127     case WM_COMMAND:
128     if (HIWORD (wparam) == BN_CLICKED
129     && LOWORD (wparam) == IDC_ENCRYPT_SIGN) {
130 twoaday 77 int req_signer = IsDlgButtonChecked (dlg, IDC_ENCRYPT_SIGN);
131 werner 36 EnableWindow (GetDlgItem (dlg, IDC_ENCRYPT_SECLIST),
132     req_signer? TRUE : FALSE);
133     }
134 twoaday 256 switch (LOWORD (wparam)) {
135 werner 36 case IDOK:
136     ctx = c->ctx;
137 twoaday 105 safe_free (c->recp);
138 twoaday 328 c->recp = keylist_get_recipients (kl, &force_trust, &c->n_recp);
139 werner 36 if (!c->n_recp) {
140 twoaday 328 show_balloon_msg (GetDlgItem (dlg, IDC_ENCRYPT_LIST),
141     _("Please select at least one recipient."),
142     IDI_ERROR);
143 twoaday 105 safe_free (c->recp);
144 werner 36 c->recp = NULL;
145     c->cancel = 1;
146     return TRUE;
147     }
148     if (IsDlgButtonChecked (dlg, IDC_ENCRYPT_SIGN)) {
149     gpgme_key_t key;
150    
151     if (seclist_select_key (dlg, IDC_ENCRYPT_SECLIST, &key))
152     return TRUE;
153     else
154     gpgme_signers_add (c->ctx, key);
155     }
156    
157     if (IsDlgButtonChecked (dlg, IDC_ENCRYPT_ARMOR))
158     gpgme_set_armor (ctx, 1);
159     /* XXX: implement this
160     if (IsDlgButtonChecked (dlg, IDC_ENCRYPT_ANON))
161     ;
162     */
163     c->cancel = 0;
164     EndDialog (dlg, TRUE);
165     return TRUE;
166    
167     case IDCANCEL:
168     c->cancel = 1;
169     EndDialog (dlg, FALSE);
170     return TRUE;
171     }
172     return TRUE;
173     }
174    
175     return FALSE;
176 twoaday 105 }
177 werner 36
178    
179 twoaday 105 /* Dialog box procedure for importing keys. */
180 werner 36 BOOL CALLBACK
181     file_import_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
182     {
183     static listview_ctrl_t lv = NULL;
184     static fm_state_t c;
185     static int is_revcert = 0, has_seckeys = 0;
186    
187 twoaday 105 switch (msg) {
188 werner 36 case WM_INITDIALOG:
189     c = (fm_state_s *)lparam;
190     if (!c)
191 twoaday 256 BUG (0);
192     ShowWindow (GetDlgItem (dlg, IDC_IMPORT_KEYMNGT), WS_DISABLED);
193 werner 36 implist_build (&lv, GetDlgItem (dlg, IDC_IMPORT_KEYLIST));
194 twoaday 165 implist_load (lv, c->import.is_clip? NULL: c->opaque,
195     &is_revcert, &has_seckeys);
196 werner 36 if (!listview_count_items (lv, 0)) {
197     msg_box (dlg, _("No valid OpenPGP data found."), _("Key Import"), MB_ERR);
198     c->cancel = 1;
199     EndDialog (dlg, FALSE);
200 twoaday 256 return TRUE;
201 werner 36 }
202     else {
203 twoaday 278 const char *fmt = _("%s contain(s) %d key(s).");
204     const char *name = c->import.is_clip? _("Clipboard") : _("File");
205     char *p = new char[strlen (fmt) + strlen (name) + 32 + 1];
206 werner 36 if (!p)
207 twoaday 105 BUG (NULL);
208 twoaday 278 sprintf (p, fmt, name, listview_count_items (lv, 0));
209 werner 36 SetDlgItemText (dlg, IDC_IMPORT_INFO, p);
210     free_if_alloc (p);
211     }
212 twoaday 129 SetWindowText (dlg, _("Key Import"));
213     SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
214 twoaday 188 center_window (dlg, NULL);
215 twoaday 328 SetForegroundWindow (dlg);
216 werner 36 return TRUE;
217    
218     case WM_DESTROY:
219     if (lv) {
220     listview_release (lv);
221     lv = NULL;
222     }
223     return FALSE;
224    
225     case WM_COMMAND:
226     switch (LOWORD (wparam)) {
227     case IDC_IMPORT_DOIT:
228 twoaday 328 /* Make sure the user knows the consequence if he/she imports
229     a key revocation certificate. */
230     if (is_revcert) {
231     int ret = msg_box (dlg, _("The file contains at least one revocation certificate.\n"
232     "If you contine the import, the key will be rendered useless.\n"
233     "Really proceed?"), _("Import"), MB_ICONWARNING|MB_YESNO);
234     if (ret == IDNO) {
235     c->cancel = 1;
236     EndDialog (dlg, FALSE);
237     return TRUE;
238     }
239     }
240 twoaday 165 if (has_seckeys > 0) {
241     msg_box (dlg, _("Some of the imported keys are secret keys.\n\n"
242     "The ownertrust values of these keys must be\n"
243     "set manually via the Key Properties dialog."),
244     _("Import"), MB_INFO);
245     }
246 werner 36 c->cancel = 0;
247     c->import.revcert = is_revcert? 1 : 0;
248     c->import.has_seckey = has_seckeys? 1 : 0;
249     EndDialog (dlg, TRUE);
250     return TRUE;
251    
252     case IDCANCEL:
253     c->cancel = 1;
254     EndDialog (dlg, FALSE);
255 twoaday 256 return TRUE;
256 werner 36 }
257     break;
258     }
259    
260     return FALSE;
261 twoaday 105 }
262 werner 36
263    
264 twoaday 105 /* Dialog box procedure for file signing. */
265 werner 36 BOOL CALLBACK
266 twoaday 105 file_sign_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
267 werner 36 {
268     static fm_state_t c;
269 twoaday 328 static keylist_ctrl_t kl;
270 werner 36 gpg_keycache_t kc, sec_kc;
271     gpgme_key_t key;
272     int lv_idx;
273 twoaday 271 char signer[32+1];
274 werner 36
275 twoaday 105 switch (msg) {
276 werner 36 case WM_INITDIALOG:
277     c = (fm_state_s *)lparam;
278 twoaday 256 if (!c)
279     BUG (0);
280 werner 36 SetWindowText (dlg, _("File Sign"));
281     SetDlgItemText (dlg, IDC_FILE_SIG_ARMOR, _("&Text Output") );
282     SetDlgItemText (dlg, IDC_FILE_SIG_NORMAL, _("&Normal Signature"));
283     SetDlgItemText (dlg, IDC_FILE_SIG_DETACH, _("&Detached Signature"));
284     SetDlgItemText (dlg, IDC_FILE_SIG_CLEAR, _("&Cleartext Signature"));
285 twoaday 129 SetDlgItemText (dlg, IDC_FILE_SIG_SIGINF, _("Signature mode"));
286     SetDlgItemText (dlg, IDC_FILE_SIG_OPTINF, _("Options"));
287 twoaday 105 SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
288 werner 36 CheckDlgButton (dlg, IDC_FILE_SIG_DETACH, BST_CHECKED);
289     kc = keycache_get_ctx (KEYCACHE_PUB);
290     if (!kc)
291     BUG (dlg);
292     sec_kc = keycache_get_ctx (KEYCACHE_PRV);
293     if (!sec_kc)
294 twoaday 105 BUG (dlg);
295 twoaday 328 kl = keylist_load (GetDlgItem (dlg, IDC_FILE_SIG_LIST), kc, sec_kc,
296     KEYLIST_SIGN, KEY_SORT_USERID);
297 twoaday 105 SetForegroundWindow (dlg);
298 werner 36 return TRUE;
299    
300     case WM_DESTROY:
301 twoaday 328 if (kl) {
302     keylist_delete (kl);
303     kl = NULL;
304 werner 36 }
305     return FALSE;
306    
307     case WM_COMMAND:
308 twoaday 105 switch (LOWORD (wparam)) {
309 werner 36 case IDOK:
310 twoaday 105 if (IsDlgButtonChecked (dlg, IDC_FILE_SIG_ARMOR))
311 werner 36 gpgme_set_armor (c->ctx, 1);
312 twoaday 105 if (IsDlgButtonChecked (dlg, IDC_FILE_SIG_NORMAL))
313 werner 36 c->sigmode = GPGME_SIG_MODE_NORMAL;
314 twoaday 105 else if (IsDlgButtonChecked (dlg, IDC_FILE_SIG_DETACH))
315 werner 36 c->sigmode = GPGME_SIG_MODE_DETACH;
316 twoaday 105 else if (IsDlgButtonChecked( dlg, IDC_FILE_SIG_CLEAR))
317 werner 36 c->sigmode = GPGME_SIG_MODE_CLEAR;
318     else {
319     /* default is to produce detached signatures */
320     c->sigmode = GPGME_SIG_MODE_DETACH;
321     }
322 twoaday 328 lv_idx = listview_get_selected_item (kl->lv);
323 werner 36 if (lv_idx == -1) {
324 twoaday 328 if (listview_count_items (kl->lv, 0) == 1)
325 werner 36 lv_idx = 0;
326     else {
327 twoaday 105 msg_box (dlg, _("Please select a key."), _("File Sign"), MB_ERR);
328 werner 36 return FALSE;
329     }
330     }
331 twoaday 328 listview_get_item_text (kl->lv, lv_idx, 1, signer, DIM (signer)-1);
332 twoaday 256 if (get_seckey (signer, &key))
333     BUG (NULL);
334 werner 36 gpgme_signers_clear (c->ctx);
335     gpgme_signers_add (c->ctx, key);
336     free_if_alloc (c->opaque);
337     c->opaque = m_strdup (signer); /* store for later use */
338     c->cancel = 0;
339     EndDialog (dlg, TRUE);
340     return TRUE;
341    
342     case IDCANCEL:
343     c->cancel = 1;
344     EndDialog (dlg, FALSE);
345 twoaday 256 return TRUE;
346 werner 36 }
347     break;
348     }
349    
350     return FALSE;
351 twoaday 105 }
352 werner 36
353    
354     /* Setup status bar for the main window @dlg. */
355     static HWND
356     setup_status_bar (HWND dlg)
357     {
358     HWND statbar;
359     RECT r;
360     int partpos[3];
361     int i;
362    
363     GetClientRect (dlg, &r);
364     for (i=1; i <= 3; i++)
365     partpos[i-1] = r.right/3*i;
366    
367     statbar = CreateStatusWindow (WS_CHILD | WS_VISIBLE | CCS_BOTTOM,
368     "", dlg, FM_SEPARATOR_ID);
369     ShowWindow (statbar, SW_SHOW);
370     SendMessage (statbar, SB_SETPARTS, (WPARAM)3, (LPARAM)partpos);
371     return statbar;
372     }
373    
374    
375     /* Refresh the status bar text with the selected item from @lv. */
376     static void
377     update_status_bar (HWND statbar, listview_ctrl_t lv)
378     {
379     struct stat st;
380     char buf[128];
381 twoaday 244 int i, n;
382     DWORD len = 0;
383 werner 36
384     if (!lv) { /* flush */
385 twoaday 178 SendMessage (statbar, SB_SETTEXT, 1, (LPARAM)"0 Byte");
386 twoaday 105 SendMessage (statbar, SB_SETTEXT, 0, (LPARAM)_("0 Objects marked"));
387 werner 36 return;
388     }
389     n = listview_count_items (lv, 1);
390 twoaday 271 _snprintf (buf, DIM (buf)-1, _("%d Object(s) marked"), n);
391 werner 36 SendMessage (statbar, SB_SETTEXT, 0, (LPARAM)buf);
392 twoaday 244 if (!n)
393     return;
394     for (i=0; i < listview_count_items (lv, 0); i++) {
395     if (!listview_get_item_state (lv, i))
396     continue;
397 twoaday 271 listview_get_item_text (lv, i, 1, buf, DIM (buf)-1);
398 twoaday 244 if (stat (buf, &st) == 0)
399     len += st.st_size;
400 werner 36 }
401 twoaday 244 if (!len)
402 twoaday 271 _snprintf (buf, DIM (buf)-1, "0 Byte");
403 twoaday 244 else if (len < 1024)
404 twoaday 271 _snprintf (buf, DIM (buf)-1, "%d Byte", len);
405 twoaday 244 else if (st.st_size < 1048576)
406 twoaday 271 _snprintf (buf, DIM (buf)-1, "%d KB", len/1024);
407 werner 36 else
408 twoaday 271 _snprintf (buf, DIM (buf)-1, "%d MB", len/1024/1024);
409 twoaday 244 SendMessage (statbar, SB_SETTEXT, 1, (LPARAM)buf);
410 werner 36 }
411    
412 twoaday 328 #ifndef VK_A
413     #define VK_A 65
414     #endif
415 werner 36
416 twoaday 105 /* Subclass procedure to detect common hotkeys. */
417 werner 36 static BOOL CALLBACK
418     filelist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
419     {
420     switch (msg) {
421 twoaday 256 case WM_KEYUP:
422 twoaday 328 if ((int)wparam == VK_A) {
423     if (GetAsyncKeyState (VK_CONTROL)) {
424     struct listview_ctrl_s fm_lv;
425     fm_lv.ctrl = GetDlgItem (filelist_proc.dlg, IDC_FILE_LIST);
426     listview_select_all (&fm_lv);
427     }
428     }
429 werner 36 break;
430     }
431     return CallWindowProc (filelist_proc.old, dlg, msg, wparam, lparam);
432     }
433    
434    
435 twoaday 88 /* Enable or disabled menu entries from the dialog window @hwnd.
436     @lv is used to find out the state of the selected file entry. */
437     static void
438 twoaday 214 update_ui_items (HWND hwnd, HMENU hm, bool is_popup, listview_ctrl_t lv)
439 twoaday 88 {
440 twoaday 214 int ids[2][7] = {
441     {ID_FILEMISC_SEND, ID_FILEMISC_DECRYPT, ID_FILEMISC_VERIFY,
442 twoaday 328 ID_FILEMISC_ENCRYPT, ID_FILEMISC_SIGN, ID_FILEMISC_SIGNENC},
443 twoaday 214 {ID_FILECTX_SEND, ID_FILECTX_DECRYPT, ID_FILECTX_VERIFY,
444 twoaday 328 ID_FILECTX_ENCRYPT, ID_FILECTX_SIGN, ID_FILECTX_SIGNENC}
445 twoaday 214 };
446 twoaday 328 enum id_type_t { SEND, DECRYPT, VERIFY, ENCR, SIGN, SIGENC };
447 twoaday 214 int pos, idx = is_popup? 1: 0;
448 twoaday 88
449 twoaday 214 pos = listview_get_curr_pos (lv);
450     if (fm_check_file_type (lv, pos, FM_DECRYPT))
451     set_menu_state (hm, ids[idx][SEND], MF_ENABLED);
452 twoaday 88
453     if (fm_check_file_type (lv, pos, FM_ENCRYPT)) {
454 twoaday 214 set_menu_state (hm, ids[idx][DECRYPT], MF_GRAYED|MF_DISABLED);
455     set_menu_state (hm, ids[idx][VERIFY], MF_GRAYED|MF_DISABLED);
456 twoaday 256 set_menu_state (hm, ids[idx][ENCR], MF_ENABLED);
457     set_menu_state (hm, ids[idx][SIGN], MF_ENABLED);
458     set_menu_state (hm, ids[idx][SIGENC], MF_ENABLED);
459 twoaday 88 }
460     if (fm_check_file_type (lv, pos, FM_DECRYPT)) {
461 twoaday 214 set_menu_state (hm, ids[idx][ENCR], MF_GRAYED|MF_DISABLED);
462     set_menu_state (hm, ids[idx][SIGN], MF_GRAYED|MF_DISABLED);
463     set_menu_state (hm, ids[idx][SIGENC], MF_GRAYED|MF_DISABLED);
464 twoaday 256 set_menu_state (hm, ids[idx][DECRYPT], MF_ENABLED);
465 twoaday 88 }
466     if (fm_check_file_type (lv, pos, FM_VERIFY)) {
467 twoaday 328 set_menu_state (hm, ids[idx][ENCR], MF_GRAYED|MF_DISABLED);
468 twoaday 214 set_menu_state (hm, ids[idx][VERIFY], MF_ENABLED);
469     set_menu_state (hm, ids[idx][SIGN], MF_GRAYED|MF_DISABLED);
470     set_menu_state (hm, ids[idx][SIGENC], MF_GRAYED|MF_DISABLED);
471 twoaday 88 }
472 twoaday 214
473     /* disable all operation which need a secret key. */
474     if (!secret_key_available ()) {
475     set_menu_state (hm, ids[idx][DECRYPT], MF_GRAYED|MF_DISABLED);
476     set_menu_state (hm, ids[idx][SIGN], MF_GRAYED|MF_DISABLED);
477     set_menu_state (hm, ids[idx][SIGENC], MF_GRAYED|MF_DISABLED);
478     }
479 twoaday 88 }
480    
481    
482 twoaday 105 /* Dialog box procedure for the File Manager. */
483 werner 36 BOOL CALLBACK
484     file_manager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
485     {
486 twoaday 244 static fm_info_t fm = NULL;
487 twoaday 85 static int always_ontop = 0;
488 twoaday 271 char sel_fname[MAX_PATH+1];
489 werner 36 HWND fl;
490    
491     switch (msg) {
492     case WM_INITDIALOG:
493 twoaday 85 always_ontop = get_reg_winpt_flag ("AlwaysOnTop");
494     if (always_ontop == -1)
495     always_ontop = 0;
496     SetWindowText (dlg, _("File Manager (use drag & drop to add files)"));
497 twoaday 244 fm_build (&fm, GetDlgItem (dlg, IDC_FILE_LIST));
498     fm->menu = LoadMenu (glob_hinst, (LPCSTR)IDR_WINPT_FILEMISC);
499     set_menu_text_bypos (fm->menu, 0, _("File"));
500     set_menu_text_bypos (fm->menu, 1, _("Edit"));
501     set_menu_text_bypos (fm->menu, 2, _("View"));
502     set_menu_text (fm->menu, ID_FILEMISC_OPEN, _("&Open...") );
503 twoaday 328 set_menu_text (fm->menu, ID_FILEMISC_ENCRYPT, _("&Encrypt...") );
504     set_menu_text (fm->menu, ID_FILEMISC_DECRYPT, _("&Decrypt...") );
505     set_menu_text (fm->menu, ID_FILEMISC_SIGN, _("&Sign..."));
506     set_menu_text (fm->menu, ID_FILEMISC_SIGNENC, _("Sign && Encrypt..."));
507     set_menu_text (fm->menu, ID_FILEMISC_VERIFY, _("&Verify..."));
508     set_menu_text (fm->menu, ID_FILEMISC_SYMENC, _("S&ymmetric..."));
509     set_menu_text (fm->menu, ID_FILEMISC_IMPORT, _("&Import...") );
510     set_menu_text (fm->menu, ID_FILEMISC_EXPORT, _("E&xport...") );
511 twoaday 244 set_menu_text (fm->menu, ID_FILEMISC_QUIT, _("Exit"));
512     set_menu_text (fm->menu, ID_FILEMISC_CLEAR, _("&Reset") );
513     set_menu_text (fm->menu, ID_FILEMISC_ONTOP, _("Always on Top"));
514     set_menu_text (fm->menu, ID_FILEMISC_SELALL, _("&Select All"));
515 twoaday 328 set_menu_text (fm->menu, ID_FILEMISC_PREFS, _("&Preferences..."));
516     set_menu_text (fm->menu, ID_FILEMISC_LIST, _("&List Packets..."));
517 werner 36
518     fl = GetDlgItem (dlg, IDC_FILE_LIST);
519     filelist_proc.dlg = dlg;
520     filelist_proc.current = (WNDPROC)filelist_subclass_proc;
521     filelist_proc.old = (WNDPROC)GetWindowLong (fl, GWL_WNDPROC);
522     if (filelist_proc.old) {
523     if (!SetWindowLong (fl, GWL_WNDPROC, (LONG)filelist_proc.current)) {
524 twoaday 178 msg_box (dlg, "Could not set filelist window procedure.",
525 twoaday 105 _("File Manager"), MB_ERR);
526 werner 36 BUG (NULL);
527     }
528     }
529 twoaday 262 SendMessage (dlg, WM_SETICON, (WPARAM)ICON_SMALL,
530     (LPARAM)LoadIcon (glob_hinst, (LPCTSTR)IDI_WINPT));
531 twoaday 244 SetMenu (dlg, fm->menu);
532 twoaday 85 if (!always_ontop)
533 twoaday 244 set_menu_state (fm->menu, ID_FILEMISC_ONTOP, MFS_UNCHECKED);
534 twoaday 197 else
535     center_window2 (dlg, NULL, HWND_TOPMOST);
536 werner 36 center_window (dlg, NULL);
537     SetForegroundWindow (dlg);
538 twoaday 244 fm->statbar = setup_status_bar (dlg);
539     filelist_proc.opaque = (void*)fm->statbar;
540 werner 36 return TRUE;
541    
542     case WM_DESTROY:
543 twoaday 244 if (fm) {
544     fm_delete (fm);
545     fm = NULL;
546 werner 36 }
547 twoaday 85 set_reg_winpt_flag ("AlwaysOnTop", always_ontop);
548 werner 36 return FALSE;
549    
550     case WM_DROPFILES:
551 twoaday 244 fm_add_dropped_files (fm, (HDROP)wparam);
552 werner 36 return TRUE;
553    
554     case WM_NOTIFY:
555     NMHDR *notify;
556     int pos;
557 twoaday 244 HMENU hm;
558 werner 36
559     notify = (NMHDR *)lparam;
560 twoaday 244 if (notify && notify->code == LVN_COLUMNCLICK
561     && notify->idFrom == IDC_FILE_LIST) {
562     NMLISTVIEW *p = (LPNMLISTVIEW) lparam;
563     fm_sort (fm->lv, p->iSubItem);
564 twoaday 271 }
565 twoaday 244
566 werner 36 if (notify && notify->code == NM_CLICK &&
567     notify->idFrom == IDC_FILE_LIST)
568 twoaday 244 update_status_bar (fm->statbar, fm->lv);
569 werner 36 if (notify && notify->code == NM_RCLICK
570     && notify->idFrom == IDC_FILE_LIST) {
571     POINT p;
572     HMENU popup;
573    
574 twoaday 271 /* If the selected file does not exist any longer,
575     delete the entry and supress the popup. */
576     pos = listview_get_curr_pos (fm->lv);
577     listview_get_item_text (fm->lv, pos, FM_COL_NAME,
578     sel_fname, DIM (sel_fname)-1);
579     if (file_exist_check (sel_fname) != 0) {
580     listview_del_item (fm->lv, pos);
581     break;
582     }
583    
584 werner 36 GetCursorPos (&p);
585     hm = LoadMenu (glob_hinst, MAKEINTRESOURCE (IDR_WINPT_FILEMISC_CTX));
586     popup = GetSubMenu (hm, 0);
587     set_menu_text (popup, ID_FILECTX_ENCRYPT, _("Encrypt"));
588     set_menu_text (popup, ID_FILECTX_DECRYPT, _("Decrypt"));
589     set_menu_text (popup, ID_FILECTX_SIGN, _("Sign"));
590     set_menu_text (popup, ID_FILECTX_SIGNENC, _("Sign && Encrypt"));
591     set_menu_text (popup, ID_FILECTX_VERIFY, _("Verify"));
592     set_menu_text (popup, ID_FILECTX_SEND, _("Send as Mail"));
593 twoaday 88 set_menu_text (popup, ID_FILECTX_LIST, _("List Packets"));
594 twoaday 244 if (!is_openpgp_file (fm->lv))
595 twoaday 219 set_menu_state (popup, ID_FILECTX_LIST, MF_GRAYED|MF_DISABLED);
596 twoaday 244 update_ui_items (dlg, popup, true, fm->lv);
597 twoaday 88 TrackPopupMenu (popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL);
598 werner 36 DestroyMenu (popup);
599     DestroyMenu (hm);
600     }
601     if (notify && notify->code == NM_CLICK
602     && notify->idFrom == IDC_FILE_LIST) {
603     hm = GetMenu (dlg);
604 twoaday 244 pos = listview_get_curr_pos (fm->lv);
605     if (!fm_check_file_type (fm->lv, pos, FM_DECRYPT))
606 werner 36 set_menu_state (hm, ID_FILEMISC_SEND, MF_GRAYED|MF_DISABLED);
607     else
608     set_menu_state (hm, ID_FILEMISC_SEND, MF_ENABLED);
609     }
610 twoaday 88 if (notify && notify->code == LVN_ITEMCHANGED &&
611 twoaday 244 ((LPNMLISTVIEW)lparam)->uNewState) { /* item selected? */
612     update_ui_items (dlg, GetMenu (dlg), false, fm->lv);
613     update_status_bar (fm->statbar, fm->lv);
614     }
615 werner 36 return TRUE;
616    
617     case WM_COMMAND:
618 twoaday 204 switch (LOWORD (wparam)) {
619 twoaday 271 case IDCANCEL:
620 werner 36 case ID_FILEMISC_QUIT:
621     EndDialog (dlg, TRUE);
622     return TRUE;
623    
624     case ID_FILEMISC_SELALL:
625 twoaday 244 listview_select_all (fm->lv);
626 werner 36 break;
627    
628     case ID_FILEMISC_ONTOP:
629     always_ontop ^= 1;
630 twoaday 244 set_menu_state (fm->menu, ID_FILEMISC_ONTOP,
631 werner 36 always_ontop == 0? MFS_UNCHECKED : MFS_CHECKED);
632 twoaday 105 center_window2 (dlg, NULL,
633     always_ontop == 0? HWND_NOTOPMOST : HWND_TOPMOST);
634 werner 36 break;
635    
636     case ID_FILEMISC_SEND:
637 twoaday 244 fm_send_file (fm->lv);
638 werner 36 break;
639    
640     case ID_FILEMISC_PREFS:
641     DialogBoxParam (glob_hinst, (LPCTSTR)IDD_FILE_PREFS, dlg,
642 twoaday 65 file_preferences_dlg_proc, 0);
643 werner 36 break;
644    
645     case ID_FILEMISC_LIST:
646     case ID_FILEMISC_ENCRYPT:
647     case ID_FILEMISC_SYMENC:
648     case ID_FILEMISC_DECRYPT:
649     case ID_FILEMISC_SIGN:
650     case ID_FILEMISC_SIGNENC:
651     case ID_FILEMISC_VERIFY:
652 twoaday 244 fm_parse_files (fm->lv, dlg, LOWORD (wparam));
653 werner 36 SetForegroundWindow (dlg);
654     return TRUE;
655 twoaday 328
656 werner 36 case ID_FILEMISC_CLEAR:
657 twoaday 244 fm_reset (fm);
658     update_status_bar (fm->statbar, NULL);
659 werner 36 return TRUE;
660    
661     case ID_FILEMISC_OPEN:
662 twoaday 244 fm_add_opened_files (fm, dlg);
663 werner 36 return TRUE;
664    
665     /* context menu entries */
666 twoaday 328 case ID_FILECTX_ENCRYPT: send_cmd_id (dlg, ID_FILEMISC_ENCRYPT);break;
667 twoaday 105 case ID_FILECTX_DECRYPT: send_cmd_id (dlg, ID_FILEMISC_DECRYPT);break;
668     case ID_FILECTX_SIGN: send_cmd_id (dlg, ID_FILEMISC_SIGN); break;
669     case ID_FILECTX_SIGNENC: send_cmd_id (dlg, ID_FILEMISC_SIGNENC);break;
670     case ID_FILECTX_VERIFY: send_cmd_id (dlg, ID_FILEMISC_VERIFY); break;
671     case ID_FILECTX_LIST: send_cmd_id (dlg, ID_FILEMISC_LIST); break;
672     case ID_FILECTX_SEND: send_cmd_id (dlg, ID_FILEMISC_SEND); break;
673 werner 36 }
674     break;
675     }
676    
677     return FALSE;
678 twoaday 105 }
679 werner 36
680    
681 twoaday 105 /* Dialog box procedure for the FM preferences. */
682 werner 36 BOOL CALLBACK
683     file_preferences_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
684     {
685     switch (msg) {
686     case WM_INITDIALOG:
687 twoaday 105 CheckDlgButton (dlg, IDC_FPREFS_PROGRESS,
688     reg_prefs.fm.progress? BST_CHECKED : BST_UNCHECKED);
689 werner 36 SetForegroundWindow (dlg);
690     center_window (dlg, NULL);
691     break;
692    
693     case WM_COMMAND:
694     switch (LOWORD (wparam)) {
695     case IDOK:
696     reg_prefs.fm.progress = IsDlgButtonChecked (dlg, IDC_FPREFS_PROGRESS)? 1 : 0;
697     set_reg_winpt_prefs (&reg_prefs);
698     EndDialog (dlg, TRUE);
699     break;
700    
701     case IDCANCEL:
702     EndDialog (dlg, FALSE);
703     break;
704     }
705     break;
706     }
707    
708     return FALSE;
709 twoaday 105 }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26