-rw-r--r-- | pwmanager/pwmanager/pwm.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/pwmanager/pwmanager/pwm.cpp b/pwmanager/pwmanager/pwm.cpp index 9642a43..d9fbfc9 100644 --- a/pwmanager/pwmanager/pwm.cpp +++ b/pwmanager/pwmanager/pwm.cpp | |||
@@ -1,1393 +1,1393 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | * * | 2 | * * |
3 | * copyright (C) 2003, 2004 by Michael Buesch * | 3 | * copyright (C) 2003, 2004 by Michael Buesch * |
4 | * email: mbuesch@freenet.de * | 4 | * email: mbuesch@freenet.de * |
5 | * * | 5 | * * |
6 | * This program is free software; you can redistribute it and/or modify * | 6 | * This program is free software; you can redistribute it and/or modify * |
7 | * it under the terms of the GNU General Public License version 2 * | 7 | * it under the terms of the GNU General Public License version 2 * |
8 | * as published by the Free Software Foundation. * | 8 | * as published by the Free Software Foundation. * |
9 | * * | 9 | * * |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | 11 | ||
12 | /*************************************************************************** | 12 | /*************************************************************************** |
13 | * copyright (C) 2004 by Ulf Schenk | 13 | * copyright (C) 2004 by Ulf Schenk |
14 | * This file is originaly based on version 1.0.1 of pwmanager | 14 | * This file is originaly based on version 1.0.1 of pwmanager |
15 | * and was modified to run on embedded devices that run microkde | 15 | * and was modified to run on embedded devices that run microkde |
16 | * | 16 | * |
17 | * $Id$ | 17 | * $Id$ |
18 | **************************************************************************/ | 18 | **************************************************************************/ |
19 | 19 | ||
20 | #include <klocale.h> | 20 | #include <klocale.h> |
21 | #include <klistview.h> | 21 | #include <klistview.h> |
22 | #include <ktoolbar.h> | 22 | #include <ktoolbar.h> |
23 | #include <kfiledialog.h> | 23 | #include <kfiledialog.h> |
24 | #include <kiconloader.h> | 24 | #include <kiconloader.h> |
25 | #include <kmessagebox.h> | 25 | #include <kmessagebox.h> |
26 | 26 | ||
27 | #include <qstatusbar.h> | 27 | #include <qstatusbar.h> |
28 | 28 | ||
29 | #ifndef PWM_EMBEDDED | 29 | #ifndef PWM_EMBEDDED |
30 | #include <kmenubar.h> | 30 | #include <kmenubar.h> |
31 | #include <kstatusbar.h> | 31 | #include <kstatusbar.h> |
32 | #include <dcopclient.h> | 32 | #include <dcopclient.h> |
33 | #include "configwndimpl.h" | 33 | #include "configwndimpl.h" |
34 | #include "configuration.h" | 34 | #include "configuration.h" |
35 | #else | 35 | #else |
36 | #include <qmenubar.h> | 36 | #include <qmenubar.h> |
37 | #include <qmessagebox.h> | 37 | #include <qmessagebox.h> |
38 | #include <pwmprefs.h> | 38 | #include <pwmprefs.h> |
39 | #include <kpimglobalprefs.h> | 39 | #include <kpimglobalprefs.h> |
40 | #include <kcmconfigs/kcmpwmconfig.h> | 40 | #include <kcmconfigs/kcmpwmconfig.h> |
41 | #include <kcmconfigs/kcmkdepimconfig.h> | 41 | #include <kcmconfigs/kcmkdepimconfig.h> |
42 | #include <kcmultidialog.h> | 42 | #include <kcmultidialog.h> |
43 | #include "editcategory.h" | 43 | #include "editcategory.h" |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | 46 | ||
47 | #ifndef DESKTOP_VERSION | 47 | #ifndef DESKTOP_VERSION |
48 | #include <qpe/global.h> | 48 | #include <qpe/global.h> |
49 | #endif | 49 | #endif |
50 | 50 | ||
51 | #include <qpixmap.h> | 51 | #include <qpixmap.h> |
52 | #include <qcheckbox.h> | 52 | #include <qcheckbox.h> |
53 | #include <qspinbox.h> | 53 | #include <qspinbox.h> |
54 | #include <qlineedit.h> | 54 | #include <qlineedit.h> |
55 | #include <qfileinfo.h> | 55 | #include <qfileinfo.h> |
56 | #include <qclipboard.h> | 56 | #include <qclipboard.h> |
57 | 57 | ||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | 60 | ||
61 | #include "pwm.h" | 61 | #include "pwm.h" |
62 | #include "pwminit.h" | 62 | #include "pwminit.h" |
63 | #include "pwmprint.h" | 63 | #include "pwmprint.h" |
64 | #include "addentrywndimpl.h" | 64 | #include "addentrywndimpl.h" |
65 | #include "globalstuff.h" | 65 | #include "globalstuff.h" |
66 | #include "findwndimpl.h" | 66 | #include "findwndimpl.h" |
67 | #include "csv.h" | 67 | #include "csv.h" |
68 | 68 | ||
69 | #ifdef CONFIG_KWALLETIF | 69 | #ifdef CONFIG_KWALLETIF |
70 | # include "kwalletif.h" | 70 | # include "kwalletif.h" |
71 | # include "kwalletemu.h" | 71 | # include "kwalletemu.h" |
72 | #endif | 72 | #endif |
73 | #ifdef CONFIG_KEYCARD | 73 | #ifdef CONFIG_KEYCARD |
74 | # include "pwmkeycard.h" | 74 | # include "pwmkeycard.h" |
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | 77 | ||
78 | #define DEFAULT_SIZE (QSize(700, 400)) | 78 | #define DEFAULT_SIZE (QSize(700, 400)) |
79 | 79 | ||
80 | // Button IDs for "file" popup menu | 80 | // Button IDs for "file" popup menu |
81 | enum { | 81 | enum { |
82 | BUTTON_POPUP_FILE_NEW = 0, | 82 | BUTTON_POPUP_FILE_NEW = 0, |
83 | BUTTON_POPUP_FILE_OPEN, | 83 | BUTTON_POPUP_FILE_OPEN, |
84 | BUTTON_POPUP_FILE_CLOSE, | 84 | BUTTON_POPUP_FILE_CLOSE, |
85 | BUTTON_POPUP_FILE_SAVE, | 85 | BUTTON_POPUP_FILE_SAVE, |
86 | BUTTON_POPUP_FILE_SAVEAS, | 86 | BUTTON_POPUP_FILE_SAVEAS, |
87 | BUTTON_POPUP_FILE_EXPORT, | 87 | BUTTON_POPUP_FILE_EXPORT, |
88 | BUTTON_POPUP_FILE_IMPORT, | 88 | BUTTON_POPUP_FILE_IMPORT, |
89 | BUTTON_POPUP_FILE_PRINT, | 89 | BUTTON_POPUP_FILE_PRINT, |
90 | BUTTON_POPUP_FILE_QUIT | 90 | BUTTON_POPUP_FILE_QUIT |
91 | }; | 91 | }; |
92 | // Button IDs for "manage" popup menu | 92 | // Button IDs for "manage" popup menu |
93 | enum { | 93 | enum { |
94 | BUTTON_POPUP_MANAGE_ADD = 0, | 94 | BUTTON_POPUP_MANAGE_ADD = 0, |
95 | BUTTON_POPUP_MANAGE_EDIT, | 95 | BUTTON_POPUP_MANAGE_EDIT, |
96 | BUTTON_POPUP_MANAGE_DEL, | 96 | BUTTON_POPUP_MANAGE_DEL, |
97 | BUTTON_POPUP_MANAGE_CHANGEMP | 97 | BUTTON_POPUP_MANAGE_CHANGEMP |
98 | }; | 98 | }; |
99 | // Button IDs for chipcard popup menu | 99 | // Button IDs for chipcard popup menu |
100 | enum { | 100 | enum { |
101 | #ifdef CONFIG_KEYCARD | 101 | #ifdef CONFIG_KEYCARD |
102 | BUTTON_POPUP_CHIPCARD_GENNEW = 0, | 102 | BUTTON_POPUP_CHIPCARD_GENNEW = 0, |
103 | BUTTON_POPUP_CHIPCARD_DEL, | 103 | BUTTON_POPUP_CHIPCARD_DEL, |
104 | BUTTON_POPUP_CHIPCARD_READID, | 104 | BUTTON_POPUP_CHIPCARD_READID, |
105 | BUTTON_POPUP_CHIPCARD_SAVEBACKUP, | 105 | BUTTON_POPUP_CHIPCARD_SAVEBACKUP, |
106 | BUTTON_POPUP_CHIPCARD_REPLAYBACKUP | 106 | BUTTON_POPUP_CHIPCARD_REPLAYBACKUP |
107 | #else // CONFIG_KEYCARD | 107 | #else // CONFIG_KEYCARD |
108 | BUTTON_POPUP_CHIPCARD_NO = 0 | 108 | BUTTON_POPUP_CHIPCARD_NO = 0 |
109 | #endif // CONFIG_KEYCARD | 109 | #endif // CONFIG_KEYCARD |
110 | }; | 110 | }; |
111 | // Button IDs for "view" popup menu | 111 | // Button IDs for "view" popup menu |
112 | enum { | 112 | enum { |
113 | BUTTON_POPUP_VIEW_FIND = 0, | 113 | BUTTON_POPUP_VIEW_FIND = 0, |
114 | BUTTON_POPUP_VIEW_LOCK, | 114 | BUTTON_POPUP_VIEW_LOCK, |
115 | BUTTON_POPUP_VIEW_DEEPLOCK, | 115 | BUTTON_POPUP_VIEW_DEEPLOCK, |
116 | BUTTON_POPUP_VIEW_UNLOCK | 116 | BUTTON_POPUP_VIEW_UNLOCK |
117 | }; | 117 | }; |
118 | // Button IDs for "options" popup menu | 118 | // Button IDs for "options" popup menu |
119 | enum { | 119 | enum { |
120 | BUTTON_POPUP_OPTIONS_CONFIG = 0 | 120 | BUTTON_POPUP_OPTIONS_CONFIG = 0 |
121 | #ifdef PWM_EMBEDDED | 121 | #ifdef PWM_EMBEDDED |
122 | ,BUTTON_POPUP_OPTIONS_CATEGORY | 122 | ,BUTTON_POPUP_OPTIONS_CATEGORY |
123 | #endif | 123 | #endif |
124 | }; | 124 | }; |
125 | // Button IDs for "export" popup menu (in "file" popup menu) | 125 | // Button IDs for "export" popup menu (in "file" popup menu) |
126 | enum { | 126 | enum { |
127 | BUTTON_POPUP_EXPORT_TEXT = 0, | 127 | BUTTON_POPUP_EXPORT_TEXT = 0, |
128 | BUTTON_POPUP_EXPORT_GPASMAN, | 128 | BUTTON_POPUP_EXPORT_GPASMAN, |
129 | BUTTON_POPUP_EXPORT_CSV | 129 | BUTTON_POPUP_EXPORT_CSV |
130 | #ifdef CONFIG_KWALLETIF | 130 | #ifdef CONFIG_KWALLETIF |
131 | ,BUTTON_POPUP_EXPORT_KWALLET | 131 | ,BUTTON_POPUP_EXPORT_KWALLET |
132 | #endif | 132 | #endif |
133 | }; | 133 | }; |
134 | // Button IDs for "import" popup menu (in "file" popup menu) | 134 | // Button IDs for "import" popup menu (in "file" popup menu) |
135 | enum { | 135 | enum { |
136 | BUTTON_POPUP_IMPORT_TEXT = 0, | 136 | BUTTON_POPUP_IMPORT_TEXT = 0, |
137 | BUTTON_POPUP_IMPORT_GPASMAN, | 137 | BUTTON_POPUP_IMPORT_GPASMAN, |
138 | BUTTON_POPUP_IMPORT_CSV | 138 | BUTTON_POPUP_IMPORT_CSV |
139 | #ifdef CONFIG_KWALLETIF | 139 | #ifdef CONFIG_KWALLETIF |
140 | ,BUTTON_POPUP_IMPORT_KWALLET | 140 | ,BUTTON_POPUP_IMPORT_KWALLET |
141 | #endif | 141 | #endif |
142 | }; | 142 | }; |
143 | 143 | ||
144 | #ifdef PWM_EMBEDDED | 144 | #ifdef PWM_EMBEDDED |
145 | // Button IDs for "help" popup menu | 145 | // Button IDs for "help" popup menu |
146 | enum { | 146 | enum { |
147 | BUTTON_POPUP_HELP_LICENSE = 0, | 147 | BUTTON_POPUP_HELP_LICENSE = 0, |
148 | BUTTON_POPUP_HELP_FAQ, | 148 | BUTTON_POPUP_HELP_FAQ, |
149 | BUTTON_POPUP_HELP_ABOUT, | 149 | BUTTON_POPUP_HELP_ABOUT, |
150 | BUTTON_POPUP_HELP_SYNC, | 150 | BUTTON_POPUP_HELP_SYNC, |
151 | BUTTON_POPUP_HELP_WHATSNEW | 151 | BUTTON_POPUP_HELP_WHATSNEW |
152 | }; | 152 | }; |
153 | #endif | 153 | #endif |
154 | 154 | ||
155 | // Button IDs for toolbar | 155 | // Button IDs for toolbar |
156 | enum { | 156 | enum { |
157 | BUTTON_TOOL_NEW = 0, | 157 | BUTTON_TOOL_NEW = 0, |
158 | BUTTON_TOOL_OPEN, | 158 | BUTTON_TOOL_OPEN, |
159 | BUTTON_TOOL_SAVE, | 159 | BUTTON_TOOL_SAVE, |
160 | BUTTON_TOOL_SAVEAS, | 160 | BUTTON_TOOL_SAVEAS, |
161 | BUTTON_TOOL_PRINT, | 161 | BUTTON_TOOL_PRINT, |
162 | BUTTON_TOOL_ADD, | 162 | BUTTON_TOOL_ADD, |
163 | BUTTON_TOOL_EDIT, | 163 | BUTTON_TOOL_EDIT, |
164 | BUTTON_TOOL_DEL, | 164 | BUTTON_TOOL_DEL, |
165 | BUTTON_TOOL_FIND, | 165 | BUTTON_TOOL_FIND, |
166 | BUTTON_TOOL_LOCK, | 166 | BUTTON_TOOL_LOCK, |
167 | BUTTON_TOOL_DEEPLOCK, | 167 | BUTTON_TOOL_DEEPLOCK, |
168 | BUTTON_TOOL_UNLOCK | 168 | BUTTON_TOOL_UNLOCK |
169 | }; | 169 | }; |
170 | 170 | ||
171 | 171 | ||
172 | PwM::PwM(PwMInit *_init, PwMDoc *doc, | 172 | PwM::PwM(PwMInit *_init, PwMDoc *doc, |
173 | bool virginity, | 173 | bool virginity, |
174 | QWidget *parent, const char *name) | 174 | QWidget *parent, const char *name) |
175 | : KMainWindow(parent, "HALLO") | 175 | : KMainWindow(parent, "HALLO") |
176 | , forceQuit (false) | 176 | , forceQuit (false) |
177 | , forceMinimizeToTray (false) | 177 | , forceMinimizeToTray (false) |
178 | { | 178 | { |
179 | syncManager = 0; | 179 | syncManager = 0; |
180 | virgin = !virginity; | 180 | virgin = !virginity; |
181 | init = _init; | 181 | init = _init; |
182 | connect(doc, SIGNAL(docClosed(PwMDoc *)), | 182 | connect(doc, SIGNAL(docClosed(PwMDoc *)), |
183 | this, SLOT(docClosed(PwMDoc *))); | 183 | this, SLOT(docClosed(PwMDoc *))); |
184 | initMenubar(); | 184 | initMenubar(); |
185 | initToolbar(); | 185 | initToolbar(); |
186 | initMetrics(); | 186 | initMetrics(); |
187 | setVirgin(virginity); | 187 | setVirgin(virginity); |
188 | setFocusPolicy(QWidget::WheelFocus); | 188 | setFocusPolicy(QWidget::WheelFocus); |
189 | #ifndef PWM_EMBEDDED | 189 | #ifndef PWM_EMBEDDED |
190 | statusBar()->show(); | 190 | statusBar()->show(); |
191 | #endif | 191 | #endif |
192 | view = makeNewListView(doc); | 192 | view = makeNewListView(doc); |
193 | setCentralWidget(view); | 193 | setCentralWidget(view); |
194 | updateCaption(); | 194 | updateCaption(); |
195 | showStatMsg(i18n("Ready.")); | 195 | showStatMsg(i18n("Ready.")); |
196 | } | 196 | } |
197 | 197 | ||
198 | PwM::~PwM() | 198 | PwM::~PwM() |
199 | { | 199 | { |
200 | qDebug("PwM::~PwM() %x", this); | 200 | qDebug("PwM::~PwM() %x", this); |
201 | disconnect(curDoc(), SIGNAL(docClosed(PwMDoc *)), | 201 | disconnect(curDoc(), SIGNAL(docClosed(PwMDoc *)), |
202 | this, SLOT(docClosed(PwMDoc *))); | 202 | this, SLOT(docClosed(PwMDoc *))); |
203 | conf()->confWndMainWndSize(size()); | 203 | conf()->confWndMainWndSize(size()); |
204 | //LR closing of windows changed | 204 | //LR closing of windows changed |
205 | //needed for fastload option on PDA | 205 | //needed for fastload option on PDA |
206 | //emit closed(this); | 206 | //emit closed(this); |
207 | //qDebug("PwM::~PwM() emited closed(this)"); | 207 | //qDebug("PwM::~PwM() emited closed(this)"); |
208 | delete view; | 208 | delete view; |
209 | delete syncManager; | 209 | delete syncManager; |
210 | } | 210 | } |
211 | 211 | ||
212 | void PwM::initMenubar() | 212 | void PwM::initMenubar() |
213 | { | 213 | { |
214 | KIconLoader* picons; | 214 | KIconLoader* picons; |
215 | #ifndef PWM_EMBEDDED | 215 | #ifndef PWM_EMBEDDED |
216 | KIconLoader icons; | 216 | KIconLoader icons; |
217 | picons = &icons; | 217 | picons = &icons; |
218 | #else | 218 | #else |
219 | picons = KGlobal::iconLoader(); | 219 | picons = KGlobal::iconLoader(); |
220 | 220 | ||
221 | 221 | ||
222 | syncPopup = new KPopupMenu(this); | 222 | syncPopup = new KPopupMenu(this); |
223 | 223 | ||
224 | syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::PWMPI, PWMPrefs::instance(), syncPopup); | 224 | syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::PWMPI, PWMPrefs::instance(), syncPopup); |
225 | syncManager->setBlockSave(false); | 225 | syncManager->setBlockSave(false); |
226 | 226 | ||
227 | connect ( syncPopup, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); | 227 | connect ( syncPopup, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); |
228 | syncManager->fillSyncMenu(); | 228 | syncManager->fillSyncMenu(); |
229 | 229 | ||
230 | #endif | 230 | #endif |
231 | filePopup = new KPopupMenu(this); | 231 | filePopup = new KPopupMenu(this); |
232 | importPopup = new KPopupMenu(filePopup); | 232 | importPopup = new KPopupMenu(filePopup); |
233 | exportPopup = new KPopupMenu(filePopup); | 233 | exportPopup = new KPopupMenu(filePopup); |
234 | managePopup = new KPopupMenu(this); | 234 | managePopup = new KPopupMenu(this); |
235 | #ifdef CONFIG_KEYCARD | 235 | #ifdef CONFIG_KEYCARD |
236 | chipcardPopup = new KPopupMenu(this); | 236 | chipcardPopup = new KPopupMenu(this); |
237 | #endif // CONFIG_KEYCARD | 237 | #endif // CONFIG_KEYCARD |
238 | viewPopup = new KPopupMenu(this); | 238 | viewPopup = new KPopupMenu(this); |
239 | optionsPopup = new KPopupMenu(this); | 239 | optionsPopup = new KPopupMenu(this); |
240 | 240 | ||
241 | // "file" popup menu | 241 | // "file" popup menu |
242 | filePopup->insertItem(QIconSet(picons->loadIcon("filenew", KIcon::Small)), | 242 | filePopup->insertItem(QIconSet(picons->loadIcon("filenew", KIcon::Small)), |
243 | i18n("&New"), this, | 243 | i18n("&New"), this, |
244 | SLOT(new_slot()), 0, BUTTON_POPUP_FILE_NEW); | 244 | SLOT(new_slot()), 0, BUTTON_POPUP_FILE_NEW); |
245 | filePopup->insertItem(QIconSet(picons->loadIcon("fileopen", KIcon::Small)), | 245 | filePopup->insertItem(QIconSet(picons->loadIcon("fileopen", KIcon::Small)), |
246 | i18n("&Open"), this, | 246 | i18n("&Open"), this, |
247 | SLOT(open_slot()), 0, BUTTON_POPUP_FILE_OPEN); | 247 | SLOT(open_slot()), 0, BUTTON_POPUP_FILE_OPEN); |
248 | filePopup->insertItem(QIconSet(picons->loadIcon("fileclose", KIcon::Small)), | 248 | filePopup->insertItem(QIconSet(picons->loadIcon("fileclose", KIcon::Small)), |
249 | i18n("&Close"), this, | 249 | i18n("&Close"), this, |
250 | SLOT(close_slot()), 0, BUTTON_POPUP_FILE_CLOSE); | 250 | SLOT(close_slot()), 0, BUTTON_POPUP_FILE_CLOSE); |
251 | filePopup->insertSeparator(); | 251 | filePopup->insertSeparator(); |
252 | filePopup->insertItem(QIconSet(picons->loadIcon("filesave", KIcon::Small)), | 252 | filePopup->insertItem(QIconSet(picons->loadIcon("filesave", KIcon::Small)), |
253 | i18n("&Save"), this, | 253 | i18n("&Save"), this, |
254 | SLOT(save_slot()), 0, BUTTON_POPUP_FILE_SAVE); | 254 | SLOT(save_slot()), 0, BUTTON_POPUP_FILE_SAVE); |
255 | filePopup->insertItem(QIconSet(picons->loadIcon("filesaveas", KIcon::Small)), | 255 | filePopup->insertItem(QIconSet(picons->loadIcon("filesaveas", KIcon::Small)), |
256 | i18n("Save &as..."), | 256 | i18n("Save &as..."), |
257 | this, SLOT(saveAs_slot()), 0, | 257 | this, SLOT(saveAs_slot()), 0, |
258 | BUTTON_POPUP_FILE_SAVEAS); | 258 | BUTTON_POPUP_FILE_SAVEAS); |
259 | filePopup->insertSeparator(); | 259 | filePopup->insertSeparator(); |
260 | // "file/export" popup menu | 260 | // "file/export" popup menu |
261 | exportPopup->insertItem(i18n("&Text-file..."), this, | 261 | exportPopup->insertItem(i18n("&Text-file..."), this, |
262 | SLOT(exportToText()), 0, BUTTON_POPUP_EXPORT_TEXT); | 262 | SLOT(exportToText()), 0, BUTTON_POPUP_EXPORT_TEXT); |
263 | exportPopup->insertItem(i18n("&Gpasman / Kpasman ..."), this, | 263 | exportPopup->insertItem(i18n("&Gpasman / Kpasman ..."), this, |
264 | SLOT(exportToGpasman()), 0, BUTTON_POPUP_EXPORT_GPASMAN); | 264 | SLOT(exportToGpasman()), 0, BUTTON_POPUP_EXPORT_GPASMAN); |
265 | exportPopup->insertItem(i18n("&CSV (Comma Separated Value) ..."), this, | 265 | exportPopup->insertItem(i18n("&CSV (Comma Separated Value) ..."), this, |
266 | SLOT(exportToCsv()), 0, BUTTON_POPUP_EXPORT_CSV); | 266 | SLOT(exportToCsv()), 0, BUTTON_POPUP_EXPORT_CSV); |
267 | #ifdef CONFIG_KWALLETIF | 267 | #ifdef CONFIG_KWALLETIF |
268 | exportPopup->insertItem(i18n("&KWallet..."), this, | 268 | exportPopup->insertItem(i18n("&KWallet..."), this, |
269 | SLOT(exportToKWallet()), 0, BUTTON_POPUP_EXPORT_KWALLET); | 269 | SLOT(exportToKWallet()), 0, BUTTON_POPUP_EXPORT_KWALLET); |
270 | #endif | 270 | #endif |
271 | filePopup->insertItem(QIconSet(picons->loadIcon("fileexport", KIcon::Small)), | 271 | filePopup->insertItem(QIconSet(picons->loadIcon("fileexport", KIcon::Small)), |
272 | i18n("E&xport"), exportPopup, | 272 | i18n("E&xport"), exportPopup, |
273 | BUTTON_POPUP_FILE_EXPORT); | 273 | BUTTON_POPUP_FILE_EXPORT); |
274 | // "file/import" popup menu | 274 | // "file/import" popup menu |
275 | importPopup->insertItem(i18n("&Text-file..."), this, | 275 | importPopup->insertItem(i18n("&Text-file..."), this, |
276 | SLOT(importFromText()), 0, BUTTON_POPUP_IMPORT_TEXT); | 276 | SLOT(importFromText()), 0, BUTTON_POPUP_IMPORT_TEXT); |
277 | importPopup->insertItem(i18n("&Gpasman / Kpasman ..."), this, | 277 | importPopup->insertItem(i18n("&Gpasman / Kpasman ..."), this, |
278 | SLOT(importFromGpasman()), 0, BUTTON_POPUP_IMPORT_GPASMAN); | 278 | SLOT(importFromGpasman()), 0, BUTTON_POPUP_IMPORT_GPASMAN); |
279 | importPopup->insertItem(i18n("&CSV (Comma Separated Value) ..."), this, | 279 | importPopup->insertItem(i18n("&CSV (Comma Separated Value) ..."), this, |
280 | SLOT(importCsv()), 0, BUTTON_POPUP_IMPORT_CSV); | 280 | SLOT(importCsv()), 0, BUTTON_POPUP_IMPORT_CSV); |
281 | #ifdef CONFIG_KWALLETIF | 281 | #ifdef CONFIG_KWALLETIF |
282 | importPopup->insertItem(i18n("&KWallet..."), this, | 282 | importPopup->insertItem(i18n("&KWallet..."), this, |
283 | SLOT(importKWallet()), 0, BUTTON_POPUP_IMPORT_KWALLET); | 283 | SLOT(importKWallet()), 0, BUTTON_POPUP_IMPORT_KWALLET); |
284 | #endif | 284 | #endif |
285 | filePopup->insertItem(QIconSet(picons->loadIcon("fileimport", KIcon::Small)), | 285 | filePopup->insertItem(QIconSet(picons->loadIcon("fileimport", KIcon::Small)), |
286 | i18n("I&mport"), importPopup, | 286 | i18n("I&mport"), importPopup, |
287 | BUTTON_POPUP_FILE_IMPORT); | 287 | BUTTON_POPUP_FILE_IMPORT); |
288 | filePopup->insertSeparator(); | 288 | filePopup->insertSeparator(); |
289 | filePopup->insertItem(QIconSet(picons->loadIcon("fileprint", KIcon::Small)), | 289 | filePopup->insertItem(QIconSet(picons->loadIcon("fileprint", KIcon::Small)), |
290 | i18n("&Print..."), this, | 290 | i18n("&Print..."), this, |
291 | SLOT(print_slot()), 0, BUTTON_POPUP_FILE_PRINT); | 291 | SLOT(print_slot()), 0, BUTTON_POPUP_FILE_PRINT); |
292 | filePopup->insertSeparator(); | 292 | filePopup->insertSeparator(); |
293 | filePopup->insertItem(QIconSet(picons->loadIcon("exit", KIcon::Small)), | 293 | filePopup->insertItem(QIconSet(picons->loadIcon("exit", KIcon::Small)), |
294 | i18n("&Quit"), this, | 294 | i18n("&Quit"), this, |
295 | SLOT(quitButton_slot()), 0, BUTTON_POPUP_FILE_QUIT); | 295 | SLOT(quitButton_slot()), 0, BUTTON_POPUP_FILE_QUIT); |
296 | menuBar()->insertItem(i18n("&File"), filePopup); | 296 | menuBar()->insertItem(i18n("&File"), filePopup); |
297 | // "manage" popup menu | 297 | // "manage" popup menu |
298 | managePopup->insertItem(QIconSet(picons->loadIcon("pencil", KIcon::Small)), | 298 | managePopup->insertItem(QIconSet(picons->loadIcon("pencil", KIcon::Small)), |
299 | i18n("&Add password"), this, | 299 | i18n("&Add password"), this, |
300 | SLOT(addPwd_slot()), 0, | 300 | SLOT(addPwd_slot()), 0, |
301 | BUTTON_POPUP_MANAGE_ADD); | 301 | BUTTON_POPUP_MANAGE_ADD); |
302 | managePopup->insertItem(QIconSet(picons->loadIcon("edit", KIcon::Small)), | 302 | managePopup->insertItem(QIconSet(picons->loadIcon("edit", KIcon::Small)), |
303 | i18n("&Edit"), this, SLOT(editPwd_slot()), 0, | 303 | i18n("&Edit"), this, SLOT(editPwd_slot()), 0, |
304 | BUTTON_POPUP_MANAGE_EDIT); | 304 | BUTTON_POPUP_MANAGE_EDIT); |
305 | managePopup->insertItem(QIconSet(picons->loadIcon("editdelete", KIcon::Small)), | 305 | managePopup->insertItem(QIconSet(picons->loadIcon("editdelete", KIcon::Small)), |
306 | i18n("&Delete"), this, SLOT(deletePwd_slot()), | 306 | i18n("&Delete"), this, SLOT(deletePwd_slot()), |
307 | 0, BUTTON_POPUP_MANAGE_DEL); | 307 | 0, BUTTON_POPUP_MANAGE_DEL); |
308 | managePopup->insertSeparator(); | 308 | managePopup->insertSeparator(); |
309 | managePopup->insertItem(QIconSet(picons->loadIcon("rotate", KIcon::Small)), | 309 | managePopup->insertItem(QIconSet(picons->loadIcon("rotate", KIcon::Small)), |
310 | i18n("Change &Master Password"), this, | 310 | i18n("Change &Master Password"), this, |
311 | SLOT(changeMasterPwd_slot()), 0, | 311 | SLOT(changeMasterPwd_slot()), 0, |
312 | BUTTON_POPUP_MANAGE_CHANGEMP); | 312 | BUTTON_POPUP_MANAGE_CHANGEMP); |
313 | menuBar()->insertItem(i18n("&Manage"), managePopup); | 313 | menuBar()->insertItem(i18n("&Manage"), managePopup); |
314 | // "chipcard" popup menu | 314 | // "chipcard" popup menu |
315 | #ifdef CONFIG_KEYCARD | 315 | #ifdef CONFIG_KEYCARD |
316 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("filenew", KIcon::Small)), | 316 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("filenew", KIcon::Small)), |
317 | i18n("&Generate new key-card"), this, | 317 | i18n("&Generate new key-card"), this, |
318 | SLOT(genNewCard_slot()), 0, | 318 | SLOT(genNewCard_slot()), 0, |
319 | BUTTON_POPUP_CHIPCARD_GENNEW); | 319 | BUTTON_POPUP_CHIPCARD_GENNEW); |
320 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("editdelete", KIcon::Small)), | 320 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("editdelete", KIcon::Small)), |
321 | i18n("&Erase key-card"), this, | 321 | i18n("&Erase key-card"), this, |
322 | SLOT(eraseCard_slot()), 0, | 322 | SLOT(eraseCard_slot()), 0, |
323 | BUTTON_POPUP_CHIPCARD_DEL); | 323 | BUTTON_POPUP_CHIPCARD_DEL); |
324 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("", KIcon::Small)), | 324 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("", KIcon::Small)), |
325 | i18n("Read card-&ID"), this, | 325 | i18n("Read card-&ID"), this, |
326 | SLOT(readCardId_slot()), 0, | 326 | SLOT(readCardId_slot()), 0, |
327 | BUTTON_POPUP_CHIPCARD_READID); | 327 | BUTTON_POPUP_CHIPCARD_READID); |
328 | chipcardPopup->insertSeparator(); | 328 | chipcardPopup->insertSeparator(); |
329 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("2rightarrow", KIcon::Small)), | 329 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("2rightarrow", KIcon::Small)), |
330 | i18n("&Make card backup-image"), this, | 330 | i18n("&Make card backup-image"), this, |
331 | SLOT(makeCardBackup_slot()), 0, | 331 | SLOT(makeCardBackup_slot()), 0, |
332 | BUTTON_POPUP_CHIPCARD_SAVEBACKUP); | 332 | BUTTON_POPUP_CHIPCARD_SAVEBACKUP); |
333 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("2leftarrow", KIcon::Small)), | 333 | chipcardPopup->insertItem(QIconSet(picons->loadIcon("2leftarrow", KIcon::Small)), |
334 | i18n("&Replay card backup-image"), this, | 334 | i18n("&Replay card backup-image"), this, |
335 | SLOT(replayCardBackup_slot()), 0, | 335 | SLOT(replayCardBackup_slot()), 0, |
336 | BUTTON_POPUP_CHIPCARD_REPLAYBACKUP); | 336 | BUTTON_POPUP_CHIPCARD_REPLAYBACKUP); |
337 | menuBar()->insertItem(i18n("&Chipcard manager"), chipcardPopup); | 337 | menuBar()->insertItem(i18n("&Chipcard manager"), chipcardPopup); |
338 | #endif // CONFIG_KEYCARD | 338 | #endif // CONFIG_KEYCARD |
339 | // "view" popup menu | 339 | // "view" popup menu |
340 | viewPopup->insertItem(QIconSet(picons->loadIcon("find", KIcon::Small)), | 340 | viewPopup->insertItem(QIconSet(picons->loadIcon("find", KIcon::Small)), |
341 | i18n("&Find"), this, | 341 | i18n("&Find"), this, |
342 | SLOT(find_slot()), 0, BUTTON_POPUP_VIEW_FIND); | 342 | SLOT(find_slot()), 0, BUTTON_POPUP_VIEW_FIND); |
343 | viewPopup->insertSeparator(); | 343 | viewPopup->insertSeparator(); |
344 | viewPopup->insertItem(QIconSet(picons->loadIcon("halfencrypted", KIcon::Small)), | 344 | viewPopup->insertItem(QIconSet(picons->loadIcon("halfencrypted", KIcon::Small)), |
345 | i18n("&Lock all entries"), this, | 345 | i18n("&Lock all entries"), this, |
346 | SLOT(lockWnd_slot()), 0, | 346 | SLOT(lockWnd_slot()), 0, |
347 | BUTTON_POPUP_VIEW_LOCK); | 347 | BUTTON_POPUP_VIEW_LOCK); |
348 | viewPopup->insertItem(QIconSet(picons->loadIcon("encrypted", KIcon::Small)), | 348 | viewPopup->insertItem(QIconSet(picons->loadIcon("encrypted", KIcon::Small)), |
349 | i18n("&Deep-lock all entries"), this, | 349 | i18n("&Deep-lock all entries"), this, |
350 | SLOT(deepLockWnd_slot()), 0, | 350 | SLOT(deepLockWnd_slot()), 0, |
351 | BUTTON_POPUP_VIEW_DEEPLOCK); | 351 | BUTTON_POPUP_VIEW_DEEPLOCK); |
352 | viewPopup->insertItem(QIconSet(picons->loadIcon("decrypted", KIcon::Small)), | 352 | viewPopup->insertItem(QIconSet(picons->loadIcon("decrypted", KIcon::Small)), |
353 | i18n("&Unlock all entries"), this, | 353 | i18n("&Unlock all entries"), this, |
354 | SLOT(unlockWnd_slot()), 0, | 354 | SLOT(unlockWnd_slot()), 0, |
355 | BUTTON_POPUP_VIEW_UNLOCK); | 355 | BUTTON_POPUP_VIEW_UNLOCK); |
356 | menuBar()->insertItem(i18n("&View"), viewPopup); | 356 | menuBar()->insertItem(i18n("&View"), viewPopup); |
357 | // "options" popup menu | 357 | // "options" popup menu |
358 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), | 358 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), |
359 | i18n("&Configure..."), this, | 359 | i18n("&Configure..."), this, |
360 | SLOT(config_slot()), | 360 | SLOT(config_slot()),0, |
361 | BUTTON_POPUP_OPTIONS_CONFIG); | 361 | BUTTON_POPUP_OPTIONS_CONFIG); |
362 | menuBar()->insertItem(i18n("&Options"), optionsPopup); | 362 | menuBar()->insertItem(i18n("&Options"), optionsPopup); |
363 | // "help" popup menu | 363 | // "help" popup menu |
364 | #ifndef PWM_EMBEDDED | 364 | #ifndef PWM_EMBEDDED |
365 | helpPopup = helpMenu(QString::null, false); | 365 | helpPopup = helpMenu(QString::null, false); |
366 | #else | 366 | #else |
367 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), | 367 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), |
368 | i18n("C&ategories..."), this, | 368 | i18n("C&ategories..."), this, |
369 | SLOT(category_slot()), | 369 | SLOT(category_slot()),0, |
370 | BUTTON_POPUP_OPTIONS_CATEGORY); | 370 | BUTTON_POPUP_OPTIONS_CATEGORY); |
371 | 371 | ||
372 | 372 | ||
373 | menuBar()->insertItem(i18n("&Sync"), syncPopup); | 373 | menuBar()->insertItem(i18n("&Sync"), syncPopup); |
374 | 374 | ||
375 | 375 | ||
376 | 376 | ||
377 | 377 | ||
378 | 378 | ||
379 | helpPopup = new KPopupMenu(this); | 379 | helpPopup = new KPopupMenu(this); |
380 | 380 | ||
381 | 381 | ||
382 | helpPopup->insertItem(i18n("&License"), this, | 382 | helpPopup->insertItem(i18n("&License"), this, |
383 | SLOT(showLicense_slot()), 0, | 383 | SLOT(showLicense_slot()), 0, |
384 | BUTTON_POPUP_HELP_LICENSE); | 384 | BUTTON_POPUP_HELP_LICENSE); |
385 | 385 | ||
386 | helpPopup->insertItem(i18n("&Faq"), this, | 386 | helpPopup->insertItem(i18n("&Faq"), this, |
387 | SLOT(faq_slot()), 0, | 387 | SLOT(faq_slot()), 0, |
388 | BUTTON_POPUP_HELP_FAQ); | 388 | BUTTON_POPUP_HELP_FAQ); |
389 | 389 | ||
390 | helpPopup->insertItem(i18n("&About PwManager"), this, | 390 | helpPopup->insertItem(i18n("&About PwManager"), this, |
391 | SLOT(createAboutData_slot()), 0, | 391 | SLOT(createAboutData_slot()), 0, |
392 | BUTTON_POPUP_HELP_ABOUT); | 392 | BUTTON_POPUP_HELP_ABOUT); |
393 | 393 | ||
394 | helpPopup->insertItem(i18n("&Sync HowTo"), this, | 394 | helpPopup->insertItem(i18n("&Sync HowTo"), this, |
395 | SLOT(syncHowTo_slot()), 0, | 395 | SLOT(syncHowTo_slot()), 0, |
396 | BUTTON_POPUP_HELP_SYNC); | 396 | BUTTON_POPUP_HELP_SYNC); |
397 | 397 | ||
398 | helpPopup->insertItem(i18n("&What's New"), this, | 398 | helpPopup->insertItem(i18n("&What's New"), this, |
399 | SLOT(whatsnew_slot()), 0, | 399 | SLOT(whatsnew_slot()), 0, |
400 | BUTTON_POPUP_HELP_WHATSNEW); | 400 | BUTTON_POPUP_HELP_WHATSNEW); |
401 | 401 | ||
402 | #endif | 402 | #endif |
403 | menuBar()->insertItem(i18n("&Help"), helpPopup); | 403 | menuBar()->insertItem(i18n("&Help"), helpPopup); |
404 | 404 | ||
405 | } | 405 | } |
406 | 406 | ||
407 | void PwM::initToolbar() | 407 | void PwM::initToolbar() |
408 | { | 408 | { |
409 | KIconLoader* picons; | 409 | KIconLoader* picons; |
410 | #ifndef PWM_EMBEDDED | 410 | #ifndef PWM_EMBEDDED |
411 | KIconLoader icons; | 411 | KIconLoader icons; |
412 | picons = &icons; | 412 | picons = &icons; |
413 | #else | 413 | #else |
414 | picons = KGlobal::iconLoader(); | 414 | picons = KGlobal::iconLoader(); |
415 | #endif | 415 | #endif |
416 | 416 | ||
417 | #ifdef PWM_EMBEDDED | 417 | #ifdef PWM_EMBEDDED |
418 | if ( QApplication::desktop()->width() > 320 ) | 418 | if ( QApplication::desktop()->width() > 320 ) |
419 | #endif | 419 | #endif |
420 | { | 420 | { |
421 | toolBar()->insertButton(picons->loadIcon("filenew", KIcon::Toolbar), | 421 | toolBar()->insertButton(picons->loadIcon("filenew", KIcon::Toolbar), |
422 | BUTTON_TOOL_NEW, SIGNAL(clicked(int)), this, | 422 | BUTTON_TOOL_NEW, SIGNAL(clicked(int)), this, |
423 | SLOT(new_slot()), true, i18n("New")); | 423 | SLOT(new_slot()), true, i18n("New")); |
424 | toolBar()->insertButton(picons->loadIcon("fileopen", KIcon::Toolbar), | 424 | toolBar()->insertButton(picons->loadIcon("fileopen", KIcon::Toolbar), |
425 | BUTTON_TOOL_OPEN, SIGNAL(clicked(int)), this, | 425 | BUTTON_TOOL_OPEN, SIGNAL(clicked(int)), this, |
426 | SLOT(open_slot()), true, i18n("Open")); | 426 | SLOT(open_slot()), true, i18n("Open")); |
427 | toolBar()->insertSeparator(); | 427 | toolBar()->insertSeparator(); |
428 | } | 428 | } |
429 | toolBar()->insertButton(picons->loadIcon("filesave", KIcon::Toolbar), | 429 | toolBar()->insertButton(picons->loadIcon("filesave", KIcon::Toolbar), |
430 | BUTTON_TOOL_SAVE, SIGNAL(clicked(int)), this, | 430 | BUTTON_TOOL_SAVE, SIGNAL(clicked(int)), this, |
431 | SLOT(save_slot()), true, i18n("Save")); | 431 | SLOT(save_slot()), true, i18n("Save")); |
432 | toolBar()->insertButton(picons->loadIcon("filesaveas", KIcon::Toolbar), | 432 | toolBar()->insertButton(picons->loadIcon("filesaveas", KIcon::Toolbar), |
433 | BUTTON_TOOL_SAVEAS, SIGNAL(clicked(int)), this, | 433 | BUTTON_TOOL_SAVEAS, SIGNAL(clicked(int)), this, |
434 | SLOT(saveAs_slot()), true, i18n("Save as")); | 434 | SLOT(saveAs_slot()), true, i18n("Save as")); |
435 | toolBar()->insertButton(picons->loadIcon("fileprint", KIcon::Toolbar), | 435 | toolBar()->insertButton(picons->loadIcon("fileprint", KIcon::Toolbar), |
436 | BUTTON_TOOL_PRINT, SIGNAL(clicked(int)), this, | 436 | BUTTON_TOOL_PRINT, SIGNAL(clicked(int)), this, |
437 | SLOT(print_slot()), true, i18n("Print...")); | 437 | SLOT(print_slot()), true, i18n("Print...")); |
438 | toolBar()->insertSeparator(); | 438 | toolBar()->insertSeparator(); |
439 | toolBar()->insertButton(picons->loadIcon("pencil", KIcon::Toolbar), | 439 | toolBar()->insertButton(picons->loadIcon("pencil", KIcon::Toolbar), |
440 | BUTTON_TOOL_ADD, SIGNAL(clicked(int)), this, | 440 | BUTTON_TOOL_ADD, SIGNAL(clicked(int)), this, |
441 | SLOT(addPwd_slot()), true, | 441 | SLOT(addPwd_slot()), true, |
442 | i18n("Add password")); | 442 | i18n("Add password")); |
443 | toolBar()->insertButton(picons->loadIcon("edit", KIcon::Toolbar), | 443 | toolBar()->insertButton(picons->loadIcon("edit", KIcon::Toolbar), |
444 | BUTTON_TOOL_EDIT, SIGNAL(clicked(int)), this, | 444 | BUTTON_TOOL_EDIT, SIGNAL(clicked(int)), this, |
445 | SLOT(editPwd_slot()), true, | 445 | SLOT(editPwd_slot()), true, |
446 | i18n("Edit password")); | 446 | i18n("Edit password")); |
447 | toolBar()->insertButton(picons->loadIcon("editdelete", KIcon::Toolbar), | 447 | toolBar()->insertButton(picons->loadIcon("editdelete", KIcon::Toolbar), |
448 | BUTTON_TOOL_DEL, SIGNAL(clicked(int)), this, | 448 | BUTTON_TOOL_DEL, SIGNAL(clicked(int)), this, |
449 | SLOT(deletePwd_slot()), true, | 449 | SLOT(deletePwd_slot()), true, |
450 | i18n("Delete password")); | 450 | i18n("Delete password")); |
451 | toolBar()->insertSeparator(); | 451 | toolBar()->insertSeparator(); |
452 | toolBar()->insertButton(picons->loadIcon("find", KIcon::Toolbar), | 452 | toolBar()->insertButton(picons->loadIcon("find", KIcon::Toolbar), |
453 | BUTTON_TOOL_FIND, SIGNAL(clicked(int)), this, | 453 | BUTTON_TOOL_FIND, SIGNAL(clicked(int)), this, |
454 | SLOT(find_slot()), true, i18n("Find entry")); | 454 | SLOT(find_slot()), true, i18n("Find entry")); |
455 | toolBar()->insertSeparator(); | 455 | toolBar()->insertSeparator(); |
456 | toolBar()->insertButton(picons->loadIcon("halfencrypted", KIcon::Toolbar), | 456 | toolBar()->insertButton(picons->loadIcon("halfencrypted", KIcon::Toolbar), |
457 | BUTTON_TOOL_LOCK, SIGNAL(clicked(int)), this, | 457 | BUTTON_TOOL_LOCK, SIGNAL(clicked(int)), this, |
458 | SLOT(lockWnd_slot()), true, | 458 | SLOT(lockWnd_slot()), true, |
459 | i18n("Lock all entries")); | 459 | i18n("Lock all entries")); |
460 | toolBar()->insertButton(picons->loadIcon("encrypted", KIcon::Toolbar), | 460 | toolBar()->insertButton(picons->loadIcon("encrypted", KIcon::Toolbar), |
461 | BUTTON_TOOL_DEEPLOCK, SIGNAL(clicked(int)), this, | 461 | BUTTON_TOOL_DEEPLOCK, SIGNAL(clicked(int)), this, |
462 | SLOT(deepLockWnd_slot()), true, | 462 | SLOT(deepLockWnd_slot()), true, |
463 | i18n("Deep-Lock all entries")); | 463 | i18n("Deep-Lock all entries")); |
464 | toolBar()->insertButton(picons->loadIcon("decrypted", KIcon::Toolbar), | 464 | toolBar()->insertButton(picons->loadIcon("decrypted", KIcon::Toolbar), |
465 | BUTTON_TOOL_UNLOCK, SIGNAL(clicked(int)), this, | 465 | BUTTON_TOOL_UNLOCK, SIGNAL(clicked(int)), this, |
466 | SLOT(unlockWnd_slot()), true, | 466 | SLOT(unlockWnd_slot()), true, |
467 | i18n("Unlock all entries")); | 467 | i18n("Unlock all entries")); |
468 | } | 468 | } |
469 | 469 | ||
470 | void PwM::initMetrics() | 470 | void PwM::initMetrics() |
471 | { | 471 | { |
472 | QSize s = conf()->confWndMainWndSize(); | 472 | QSize s = conf()->confWndMainWndSize(); |
473 | if (s.isValid()) | 473 | if (s.isValid()) |
474 | resize(s); | 474 | resize(s); |
475 | else | 475 | else |
476 | resize(DEFAULT_SIZE); | 476 | resize(DEFAULT_SIZE); |
477 | } | 477 | } |
478 | 478 | ||
479 | void PwM::updateCaption() | 479 | void PwM::updateCaption() |
480 | { | 480 | { |
481 | setPlainCaption(curDoc()->getTitle() + " - " PROG_NAME " " PACKAGE_VER); | 481 | setPlainCaption(curDoc()->getTitle() + " - " PROG_NAME " " PACKAGE_VER); |
482 | } | 482 | } |
483 | 483 | ||
484 | void PwM::hideEvent(QHideEvent *) | 484 | void PwM::hideEvent(QHideEvent *) |
485 | { | 485 | { |
486 | if (isMinimized()) { | 486 | if (isMinimized()) { |
487 | if (init->tray()) { | 487 | if (init->tray()) { |
488 | forceMinimizeToTray = true; | 488 | forceMinimizeToTray = true; |
489 | close(); | 489 | close(); |
490 | } | 490 | } |
491 | int mmlock = conf()->confGlobMinimizeLock(); | 491 | int mmlock = conf()->confGlobMinimizeLock(); |
492 | switch (mmlock) { | 492 | switch (mmlock) { |
493 | case 0: // don't lock anything | 493 | case 0: // don't lock anything |
494 | break; | 494 | break; |
495 | case 1: {// normal lock | 495 | case 1: {// normal lock |
496 | curDoc()->lockAll(true); | 496 | curDoc()->lockAll(true); |
497 | break; | 497 | break; |
498 | } case 2: {// deep-lock | 498 | } case 2: {// deep-lock |
499 | curDoc()->deepLock(); | 499 | curDoc()->deepLock(); |
500 | break; | 500 | break; |
501 | } default: | 501 | } default: |
502 | WARN(); | 502 | WARN(); |
503 | } | 503 | } |
504 | } | 504 | } |
505 | } | 505 | } |
506 | 506 | ||
507 | void PwM::setVirgin(bool v) | 507 | void PwM::setVirgin(bool v) |
508 | { | 508 | { |
509 | if (virgin == v) | 509 | if (virgin == v) |
510 | return; | 510 | return; |
511 | virgin = v; | 511 | virgin = v; |
512 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_SAVE, !v); | 512 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_SAVE, !v); |
513 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_SAVEAS, !v); | 513 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_SAVEAS, !v); |
514 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_EXPORT, !v); | 514 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_EXPORT, !v); |
515 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_PRINT, !v); | 515 | filePopup->setItemEnabled(BUTTON_POPUP_FILE_PRINT, !v); |
516 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_EDIT, !v); | 516 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_EDIT, !v); |
517 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_DEL, !v); | 517 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_DEL, !v); |
518 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_CHANGEMP, !v); | 518 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_CHANGEMP, !v); |
519 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_LOCK, !v); | 519 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_LOCK, !v); |
520 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_DEEPLOCK, !v); | 520 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_DEEPLOCK, !v); |
521 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_UNLOCK, !v); | 521 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_UNLOCK, !v); |
522 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_FIND, !v); | 522 | viewPopup->setItemEnabled(BUTTON_POPUP_VIEW_FIND, !v); |
523 | toolBar()->setItemEnabled(BUTTON_TOOL_SAVE, !v); | 523 | toolBar()->setItemEnabled(BUTTON_TOOL_SAVE, !v); |
524 | toolBar()->setItemEnabled(BUTTON_TOOL_SAVEAS, !v); | 524 | toolBar()->setItemEnabled(BUTTON_TOOL_SAVEAS, !v); |
525 | toolBar()->setItemEnabled(BUTTON_TOOL_PRINT, !v); | 525 | toolBar()->setItemEnabled(BUTTON_TOOL_PRINT, !v); |
526 | toolBar()->setItemEnabled(BUTTON_TOOL_EDIT, !v); | 526 | toolBar()->setItemEnabled(BUTTON_TOOL_EDIT, !v); |
527 | toolBar()->setItemEnabled(BUTTON_TOOL_DEL, !v); | 527 | toolBar()->setItemEnabled(BUTTON_TOOL_DEL, !v); |
528 | toolBar()->setItemEnabled(BUTTON_TOOL_LOCK, !v); | 528 | toolBar()->setItemEnabled(BUTTON_TOOL_LOCK, !v); |
529 | toolBar()->setItemEnabled(BUTTON_TOOL_DEEPLOCK, !v); | 529 | toolBar()->setItemEnabled(BUTTON_TOOL_DEEPLOCK, !v); |
530 | toolBar()->setItemEnabled(BUTTON_TOOL_UNLOCK, !v); | 530 | toolBar()->setItemEnabled(BUTTON_TOOL_UNLOCK, !v); |
531 | toolBar()->setItemEnabled(BUTTON_TOOL_FIND, !v); | 531 | toolBar()->setItemEnabled(BUTTON_TOOL_FIND, !v); |
532 | } | 532 | } |
533 | 533 | ||
534 | void PwM::new_slot() | 534 | void PwM::new_slot() |
535 | { | 535 | { |
536 | init->createMainWnd(); | 536 | init->createMainWnd(); |
537 | } | 537 | } |
538 | 538 | ||
539 | //US ENH | 539 | //US ENH |
540 | void PwM::open_slot() | 540 | void PwM::open_slot() |
541 | { | 541 | { |
542 | open_slot(""); | 542 | open_slot(""); |
543 | } | 543 | } |
544 | 544 | ||
545 | void PwM::open_slot(QString fn) | 545 | void PwM::open_slot(QString fn) |
546 | { | 546 | { |
547 | openDoc(fn); | 547 | openDoc(fn); |
548 | } | 548 | } |
549 | 549 | ||
550 | PwMDoc * PwM::openDoc(QString filename, bool openDeepLocked) | 550 | PwMDoc * PwM::openDoc(QString filename, bool openDeepLocked) |
551 | { | 551 | { |
552 | if (!isVirgin()) { | 552 | if (!isVirgin()) { |
553 | // open the document in a new window. | 553 | // open the document in a new window. |
554 | PwM *newInstance = init->createMainWnd(); | 554 | PwM *newInstance = init->createMainWnd(); |
555 | PwMDoc *newDoc = newInstance->openDoc(filename, openDeepLocked); | 555 | PwMDoc *newDoc = newInstance->openDoc(filename, openDeepLocked); |
556 | if (!newDoc) { | 556 | if (!newDoc) { |
557 | newInstance->setForceQuit(true); | 557 | newInstance->setForceQuit(true); |
558 | delete_and_null(newInstance); | 558 | delete_and_null(newInstance); |
559 | } | 559 | } |
560 | return newDoc; | 560 | return newDoc; |
561 | } | 561 | } |
562 | 562 | ||
563 | if (!curDoc()->openDocUi(curDoc(), filename, openDeepLocked)) | 563 | if (!curDoc()->openDocUi(curDoc(), filename, openDeepLocked)) |
564 | return 0; | 564 | return 0; |
565 | showStatMsg(i18n("Successfully opened file.")); | 565 | showStatMsg(i18n("Successfully opened file.")); |
566 | updateCaption(); | 566 | updateCaption(); |
567 | setVirgin(false); | 567 | setVirgin(false); |
568 | return curDoc(); | 568 | return curDoc(); |
569 | } | 569 | } |
570 | 570 | ||
571 | PwMView * PwM::makeNewListView(PwMDoc *doc) | 571 | PwMView * PwM::makeNewListView(PwMDoc *doc) |
572 | { | 572 | { |
573 | PwMView *ret = new PwMView(this, this, doc); | 573 | PwMView *ret = new PwMView(this, this, doc); |
574 | ret->setFont(conf()->confGlobEntryFont()); | 574 | ret->setFont(conf()->confGlobEntryFont()); |
575 | ret->show(); | 575 | ret->show(); |
576 | return ret; | 576 | return ret; |
577 | } | 577 | } |
578 | 578 | ||
579 | void PwM::close_slot() | 579 | void PwM::close_slot() |
580 | { | 580 | { |
581 | close(); | 581 | close(); |
582 | } | 582 | } |
583 | 583 | ||
584 | void PwM::quitButton_slot() | 584 | void PwM::quitButton_slot() |
585 | { | 585 | { |
586 | init->shutdownApp(0); | 586 | init->shutdownApp(0); |
587 | } | 587 | } |
588 | 588 | ||
589 | void PwM::save_slot() | 589 | void PwM::save_slot() |
590 | { | 590 | { |
591 | save(); | 591 | save(); |
592 | } | 592 | } |
593 | 593 | ||
594 | bool PwM::save() | 594 | bool PwM::save() |
595 | { | 595 | { |
596 | if (!curDoc()->saveDocUi(curDoc())) | 596 | if (!curDoc()->saveDocUi(curDoc())) |
597 | return false; | 597 | return false; |
598 | showStatMsg(i18n("Successfully saved data.")); | 598 | showStatMsg(i18n("Successfully saved data.")); |
599 | updateCaption(); | 599 | updateCaption(); |
600 | return true; | 600 | return true; |
601 | } | 601 | } |
602 | 602 | ||
603 | void PwM::saveAs_slot() | 603 | void PwM::saveAs_slot() |
604 | { | 604 | { |
605 | saveAs(); | 605 | saveAs(); |
606 | } | 606 | } |
607 | 607 | ||
608 | bool PwM::saveAs() | 608 | bool PwM::saveAs() |
609 | { | 609 | { |
610 | if (!curDoc()->saveAsDocUi(curDoc())) | 610 | if (!curDoc()->saveAsDocUi(curDoc())) |
611 | return false; | 611 | return false; |
612 | showStatMsg(i18n("Successfully saved data.")); | 612 | showStatMsg(i18n("Successfully saved data.")); |
613 | updateCaption(); | 613 | updateCaption(); |
614 | return true; | 614 | return true; |
615 | } | 615 | } |
616 | 616 | ||
617 | //US ENH : changed code to run with older MOC | 617 | //US ENH : changed code to run with older MOC |
618 | void PwM::addPwd_slot() | 618 | void PwM::addPwd_slot() |
619 | { | 619 | { |
620 | addPwd_slot1(0, 0); | 620 | addPwd_slot1(0, 0); |
621 | } | 621 | } |
622 | 622 | ||
623 | void PwM::addPwd_slot1(QString *pw, PwMDoc *_doc) | 623 | void PwM::addPwd_slot1(QString *pw, PwMDoc *_doc) |
624 | { | 624 | { |
625 | PwMDoc *doc; | 625 | PwMDoc *doc; |
626 | if (_doc) { | 626 | if (_doc) { |
627 | doc = _doc; | 627 | doc = _doc; |
628 | } else { | 628 | } else { |
629 | doc = curDoc(); | 629 | doc = curDoc(); |
630 | } | 630 | } |
631 | PWM_ASSERT(doc); | 631 | PWM_ASSERT(doc); |
632 | doc->timer()->getLock(DocTimer::id_autoLockTimer); | 632 | doc->timer()->getLock(DocTimer::id_autoLockTimer); |
633 | #ifndef PWM_EMBEDDED | 633 | #ifndef PWM_EMBEDDED |
634 | AddEntryWndImpl w; | 634 | AddEntryWndImpl w; |
635 | #else | 635 | #else |
636 | AddEntryWndImpl w(doc, this, "addentrywndimpl"); | 636 | AddEntryWndImpl w(doc, this, "addentrywndimpl"); |
637 | #endif | 637 | #endif |
638 | 638 | ||
639 | vector<string> catList; | 639 | vector<string> catList; |
640 | doc->getCategoryList(&catList); | 640 | doc->getCategoryList(&catList); |
641 | unsigned i, size = catList.size(); | 641 | unsigned i, size = catList.size(); |
642 | for (i = 0; i < size; ++i) { | 642 | for (i = 0; i < size; ++i) { |
643 | w.addCategory(catList[i].c_str()); | 643 | w.addCategory(catList[i].c_str()); |
644 | } | 644 | } |
645 | w.setCurrCategory(view->getCurrentCategory()); | 645 | w.setCurrCategory(view->getCurrentCategory()); |
646 | if (pw) | 646 | if (pw) |
647 | w.pwLineEdit->setText(*pw); | 647 | w.pwLineEdit->setText(*pw); |
648 | 648 | ||
649 | tryAgain: | 649 | tryAgain: |
650 | if (w.exec() == 1) | 650 | if (w.exec() == 1) |
651 | { | 651 | { |
652 | PwMDataItem d; | 652 | PwMDataItem d; |
653 | 653 | ||
654 | //US BUG: to initialize all values of curEntr with meaningfulldata, | 654 | //US BUG: to initialize all values of curEntr with meaningfulldata, |
655 | // we call clear on it. Reason: Metadata will be uninitialized otherwise. | 655 | // we call clear on it. Reason: Metadata will be uninitialized otherwise. |
656 | // another option would be to create a constructor for PwMDataItem | 656 | // another option would be to create a constructor for PwMDataItem |
657 | d.clear(true); | 657 | d.clear(true); |
658 | 658 | ||
659 | d.desc = w.getDescription().latin1(); | 659 | d.desc = w.getDescription().latin1(); |
660 | d.name = w.getUsername().latin1(); | 660 | d.name = w.getUsername().latin1(); |
661 | d.pw = w.getPassword().latin1(); | 661 | d.pw = w.getPassword().latin1(); |
662 | d.comment = w.getComment().latin1(); | 662 | d.comment = w.getComment().latin1(); |
663 | d.url = w.getUrl().latin1(); | 663 | d.url = w.getUrl().latin1(); |
664 | d.launcher = w.getLauncher().latin1(); | 664 | d.launcher = w.getLauncher().latin1(); |
665 | PwMerror ret = doc->addEntry(w.getCategory(), &d); | 665 | PwMerror ret = doc->addEntry(w.getCategory(), &d); |
666 | if (ret == e_entryExists) { | 666 | if (ret == e_entryExists) { |
667 | KMessageBox::error(this, | 667 | KMessageBox::error(this, |
668 | i18n | 668 | i18n |
669 | ("An entry with this \"Description\",\n" | 669 | ("An entry with this \"Description\",\n" |
670 | "does already exist.\n" | 670 | "does already exist.\n" |
671 | "Please select another description."), | 671 | "Please select another description."), |
672 | i18n("entry already exists.")); | 672 | i18n("entry already exists.")); |
673 | goto tryAgain; | 673 | goto tryAgain; |
674 | } else if (ret == e_maxAllowedEntr) { | 674 | } else if (ret == e_maxAllowedEntr) { |
675 | KMessageBox::error(this, i18n("The maximum possible number of\nentries" | 675 | KMessageBox::error(this, i18n("The maximum possible number of\nentries" |
676 | "has been reached.\nYou can't add more entries."), | 676 | "has been reached.\nYou can't add more entries."), |
677 | i18n("maximum number of entries")); | 677 | i18n("maximum number of entries")); |
678 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 678 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
679 | return; | 679 | return; |
680 | } | 680 | } |
681 | } | 681 | } |
682 | setVirgin(false); | 682 | setVirgin(false); |
683 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 683 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
684 | } | 684 | } |
685 | 685 | ||
686 | //US ENH : changed code to run with older MOC | 686 | //US ENH : changed code to run with older MOC |
687 | void PwM::editPwd_slot() | 687 | void PwM::editPwd_slot() |
688 | { | 688 | { |
689 | editPwd_slot3(0,0,0); | 689 | editPwd_slot3(0,0,0); |
690 | } | 690 | } |
691 | 691 | ||
692 | void PwM::editPwd_slot1(const QString *category) | 692 | void PwM::editPwd_slot1(const QString *category) |
693 | { | 693 | { |
694 | editPwd_slot3(category, 0, 0); | 694 | editPwd_slot3(category, 0, 0); |
695 | } | 695 | } |
696 | 696 | ||
697 | void PwM::editPwd_slot3(const QString *category, const int *index, | 697 | void PwM::editPwd_slot3(const QString *category, const int *index, |
698 | PwMDoc *_doc) | 698 | PwMDoc *_doc) |
699 | { | 699 | { |
700 | PwMDoc *doc; | 700 | PwMDoc *doc; |
701 | if (_doc) { | 701 | if (_doc) { |
702 | doc = _doc; | 702 | doc = _doc; |
703 | } else { | 703 | } else { |
704 | doc = curDoc(); | 704 | doc = curDoc(); |
705 | } | 705 | } |
706 | PWM_ASSERT(doc); | 706 | PWM_ASSERT(doc); |
707 | if (doc->isDocEmpty()) | 707 | if (doc->isDocEmpty()) |
708 | return; | 708 | return; |
709 | if (doc->isDeepLocked()) | 709 | if (doc->isDeepLocked()) |
710 | return; | 710 | return; |
711 | doc->timer()->getLock(DocTimer::id_autoLockTimer); | 711 | doc->timer()->getLock(DocTimer::id_autoLockTimer); |
712 | unsigned int curEntryIndex; | 712 | unsigned int curEntryIndex; |
713 | if (index) { | 713 | if (index) { |
714 | curEntryIndex = *index; | 714 | curEntryIndex = *index; |
715 | } else { | 715 | } else { |
716 | if (!(view->getCurEntryIndex(&curEntryIndex))) { | 716 | if (!(view->getCurEntryIndex(&curEntryIndex))) { |
717 | printDebug("couldn't get index. Maybe we have a binary entry here."); | 717 | printDebug("couldn't get index. Maybe we have a binary entry here."); |
718 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 718 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
719 | return; | 719 | return; |
720 | } | 720 | } |
721 | } | 721 | } |
722 | QString curCategory; | 722 | QString curCategory; |
723 | if (category) { | 723 | if (category) { |
724 | curCategory = *category; | 724 | curCategory = *category; |
725 | } else { | 725 | } else { |
726 | curCategory = view->getCurrentCategory(); | 726 | curCategory = view->getCurrentCategory(); |
727 | } | 727 | } |
728 | PwMDataItem currItem; | 728 | PwMDataItem currItem; |
729 | if (!doc->getEntry(curCategory, curEntryIndex, &currItem, true)) { | 729 | if (!doc->getEntry(curCategory, curEntryIndex, &currItem, true)) { |
730 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 730 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
731 | return; | 731 | return; |
732 | } | 732 | } |
733 | BUG_ON(currItem.binary); | 733 | BUG_ON(currItem.binary); |
734 | 734 | ||
735 | AddEntryWndImpl w(doc); | 735 | AddEntryWndImpl w(doc); |
736 | vector<string> catList; | 736 | vector<string> catList; |
737 | doc->getCategoryList(&catList); | 737 | doc->getCategoryList(&catList); |
738 | unsigned i, size = catList.size(); | 738 | unsigned i, size = catList.size(); |
739 | for (i = 0; i < size; ++i) { | 739 | for (i = 0; i < size; ++i) { |
740 | w.addCategory(catList[i].c_str()); | 740 | w.addCategory(catList[i].c_str()); |
741 | } | 741 | } |
742 | w.setCurrCategory(curCategory); | 742 | w.setCurrCategory(curCategory); |
743 | w.setDescription(currItem.desc.c_str()); | 743 | w.setDescription(currItem.desc.c_str()); |
744 | w.setUsername(currItem.name.c_str()); | 744 | w.setUsername(currItem.name.c_str()); |
745 | w.setPassword(currItem.pw.c_str()); | 745 | w.setPassword(currItem.pw.c_str()); |
746 | w.setUrl(currItem.url.c_str()); | 746 | w.setUrl(currItem.url.c_str()); |
747 | w.setLauncher(currItem.launcher.c_str()); | 747 | w.setLauncher(currItem.launcher.c_str()); |
748 | w.setComment(currItem.comment.c_str()); | 748 | w.setComment(currItem.comment.c_str()); |
749 | if (w.exec() == 1) { | 749 | if (w.exec() == 1) { |
750 | currItem.desc = w.getDescription().latin1(); | 750 | currItem.desc = w.getDescription().latin1(); |
751 | currItem.name = w.getUsername().latin1(); | 751 | currItem.name = w.getUsername().latin1(); |
752 | currItem.pw = w.getPassword().latin1(); | 752 | currItem.pw = w.getPassword().latin1(); |
753 | currItem.comment = w.getComment().latin1(); | 753 | currItem.comment = w.getComment().latin1(); |
754 | currItem.url = w.getUrl().latin1(); | 754 | currItem.url = w.getUrl().latin1(); |
755 | currItem.launcher = w.getLauncher().latin1(); | 755 | currItem.launcher = w.getLauncher().latin1(); |
756 | if (!doc->editEntry(curCategory, w.getCategory(), | 756 | if (!doc->editEntry(curCategory, w.getCategory(), |
757 | curEntryIndex, &currItem)) { | 757 | curEntryIndex, &currItem)) { |
758 | KMessageBox::error(this, | 758 | KMessageBox::error(this, |
759 | i18n("Couldn't edit the entry.\n" | 759 | i18n("Couldn't edit the entry.\n" |
760 | "Maybe you changed the category and\n" | 760 | "Maybe you changed the category and\n" |
761 | "this entry is already present\nin the new " | 761 | "this entry is already present\nin the new " |
762 | "category?"), | 762 | "category?"), |
763 | i18n("couldn't edit entry.")); | 763 | i18n("couldn't edit entry.")); |
764 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 764 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
765 | return; | 765 | return; |
766 | } | 766 | } |
767 | } | 767 | } |
768 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | 768 | doc->timer()->putLock(DocTimer::id_autoLockTimer); |
769 | } | 769 | } |
770 | 770 | ||
771 | void PwM::deletePwd_slot() | 771 | void PwM::deletePwd_slot() |
772 | { | 772 | { |
773 | PWM_ASSERT(curDoc()); | 773 | PWM_ASSERT(curDoc()); |
774 | if (curDoc()->isDocEmpty()) | 774 | if (curDoc()->isDocEmpty()) |
775 | return; | 775 | return; |
776 | if (curDoc()->isDeepLocked()) | 776 | if (curDoc()->isDeepLocked()) |
777 | return; | 777 | return; |
778 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 778 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
779 | unsigned int curEntryIndex = 0; | 779 | unsigned int curEntryIndex = 0; |
780 | if (!(view->getCurEntryIndex(&curEntryIndex))) { | 780 | if (!(view->getCurEntryIndex(&curEntryIndex))) { |
781 | printDebug("couldn't get index"); | 781 | printDebug("couldn't get index"); |
782 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 782 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
783 | return; | 783 | return; |
784 | } | 784 | } |
785 | 785 | ||
786 | PwMDataItem currItem; | 786 | PwMDataItem currItem; |
787 | QString curCategory = view->getCurrentCategory(); | 787 | QString curCategory = view->getCurrentCategory(); |
788 | if (!curDoc()->getEntry(curCategory, curEntryIndex, &currItem)) { | 788 | if (!curDoc()->getEntry(curCategory, curEntryIndex, &currItem)) { |
789 | printDebug("couldn't get entry"); | 789 | printDebug("couldn't get entry"); |
790 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 790 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
791 | return; | 791 | return; |
792 | } | 792 | } |
793 | if (KMessageBox:: | 793 | if (KMessageBox:: |
794 | questionYesNo(this, | 794 | questionYesNo(this, |
795 | i18n | 795 | i18n |
796 | ("Do you really want to delete\nthe selected entry") + | 796 | ("Do you really want to delete\nthe selected entry") + |
797 | " \n\"" + QString(currItem.desc.c_str()) | 797 | " \n\"" + QString(currItem.desc.c_str()) |
798 | + "\" ?", i18n("delete?")) | 798 | + "\" ?", i18n("delete?")) |
799 | == KMessageBox::Yes) { | 799 | == KMessageBox::Yes) { |
800 | 800 | ||
801 | curDoc()->delEntry(curCategory, curEntryIndex); | 801 | curDoc()->delEntry(curCategory, curEntryIndex); |
802 | } | 802 | } |
803 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 803 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
804 | } | 804 | } |
805 | 805 | ||
806 | void PwM::changeMasterPwd_slot() | 806 | void PwM::changeMasterPwd_slot() |
807 | { | 807 | { |
808 | PWM_ASSERT(curDoc()); | 808 | PWM_ASSERT(curDoc()); |
809 | curDoc()->changeCurrentPw(); | 809 | curDoc()->changeCurrentPw(); |
810 | } | 810 | } |
811 | 811 | ||
812 | void PwM::lockWnd_slot() | 812 | void PwM::lockWnd_slot() |
813 | { | 813 | { |
814 | PWM_ASSERT(curDoc()); | 814 | PWM_ASSERT(curDoc()); |
815 | curDoc()->lockAll(true); | 815 | curDoc()->lockAll(true); |
816 | } | 816 | } |
817 | 817 | ||
818 | void PwM::deepLockWnd_slot() | 818 | void PwM::deepLockWnd_slot() |
819 | { | 819 | { |
820 | PWM_ASSERT(curDoc()); | 820 | PWM_ASSERT(curDoc()); |
821 | curDoc()->deepLock(); | 821 | curDoc()->deepLock(); |
822 | } | 822 | } |
823 | 823 | ||
824 | void PwM::unlockWnd_slot() | 824 | void PwM::unlockWnd_slot() |
825 | { | 825 | { |
826 | PWM_ASSERT(curDoc()); | 826 | PWM_ASSERT(curDoc()); |
827 | curDoc()->lockAll(false); | 827 | curDoc()->lockAll(false); |
828 | } | 828 | } |
829 | 829 | ||
830 | void PwM::config_slot() | 830 | void PwM::config_slot() |
831 | { | 831 | { |
832 | int oldStyle = conf()->confWndMainViewStyle(); | 832 | int oldStyle = conf()->confWndMainViewStyle(); |
833 | #ifdef PWM_EMBEDDED | 833 | #ifdef PWM_EMBEDDED |
834 | KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"pwmconfigdialog", true ); | 834 | KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"pwmconfigdialog", true ); |
835 | 835 | ||
836 | KCMPwmConfig* pwmcfg = new KCMPwmConfig( ConfigureDialog->getNewVBoxPage(i18n( "PwManager")) , "KCMPwmConfig" ); | 836 | KCMPwmConfig* pwmcfg = new KCMPwmConfig( ConfigureDialog->getNewVBoxPage(i18n( "PwManager")) , "KCMPwmConfig" ); |
837 | ConfigureDialog->addModule(pwmcfg ); | 837 | ConfigureDialog->addModule(pwmcfg ); |
838 | 838 | ||
839 | KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); | 839 | KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); |
840 | ConfigureDialog->addModule(kdelibcfg ); | 840 | ConfigureDialog->addModule(kdelibcfg ); |
841 | 841 | ||
842 | #ifndef DESKTOP_VERSION | 842 | #ifndef DESKTOP_VERSION |
843 | ConfigureDialog->showMaximized(); | 843 | ConfigureDialog->showMaximized(); |
844 | #endif | 844 | #endif |
845 | if ( ConfigureDialog->exec() ) | 845 | if ( ConfigureDialog->exec() ) |
846 | KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); | 846 | KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); |
847 | delete ConfigureDialog; | 847 | delete ConfigureDialog; |
848 | 848 | ||
849 | #else //PWM_EMBEDDED | 849 | #else //PWM_EMBEDDED |
850 | // display the configuration window (modal mode) | 850 | // display the configuration window (modal mode) |
851 | if (!conf()->showConfWnd(this)) | 851 | if (!conf()->showConfWnd(this)) |
852 | return; | 852 | return; |
853 | #endif | 853 | #endif |
854 | 854 | ||
855 | int newStyle = conf()->confWndMainViewStyle(); | 855 | int newStyle = conf()->confWndMainViewStyle(); |
856 | // reinitialize tray | 856 | // reinitialize tray |
857 | init->initTray(); | 857 | init->initTray(); |
858 | // reinitialize KWallet emulation | 858 | // reinitialize KWallet emulation |
859 | init->initKWalletEmu(); | 859 | init->initKWalletEmu(); |
860 | 860 | ||
861 | PwMDocList *_dl = PwMDoc::getOpenDocList(); | 861 | PwMDocList *_dl = PwMDoc::getOpenDocList(); |
862 | const vector<PwMDocList::listItem> *dl = _dl->getList(); | 862 | const vector<PwMDocList::listItem> *dl = _dl->getList(); |
863 | vector<PwMDocList::listItem>::const_iterator i = dl->begin(), | 863 | vector<PwMDocList::listItem>::const_iterator i = dl->begin(), |
864 | end = dl->end(); | 864 | end = dl->end(); |
865 | PwMDoc *doc; | 865 | PwMDoc *doc; |
866 | while (i != end) { | 866 | while (i != end) { |
867 | doc = (*i).doc; | 867 | doc = (*i).doc; |
868 | // unlock-without-mpw timeout | 868 | // unlock-without-mpw timeout |
869 | doc->timer()->start(DocTimer::id_mpwTimer); | 869 | doc->timer()->start(DocTimer::id_mpwTimer); |
870 | // auto-lock timeout | 870 | // auto-lock timeout |
871 | doc->timer()->start(DocTimer::id_autoLockTimer); | 871 | doc->timer()->start(DocTimer::id_autoLockTimer); |
872 | ++i; | 872 | ++i; |
873 | } | 873 | } |
874 | 874 | ||
875 | const QValueList<PwM *> *ml = init->mainWndList(); | 875 | const QValueList<PwM *> *ml = init->mainWndList(); |
876 | #ifndef PWM_EMBEDDED | 876 | #ifndef PWM_EMBEDDED |
877 | QValueList<PwM *>::const_iterator i2 = ml->begin(), | 877 | QValueList<PwM *>::const_iterator i2 = ml->begin(), |
878 | end2 = ml->end(); | 878 | end2 = ml->end(); |
879 | #else | 879 | #else |
880 | QValueList<PwM *>::ConstIterator i2 = ml->begin(), | 880 | QValueList<PwM *>::ConstIterator i2 = ml->begin(), |
881 | end2 = ml->end(); | 881 | end2 = ml->end(); |
882 | #endif | 882 | #endif |
883 | PwM *pwm; | 883 | PwM *pwm; |
884 | while (i2 != end2) { | 884 | while (i2 != end2) { |
885 | pwm = *i2; | 885 | pwm = *i2; |
886 | // reinitialize the window style. | 886 | // reinitialize the window style. |
887 | if (oldStyle != newStyle) | 887 | if (oldStyle != newStyle) |
888 | pwm->curView()->initStyle(newStyle); | 888 | pwm->curView()->initStyle(newStyle); |
889 | // set the new font | 889 | // set the new font |
890 | pwm->curView()->setFont(conf()->confGlobEntryFont()); | 890 | pwm->curView()->setFont(conf()->confGlobEntryFont()); |
891 | ++i2; | 891 | ++i2; |
892 | } | 892 | } |
893 | } | 893 | } |
894 | 894 | ||
895 | void PwM::activateMpButton(bool activate) | 895 | void PwM::activateMpButton(bool activate) |
896 | { | 896 | { |
897 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_CHANGEMP, activate); | 897 | managePopup->setItemEnabled(BUTTON_POPUP_MANAGE_CHANGEMP, activate); |
898 | } | 898 | } |
899 | 899 | ||
900 | void PwM::closeEvent(QCloseEvent *e) | 900 | void PwM::closeEvent(QCloseEvent *e) |
901 | { | 901 | { |
902 | qDebug("PwM::closeEvent "); | 902 | qDebug("PwM::closeEvent "); |
903 | emit closed( this ); | 903 | emit closed( this ); |
904 | return; | 904 | return; |
905 | e->accept(); | 905 | e->accept(); |
906 | } | 906 | } |
907 | 907 | ||
908 | void PwM::docClosed(PwMDoc *doc) | 908 | void PwM::docClosed(PwMDoc *doc) |
909 | { | 909 | { |
910 | qDebug("PwM::docClosed "); | 910 | qDebug("PwM::docClosed "); |
911 | PARAM_UNUSED(doc); | 911 | PARAM_UNUSED(doc); |
912 | PWM_ASSERT(doc == curDoc()); | 912 | PWM_ASSERT(doc == curDoc()); |
913 | close(); | 913 | close(); |
914 | } | 914 | } |
915 | 915 | ||
916 | void PwM::find_slot() | 916 | void PwM::find_slot() |
917 | { | 917 | { |
918 | PWM_ASSERT(curDoc()); | 918 | PWM_ASSERT(curDoc()); |
919 | if (curDoc()->isDocEmpty()) | 919 | if (curDoc()->isDocEmpty()) |
920 | return; | 920 | return; |
921 | if (curDoc()->isDeepLocked()) | 921 | if (curDoc()->isDeepLocked()) |
922 | return; | 922 | return; |
923 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 923 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
924 | FindWndImpl findWnd(view); | 924 | FindWndImpl findWnd(view); |
925 | findWnd.exec(); | 925 | findWnd.exec(); |
926 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 926 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
927 | } | 927 | } |
928 | 928 | ||
929 | void PwM::exportToText() | 929 | void PwM::exportToText() |
930 | { | 930 | { |
931 | PWM_ASSERT(curDoc()); | 931 | PWM_ASSERT(curDoc()); |
932 | if (curDoc()->isDocEmpty()) { | 932 | if (curDoc()->isDocEmpty()) { |
933 | KMessageBox::information(this, | 933 | KMessageBox::information(this, |
934 | i18n | 934 | i18n |
935 | ("Sorry, there's nothing to export.\n" | 935 | ("Sorry, there's nothing to export.\n" |
936 | "Please first add some passwords."), | 936 | "Please first add some passwords."), |
937 | i18n("nothing to do")); | 937 | i18n("nothing to do")); |
938 | return; | 938 | return; |
939 | } | 939 | } |
940 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 940 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
941 | QString fn(KFileDialog::getSaveFileName(QString::null, | 941 | QString fn(KFileDialog::getSaveFileName(QString::null, |
942 | i18n("*|plain-text file"), | 942 | i18n("*|plain-text file"), |
943 | this)); | 943 | this)); |
944 | if (fn == "") { | 944 | if (fn == "") { |
945 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 945 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
946 | return; | 946 | return; |
947 | } | 947 | } |
948 | 948 | ||
949 | PwMerror ret = curDoc()->exportToText(&fn); | 949 | PwMerror ret = curDoc()->exportToText(&fn); |
950 | if (ret != e_success) { | 950 | if (ret != e_success) { |
951 | KMessageBox::error(this, | 951 | KMessageBox::error(this, |
952 | i18n("Error: Couldn't write to file.\n" | 952 | i18n("Error: Couldn't write to file.\n" |
953 | "Please check if you have permission to write\n" | 953 | "Please check if you have permission to write\n" |
954 | "to the file in that directory."), | 954 | "to the file in that directory."), |
955 | i18n("error while writing")); | 955 | i18n("error while writing")); |
956 | } else | 956 | } else |
957 | showStatMsg(i18n("Successfully exported data.")); | 957 | showStatMsg(i18n("Successfully exported data.")); |
958 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 958 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
959 | } | 959 | } |
960 | 960 | ||
961 | bool PwM::importFromText() | 961 | bool PwM::importFromText() |
962 | { | 962 | { |
963 | if (!isVirgin()) { | 963 | if (!isVirgin()) { |
964 | if (KMessageBox::questionYesNo(this, | 964 | if (KMessageBox::questionYesNo(this, |
965 | i18n("Do you want to import the data\n" | 965 | i18n("Do you want to import the data\n" |
966 | "into the current document? (If you\n" | 966 | "into the current document? (If you\n" |
967 | "select \"no\", a new document will be\n" | 967 | "select \"no\", a new document will be\n" |
968 | "opened.)"), | 968 | "opened.)"), |
969 | i18n("import into this document?")) | 969 | i18n("import into this document?")) |
970 | == KMessageBox::No) { | 970 | == KMessageBox::No) { |
971 | // import the data to a new window. | 971 | // import the data to a new window. |
972 | PwM *newInstance = init->createMainWnd(); | 972 | PwM *newInstance = init->createMainWnd(); |
973 | bool ok = newInstance->importFromText(); | 973 | bool ok = newInstance->importFromText(); |
974 | if (!ok) { | 974 | if (!ok) { |
975 | newInstance->setForceQuit(true); | 975 | newInstance->setForceQuit(true); |
976 | delete_and_null(newInstance); | 976 | delete_and_null(newInstance); |
977 | } | 977 | } |
978 | return ok; | 978 | return ok; |
979 | } | 979 | } |
980 | } | 980 | } |
981 | 981 | ||
982 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 982 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
983 | PwMerror ret; | 983 | PwMerror ret; |
984 | QString path(KFileDialog::getOpenFileName(QString::null, | 984 | QString path(KFileDialog::getOpenFileName(QString::null, |
985 | i18n("*|PWM-exported text file"), | 985 | i18n("*|PWM-exported text file"), |
986 | this)); | 986 | this)); |
987 | if (path == "") | 987 | if (path == "") |
988 | goto cancelImport; | 988 | goto cancelImport; |
989 | 989 | ||
990 | ret = curDoc()->importFromText(&path, 0); | 990 | ret = curDoc()->importFromText(&path, 0); |
991 | if (ret == e_fileFormat) { | 991 | if (ret == e_fileFormat) { |
992 | KMessageBox::error(this, | 992 | KMessageBox::error(this, |
993 | i18n("Could not read file-format.\n" | 993 | i18n("Could not read file-format.\n" |
994 | "This seems to be _not_ a valid file\n" | 994 | "This seems to be _not_ a valid file\n" |
995 | "exported by PwM."), | 995 | "exported by PwM."), |
996 | i18n("invalid file-format")); | 996 | i18n("invalid file-format")); |
997 | goto cancelImport; | 997 | goto cancelImport; |
998 | } else if (ret == e_invalidArg) { | 998 | } else if (ret == e_invalidArg) { |
999 | BUG(); | 999 | BUG(); |
1000 | goto cancelImport; | 1000 | goto cancelImport; |
1001 | } else if (ret != e_success) { | 1001 | } else if (ret != e_success) { |
1002 | KMessageBox::error(this, | 1002 | KMessageBox::error(this, |
1003 | i18n("Could not import file!\n" | 1003 | i18n("Could not import file!\n" |
1004 | "Do you have permission to read this file?\n" | 1004 | "Do you have permission to read this file?\n" |
1005 | "Do you have enough free memory?"), | 1005 | "Do you have enough free memory?"), |
1006 | i18n("import failed")); | 1006 | i18n("import failed")); |
1007 | goto cancelImport; | 1007 | goto cancelImport; |
1008 | } | 1008 | } |
1009 | setVirgin(false); | 1009 | setVirgin(false); |
1010 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1010 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1011 | return true; | 1011 | return true; |
1012 | 1012 | ||
1013 | cancelImport: | 1013 | cancelImport: |
1014 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1014 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1015 | return false; | 1015 | return false; |
1016 | } | 1016 | } |
1017 | 1017 | ||
1018 | void PwM::exportToGpasman() | 1018 | void PwM::exportToGpasman() |
1019 | { | 1019 | { |
1020 | PWM_ASSERT(curDoc()); | 1020 | PWM_ASSERT(curDoc()); |
1021 | if (curDoc()->isDocEmpty()) { | 1021 | if (curDoc()->isDocEmpty()) { |
1022 | KMessageBox::information(this, | 1022 | KMessageBox::information(this, |
1023 | i18n | 1023 | i18n |
1024 | ("Sorry, there's nothing to export.\n" | 1024 | ("Sorry, there's nothing to export.\n" |
1025 | "Please first add some passwords."), | 1025 | "Please first add some passwords."), |
1026 | i18n("nothing to do")); | 1026 | i18n("nothing to do")); |
1027 | return; | 1027 | return; |
1028 | } | 1028 | } |
1029 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1029 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1030 | QString fn(KFileDialog::getSaveFileName(QString::null, | 1030 | QString fn(KFileDialog::getSaveFileName(QString::null, |
1031 | i18n("*|Gpasman or Kpasman file"), | 1031 | i18n("*|Gpasman or Kpasman file"), |
1032 | this)); | 1032 | this)); |
1033 | if (fn == "") { | 1033 | if (fn == "") { |
1034 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1034 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1035 | return; | 1035 | return; |
1036 | } | 1036 | } |
1037 | 1037 | ||
1038 | PwMerror ret = curDoc()->exportToGpasman(&fn); | 1038 | PwMerror ret = curDoc()->exportToGpasman(&fn); |
1039 | if (ret != e_success) { | 1039 | if (ret != e_success) { |
1040 | if (ret == e_noPw) { | 1040 | if (ret == e_noPw) { |
1041 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1041 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1042 | return; | 1042 | return; |
1043 | } | 1043 | } |
1044 | KMessageBox::error(this, | 1044 | KMessageBox::error(this, |
1045 | i18n("Error: Couldn't write to file.\n" | 1045 | i18n("Error: Couldn't write to file.\n" |
1046 | "Please check if you have permission to write " | 1046 | "Please check if you have permission to write " |
1047 | "to the file in that directory."), | 1047 | "to the file in that directory."), |
1048 | i18n("error while writing")); | 1048 | i18n("error while writing")); |
1049 | } else | 1049 | } else |
1050 | showStatMsg(i18n("Successfully exported data.")); | 1050 | showStatMsg(i18n("Successfully exported data.")); |
1051 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1051 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1052 | } | 1052 | } |
1053 | 1053 | ||
1054 | 1054 | ||
1055 | 1055 | ||
1056 | void PwM::exportToCsv() | 1056 | void PwM::exportToCsv() |
1057 | { | 1057 | { |
1058 | PWM_ASSERT(curDoc()); | 1058 | PWM_ASSERT(curDoc()); |
1059 | if (curDoc()->isDocEmpty()) { | 1059 | if (curDoc()->isDocEmpty()) { |
1060 | KMessageBox::information(this, | 1060 | KMessageBox::information(this, |
1061 | i18n | 1061 | i18n |
1062 | ("Sorry, there is nothing to export;\n" | 1062 | ("Sorry, there is nothing to export;\n" |
1063 | "please add some passwords first."), | 1063 | "please add some passwords first."), |
1064 | i18n("Nothing to Do")); | 1064 | i18n("Nothing to Do")); |
1065 | return; | 1065 | return; |
1066 | } | 1066 | } |
1067 | 1067 | ||
1068 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1068 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1069 | QString fn(KFileDialog::getSaveFileName("*.csv", i18n("*|CSV Text File"), this)); | 1069 | QString fn(KFileDialog::getSaveFileName("*.csv", i18n("*|CSV Text File"), this)); |
1070 | if (fn.isEmpty()) { | 1070 | if (fn.isEmpty()) { |
1071 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1071 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1072 | return; | 1072 | return; |
1073 | } | 1073 | } |
1074 | 1074 | ||
1075 | Csv csv(this); | 1075 | Csv csv(this); |
1076 | if (!csv.exportData(fn, curDoc())) { | 1076 | if (!csv.exportData(fn, curDoc())) { |
1077 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1077 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1078 | showStatMsg(i18n("CSV file export failed.")); | 1078 | showStatMsg(i18n("CSV file export failed.")); |
1079 | return; | 1079 | return; |
1080 | } | 1080 | } |
1081 | showStatMsg(i18n("Successfully exported data.")); | 1081 | showStatMsg(i18n("Successfully exported data.")); |
1082 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1082 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1083 | } | 1083 | } |
1084 | 1084 | ||
1085 | bool PwM::importCsv() | 1085 | bool PwM::importCsv() |
1086 | { | 1086 | { |
1087 | Csv csv(this); | 1087 | Csv csv(this); |
1088 | if (!isVirgin()) { | 1088 | if (!isVirgin()) { |
1089 | if (KMessageBox::questionYesNo(this, | 1089 | if (KMessageBox::questionYesNo(this, |
1090 | i18n("Do you want to import the data\n" | 1090 | i18n("Do you want to import the data\n" |
1091 | "into the current document? (If you\n" | 1091 | "into the current document? (If you\n" |
1092 | "select \"no\", a new document will be\n" | 1092 | "select \"no\", a new document will be\n" |
1093 | "opened.)"), | 1093 | "opened.)"), |
1094 | i18n("Import into This Document?")) | 1094 | i18n("Import into This Document?")) |
1095 | == KMessageBox::No) { | 1095 | == KMessageBox::No) { |
1096 | // import the data to a new window. | 1096 | // import the data to a new window. |
1097 | PwM *newInstance = init->createMainWnd(); | 1097 | PwM *newInstance = init->createMainWnd(); |
1098 | bool ok = newInstance->importCsv(); | 1098 | bool ok = newInstance->importCsv(); |
1099 | if (!ok) { | 1099 | if (!ok) { |
1100 | newInstance->setForceQuit(true); | 1100 | newInstance->setForceQuit(true); |
1101 | delete_and_null(newInstance); | 1101 | delete_and_null(newInstance); |
1102 | } | 1102 | } |
1103 | return ok; | 1103 | return ok; |
1104 | } | 1104 | } |
1105 | } | 1105 | } |
1106 | 1106 | ||
1107 | QString filename = KFileDialog::getOpenFileName("*.csv", i18n("*|CSV Text File"), this); | 1107 | QString filename = KFileDialog::getOpenFileName("*.csv", i18n("*|CSV Text File"), this); |
1108 | if (filename.isEmpty()) | 1108 | if (filename.isEmpty()) |
1109 | return false; | 1109 | return false; |
1110 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1110 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1111 | if (!csv.importData(filename, curDoc())) { | 1111 | if (!csv.importData(filename, curDoc())) { |
1112 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1112 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1113 | showStatMsg(i18n("CSV file import failed.")); | 1113 | showStatMsg(i18n("CSV file import failed.")); |
1114 | return false; | 1114 | return false; |
1115 | } | 1115 | } |
1116 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1116 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1117 | KMessageBox::information(this, | 1117 | KMessageBox::information(this, |
1118 | i18n("Successfully imported the CSV data\n" | 1118 | i18n("Successfully imported the CSV data\n" |
1119 | "into the current document."), i18n("Successfully Imported")); | 1119 | "into the current document."), i18n("Successfully Imported")); |
1120 | showStatMsg(i18n("Successfully imported")); | 1120 | showStatMsg(i18n("Successfully imported")); |
1121 | setVirgin(false); | 1121 | setVirgin(false); |
1122 | return true; | 1122 | return true; |
1123 | } | 1123 | } |
1124 | 1124 | ||
1125 | 1125 | ||
1126 | void PwM::exportToKWallet() | 1126 | void PwM::exportToKWallet() |
1127 | { | 1127 | { |
1128 | #ifdef CONFIG_KWALLETIF | 1128 | #ifdef CONFIG_KWALLETIF |
1129 | if (!checkAndAskForKWalletEmu()) | 1129 | if (!checkAndAskForKWalletEmu()) |
1130 | return; | 1130 | return; |
1131 | PWM_ASSERT(curDoc()); | 1131 | PWM_ASSERT(curDoc()); |
1132 | if (curDoc()->isDocEmpty()) { | 1132 | if (curDoc()->isDocEmpty()) { |
1133 | KMessageBox::information(this, | 1133 | KMessageBox::information(this, |
1134 | i18n | 1134 | i18n |
1135 | ("Sorry, there's nothing to export.\n" | 1135 | ("Sorry, there's nothing to export.\n" |
1136 | "Please first add some passwords."), | 1136 | "Please first add some passwords."), |
1137 | i18n("nothing to do")); | 1137 | i18n("nothing to do")); |
1138 | init->initKWalletEmu(); | 1138 | init->initKWalletEmu(); |
1139 | return; | 1139 | return; |
1140 | } | 1140 | } |
1141 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1141 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1142 | KWalletIf walletIf(this); | 1142 | KWalletIf walletIf(this); |
1143 | if (walletIf.kwalletExport(curDoc())) { | 1143 | if (walletIf.kwalletExport(curDoc())) { |
1144 | KMessageBox::information(this, | 1144 | KMessageBox::information(this, |
1145 | i18n("Successfully exported the data of the current " | 1145 | i18n("Successfully exported the data of the current " |
1146 | "document to KWallet."), | 1146 | "document to KWallet."), |
1147 | i18n("Successfully exported data.")); | 1147 | i18n("Successfully exported data.")); |
1148 | showStatMsg(i18n("Successfully exported data.")); | 1148 | showStatMsg(i18n("Successfully exported data.")); |
1149 | } | 1149 | } |
1150 | init->initKWalletEmu(); | 1150 | init->initKWalletEmu(); |
1151 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1151 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1152 | #endif // CONFIG_KWALLETIF | 1152 | #endif // CONFIG_KWALLETIF |
1153 | } | 1153 | } |
1154 | 1154 | ||
1155 | bool PwM::importFromGpasman() | 1155 | bool PwM::importFromGpasman() |
1156 | { | 1156 | { |
1157 | if (!isVirgin()) { | 1157 | if (!isVirgin()) { |
1158 | if (KMessageBox::questionYesNo(this, | 1158 | if (KMessageBox::questionYesNo(this, |
1159 | i18n("Do you want to import the data\n" | 1159 | i18n("Do you want to import the data\n" |
1160 | "into the current document? (If you\n" | 1160 | "into the current document? (If you\n" |
1161 | "select \"no\", a new document will be\n" | 1161 | "select \"no\", a new document will be\n" |
1162 | "opened.)"), | 1162 | "opened.)"), |
1163 | i18n("import into this document?")) | 1163 | i18n("import into this document?")) |
1164 | == KMessageBox::No) { | 1164 | == KMessageBox::No) { |
1165 | // import the data to a new window. | 1165 | // import the data to a new window. |
1166 | PwM *newInstance = init->createMainWnd(); | 1166 | PwM *newInstance = init->createMainWnd(); |
1167 | bool ok = newInstance->importFromGpasman(); | 1167 | bool ok = newInstance->importFromGpasman(); |
1168 | if (!ok) { | 1168 | if (!ok) { |
1169 | newInstance->setForceQuit(true); | 1169 | newInstance->setForceQuit(true); |
1170 | delete_and_null(newInstance); | 1170 | delete_and_null(newInstance); |
1171 | } | 1171 | } |
1172 | return ok; | 1172 | return ok; |
1173 | } | 1173 | } |
1174 | } | 1174 | } |
1175 | 1175 | ||
1176 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1176 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1177 | PwMerror ret; | 1177 | PwMerror ret; |
1178 | QString path(KFileDialog::getOpenFileName(QString::null, | 1178 | QString path(KFileDialog::getOpenFileName(QString::null, |
1179 | i18n("*|Gpasman or Kpasman file"), this)); | 1179 | i18n("*|Gpasman or Kpasman file"), this)); |
1180 | if (path == "") | 1180 | if (path == "") |
1181 | goto cancelImport; | 1181 | goto cancelImport; |
1182 | ret = curDoc()->importFromGpasman(&path); | 1182 | ret = curDoc()->importFromGpasman(&path); |
1183 | if (ret == e_wrongPw) { | 1183 | if (ret == e_wrongPw) { |
1184 | if (KMessageBox::questionYesNo(this, | 1184 | if (KMessageBox::questionYesNo(this, |
1185 | i18n | 1185 | i18n |
1186 | ("This is probably the wrong master-password\n" | 1186 | ("This is probably the wrong master-password\n" |
1187 | "you have typed in.\n" | 1187 | "you have typed in.\n" |
1188 | "There is no real way to determine the\n" | 1188 | "There is no real way to determine the\n" |
1189 | "correctness of the password in the Gpasman\n" | 1189 | "correctness of the password in the Gpasman\n" |
1190 | "file-format. But I think this\n" | 1190 | "file-format. But I think this\n" |
1191 | "password ist wrong.\n" | 1191 | "password ist wrong.\n" |
1192 | "Do you want to continue nevertheless?"), | 1192 | "Do you want to continue nevertheless?"), |
1193 | i18n("password error")) | 1193 | i18n("password error")) |
1194 | == KMessageBox::No) { | 1194 | == KMessageBox::No) { |
1195 | goto cancelImport; | 1195 | goto cancelImport; |
1196 | } | 1196 | } |
1197 | } else if (ret != e_success) { | 1197 | } else if (ret != e_success) { |
1198 | KMessageBox::error(this, | 1198 | KMessageBox::error(this, |
1199 | i18n("Could not import file!\n" | 1199 | i18n("Could not import file!\n" |
1200 | "Do you have permission to read this file?"), | 1200 | "Do you have permission to read this file?"), |
1201 | i18n("import failed")); | 1201 | i18n("import failed")); |
1202 | goto cancelImport; | 1202 | goto cancelImport; |
1203 | } | 1203 | } |
1204 | setVirgin(false); | 1204 | setVirgin(false); |
1205 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1205 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1206 | return true; | 1206 | return true; |
1207 | 1207 | ||
1208 | cancelImport: | 1208 | cancelImport: |
1209 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1209 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1210 | return false; | 1210 | return false; |
1211 | } | 1211 | } |
1212 | 1212 | ||
1213 | #ifdef CONFIG_KWALLETIF | 1213 | #ifdef CONFIG_KWALLETIF |
1214 | bool PwM::checkAndAskForKWalletEmu() | 1214 | bool PwM::checkAndAskForKWalletEmu() |
1215 | { | 1215 | { |
1216 | if (init->kwalletEmu()) { | 1216 | if (init->kwalletEmu()) { |
1217 | /* KWallet emulation is enabled. We can't import/export | 1217 | /* KWallet emulation is enabled. We can't import/export |
1218 | * data from/to it, while emulation is active. | 1218 | * data from/to it, while emulation is active. |
1219 | */ | 1219 | */ |
1220 | if (KMessageBox::questionYesNo(this, | 1220 | if (KMessageBox::questionYesNo(this, |
1221 | i18n("KWallet emulation is enabled.\n" | 1221 | i18n("KWallet emulation is enabled.\n" |
1222 | "You can't import or export data from/to " | 1222 | "You can't import or export data from/to " |
1223 | "the original KWallet, while the emulation " | 1223 | "the original KWallet, while the emulation " |
1224 | "is active.\n" | 1224 | "is active.\n" |
1225 | "Do you want to tempoarly disable the KWallet emulation?"), | 1225 | "Do you want to tempoarly disable the KWallet emulation?"), |
1226 | i18n("Tempoarly disable KWallet emulation?")) | 1226 | i18n("Tempoarly disable KWallet emulation?")) |
1227 | == KMessageBox::Yes) { | 1227 | == KMessageBox::Yes) { |
1228 | init->initKWalletEmu(true); | 1228 | init->initKWalletEmu(true); |
1229 | PWM_ASSERT(!init->kwalletEmu()); | 1229 | PWM_ASSERT(!init->kwalletEmu()); |
1230 | return true; | 1230 | return true; |
1231 | } | 1231 | } |
1232 | return false; | 1232 | return false; |
1233 | } | 1233 | } |
1234 | return true; | 1234 | return true; |
1235 | } | 1235 | } |
1236 | #endif // CONFIG_KWALLETIF | 1236 | #endif // CONFIG_KWALLETIF |
1237 | 1237 | ||
1238 | bool PwM::importKWallet() | 1238 | bool PwM::importKWallet() |
1239 | { | 1239 | { |
1240 | #ifdef CONFIG_KWALLETIF | 1240 | #ifdef CONFIG_KWALLETIF |
1241 | if (!checkAndAskForKWalletEmu()) | 1241 | if (!checkAndAskForKWalletEmu()) |
1242 | return false; | 1242 | return false; |
1243 | KWalletIf walletIf(this); | 1243 | KWalletIf walletIf(this); |
1244 | if (!isVirgin()) { | 1244 | if (!isVirgin()) { |
1245 | if (KMessageBox::questionYesNo(this, | 1245 | if (KMessageBox::questionYesNo(this, |
1246 | i18n("Do you want to import the data " | 1246 | i18n("Do you want to import the data " |
1247 | "into the current document? (If you " | 1247 | "into the current document? (If you " |
1248 | "select \"no\", a new document will be " | 1248 | "select \"no\", a new document will be " |
1249 | "opened.)"), | 1249 | "opened.)"), |
1250 | i18n("import into this document?")) | 1250 | i18n("import into this document?")) |
1251 | == KMessageBox::No) { | 1251 | == KMessageBox::No) { |
1252 | // import the data to a new window. | 1252 | // import the data to a new window. |
1253 | PwM *newInstance = init->createMainWnd(); | 1253 | PwM *newInstance = init->createMainWnd(); |
1254 | bool ok = newInstance->importKWallet(); | 1254 | bool ok = newInstance->importKWallet(); |
1255 | if (!ok) { | 1255 | if (!ok) { |
1256 | newInstance->setForceQuit(true); | 1256 | newInstance->setForceQuit(true); |
1257 | delete_and_null(newInstance); | 1257 | delete_and_null(newInstance); |
1258 | goto exit_fail; | 1258 | goto exit_fail; |
1259 | } else { | 1259 | } else { |
1260 | goto exit_ok; | 1260 | goto exit_ok; |
1261 | } | 1261 | } |
1262 | } | 1262 | } |
1263 | } | 1263 | } |
1264 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1264 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1265 | if (!walletIf.kwalletImport(curDoc())) { | 1265 | if (!walletIf.kwalletImport(curDoc())) { |
1266 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1266 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1267 | showStatMsg(i18n("KWallet import failed")); | 1267 | showStatMsg(i18n("KWallet import failed")); |
1268 | goto exit_fail; | 1268 | goto exit_fail; |
1269 | } | 1269 | } |
1270 | KMessageBox::information(this, | 1270 | KMessageBox::information(this, |
1271 | i18n("Successfully imported the KWallet data " | 1271 | i18n("Successfully imported the KWallet data " |
1272 | "into the current document."), | 1272 | "into the current document."), |
1273 | i18n("successfully imported")); | 1273 | i18n("successfully imported")); |
1274 | showStatMsg(i18n("successfully imported")); | 1274 | showStatMsg(i18n("successfully imported")); |
1275 | setVirgin(false); | 1275 | setVirgin(false); |
1276 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1276 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1277 | 1277 | ||
1278 | exit_ok: | 1278 | exit_ok: |
1279 | init->initKWalletEmu(); | 1279 | init->initKWalletEmu(); |
1280 | return true; | 1280 | return true; |
1281 | 1281 | ||
1282 | exit_fail: | 1282 | exit_fail: |
1283 | init->initKWalletEmu(); | 1283 | init->initKWalletEmu(); |
1284 | #endif // CONFIG_KWALLETIF | 1284 | #endif // CONFIG_KWALLETIF |
1285 | return false; | 1285 | return false; |
1286 | } | 1286 | } |
1287 | 1287 | ||
1288 | void PwM::print_slot() | 1288 | void PwM::print_slot() |
1289 | { | 1289 | { |
1290 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); | 1290 | curDoc()->timer()->getLock(DocTimer::id_autoLockTimer); |
1291 | #ifndef PWM_EMBEDDED | 1291 | #ifndef PWM_EMBEDDED |
1292 | PwMPrint p(curDoc(), this); | 1292 | PwMPrint p(curDoc(), this); |
1293 | p.printNow(); | 1293 | p.printNow(); |
1294 | #else | 1294 | #else |
1295 | qDebug("PwM::print_slot , PRINTING IS NOT IMPLEMENTED"); | 1295 | qDebug("PwM::print_slot , PRINTING IS NOT IMPLEMENTED"); |
1296 | #endif | 1296 | #endif |
1297 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); | 1297 | curDoc()->timer()->putLock(DocTimer::id_autoLockTimer); |
1298 | } | 1298 | } |
1299 | 1299 | ||
1300 | void PwM::genNewCard_slot() | 1300 | void PwM::genNewCard_slot() |
1301 | { | 1301 | { |
1302 | #ifdef CONFIG_KEYCARD | 1302 | #ifdef CONFIG_KEYCARD |
1303 | init->keycard()->genNewCard(); | 1303 | init->keycard()->genNewCard(); |
1304 | #endif | 1304 | #endif |
1305 | } | 1305 | } |
1306 | 1306 | ||
1307 | void PwM::eraseCard_slot() | 1307 | void PwM::eraseCard_slot() |
1308 | { | 1308 | { |
1309 | #ifdef CONFIG_KEYCARD | 1309 | #ifdef CONFIG_KEYCARD |
1310 | init->keycard()->eraseCard(); | 1310 | init->keycard()->eraseCard(); |
1311 | #endif | 1311 | #endif |
1312 | } | 1312 | } |
1313 | 1313 | ||
1314 | void PwM::readCardId_slot() | 1314 | void PwM::readCardId_slot() |
1315 | { | 1315 | { |
1316 | #ifdef CONFIG_KEYCARD | 1316 | #ifdef CONFIG_KEYCARD |
1317 | init->keycard()->displayKey(); | 1317 | init->keycard()->displayKey(); |
1318 | #endif | 1318 | #endif |
1319 | } | 1319 | } |
1320 | 1320 | ||
1321 | void PwM::makeCardBackup_slot() | 1321 | void PwM::makeCardBackup_slot() |
1322 | { | 1322 | { |
1323 | #ifdef CONFIG_KEYCARD | 1323 | #ifdef CONFIG_KEYCARD |
1324 | init->keycard()->makeBackupImage(); | 1324 | init->keycard()->makeBackupImage(); |
1325 | #endif | 1325 | #endif |
1326 | } | 1326 | } |
1327 | 1327 | ||
1328 | void PwM::replayCardBackup_slot() | 1328 | void PwM::replayCardBackup_slot() |
1329 | { | 1329 | { |
1330 | #ifdef CONFIG_KEYCARD | 1330 | #ifdef CONFIG_KEYCARD |
1331 | init->keycard()->replayBackupImage(); | 1331 | init->keycard()->replayBackupImage(); |
1332 | #endif | 1332 | #endif |
1333 | } | 1333 | } |
1334 | 1334 | ||
1335 | void PwM::execLauncher_slot() | 1335 | void PwM::execLauncher_slot() |
1336 | { | 1336 | { |
1337 | PWM_ASSERT(curDoc()); | 1337 | PWM_ASSERT(curDoc()); |
1338 | if (curDoc()->isDeepLocked()) | 1338 | if (curDoc()->isDeepLocked()) |
1339 | return; | 1339 | return; |
1340 | unsigned int curEntryIndex; | 1340 | unsigned int curEntryIndex; |
1341 | if (!view->getCurEntryIndex(&curEntryIndex)) | 1341 | if (!view->getCurEntryIndex(&curEntryIndex)) |
1342 | return; | 1342 | return; |
1343 | bool ret = curDoc()->execLauncher(view->getCurrentCategory(), | 1343 | bool ret = curDoc()->execLauncher(view->getCurrentCategory(), |
1344 | curEntryIndex); | 1344 | curEntryIndex); |
1345 | if (ret) | 1345 | if (ret) |
1346 | showStatMsg(i18n("Executed the \"Launcher\".")); | 1346 | showStatMsg(i18n("Executed the \"Launcher\".")); |
1347 | else | 1347 | else |
1348 | showStatMsg(i18n("ERROR: Couldn't execute the \"Launcher\"!")); | 1348 | showStatMsg(i18n("ERROR: Couldn't execute the \"Launcher\"!")); |
1349 | } | 1349 | } |
1350 | 1350 | ||
1351 | void PwM::goToURL_slot() | 1351 | void PwM::goToURL_slot() |
1352 | { | 1352 | { |
1353 | PWM_ASSERT(curDoc()); | 1353 | PWM_ASSERT(curDoc()); |
1354 | if (curDoc()->isDeepLocked()) | 1354 | if (curDoc()->isDeepLocked()) |
1355 | return; | 1355 | return; |
1356 | unsigned int curEntryIndex; | 1356 | unsigned int curEntryIndex; |
1357 | if (!view->getCurEntryIndex(&curEntryIndex)) | 1357 | if (!view->getCurEntryIndex(&curEntryIndex)) |
1358 | return; | 1358 | return; |
1359 | bool ret = curDoc()->goToURL(view->getCurrentCategory(), | 1359 | bool ret = curDoc()->goToURL(view->getCurrentCategory(), |
1360 | curEntryIndex); | 1360 | curEntryIndex); |
1361 | if (ret) | 1361 | if (ret) |
1362 | showStatMsg(i18n("started browser with current URL.")); | 1362 | showStatMsg(i18n("started browser with current URL.")); |
1363 | else | 1363 | else |
1364 | showStatMsg(i18n("ERROR: Couldn't start browser! Maybe invalid URL?")); | 1364 | showStatMsg(i18n("ERROR: Couldn't start browser! Maybe invalid URL?")); |
1365 | } | 1365 | } |
1366 | 1366 | ||
1367 | void PwM::copyToClipboard(const QString &s) | 1367 | void PwM::copyToClipboard(const QString &s) |
1368 | { | 1368 | { |
1369 | QClipboard *cb = QApplication::clipboard(); | 1369 | QClipboard *cb = QApplication::clipboard(); |
1370 | #ifndef PWM_EMBEDDED | 1370 | #ifndef PWM_EMBEDDED |
1371 | if (cb->supportsSelection()) | 1371 | if (cb->supportsSelection()) |
1372 | cb->setText(s, QClipboard::Selection); | 1372 | cb->setText(s, QClipboard::Selection); |
1373 | cb->setText(s, QClipboard::Clipboard); | 1373 | cb->setText(s, QClipboard::Clipboard); |
1374 | #else | 1374 | #else |
1375 | cb->setText(s); | 1375 | cb->setText(s); |
1376 | 1376 | ||
1377 | #endif | 1377 | #endif |
1378 | 1378 | ||
1379 | } | 1379 | } |
1380 | 1380 | ||
1381 | 1381 | ||
1382 | void PwM::showStatMsg(const QString &msg) | 1382 | void PwM::showStatMsg(const QString &msg) |
1383 | { | 1383 | { |
1384 | #ifdef DESKTOP_VERSION | 1384 | #ifdef DESKTOP_VERSION |
1385 | statusBar()->message(msg, STATUSBAR_MSG_TIMEOUT * 1000); | 1385 | statusBar()->message(msg, STATUSBAR_MSG_TIMEOUT * 1000); |
1386 | #else | 1386 | #else |
1387 | qDebug("Statusbar : %s",msg.latin1()); | 1387 | qDebug("Statusbar : %s",msg.latin1()); |
1388 | Global::statusMessage(msg); | 1388 | Global::statusMessage(msg); |
1389 | #endif | 1389 | #endif |
1390 | } | 1390 | } |
1391 | 1391 | ||
1392 | void PwM::focusInEvent(QFocusEvent *e) | 1392 | void PwM::focusInEvent(QFocusEvent *e) |
1393 | { | 1393 | { |