Use GIT commit ids instead of SVN revision numbers.
[gpgol.git] / src / olflange-dlgs.cpp
1 /* olflange-dlgs.cpp - New dialogs for Outlook.
2  *      Copyright (C) 2004, 2005, 2006, 2007, 2008 g10 Code GmbH
3  *
4  * This file is part of GpgOL.
5  *
6  * GpgOL is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * GpgOL 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 Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <windows.h>
25 #include <prsht.h>
26
27 #include "mymapi.h"
28 #include "mymapitags.h"
29 #include "myexchext.h"
30 #include "common.h"
31 #include "display.h"
32 #include "olflange-def.h"
33 #include "dialogs.h"
34 #include "engine.h"
35
36 /* To avoid writing a dialog template for each language we use gettext
37    for the labels and hope that there is enough space in the dialog to
38    fit teh longest translation.  */
39 static void
40 set_labels (HWND dlg)
41 {
42   static struct { int itemid; const char *label; } labels[] = {
43     { IDC_G_GENERAL,        N_("General")},
44     { IDC_ENABLE_SMIME,     N_("Enable the S/MIME support")},
45
46     { IDC_G_SEND,           N_("Message sending")},
47     { IDC_ENCRYPT_DEFAULT,  N_("&Encrypt new messages by default")},
48     { IDC_SIGN_DEFAULT,     N_("&Sign new messages by default")},
49
50     { IDC_G_RECV,           N_("Message receiving")},
51 //     { IDC_PREVIEW_DECRYPT,  N_("Also decrypt in preview window")},
52     { IDC_PREFER_HTML,      N_("Show HTML view if possible")},
53     { IDC_BODY_AS_ATTACHMENT, N_("Present encrypted message as attachment")},
54
55     { IDC_GPG_OPTIONS,      "Debug..."},
56     { IDC_GPG_CONF,         N_("Crypto Engine")},
57     { IDC_VERSION_INFO,  "Version "VERSION},
58     { 0, NULL}
59   };
60   int i;
61
62   for (i=0; labels[i].itemid; i++)
63     SetDlgItemText (dlg, labels[i].itemid, _(labels[i].label));
64
65 }
66
67
68 /* GPGOptionsDlgProc -
69    Handles the notifications sent for managing the options property page. */
70 bool
71 GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
72 {
73   BOOL bMsgResult = FALSE;
74   static LPNMHDR pnmhdr;
75 //   static BOOL openpgp_state = FALSE;
76 //   static BOOL smime_state = FALSE;
77
78   switch (uMsg)
79     {
80     case WM_INITDIALOG:
81       {
82 //         openpgp_state = (opt.default_protocol == PROTOCOL_OPENPGP);
83 //         smime_state = (opt.default_protocol == PROTOCOL_SMIME);
84
85         EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT),
86                       !!opt.enable_smime);
87         set_labels (hDlg);
88         ShowWindow (GetDlgItem (hDlg, IDC_GPG_OPTIONS),
89                     opt.enable_debug? SW_SHOW : SW_HIDE);
90       }
91       return TRUE;
92
93     case WM_LBUTTONDOWN:
94       {
95         int x = LOWORD (lParam);
96         int y = HIWORD (lParam);
97         RECT rect_banner = {0,0,0,0};
98         RECT rect_dlg = {0,0,0,0};
99         HWND bitmap;
100
101         GetWindowRect (hDlg, &rect_dlg);
102         bitmap = GetDlgItem (hDlg, IDC_G10CODE_STRING);
103         if (bitmap)
104           GetWindowRect (bitmap, &rect_banner);
105
106         rect_banner.left   -= rect_dlg.left;
107         rect_banner.right  -= rect_dlg.left;
108         rect_banner.top    -= rect_dlg.top;
109         rect_banner.bottom -= rect_dlg.top;
110
111         if (x >= rect_banner.left && x <= rect_banner.right
112             && y >= rect_banner.top && y <= rect_banner.bottom)
113           {
114             ShellExecute (NULL, "open",
115                           "http://www.g10code.com/p-gpgol.html",
116                           NULL, NULL, SW_SHOWNORMAL);
117           }
118       }
119       break;
120
121     case WM_COMMAND:
122       if (HIWORD (wParam) == BN_CLICKED)
123         {
124           /* If dialog state has been changed, activate the confirm button. */
125           switch (wParam)
126             {
127             case IDC_ENABLE_SMIME:
128             case IDC_ENCRYPT_DEFAULT:
129             case IDC_SIGN_DEFAULT:
130 //          case IDC_OPENPGP_DEFAULT:
131 //          case IDC_SMIME_DEFAULT:
132 //          case IDC_PREVIEW_DECRYPT:
133               SendMessage (GetParent (hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
134               break;
135             }
136         }
137       if (HIWORD (wParam) == BN_CLICKED &&
138           LOWORD (wParam) == IDC_ENABLE_SMIME)
139         {
140           opt.enable_smime = !opt.enable_smime;
141           EnableWindow (GetDlgItem (hDlg, IDC_SMIME_DEFAULT),
142                         opt.enable_smime);
143         }
144 //       if (HIWORD (wParam) == BN_CLICKED &&
145 //        LOWORD (wParam) == IDC_OPENPGP_DEFAULT)
146 //      {
147 //        openpgp_state = !openpgp_state;
148 //           if (openpgp_state)
149 //             {
150 //               smime_state = 0;
151 //               SendDlgItemMessage (hDlg, IDC_SMIME_DEFAULT, BM_SETCHECK,0,0L);
152 //             }
153 //      }
154 //       if (HIWORD (wParam) == BN_CLICKED &&
155 //        LOWORD (wParam) == IDC_SMIME_DEFAULT)
156 //      {
157 //        smime_state = !smime_state;
158 //           if (smime_state)
159 //             {
160 //               openpgp_state = 0;
161 //               SendDlgItemMessage (hDlg, IDC_OPENPGP_DEFAULT, BM_SETCHECK,0,0L);
162 //             }
163 //      }
164       if (opt.enable_debug && LOWORD (wParam) == IDC_GPG_OPTIONS)
165         config_dialog_box (hDlg);
166       else if (LOWORD (wParam) == IDC_GPG_CONF)
167         engine_start_confdialog (hDlg);
168       break;
169
170     case WM_NOTIFY:
171       pnmhdr = ((LPNMHDR) lParam);
172       switch (pnmhdr->code)
173         {
174         case PSN_KILLACTIVE:
175           bMsgResult = FALSE;  /*(Allow this page to receive PSN_APPLY. */
176           break;
177
178         case PSN_SETACTIVE:
179           SendDlgItemMessage (hDlg, IDC_ENABLE_SMIME, BM_SETCHECK,
180                               !!opt.enable_smime, 0L);
181
182           SendDlgItemMessage (hDlg, IDC_ENCRYPT_DEFAULT, BM_SETCHECK,
183                               !!opt.encrypt_default, 0L);
184           SendDlgItemMessage (hDlg, IDC_SIGN_DEFAULT, BM_SETCHECK,
185                               !!opt.sign_default, 0L);
186 //           SendDlgItemMessage (hDlg, IDC_OPENPGP_DEFAULT, BM_SETCHECK,
187 //                                 openpgp_state, 0L);
188 //           SendDlgItemMessage (hDlg, IDC_SMIME_DEFAULT, BM_SETCHECK,
189 //                               smime_state, 0L);
190
191 //           SendDlgItemMessage (hDlg, IDC_PREVIEW_DECRYPT, BM_SETCHECK,
192 //                               !!opt.preview_decrypt, 0L);
193           SendDlgItemMessage (hDlg, IDC_PREFER_HTML, BM_SETCHECK,
194                                 !!opt.prefer_html, 0L);
195           SendDlgItemMessage (hDlg, IDC_BODY_AS_ATTACHMENT, BM_SETCHECK,
196                                 !!opt.body_as_attachment, 0L);
197           bMsgResult = FALSE;  /* Accepts activation. */
198           break;
199
200         case PSN_APPLY:
201           opt.enable_smime = !!SendDlgItemMessage
202             (hDlg, IDC_ENABLE_SMIME, BM_GETCHECK, 0, 0L);
203
204           opt.encrypt_default = !!SendDlgItemMessage
205             (hDlg, IDC_ENCRYPT_DEFAULT, BM_GETCHECK, 0, 0L);
206           opt.sign_default = !!SendDlgItemMessage
207             (hDlg, IDC_SIGN_DEFAULT, BM_GETCHECK, 0, 0L);
208
209 //           if (openpgp_state)
210 //             opt.default_protocol = PROTOCOL_OPENPGP;
211 //           else if (smime_state && opt.enable_smime)
212 //             opt.default_protocol = PROTOCOL_SMIME;
213 //           else
214             opt.default_protocol = PROTOCOL_UNKNOWN;
215
216 //           opt.preview_decrypt = !!SendDlgItemMessage
217 //             (hDlg, IDC_PREVIEW_DECRYPT, BM_GETCHECK, 0, 0L);
218           opt.prefer_html = !!SendDlgItemMessage
219             (hDlg, IDC_PREFER_HTML, BM_GETCHECK, 0, 0L);
220           opt.body_as_attachment = !!SendDlgItemMessage
221             (hDlg, IDC_BODY_AS_ATTACHMENT, BM_GETCHECK, 0, 0L);
222
223           /* Make sure that no new-version-installed warning will pop
224              up on the next start.  Not really needed as the warning
225              dialog set this too, but it doesn't harm to do it again. */
226           opt.git_commit = GIT_COMMIT;
227
228           write_options ();
229           bMsgResult = PSNRET_NOERROR;
230           break;
231
232         case PSN_HELP:
233           {
234             const char cpynotice[] = "Copyright (C) 2009 g10 Code GmbH";
235             const char en_notice[] =
236       "GpgOL is a plugin for Outlook to allow encryption and\n"
237       "signing of messages using the OpenPGP and S/MIME standard.\n"
238       "It uses the GnuPG software (http://www.gnupg.org). Latest\n"
239       "release information are accessible by clicking on the logo.\n"
240       "\n"
241       "GpgOL is free software; you can redistribute it and/or\n"
242       "modify it under the terms of the GNU Lesser General Public\n"
243       "License as published by the Free Software Foundation; either\n"
244       "version 2.1 of the License, or (at your option) any later version.\n"
245       "\n"
246       "GpgOL is distributed in the hope that it will be useful,\n"
247       "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
248       "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
249       "GNU Lesser General Public License for more details.\n"
250       "\n"
251       "You should have received a copy of the GNU Lesser General Public "
252       "License\n"
253       "along with this program; if not, see <http://www.gnu.org/licenses/>.";
254
255             /* TRANSLATORS: See the source for the full english text.  */
256             const char notice_key[] = N_("-#GpgOLFullHelpText#-");
257             const char *notice;
258             char header[300];
259             char *buffer;
260             size_t nbuffer;
261
262             snprintf (header, sizeof header, _("This is GpgOL version %s"),
263                       PACKAGE_VERSION);
264             notice = _(notice_key);
265             if (!strcmp (notice, notice_key))
266               notice = en_notice;
267             nbuffer = strlen (header)+strlen (cpynotice)+strlen (notice)+20;
268             buffer = (char*)xmalloc (nbuffer);
269             snprintf (buffer, nbuffer, "%s\n%s\n\n%s\n",
270                       header, cpynotice, notice);
271             MessageBox (pnmhdr->hwndFrom, buffer, "GpgOL", MB_OK);
272             xfree (buffer);
273           }
274           bMsgResult = TRUE;
275           break;
276
277         default:
278           bMsgResult = FALSE;
279           break;
280         }
281
282       SetWindowLong (hDlg, DWL_MSGRESULT, bMsgResult);
283       break;
284
285     default:
286       bMsgResult = FALSE;
287       break;
288     }
289
290   return bMsgResult;
291 }