-rw-r--r-- | pwmanager/pwmanager/editcategory.cpp | 188 | ||||
-rw-r--r-- | pwmanager/pwmanager/editcategory.h | 77 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwm.cpp | 69 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwm.h | 1 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmanager.pro | 2 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmanagerE.pro | 2 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmdoc.cpp | 5 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmdoc.h | 14 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmview.cpp | 10 | ||||
-rw-r--r-- | pwmanager/pwmanager/serializer.cpp | 44 |
10 files changed, 411 insertions, 1 deletions
diff --git a/pwmanager/pwmanager/editcategory.cpp b/pwmanager/pwmanager/editcategory.cpp new file mode 100644 index 0000000..4e55de8 --- a/dev/null +++ b/pwmanager/pwmanager/editcategory.cpp | |||
@@ -0,0 +1,188 @@ | |||
1 | /* | ||
2 | This file is part of PwManager/Platform independent. | ||
3 | Copyright (c) 2004 Ulf Schenk | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2 of the License, or | ||
8 | (at your option) any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software | ||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | |||
19 | As a special exception, permission is given to link this program | ||
20 | with any edition of Qt, and distribute the resulting executable, | ||
21 | without including the source code for Qt in the source distribution. | ||
22 | |||
23 | $Id$ | ||
24 | */ | ||
25 | |||
26 | #include "editcategory.h" | ||
27 | #include "pwmdoc.h" | ||
28 | |||
29 | #include <qlayout.h> | ||
30 | #include <qlabel.h> | ||
31 | #include <qgroupbox.h> | ||
32 | #include <klocale.h> | ||
33 | #include <kcombobox.h> | ||
34 | #include <klineedit.h> | ||
35 | #include <qpushbutton.h> | ||
36 | |||
37 | |||
38 | /* | ||
39 | * Constructs a addEntryWnd as a child of 'parent', with the | ||
40 | * name 'name' and widget flags set to 'f'. | ||
41 | * | ||
42 | * The dialog will by default be modeless, unless you set 'modal' to | ||
43 | * TRUE to construct a modal dialog. | ||
44 | */ | ||
45 | editCategoryWnd::editCategoryWnd( PwMDoc* d, QWidget* parent, const char* name) | ||
46 | : KDialogBase( KDialogBase::Plain, i18n( "edit category descriptions" ), | ||
47 | Apply | User2 | Ok, | ||
48 | Ok, parent, name, true ), | ||
49 | doc(d) | ||
50 | { | ||
51 | findButton( Ok )->setText (i18n("Close" )) ; | ||
52 | findButton( User2 )->setText (i18n("Cancel" )) ; | ||
53 | connect(this,SIGNAL(user2Clicked()), SLOT(cancel_slot())); | ||
54 | enableButton( KDialogBase::Apply, false ); | ||
55 | |||
56 | |||
57 | QWidget *page = plainPage(); | ||
58 | QGridLayout *layout = new QGridLayout( page, 3, 1 ); | ||
59 | layout->setMargin( KDialogBase::marginHint() ); | ||
60 | layout->setSpacing( KDialogBase::spacingHint() ); | ||
61 | |||
62 | int i = 0; | ||
63 | categoryComboBox = new KComboBox( page ); | ||
64 | QLabel* label = new QLabel( categoryComboBox, i18n("Category:"), page ); | ||
65 | layout->addWidget( label, i, 0 ); | ||
66 | layout->addWidget( categoryComboBox, i, 1 ); | ||
67 | i++; | ||
68 | categoryComboBox->setEditable( FALSE ); | ||
69 | categoryComboBox->setSizeLimit( 100 ); | ||
70 | connect(categoryComboBox,SIGNAL(activated(const QString&)), SLOT(categorySelected(const QString&))); | ||
71 | |||
72 | |||
73 | descLineEdit = new KLineEdit( page, "descLineEdit" ); | ||
74 | label = new QLabel( descLineEdit, i18n("Text1 (Description):"), page ); | ||
75 | layout->addWidget( label, i, 0 ); | ||
76 | layout->addWidget( descLineEdit, i, 1 ); | ||
77 | connect( descLineEdit, SIGNAL( textChanged ( const QString & ) ), SLOT( widgetModified(const QString &) ) ); | ||
78 | i++; | ||
79 | |||
80 | usernameLineEdit = new KLineEdit( page, "usernameLineEdit" ); | ||
81 | label = new QLabel( usernameLineEdit, i18n("Text2 (Username):"), page ); | ||
82 | layout->addWidget( label, i, 0 ); | ||
83 | layout->addWidget( usernameLineEdit, i, 1 ); | ||
84 | connect( usernameLineEdit, SIGNAL( textChanged ( const QString & ) ), SLOT( widgetModified(const QString &) ) ); | ||
85 | i++; | ||
86 | |||
87 | pwLineEdit = new KLineEdit( page, "pwLineEdit" ); | ||
88 | label = new QLabel( pwLineEdit, i18n("Text3 (Password):"), page ); | ||
89 | layout->addWidget( label, i, 0 ); | ||
90 | layout->addWidget( pwLineEdit, i, 1 ); | ||
91 | connect( pwLineEdit, SIGNAL( textChanged ( const QString & ) ), SLOT( widgetModified(const QString &) ) ); | ||
92 | i++; | ||
93 | |||
94 | unsigned int count = doc->numCategories(); | ||
95 | |||
96 | for (unsigned int i = 0; i < count; ++i) { | ||
97 | categoryComboBox->insertItem(doc->getCategory(i)->c_str()); | ||
98 | } | ||
99 | |||
100 | //PwMCategoryItem* getCategoryEntry(unsigned int index) | ||
101 | // { return &(dti.dta[index]); } | ||
102 | |||
103 | |||
104 | |||
105 | } | ||
106 | |||
107 | /* | ||
108 | * Destroys the object and frees any allocated resources | ||
109 | */ | ||
110 | editCategoryWnd::~editCategoryWnd() | ||
111 | { | ||
112 | // no need to delete child widgets, Qt does it all for us | ||
113 | } | ||
114 | |||
115 | void editCategoryWnd::slotOk() | ||
116 | { | ||
117 | // qDebug( "addEntryWnd::slotOk(): Not implemented yet" ); | ||
118 | slotApply(); | ||
119 | accept(); | ||
120 | } | ||
121 | |||
122 | void editCategoryWnd::slotApply() | ||
123 | { | ||
124 | QString cat = categoryComboBox->currentText(); | ||
125 | |||
126 | unsigned int idx; | ||
127 | bool found = doc->findCategory(cat, &idx); | ||
128 | |||
129 | if (found == true) | ||
130 | { | ||
131 | PwMCategoryItem* catitem = doc->getCategoryEntry(idx); | ||
132 | |||
133 | catitem->desc_text = descLineEdit->text().latin1(); | ||
134 | catitem->name_text = usernameLineEdit->text().latin1(); | ||
135 | catitem->pw_text = pwLineEdit->text().latin1(); | ||
136 | enableButton( KDialogBase::Apply, false ); | ||
137 | return; | ||
138 | } | ||
139 | |||
140 | BUG(); | ||
141 | |||
142 | } | ||
143 | |||
144 | void editCategoryWnd::cancel_slot() | ||
145 | { | ||
146 | QString cat = categoryComboBox->currentText(); | ||
147 | categorySelected ( cat ); | ||
148 | } | ||
149 | |||
150 | void editCategoryWnd::setCurrCategory(const QString &cat) | ||
151 | { | ||
152 | int i, count = categoryComboBox->count(); | ||
153 | |||
154 | for (i = 0; i < count; ++i) { | ||
155 | if (categoryComboBox->text(i) == cat) { | ||
156 | categoryComboBox->setCurrentItem(i); | ||
157 | categorySelected ( cat ); | ||
158 | return; | ||
159 | } | ||
160 | } | ||
161 | BUG(); | ||
162 | } | ||
163 | |||
164 | void editCategoryWnd::categorySelected ( const QString & string ) | ||
165 | { | ||
166 | unsigned int idx; | ||
167 | bool found = doc->findCategory(string, &idx); | ||
168 | |||
169 | if (found == true) | ||
170 | { | ||
171 | PwMCategoryItem* catitem = doc->getCategoryEntry(idx); | ||
172 | |||
173 | descLineEdit->setText(catitem->desc_text.c_str()); | ||
174 | usernameLineEdit->setText(catitem->name_text.c_str()); | ||
175 | pwLineEdit->setText(catitem->pw_text.c_str()); | ||
176 | enableButton( KDialogBase::Apply, false ); | ||
177 | return; | ||
178 | } | ||
179 | |||
180 | BUG(); | ||
181 | |||
182 | } | ||
183 | |||
184 | void editCategoryWnd::widgetModified(const QString &) | ||
185 | { | ||
186 | enableButton( KDialogBase::Apply, true ); | ||
187 | } | ||
188 | |||
diff --git a/pwmanager/pwmanager/editcategory.h b/pwmanager/pwmanager/editcategory.h new file mode 100644 index 0000000..90b685b --- a/dev/null +++ b/pwmanager/pwmanager/editcategory.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | This file is part of PwManager/Platform independent. | ||
3 | Copyright (c) 2004 Ulf Schenk | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2 of the License, or | ||
8 | (at your option) any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software | ||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | |||
19 | As a special exception, permission is given to link this program | ||
20 | with any edition of Qt, and distribute the resulting executable, | ||
21 | without including the source code for Qt in the source distribution. | ||
22 | |||
23 | $Id$ | ||
24 | */ | ||
25 | |||
26 | #ifndef EDITCATEGORY_H | ||
27 | #define EDITCATEGORY_H | ||
28 | |||
29 | #include <qvariant.h> | ||
30 | #include <kdialogbase.h> | ||
31 | |||
32 | class QVBoxLayout; | ||
33 | class QHBoxLayout; | ||
34 | class QGridLayout; | ||
35 | class QSpacerItem; | ||
36 | class KLineEdit; | ||
37 | class QPushButton; | ||
38 | class KComboBox; | ||
39 | class QLabel; | ||
40 | class QGroupBox; | ||
41 | class QMultiLineEdit; | ||
42 | class PwMDoc; | ||
43 | |||
44 | class editCategoryWnd : public KDialogBase | ||
45 | { | ||
46 | Q_OBJECT | ||
47 | |||
48 | public: | ||
49 | editCategoryWnd( PwMDoc* doc, QWidget* parent = 0, const char* name = 0); | ||
50 | ~editCategoryWnd(); | ||
51 | |||
52 | void setCurrCategory(const QString &cat); | ||
53 | |||
54 | KComboBox* categoryComboBox; | ||
55 | KLineEdit* descLineEdit; | ||
56 | KLineEdit* usernameLineEdit; | ||
57 | KLineEdit* pwLineEdit; | ||
58 | |||
59 | //public slots: | ||
60 | // virtual void revealButton_slot(); | ||
61 | // virtual void generateButton_slot(); | ||
62 | // virtual void advancedCommentButton_slot(bool on); | ||
63 | |||
64 | protected slots: | ||
65 | virtual void slotOk(); | ||
66 | virtual void slotApply(); | ||
67 | virtual void cancel_slot(); | ||
68 | |||
69 | virtual void categorySelected ( const QString & string ); | ||
70 | virtual void widgetModified(const QString &); | ||
71 | |||
72 | private: | ||
73 | PwMDoc* doc; | ||
74 | |||
75 | }; | ||
76 | |||
77 | #endif // EDITCATEGORY_H | ||
diff --git a/pwmanager/pwmanager/pwm.cpp b/pwmanager/pwmanager/pwm.cpp index 6ae6e28..bd98d72 100644 --- a/pwmanager/pwmanager/pwm.cpp +++ b/pwmanager/pwmanager/pwm.cpp | |||
@@ -31,24 +31,25 @@ | |||
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 | #endif | 44 | #endif |
44 | 45 | ||
45 | 46 | ||
46 | #ifndef DESKTOP_VERSION | 47 | #ifndef DESKTOP_VERSION |
47 | #include <qpe/global.h> | 48 | #include <qpe/global.h> |
48 | #endif | 49 | #endif |
49 | 50 | ||
50 | #include <qpixmap.h> | 51 | #include <qpixmap.h> |
51 | #include <qcheckbox.h> | 52 | #include <qcheckbox.h> |
52 | #include <qspinbox.h> | 53 | #include <qspinbox.h> |
53 | #include <qlineedit.h> | 54 | #include <qlineedit.h> |
54 | #include <qfileinfo.h> | 55 | #include <qfileinfo.h> |
@@ -108,24 +109,27 @@ enum { | |||
108 | #endif // CONFIG_KEYCARD | 109 | #endif // CONFIG_KEYCARD |
109 | }; | 110 | }; |
110 | // Button IDs for "view" popup menu | 111 | // Button IDs for "view" popup menu |
111 | enum { | 112 | enum { |
112 | BUTTON_POPUP_VIEW_FIND = 0, | 113 | BUTTON_POPUP_VIEW_FIND = 0, |
113 | BUTTON_POPUP_VIEW_LOCK, | 114 | BUTTON_POPUP_VIEW_LOCK, |
114 | BUTTON_POPUP_VIEW_DEEPLOCK, | 115 | BUTTON_POPUP_VIEW_DEEPLOCK, |
115 | BUTTON_POPUP_VIEW_UNLOCK | 116 | BUTTON_POPUP_VIEW_UNLOCK |
116 | }; | 117 | }; |
117 | // Button IDs for "options" popup menu | 118 | // Button IDs for "options" popup menu |
118 | enum { | 119 | enum { |
119 | BUTTON_POPUP_OPTIONS_CONFIG = 0 | 120 | BUTTON_POPUP_OPTIONS_CONFIG = 0 |
121 | #ifdef PWM_EMBEDDED | ||
122 | ,BUTTON_POPUP_OPTIONS_CATEGORY | ||
123 | #endif | ||
120 | }; | 124 | }; |
121 | // Button IDs for "export" popup menu (in "file" popup menu) | 125 | // Button IDs for "export" popup menu (in "file" popup menu) |
122 | enum { | 126 | enum { |
123 | BUTTON_POPUP_EXPORT_TEXT = 0, | 127 | BUTTON_POPUP_EXPORT_TEXT = 0, |
124 | BUTTON_POPUP_EXPORT_GPASMAN, | 128 | BUTTON_POPUP_EXPORT_GPASMAN, |
125 | BUTTON_POPUP_EXPORT_CSV | 129 | BUTTON_POPUP_EXPORT_CSV |
126 | #ifdef CONFIG_KWALLETIF | 130 | #ifdef CONFIG_KWALLETIF |
127 | ,BUTTON_POPUP_EXPORT_KWALLET | 131 | ,BUTTON_POPUP_EXPORT_KWALLET |
128 | #endif | 132 | #endif |
129 | }; | 133 | }; |
130 | // Button IDs for "import" popup menu (in "file" popup menu) | 134 | // Button IDs for "import" popup menu (in "file" popup menu) |
131 | enum { | 135 | enum { |
@@ -351,24 +355,30 @@ void PwM::initMenubar() | |||
351 | BUTTON_POPUP_VIEW_UNLOCK); | 355 | BUTTON_POPUP_VIEW_UNLOCK); |
352 | menuBar()->insertItem(i18n("&View"), viewPopup); | 356 | menuBar()->insertItem(i18n("&View"), viewPopup); |
353 | // "options" popup menu | 357 | // "options" popup menu |
354 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), | 358 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), |
355 | i18n("&Configure..."), this, | 359 | i18n("&Configure..."), this, |
356 | SLOT(config_slot()), | 360 | SLOT(config_slot()), |
357 | BUTTON_POPUP_OPTIONS_CONFIG); | 361 | BUTTON_POPUP_OPTIONS_CONFIG); |
358 | menuBar()->insertItem(i18n("&Options"), optionsPopup); | 362 | menuBar()->insertItem(i18n("&Options"), optionsPopup); |
359 | // "help" popup menu | 363 | // "help" popup menu |
360 | #ifndef PWM_EMBEDDED | 364 | #ifndef PWM_EMBEDDED |
361 | helpPopup = helpMenu(QString::null, false); | 365 | helpPopup = helpMenu(QString::null, false); |
362 | #else | 366 | #else |
367 | optionsPopup->insertItem(QIconSet(picons->loadIcon("configure", KIcon::Small)), | ||
368 | i18n("C&ategories..."), this, | ||
369 | SLOT(category_slot()), | ||
370 | BUTTON_POPUP_OPTIONS_CATEGORY); | ||
371 | |||
372 | |||
363 | menuBar()->insertItem(i18n("&Sync"), syncPopup); | 373 | menuBar()->insertItem(i18n("&Sync"), syncPopup); |
364 | 374 | ||
365 | 375 | ||
366 | 376 | ||
367 | 377 | ||
368 | 378 | ||
369 | helpPopup = new KPopupMenu(this); | 379 | helpPopup = new KPopupMenu(this); |
370 | 380 | ||
371 | 381 | ||
372 | helpPopup->insertItem(i18n("&License"), this, | 382 | helpPopup->insertItem(i18n("&License"), this, |
373 | SLOT(showLicense_slot()), 0, | 383 | SLOT(showLicense_slot()), 0, |
374 | BUTTON_POPUP_HELP_LICENSE); | 384 | BUTTON_POPUP_HELP_LICENSE); |
@@ -1382,24 +1392,83 @@ void PwM::showStatMsg(const QString &msg) | |||
1382 | void PwM::focusInEvent(QFocusEvent *e) | 1392 | void PwM::focusInEvent(QFocusEvent *e) |
1383 | { | 1393 | { |
1384 | if (e->gotFocus()) { | 1394 | if (e->gotFocus()) { |
1385 | emit gotFocus(this); | 1395 | emit gotFocus(this); |
1386 | } else if (e->lostFocus()) { | 1396 | } else if (e->lostFocus()) { |
1387 | emit lostFocus(this); | 1397 | emit lostFocus(this); |
1388 | } | 1398 | } |
1389 | } | 1399 | } |
1390 | 1400 | ||
1391 | 1401 | ||
1392 | #ifdef PWM_EMBEDDED | 1402 | #ifdef PWM_EMBEDDED |
1393 | 1403 | ||
1404 | void PwM::category_slot() | ||
1405 | { | ||
1406 | PwMDoc *doc = curDoc(); | ||
1407 | PWM_ASSERT(doc); | ||
1408 | doc->timer()->getLock(DocTimer::id_autoLockTimer); | ||
1409 | |||
1410 | editCategoryWnd w(doc, this, "editcategory"); | ||
1411 | /* | ||
1412 | vector<string> catList; | ||
1413 | doc->getCategoryList(&catList); | ||
1414 | unsigned i, size = catList.size(); | ||
1415 | for (i = 0; i < size; ++i) { | ||
1416 | w.addCategory(catList[i].c_str()); | ||
1417 | } | ||
1418 | w.setCurrCategory(view->getCurrentCategory()); | ||
1419 | if (pw) | ||
1420 | w.pwLineEdit->setText(*pw); | ||
1421 | */ | ||
1422 | w.setCurrCategory(view->getCurrentCategory()); | ||
1423 | |||
1424 | tryAgain: | ||
1425 | if (w.exec() == 1) | ||
1426 | { | ||
1427 | PwMDataItem d; | ||
1428 | |||
1429 | //US BUG: to initialize all values of curEntr with meaningfulldata, | ||
1430 | // we call clear on it. Reason: Metadata will be uninitialized otherwise. | ||
1431 | // another option would be to create a constructor for PwMDataItem | ||
1432 | d.clear(true); | ||
1433 | /* | ||
1434 | d.desc = w.getDescription().latin1(); | ||
1435 | d.name = w.getUsername().latin1(); | ||
1436 | d.pw = w.getPassword().latin1(); | ||
1437 | d.comment = w.getComment().latin1(); | ||
1438 | d.url = w.getUrl().latin1(); | ||
1439 | d.launcher = w.getLauncher().latin1(); | ||
1440 | PwMerror ret = doc->addEntry(w.getCategory(), &d); | ||
1441 | if (ret == e_entryExists) { | ||
1442 | KMessageBox::error(this, | ||
1443 | i18n | ||
1444 | ("An entry with this \"Description\",\n" | ||
1445 | "does already exist.\n" | ||
1446 | "Please select another description."), | ||
1447 | i18n("entry already exists.")); | ||
1448 | goto tryAgain; | ||
1449 | } else if (ret == e_maxAllowedEntr) { | ||
1450 | KMessageBox::error(this, i18n("The maximum possible number of\nentries" | ||
1451 | "has been reached.\nYou can't add more entries."), | ||
1452 | i18n("maximum number of entries")); | ||
1453 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | ||
1454 | return; | ||
1455 | } | ||
1456 | */ | ||
1457 | } | ||
1458 | setVirgin(false); | ||
1459 | doc->timer()->putLock(DocTimer::id_autoLockTimer); | ||
1460 | } | ||
1461 | |||
1462 | |||
1394 | void PwM::whatsnew_slot() | 1463 | void PwM::whatsnew_slot() |
1395 | { | 1464 | { |
1396 | KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); | 1465 | KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); |
1397 | } | 1466 | } |
1398 | 1467 | ||
1399 | void PwM::showLicense_slot() | 1468 | void PwM::showLicense_slot() |
1400 | { | 1469 | { |
1401 | KApplication::showLicence(); | 1470 | KApplication::showLicence(); |
1402 | } | 1471 | } |
1403 | 1472 | ||
1404 | void PwM::faq_slot() | 1473 | void PwM::faq_slot() |
1405 | { | 1474 | { |
diff --git a/pwmanager/pwmanager/pwm.h b/pwmanager/pwmanager/pwm.h index fb34bca..9fa9edc 100644 --- a/pwmanager/pwmanager/pwm.h +++ b/pwmanager/pwmanager/pwm.h | |||
@@ -170,24 +170,25 @@ public slots: | |||
170 | /** generate a new chipcard */ | 170 | /** generate a new chipcard */ |
171 | void genNewCard_slot(); | 171 | void genNewCard_slot(); |
172 | /** completely erase the current card */ | 172 | /** completely erase the current card */ |
173 | void eraseCard_slot(); | 173 | void eraseCard_slot(); |
174 | /** returns the ID number of the current card */ | 174 | /** returns the ID number of the current card */ |
175 | void readCardId_slot(); | 175 | void readCardId_slot(); |
176 | /** make backup image of the current card */ | 176 | /** make backup image of the current card */ |
177 | void makeCardBackup_slot(); | 177 | void makeCardBackup_slot(); |
178 | /** write backup image to current card */ | 178 | /** write backup image to current card */ |
179 | void replayCardBackup_slot(); | 179 | void replayCardBackup_slot(); |
180 | 180 | ||
181 | #ifdef PWM_EMBEDDED | 181 | #ifdef PWM_EMBEDDED |
182 | void category_slot(); | ||
182 | void whatsnew_slot(); | 183 | void whatsnew_slot(); |
183 | void showLicense_slot(); | 184 | void showLicense_slot(); |
184 | void faq_slot(); | 185 | void faq_slot(); |
185 | void createAboutData_slot(); | 186 | void createAboutData_slot(); |
186 | void syncHowTo_slot(); | 187 | void syncHowTo_slot(); |
187 | #endif | 188 | #endif |
188 | 189 | ||
189 | protected: | 190 | protected: |
190 | /** is this window virgin? */ | 191 | /** is this window virgin? */ |
191 | bool isVirgin() | 192 | bool isVirgin() |
192 | { return virgin; } | 193 | { return virgin; } |
193 | /** add/remove virginity */ | 194 | /** add/remove virginity */ |
diff --git a/pwmanager/pwmanager/pwmanager.pro b/pwmanager/pwmanager/pwmanager.pro index fbc0554..7efe45c 100644 --- a/pwmanager/pwmanager/pwmanager.pro +++ b/pwmanager/pwmanager/pwmanager.pro | |||
@@ -58,24 +58,25 @@ QMAKE_CXXFLAGS += /TP /GX /GR /Ehsc | |||
58 | #compressbzip2.h \ | 58 | #compressbzip2.h \ |
59 | 59 | ||
60 | HEADERS = \ | 60 | HEADERS = \ |
61 | addentrywnd_emb.h \ | 61 | addentrywnd_emb.h \ |
62 | addentrywndimpl.h \ | 62 | addentrywndimpl.h \ |
63 | base64.h \ | 63 | base64.h \ |
64 | binentrygen.h \ | 64 | binentrygen.h \ |
65 | blowfish.h \ | 65 | blowfish.h \ |
66 | commentbox.h \ | 66 | commentbox.h \ |
67 | compiler.h \ | 67 | compiler.h \ |
68 | compressgzip.h \ | 68 | compressgzip.h \ |
69 | csv.h \ | 69 | csv.h \ |
70 | editcategory.h \ | ||
70 | findwnd_emb.h \ | 71 | findwnd_emb.h \ |
71 | findwndimpl.h \ | 72 | findwndimpl.h \ |
72 | genpasswd.h \ | 73 | genpasswd.h \ |
73 | getkeycardwnd.h \ | 74 | getkeycardwnd.h \ |
74 | getmasterpwwnd_emb.h \ | 75 | getmasterpwwnd_emb.h \ |
75 | getmasterpwwndimpl.h \ | 76 | getmasterpwwndimpl.h \ |
76 | globalstuff.h \ | 77 | globalstuff.h \ |
77 | gpasmanfile.h \ | 78 | gpasmanfile.h \ |
78 | htmlgen.h \ | 79 | htmlgen.h \ |
79 | htmlparse.h \ | 80 | htmlparse.h \ |
80 | ipc.h \ | 81 | ipc.h \ |
81 | libgcryptif.h \ | 82 | libgcryptif.h \ |
@@ -124,24 +125,25 @@ kcmconfigs/pwmconfigwidget.h | |||
124 | #compressbzip2.cpp | 125 | #compressbzip2.cpp |
125 | 126 | ||
126 | 127 | ||
127 | SOURCES = \ | 128 | SOURCES = \ |
128 | addentrywnd_emb.cpp \ | 129 | addentrywnd_emb.cpp \ |
129 | addentrywndimpl.cpp \ | 130 | addentrywndimpl.cpp \ |
130 | base64.cpp \ | 131 | base64.cpp \ |
131 | binentrygen.cpp \ | 132 | binentrygen.cpp \ |
132 | blowfish.cpp \ | 133 | blowfish.cpp \ |
133 | commentbox.cpp \ | 134 | commentbox.cpp \ |
134 | compressgzip.cpp \ | 135 | compressgzip.cpp \ |
135 | csv.cpp \ | 136 | csv.cpp \ |
137 | editcategory.cpp \ | ||
136 | findwnd_emb.cpp \ | 138 | findwnd_emb.cpp \ |
137 | findwndimpl.cpp \ | 139 | findwndimpl.cpp \ |
138 | genpasswd.cpp \ | 140 | genpasswd.cpp \ |
139 | getkeycardwnd.cpp \ | 141 | getkeycardwnd.cpp \ |
140 | getmasterpwwnd_emb.cpp \ | 142 | getmasterpwwnd_emb.cpp \ |
141 | getmasterpwwndimpl.cpp \ | 143 | getmasterpwwndimpl.cpp \ |
142 | globalstuff.cpp \ | 144 | globalstuff.cpp \ |
143 | gpasmanfile.cpp \ | 145 | gpasmanfile.cpp \ |
144 | htmlgen.cpp \ | 146 | htmlgen.cpp \ |
145 | ipc.cpp \ | 147 | ipc.cpp \ |
146 | libgcryptif.cpp \ | 148 | libgcryptif.cpp \ |
147 | listobjselectwnd.cpp \ | 149 | listobjselectwnd.cpp \ |
diff --git a/pwmanager/pwmanager/pwmanagerE.pro b/pwmanager/pwmanager/pwmanagerE.pro index e195178..6b68514 100644 --- a/pwmanager/pwmanager/pwmanagerE.pro +++ b/pwmanager/pwmanager/pwmanagerE.pro | |||
@@ -56,24 +56,25 @@ LIBS += $(GCC3EXTRALIB2) | |||
56 | #compressbzip2.h \ | 56 | #compressbzip2.h \ |
57 | 57 | ||
58 | HEADERS = \ | 58 | HEADERS = \ |
59 | addentrywnd_emb.h \ | 59 | addentrywnd_emb.h \ |
60 | addentrywndimpl.h \ | 60 | addentrywndimpl.h \ |
61 | base64.h \ | 61 | base64.h \ |
62 | binentrygen.h \ | 62 | binentrygen.h \ |
63 | blowfish.h \ | 63 | blowfish.h \ |
64 | commentbox.h \ | 64 | commentbox.h \ |
65 | compiler.h \ | 65 | compiler.h \ |
66 | compressgzip.h \ | 66 | compressgzip.h \ |
67 | csv.h \ | 67 | csv.h \ |
68 | editcategory.h \ | ||
68 | findwnd_emb.h \ | 69 | findwnd_emb.h \ |
69 | findwndimpl.h \ | 70 | findwndimpl.h \ |
70 | genpasswd.h \ | 71 | genpasswd.h \ |
71 | getkeycardwnd.h \ | 72 | getkeycardwnd.h \ |
72 | getmasterpwwnd_emb.h \ | 73 | getmasterpwwnd_emb.h \ |
73 | getmasterpwwndimpl.h \ | 74 | getmasterpwwndimpl.h \ |
74 | globalstuff.h \ | 75 | globalstuff.h \ |
75 | gpasmanfile.h \ | 76 | gpasmanfile.h \ |
76 | htmlgen.h \ | 77 | htmlgen.h \ |
77 | htmlparse.h \ | 78 | htmlparse.h \ |
78 | ipc.h \ | 79 | ipc.h \ |
79 | libgcryptif.h \ | 80 | libgcryptif.h \ |
@@ -122,24 +123,25 @@ kcmconfigs/pwmconfigwidget.h | |||
122 | #compressbzip2.cpp | 123 | #compressbzip2.cpp |
123 | 124 | ||
124 | 125 | ||
125 | SOURCES = \ | 126 | SOURCES = \ |
126 | addentrywnd_emb.cpp \ | 127 | addentrywnd_emb.cpp \ |
127 | addentrywndimpl.cpp \ | 128 | addentrywndimpl.cpp \ |
128 | base64.cpp \ | 129 | base64.cpp \ |
129 | binentrygen.cpp \ | 130 | binentrygen.cpp \ |
130 | blowfish.cpp \ | 131 | blowfish.cpp \ |
131 | commentbox.cpp \ | 132 | commentbox.cpp \ |
132 | compressgzip.cpp \ | 133 | compressgzip.cpp \ |
133 | csv.cpp \ | 134 | csv.cpp \ |
135 | editcategory.cpp \ | ||
134 | findwnd_emb.cpp \ | 136 | findwnd_emb.cpp \ |
135 | findwndimpl.cpp \ | 137 | findwndimpl.cpp \ |
136 | genpasswd.cpp \ | 138 | genpasswd.cpp \ |
137 | getkeycardwnd.cpp \ | 139 | getkeycardwnd.cpp \ |
138 | getmasterpwwnd_emb.cpp \ | 140 | getmasterpwwnd_emb.cpp \ |
139 | getmasterpwwndimpl.cpp \ | 141 | getmasterpwwndimpl.cpp \ |
140 | globalstuff.cpp \ | 142 | globalstuff.cpp \ |
141 | gpasmanfile.cpp \ | 143 | gpasmanfile.cpp \ |
142 | htmlgen.cpp \ | 144 | htmlgen.cpp \ |
143 | ipc.cpp \ | 145 | ipc.cpp \ |
144 | libgcryptif.cpp \ | 146 | libgcryptif.cpp \ |
145 | listobjselectwnd.cpp \ | 147 | listobjselectwnd.cpp \ |
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp index 9043acc..ddbf4f2 100644 --- a/pwmanager/pwmanager/pwmdoc.cpp +++ b/pwmanager/pwmanager/pwmdoc.cpp | |||
@@ -1043,24 +1043,27 @@ PwMerror PwMDoc::addCategory(const QString &category, unsigned int *categoryInde | |||
1043 | { | 1043 | { |
1044 | if (isDeepLocked()) { | 1044 | if (isDeepLocked()) { |
1045 | PwMerror ret; | 1045 | PwMerror ret; |
1046 | ret = deepLock(false); | 1046 | ret = deepLock(false); |
1047 | if (ret != e_success) | 1047 | if (ret != e_success) |
1048 | return e_lock; | 1048 | return e_lock; |
1049 | } | 1049 | } |
1050 | if (checkIfExist) { | 1050 | if (checkIfExist) { |
1051 | if (findCategory(category, categoryIndex)) | 1051 | if (findCategory(category, categoryIndex)) |
1052 | return e_categoryExists; | 1052 | return e_categoryExists; |
1053 | } | 1053 | } |
1054 | PwMCategoryItem item; | 1054 | PwMCategoryItem item; |
1055 | //US ENH: clear item to initialize with default values, or create a constructor | ||
1056 | item.clear(); | ||
1057 | |||
1055 | item.name = category.latin1(); | 1058 | item.name = category.latin1(); |
1056 | dti.dta.push_back(item); | 1059 | dti.dta.push_back(item); |
1057 | if (categoryIndex) | 1060 | if (categoryIndex) |
1058 | *categoryIndex = dti.dta.size() - 1; | 1061 | *categoryIndex = dti.dta.size() - 1; |
1059 | return e_success; | 1062 | return e_success; |
1060 | } | 1063 | } |
1061 | 1064 | ||
1062 | bool PwMDoc::delEntry(const QString &category, unsigned int index, bool dontFlagDirty) | 1065 | bool PwMDoc::delEntry(const QString &category, unsigned int index, bool dontFlagDirty) |
1063 | { | 1066 | { |
1064 | unsigned int cat = 0; | 1067 | unsigned int cat = 0; |
1065 | 1068 | ||
1066 | if (!findCategory(category, &cat)) { | 1069 | if (!findCategory(category, &cat)) { |
@@ -1871,24 +1874,26 @@ PwMerror PwMDoc::deepLock(bool lock, bool saveToFile) | |||
1871 | return e_success; | 1874 | return e_success; |
1872 | } | 1875 | } |
1873 | 1876 | ||
1874 | void PwMDoc::_deepUnlock() | 1877 | void PwMDoc::_deepUnlock() |
1875 | { | 1878 | { |
1876 | deepLock(false); | 1879 | deepLock(false); |
1877 | } | 1880 | } |
1878 | 1881 | ||
1879 | void PwMDoc::clearDoc() | 1882 | void PwMDoc::clearDoc() |
1880 | { | 1883 | { |
1881 | dti.clear(); | 1884 | dti.clear(); |
1882 | PwMCategoryItem d; | 1885 | PwMCategoryItem d; |
1886 | //US ENH: to initialize all members with meaningfull data. | ||
1887 | d.clear(); | ||
1883 | d.name = DEFAULT_CATEGORY.latin1(); | 1888 | d.name = DEFAULT_CATEGORY.latin1(); |
1884 | dti.dta.push_back(d); | 1889 | dti.dta.push_back(d); |
1885 | currentPw = ""; | 1890 | currentPw = ""; |
1886 | unsetDocStatFlag(DOC_STAT_UNLOCK_WITHOUT_PW); | 1891 | unsetDocStatFlag(DOC_STAT_UNLOCK_WITHOUT_PW); |
1887 | } | 1892 | } |
1888 | 1893 | ||
1889 | void PwMDoc::changeCurrentPw() | 1894 | void PwMDoc::changeCurrentPw() |
1890 | { | 1895 | { |
1891 | if (currentPw == "") | 1896 | if (currentPw == "") |
1892 | return; // doc hasn't been saved. No mpw available. | 1897 | return; // doc hasn't been saved. No mpw available. |
1893 | bool useChipcard = getDocStatFlag(DOC_STAT_USE_CHIPCARD); | 1898 | bool useChipcard = getDocStatFlag(DOC_STAT_USE_CHIPCARD); |
1894 | QString pw = requestMpwChange(¤tPw, &useChipcard); | 1899 | QString pw = requestMpwChange(¤tPw, &useChipcard); |
diff --git a/pwmanager/pwmanager/pwmdoc.h b/pwmanager/pwmanager/pwmdoc.h index 09923ab..ef81dfc 100644 --- a/pwmanager/pwmanager/pwmdoc.h +++ b/pwmanager/pwmanager/pwmdoc.h | |||
@@ -244,28 +244,37 @@ struct PwMDataItem | |||
244 | return true; | 244 | return true; |
245 | } | 245 | } |
246 | 246 | ||
247 | }; | 247 | }; |
248 | 248 | ||
249 | struct PwMCategoryItem | 249 | struct PwMCategoryItem |
250 | { | 250 | { |
251 | /** all PwMDataItems (all passwords) within this category */ | 251 | /** all PwMDataItems (all passwords) within this category */ |
252 | vector<PwMDataItem>d; | 252 | vector<PwMDataItem>d; |
253 | /** category name/description */ | 253 | /** category name/description */ |
254 | string name; | 254 | string name; |
255 | 255 | ||
256 | //US ENH: enhancements of the filestructure | ||
257 | /* each category stores the text for description,name and password */ | ||
258 | string desc_text; | ||
259 | string name_text; | ||
260 | string pw_text; | ||
261 | |||
256 | void clear() | 262 | void clear() |
257 | { | 263 | { |
258 | d.clear(); | 264 | d.clear(); |
259 | name = ""; | 265 | name = ""; |
266 | desc_text = "Description"; | ||
267 | name_text = "Username"; | ||
268 | pw_text = "Password"; | ||
260 | } | 269 | } |
261 | }; | 270 | }; |
262 | 271 | ||
263 | struct PwMSyncItem | 272 | struct PwMSyncItem |
264 | { | 273 | { |
265 | string syncName; | 274 | string syncName; |
266 | QDateTime lastSyncDate; | 275 | QDateTime lastSyncDate; |
267 | 276 | ||
268 | void clear() | 277 | void clear() |
269 | { | 278 | { |
270 | lastSyncDate = QDateTime(); | 279 | lastSyncDate = QDateTime(); |
271 | syncName = ""; | 280 | syncName = ""; |
@@ -776,24 +785,29 @@ protected: | |||
776 | //takePwMDataItem returns the following values | 785 | //takePwMDataItem returns the following values |
777 | // 0 equal | 786 | // 0 equal |
778 | // 1 take local | 787 | // 1 take local |
779 | // 2 take remote | 788 | // 2 take remote |
780 | // 3 cancel | 789 | // 3 cancel |
781 | int takePwMDataItem( PwMDataItem* local, PwMDataItem* remote, QDateTime lastSync, int mode , bool full ); | 790 | int takePwMDataItem( PwMDataItem* local, PwMDataItem* remote, QDateTime lastSync, int mode , bool full ); |
782 | 791 | ||
783 | //the following methods are the overwritten callbackmethods from the syncinterface | 792 | //the following methods are the overwritten callbackmethods from the syncinterface |
784 | virtual bool sync(KSyncManager* manager, QString filename, int mode); | 793 | virtual bool sync(KSyncManager* manager, QString filename, int mode); |
785 | virtual void removeSyncInfo( QString syncProfile); | 794 | virtual void removeSyncInfo( QString syncProfile); |
786 | 795 | ||
787 | #endif | 796 | #endif |
797 | //US ENH: helpermethods to return a whole category entry | ||
798 | /** returns a pointer to the categoryitem */ | ||
799 | PwMCategoryItem* getCategoryEntry(unsigned int index) | ||
800 | { return &(dti.dta[index]); } | ||
801 | |||
788 | private: | 802 | private: |
789 | //US ENH: helpermethods to access the sync data for a certain syncname. | 803 | //US ENH: helpermethods to access the sync data for a certain syncname. |
790 | // It returns the syncdatas index | 804 | // It returns the syncdatas index |
791 | bool findSyncData(const QString &syncname, unsigned int *index); | 805 | bool findSyncData(const QString &syncname, unsigned int *index); |
792 | 806 | ||
793 | /** add new syncdataentry */ | 807 | /** add new syncdataentry */ |
794 | PwMerror addSyncDataEntry(PwMSyncItem *d, bool dontFlagDirty = false); | 808 | PwMerror addSyncDataEntry(PwMSyncItem *d, bool dontFlagDirty = false); |
795 | 809 | ||
796 | /** returns a pointer to the syncdata */ | 810 | /** returns a pointer to the syncdata */ |
797 | PwMSyncItem* getSyncDataEntry(unsigned int index) | 811 | PwMSyncItem* getSyncDataEntry(unsigned int index) |
798 | { return &(dti.syncDta[index]); } | 812 | { return &(dti.syncDta[index]); } |
799 | 813 | ||
diff --git a/pwmanager/pwmanager/pwmview.cpp b/pwmanager/pwmanager/pwmview.cpp index 5aaf66e..7733028 100644 --- a/pwmanager/pwmanager/pwmview.cpp +++ b/pwmanager/pwmanager/pwmview.cpp | |||
@@ -251,24 +251,34 @@ void PwMView::shiftToView() | |||
251 | tmpSorted.insert(tmpSorted.begin(), entries, currItem); | 251 | tmpSorted.insert(tmpSorted.begin(), entries, currItem); |
252 | 252 | ||
253 | // Sort items and store them in tempoary tmpSorted. | 253 | // Sort items and store them in tempoary tmpSorted. |
254 | for (i = 0; i < entries; ++i) { | 254 | for (i = 0; i < entries; ++i) { |
255 | doc->getEntry(catDocIndex, i, &currItem); | 255 | doc->getEntry(catDocIndex, i, &currItem); |
256 | //qDebug("PwMView::shiftToView: %s, %i", currItem.desc.c_str(), currItem.listViewPos); | 256 | //qDebug("PwMView::shiftToView: %s, %i", currItem.desc.c_str(), currItem.listViewPos); |
257 | tmpSorted[currItem.listViewPos] = currItem; | 257 | tmpSorted[currItem.listViewPos] = currItem; |
258 | } | 258 | } |
259 | 259 | ||
260 | // shift tempoary data to ListView. | 260 | // shift tempoary data to ListView. |
261 | tmpDisableSort(); | 261 | tmpDisableSort(); |
262 | lv->clear(); | 262 | lv->clear(); |
263 | |||
264 | //US ENH: adjust the headers of the table according the category texts | ||
265 | { | ||
266 | PwMCategoryItem* catItem = doc->getCategoryEntry(catDocIndex); | ||
267 | // qDebug("PwMView::ShiftToView CAT: %i, %s", catDocIndex, catItem->name.c_str()); | ||
268 | lv->setColumnText(COLUMN_DESC, catItem->desc_text.c_str()); | ||
269 | lv->setColumnText(COLUMN_NAME, catItem->name_text.c_str()); | ||
270 | lv->setColumnText(COLUMN_PW, catItem->pw_text.c_str()); | ||
271 | } | ||
272 | |||
263 | QCheckListItem *newItem; | 273 | QCheckListItem *newItem; |
264 | vector<PwMDataItem>::iterator it = tmpSorted.begin(), | 274 | vector<PwMDataItem>::iterator it = tmpSorted.begin(), |
265 | end = tmpSorted.end(); | 275 | end = tmpSorted.end(); |
266 | while (it != end) { | 276 | while (it != end) { |
267 | newItem = new ListViewItemPwM(lv); | 277 | newItem = new ListViewItemPwM(lv); |
268 | newItem->setText(COLUMN_DESC, (*it).desc.c_str()); | 278 | newItem->setText(COLUMN_DESC, (*it).desc.c_str()); |
269 | if ((*it).binary) { | 279 | if ((*it).binary) { |
270 | newItem->setText(COLUMN_NAME, ""); | 280 | newItem->setText(COLUMN_NAME, ""); |
271 | newItem->setText(COLUMN_PW, i18n("<BINARY ENTRY>")); | 281 | newItem->setText(COLUMN_PW, i18n("<BINARY ENTRY>")); |
272 | newItem->setText(COLUMN_URL, ""); | 282 | newItem->setText(COLUMN_URL, ""); |
273 | newItem->setText(COLUMN_LAUNCHER, (*it).launcher.c_str()); | 283 | newItem->setText(COLUMN_LAUNCHER, (*it).launcher.c_str()); |
274 | } else { | 284 | } else { |
diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp index 5753c1d..507fa30 100644 --- a/pwmanager/pwmanager/serializer.cpp +++ b/pwmanager/pwmanager/serializer.cpp | |||
@@ -30,93 +30,107 @@ | |||
30 | #define SERIALIZER_DEBUG0 | 30 | #define SERIALIZER_DEBUG0 |
31 | /* use the old xml tags for writing (0/1) */ | 31 | /* use the old xml tags for writing (0/1) */ |
32 | #define USE_OLD_TAGS 0 | 32 | #define USE_OLD_TAGS 0 |
33 | /* write a CDATA section (0/1) */ | 33 | /* write a CDATA section (0/1) */ |
34 | #define WRITE_CDATA_SEC 0 | 34 | #define WRITE_CDATA_SEC 0 |
35 | 35 | ||
36 | 36 | ||
37 | #define META_CREATE_DATE"c" | 37 | #define META_CREATE_DATE"c" |
38 | #define META_VALID_DATE "v" | 38 | #define META_VALID_DATE "v" |
39 | #define META_EXPIRE_DATE"e" | 39 | #define META_EXPIRE_DATE"e" |
40 | #define META_UPDATE_DATE"u" | 40 | #define META_UPDATE_DATE"u" |
41 | #define META_UPDATE_INT "i" | 41 | #define META_UPDATE_INT "i" |
42 | //US ENH : uniqueid | 42 | //US ENH : uniqueid and sync information |
43 | #define META_UNIQUEID "n" | 43 | #define META_UNIQUEID "n" |
44 | #define SYNC_ROOT "s" | 44 | #define SYNC_ROOT "s" |
45 | #define SYNC_TARGET_PREFIX "t" | 45 | #define SYNC_TARGET_PREFIX "t" |
46 | #define SYNC_TARGET_NAME "n" | 46 | #define SYNC_TARGET_NAME "n" |
47 | 47 | ||
48 | 48 | ||
49 | /* This is compatibility stuff. | 49 | /* This is compatibility stuff. |
50 | * The names of the entries have changed and here are the | 50 | * The names of the entries have changed and here are the |
51 | * new and old ones | 51 | * new and old ones |
52 | */ | 52 | */ |
53 | #define ROOT_MAGIC_OLD "PwM-xml-dat" | 53 | #define ROOT_MAGIC_OLD "PwM-xml-dat" |
54 | #define VER_STR_OLD "ver" | 54 | #define VER_STR_OLD "ver" |
55 | #define COMPAT_VER_OLD "0x02" | 55 | #define COMPAT_VER_OLD "0x02" |
56 | #define CAT_ROOT_OLD "categories" | 56 | #define CAT_ROOT_OLD "categories" |
57 | #define CAT_PREFIX_OLD "cat_" | 57 | #define CAT_PREFIX_OLD "cat_" |
58 | #define CAT_NAME_OLD "name" | 58 | #define CAT_NAME_OLD "name" |
59 | //US ENH : optional text for categories | ||
60 | #define CAT_TEXT_OLD "text" | ||
61 | |||
59 | #define ENTRY_PREFIX_OLD"entry_" | 62 | #define ENTRY_PREFIX_OLD"entry_" |
60 | #define ENTRY_DESC_OLD "desc" | 63 | #define ENTRY_DESC_OLD "desc" |
61 | #define ENTRY_NAME_OLD "name" | 64 | #define ENTRY_NAME_OLD "name" |
62 | #define ENTRY_PW_OLD "pw" | 65 | #define ENTRY_PW_OLD "pw" |
63 | #define ENTRY_COMMENT_OLD"comment" | 66 | #define ENTRY_COMMENT_OLD"comment" |
64 | #define ENTRY_URL_OLD "url" | 67 | #define ENTRY_URL_OLD "url" |
65 | #define ENTRY_LAUNCHER_OLD"launcher" | 68 | #define ENTRY_LAUNCHER_OLD"launcher" |
66 | #define ENTRY_LVP_OLD "listViewPos" | 69 | #define ENTRY_LVP_OLD "listViewPos" |
67 | #define ENTRY_BIN_OLD "b" | 70 | #define ENTRY_BIN_OLD "b" |
68 | #define ENTRY_META_OLD "m" | 71 | #define ENTRY_META_OLD "m" |
69 | 72 | ||
70 | #define ROOT_MAGIC_NEW "P" | 73 | #define ROOT_MAGIC_NEW "P" |
71 | #define VER_STR_NEW "v" | 74 | #define VER_STR_NEW "v" |
72 | #define COMPAT_VER_NEW "2" | 75 | #define COMPAT_VER_NEW "2" |
73 | #define CAT_ROOT_NEW "c" | 76 | #define CAT_ROOT_NEW "c" |
74 | #define CAT_PREFIX_NEW "c" | 77 | #define CAT_PREFIX_NEW "c" |
75 | #define CAT_NAME_NEW "n" | 78 | #define CAT_NAME_NEW "n" |
79 | //US ENH : optional text for categories | ||
80 | #define CAT_TEXT_NEW "t" | ||
81 | |||
76 | #define ENTRY_PREFIX_NEW"e" | 82 | #define ENTRY_PREFIX_NEW"e" |
77 | #define ENTRY_DESC_NEW "d" | 83 | #define ENTRY_DESC_NEW "d" |
78 | #define ENTRY_NAME_NEW "n" | 84 | #define ENTRY_NAME_NEW "n" |
79 | #define ENTRY_PW_NEW "p" | 85 | #define ENTRY_PW_NEW "p" |
80 | #define ENTRY_COMMENT_NEW"c" | 86 | #define ENTRY_COMMENT_NEW"c" |
81 | #define ENTRY_URL_NEW "u" | 87 | #define ENTRY_URL_NEW "u" |
82 | #define ENTRY_LAUNCHER_NEW"l" | 88 | #define ENTRY_LAUNCHER_NEW"l" |
83 | #define ENTRY_LVP_NEW "v" | 89 | #define ENTRY_LVP_NEW "v" |
84 | #define ENTRY_BIN_NEW ENTRY_BIN_OLD | 90 | #define ENTRY_BIN_NEW ENTRY_BIN_OLD |
85 | #define ENTRY_META_NEW ENTRY_META_OLD | 91 | #define ENTRY_META_NEW ENTRY_META_OLD |
86 | 92 | ||
87 | #if USE_OLD_TAGS != 0 | 93 | #if USE_OLD_TAGS != 0 |
88 | # define ROOT_MAGIC_WR ROOT_MAGIC_OLD | 94 | # define ROOT_MAGIC_WR ROOT_MAGIC_OLD |
89 | # define VER_STR_WR VER_STR_OLD | 95 | # define VER_STR_WR VER_STR_OLD |
90 | # define COMPAT_VER_WR COMPAT_VER_OLD | 96 | # define COMPAT_VER_WR COMPAT_VER_OLD |
91 | # define CAT_ROOT_WR CAT_ROOT_OLD | 97 | # define CAT_ROOT_WR CAT_ROOT_OLD |
92 | # define CAT_PREFIX_WR CAT_PREFIX_OLD | 98 | # define CAT_PREFIX_WR CAT_PREFIX_OLD |
93 | # define CAT_NAME_WR CAT_NAME_OLD | 99 | # define CAT_NAME_WR CAT_NAME_OLD |
100 | |||
101 | //US ENH : optional text for categories | ||
102 | # define CAT_TEXT_WR CAT_TEXT_OLD | ||
103 | |||
94 | # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD | 104 | # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD |
95 | # define ENTRY_DESC_WR ENTRY_DESC_OLD | 105 | # define ENTRY_DESC_WR ENTRY_DESC_OLD |
96 | # define ENTRY_NAME_WR ENTRY_NAME_OLD | 106 | # define ENTRY_NAME_WR ENTRY_NAME_OLD |
97 | # define ENTRY_PW_WR ENTRY_PW_OLD | 107 | # define ENTRY_PW_WR ENTRY_PW_OLD |
98 | # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD | 108 | # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD |
99 | # define ENTRY_URL_WR ENTRY_URL_OLD | 109 | # define ENTRY_URL_WR ENTRY_URL_OLD |
100 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD | 110 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD |
101 | # define ENTRY_LVP_WR ENTRY_LVP_OLD | 111 | # define ENTRY_LVP_WR ENTRY_LVP_OLD |
102 | # define ENTRY_BIN_WR ENTRY_BIN_OLD | 112 | # define ENTRY_BIN_WR ENTRY_BIN_OLD |
103 | # define ENTRY_META_WR ENTRY_META_OLD | 113 | # define ENTRY_META_WR ENTRY_META_OLD |
104 | #else | 114 | #else |
105 | # define ROOT_MAGIC_WR ROOT_MAGIC_NEW | 115 | # define ROOT_MAGIC_WR ROOT_MAGIC_NEW |
106 | # define VER_STR_WR VER_STR_NEW | 116 | # define VER_STR_WR VER_STR_NEW |
107 | # define COMPAT_VER_WR COMPAT_VER_NEW | 117 | # define COMPAT_VER_WR COMPAT_VER_NEW |
108 | # define CAT_ROOT_WR CAT_ROOT_NEW | 118 | # define CAT_ROOT_WR CAT_ROOT_NEW |
109 | # define CAT_PREFIX_WR CAT_PREFIX_NEW | 119 | # define CAT_PREFIX_WR CAT_PREFIX_NEW |
110 | # define CAT_NAME_WR CAT_NAME_NEW | 120 | # define CAT_NAME_WR CAT_NAME_NEW |
121 | |||
122 | //US ENH : optional text for categories | ||
123 | # define CAT_TEXT_WR CAT_TEXT_NEW | ||
124 | |||
111 | # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW | 125 | # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW |
112 | # define ENTRY_DESC_WR ENTRY_DESC_NEW | 126 | # define ENTRY_DESC_WR ENTRY_DESC_NEW |
113 | # define ENTRY_NAME_WR ENTRY_NAME_NEW | 127 | # define ENTRY_NAME_WR ENTRY_NAME_NEW |
114 | # define ENTRY_PW_WR ENTRY_PW_NEW | 128 | # define ENTRY_PW_WR ENTRY_PW_NEW |
115 | # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW | 129 | # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW |
116 | # define ENTRY_URL_WR ENTRY_URL_NEW | 130 | # define ENTRY_URL_WR ENTRY_URL_NEW |
117 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW | 131 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW |
118 | # define ENTRY_LVP_WR ENTRY_LVP_NEW | 132 | # define ENTRY_LVP_WR ENTRY_LVP_NEW |
119 | # define ENTRY_BIN_WR ENTRY_BIN_NEW | 133 | # define ENTRY_BIN_WR ENTRY_BIN_NEW |
120 | # define ENTRY_META_WR ENTRY_META_NEW | 134 | # define ENTRY_META_WR ENTRY_META_NEW |
121 | #endif | 135 | #endif |
122 | 136 | ||
@@ -262,43 +276,61 @@ bool Serializer::deSerialize(PwMItem *dta) | |||
262 | return false; | 276 | return false; |
263 | 277 | ||
264 | } | 278 | } |
265 | return true; | 279 | return true; |
266 | } | 280 | } |
267 | 281 | ||
268 | bool Serializer::readCategories(const QDomNode &n, | 282 | bool Serializer::readCategories(const QDomNode &n, |
269 | vector<PwMCategoryItem> *dta) | 283 | vector<PwMCategoryItem> *dta) |
270 | { | 284 | { |
271 | QDomNodeList nl(n.childNodes()); | 285 | QDomNodeList nl(n.childNodes()); |
272 | QDomNode cur; | 286 | QDomNode cur; |
273 | QString name; | 287 | QString name; |
288 | QString text; | ||
274 | unsigned int numCat = nl.count(), i; | 289 | unsigned int numCat = nl.count(), i; |
275 | PwMCategoryItem curCat; | 290 | PwMCategoryItem curCat; |
276 | vector<PwMDataItem> curEntr; | 291 | vector<PwMDataItem> curEntr; |
277 | 292 | ||
278 | if (!numCat) { | 293 | if (!numCat) { |
279 | printDebug("Serializer::readCategories(): empty"); | 294 | printDebug("Serializer::readCategories(): empty"); |
280 | return false; | 295 | return false; |
281 | } | 296 | } |
282 | for (i = 0; i < numCat; ++i) { | 297 | for (i = 0; i < numCat; ++i) { |
283 | cur = nl.item(i); | 298 | cur = nl.item(i); |
284 | if (cur.nodeName().left(1) == CAT_PREFIX_NEW || | 299 | if (cur.nodeName().left(1) == CAT_PREFIX_NEW || |
285 | cur.nodeName().left(4) == CAT_PREFIX_OLD) { | 300 | cur.nodeName().left(4) == CAT_PREFIX_OLD) { |
286 | name = cur.toElement().attribute(CAT_NAME_NEW); | 301 | name = cur.toElement().attribute(CAT_NAME_NEW); |
287 | if (name == QString::null) | 302 | if (name == QString::null) |
288 | name = cur.toElement().attribute(CAT_NAME_OLD); | 303 | name = cur.toElement().attribute(CAT_NAME_OLD); |
289 | PWM_ASSERT(name != QString::null); | 304 | PWM_ASSERT(name != QString::null); |
290 | PWM_ASSERT(name != ""); | 305 | PWM_ASSERT(name != ""); |
291 | curCat.clear(); | 306 | curCat.clear(); |
292 | curCat.name = name.latin1(); | 307 | curCat.name = name.latin1(); |
308 | |||
309 | //US ENH: new version might include text for description, name and pw | ||
310 | text = cur.toElement().attribute(CAT_TEXT_NEW); | ||
311 | if (text == QString::null) | ||
312 | text = cur.toElement().attribute(CAT_TEXT_OLD); | ||
313 | if (text != QString::null) | ||
314 | { | ||
315 | QStringList textlist = QStringList::split(";", text, true); | ||
316 | unsigned int num = textlist.count(); | ||
317 | if (num > 0) | ||
318 | curCat.desc_text = textlist[0].latin1(); | ||
319 | if (num > 1) | ||
320 | curCat.name_text = textlist[1].latin1(); | ||
321 | if (num > 2) | ||
322 | curCat.pw_text = textlist[2].latin1(); | ||
323 | } | ||
324 | |||
293 | if (!readEntries(cur, &curEntr)) { | 325 | if (!readEntries(cur, &curEntr)) { |
294 | dta->clear(); | 326 | dta->clear(); |
295 | return false; | 327 | return false; |
296 | } | 328 | } |
297 | curCat.d = curEntr; | 329 | curCat.d = curEntr; |
298 | dta->push_back(curCat); | 330 | dta->push_back(curCat); |
299 | } else { | 331 | } else { |
300 | printDebug("Serializer::readCategories(): uh? not a category?"); | 332 | printDebug("Serializer::readCategories(): uh? not a category?"); |
301 | } | 333 | } |
302 | } | 334 | } |
303 | return true; | 335 | return true; |
304 | } | 336 | } |
@@ -492,24 +524,34 @@ bool Serializer::addCategories(QDomElement *e, | |||
492 | const vector<PwMCategoryItem> &dta) | 524 | const vector<PwMCategoryItem> &dta) |
493 | { | 525 | { |
494 | unsigned int numCat = dta.size(), i; | 526 | unsigned int numCat = dta.size(), i; |
495 | QString curId, curName; | 527 | QString curId, curName; |
496 | QDomElement curCat; | 528 | QDomElement curCat; |
497 | 529 | ||
498 | for (i = 0; i < numCat; ++i) { | 530 | for (i = 0; i < numCat; ++i) { |
499 | curId = CAT_PREFIX_WR; | 531 | curId = CAT_PREFIX_WR; |
500 | curId += tostr(i).c_str(); | 532 | curId += tostr(i).c_str(); |
501 | curName = dta[i].name.c_str(); | 533 | curName = dta[i].name.c_str(); |
502 | curCat = domDoc->createElement(curId); | 534 | curCat = domDoc->createElement(curId); |
503 | curCat.setAttribute(CAT_NAME_WR, curName); | 535 | curCat.setAttribute(CAT_NAME_WR, curName); |
536 | |||
537 | //US ENH: new version includes text for description, name and pw | ||
538 | QStringList curTextList; | ||
539 | curTextList << dta[i].desc_text.c_str(); | ||
540 | curTextList << dta[i].name_text.c_str(); | ||
541 | curTextList << dta[i].pw_text.c_str(); | ||
542 | QString text = curTextList.join(";"); | ||
543 | curCat.setAttribute(CAT_TEXT_WR, text); | ||
544 | |||
545 | |||
504 | if (!addEntries(&curCat, dta[i].d)) { | 546 | if (!addEntries(&curCat, dta[i].d)) { |
505 | return false; | 547 | return false; |
506 | } | 548 | } |
507 | e->appendChild(curCat); | 549 | e->appendChild(curCat); |
508 | } | 550 | } |
509 | return true; | 551 | return true; |
510 | } | 552 | } |
511 | 553 | ||
512 | bool Serializer::addEntries(QDomElement *e, | 554 | bool Serializer::addEntries(QDomElement *e, |
513 | const vector<PwMDataItem> &dta) | 555 | const vector<PwMDataItem> &dta) |
514 | { | 556 | { |
515 | unsigned int numEntr = dta.size(), i; | 557 | unsigned int numEntr = dta.size(), i; |