summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--pwmanager/pwmanager/pwmdoc.cpp15
-rw-r--r--pwmanager/pwmanager/pwmprefs.cpp1
-rw-r--r--pwmanager/pwmanager/pwmprefs.h4
-rw-r--r--pwmanager/pwmanager/pwmviewstyle.cpp32
-rw-r--r--pwmanager/pwmanager/pwmviewstyle_0.cpp21
-rw-r--r--pwmanager/pwmanager/pwmviewstyle_0.h6
-rw-r--r--pwmanager/pwmanager/pwmviewstyle_1.cpp20
-rw-r--r--pwmanager/pwmanager/pwmviewstyle_1.h5
-rw-r--r--pwmanager/pwmanager/serializer.cpp34
9 files changed, 107 insertions, 31 deletions
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp
index 9fe4809..c167c2c 100644
--- a/pwmanager/pwmanager/pwmdoc.cpp
+++ b/pwmanager/pwmanager/pwmdoc.cpp
@@ -1,179 +1,181 @@
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 2.0 of pwmanager 14 * This file is originaly based on version 2.0 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 "pwmdoc.h" 20#include "pwmdoc.h"
21#include "pwmview.h" 21#include "pwmview.h"
22#include "blowfish.h" 22#include "blowfish.h"
23#include "sha1.h" 23#include "sha1.h"
24#include "globalstuff.h" 24#include "globalstuff.h"
25#include "gpasmanfile.h" 25#include "gpasmanfile.h"
26#include "serializer.h" 26#include "serializer.h"
27#include "compressgzip.h" 27#include "compressgzip.h"
28#include "compressbzip2.h" 28#include "compressbzip2.h"
29#include "randomizer.h" 29#include "randomizer.h"
30#include "pwminit.h" 30#include "pwminit.h"
31#ifndef PWM_EMBEDDED 31#ifndef PWM_EMBEDDED
32//US #include "libgryptif.h" 32//US #include "libgryptif.h"
33#else 33#else
34#include "pwmprefs.h" 34#include "pwmprefs.h"
35#include "kglobal.h" 35#include "kglobal.h"
36#endif 36#endif
37 37
38#ifdef CONFIG_KWALLETIF 38#ifdef CONFIG_KWALLETIF
39# include "kwalletemu.h" 39# include "kwalletemu.h"
40#endif // CONFIG_KWALLETIF 40#endif // CONFIG_KWALLETIF
41 41
42#include <qdatetime.h> 42#include <qdatetime.h>
43#include <qsize.h> 43#include <qsize.h>
44#include <qfileinfo.h> 44#include <qfileinfo.h>
45#include <qfile.h> 45#include <qfile.h>
46 46
47#define __USE_GNU
48#define _GNU_SOURCE
47#include <stdio.h> 49#include <stdio.h>
48#include <stdlib.h> 50#include <stdlib.h>
49#include <errno.h> 51#include <errno.h>
50#include <string.h> 52#include <string.h>
51#include <iostream> 53//US#include <iostream>
52#include <algorithm> 54#include <algorithm>
53#include <sys/types.h> 55#include <sys/types.h>
54#include <sys/stat.h> 56#include <sys/stat.h>
55#include <unistd.h> 57#include <unistd.h>
56#include <stdint.h> 58#include <stdint.h>
57 59
58//TODO: reset to its normal value. 60//TODO: reset to its normal value.
59 #define META_CHECK_TIMER_INTERVAL10/*300*/ /* sek */ 61 #define META_CHECK_TIMER_INTERVAL10/*300*/ /* sek */
60 62
61using namespace std; 63using namespace std;
62 64
63 65
64void PwMDocList::add(PwMDoc *doc, const string &id) 66void PwMDocList::add(PwMDoc *doc, const string &id)
65{ 67{
66#ifdef PWM_DEBUG 68#ifdef PWM_DEBUG
67 // check for existance of object in debug mode only. 69 // check for existance of object in debug mode only.
68 vector<listItem>::iterator begin = docList.begin(), 70 vector<listItem>::iterator begin = docList.begin(),
69 end = docList.end(), 71 end = docList.end(),
70 i = begin; 72 i = begin;
71 while (i != end) { 73 while (i != end) {
72 if (i->doc == doc) { 74 if (i->doc == doc) {
73 BUG(); 75 BUG();
74 return; 76 return;
75 } 77 }
76 ++i; 78 ++i;
77 } 79 }
78#endif 80#endif
79 listItem newItem; 81 listItem newItem;
80 newItem.doc = doc; 82 newItem.doc = doc;
81 newItem.docId = id; 83 newItem.docId = id;
82 docList.push_back(newItem); 84 docList.push_back(newItem);
83} 85}
84 86
85void PwMDocList::edit(PwMDoc *doc, const string &newId) 87void PwMDocList::edit(PwMDoc *doc, const string &newId)
86{ 88{
87 vector<listItem>::iterator begin = docList.begin(), 89 vector<listItem>::iterator begin = docList.begin(),
88 end = docList.end(), 90 end = docList.end(),
89 i = begin; 91 i = begin;
90 while (i != end) { 92 while (i != end) {
91 if (i->doc == doc) { 93 if (i->doc == doc) {
92 i->docId = newId; 94 i->docId = newId;
93 return; 95 return;
94 } 96 }
95 ++i; 97 ++i;
96 } 98 }
97} 99}
98 100
99void PwMDocList::del(PwMDoc *doc) 101void PwMDocList::del(PwMDoc *doc)
100{ 102{
101 vector<listItem>::iterator begin = docList.begin(), 103 vector<listItem>::iterator begin = docList.begin(),
102 end = docList.end(), 104 end = docList.end(),
103 i = begin; 105 i = begin;
104 while (i != end) { 106 while (i != end) {
105 if (i->doc == doc) { 107 if (i->doc == doc) {
106 docList.erase(i); 108 docList.erase(i);
107 return; 109 return;
108 } 110 }
109 ++i; 111 ++i;
110 } 112 }
111} 113}
112 114
113bool PwMDocList::find(const string &id, listItem *ret) 115bool PwMDocList::find(const string &id, listItem *ret)
114{ 116{
115 vector<listItem>::iterator begin = docList.begin(), 117 vector<listItem>::iterator begin = docList.begin(),
116 end = docList.end(), 118 end = docList.end(),
117 i = begin; 119 i = begin;
118 while (i != end) { 120 while (i != end) {
119 if (i->docId == id) { 121 if (i->docId == id) {
120 if (ret) 122 if (ret)
121 *ret = *i; 123 *ret = *i;
122 return true; 124 return true;
123 } 125 }
124 ++i; 126 ++i;
125 } 127 }
126 return false; 128 return false;
127} 129}
128 130
129 131
130 132
131DocTimer::DocTimer(PwMDoc *_doc) 133DocTimer::DocTimer(PwMDoc *_doc)
132 : doc (_doc) 134 : doc (_doc)
133 , mpwLock (0) 135 , mpwLock (0)
134 , autoLockLock (0) 136 , autoLockLock (0)
135 , metaCheckLock (0) 137 , metaCheckLock (0)
136{ 138{
137 mpwTimer = new QTimer; 139 mpwTimer = new QTimer;
138 autoLockTimer = new QTimer; 140 autoLockTimer = new QTimer;
139 metaCheckTimer = new QTimer; 141 metaCheckTimer = new QTimer;
140 connect(mpwTimer, SIGNAL(timeout()), 142 connect(mpwTimer, SIGNAL(timeout()),
141 this, SLOT(mpwTimeout())); 143 this, SLOT(mpwTimeout()));
142 connect(autoLockTimer, SIGNAL(timeout()), 144 connect(autoLockTimer, SIGNAL(timeout()),
143 this, SLOT(autoLockTimeout())); 145 this, SLOT(autoLockTimeout()));
144 connect(metaCheckTimer, SIGNAL(timeout()), 146 connect(metaCheckTimer, SIGNAL(timeout()),
145 this, SLOT(metaCheckTimeout())); 147 this, SLOT(metaCheckTimeout()));
146} 148}
147 149
148DocTimer::~DocTimer() 150DocTimer::~DocTimer()
149{ 151{
150 delete mpwTimer; 152 delete mpwTimer;
151 delete autoLockTimer; 153 delete autoLockTimer;
152 delete metaCheckTimer; 154 delete metaCheckTimer;
153} 155}
154 156
155void DocTimer::start(TimerIDs timer) 157void DocTimer::start(TimerIDs timer)
156{ 158{
157 switch (timer) { 159 switch (timer) {
158 case id_mpwTimer: 160 case id_mpwTimer:
159 if (mpwTimer->isActive()) 161 if (mpwTimer->isActive())
160 mpwTimer->stop(); 162 mpwTimer->stop();
161 doc->setDocStatFlag(DOC_STAT_UNLOCK_WITHOUT_PW); 163 doc->setDocStatFlag(DOC_STAT_UNLOCK_WITHOUT_PW);
162 mpwTimer->start(conf()->confGlobPwTimeout() * 1000, true); 164 mpwTimer->start(conf()->confGlobPwTimeout() * 1000, true);
163 break; 165 break;
164 case id_autoLockTimer: 166 case id_autoLockTimer:
165 if (autoLockTimer->isActive()) 167 if (autoLockTimer->isActive())
166 autoLockTimer->stop(); 168 autoLockTimer->stop();
167 if (conf()->confGlobLockTimeout() > 0) 169 if (conf()->confGlobLockTimeout() > 0)
168 autoLockTimer->start(conf()->confGlobLockTimeout() * 1000, true); 170 autoLockTimer->start(conf()->confGlobLockTimeout() * 1000, true);
169 break; 171 break;
170 case id_metaCheckTimer: 172 case id_metaCheckTimer:
171 if (metaCheckTimer->isActive()) 173 if (metaCheckTimer->isActive())
172 metaCheckTimer->stop(); 174 metaCheckTimer->stop();
173 metaCheckTimer->start(META_CHECK_TIMER_INTERVAL * 1000, true); 175 metaCheckTimer->start(META_CHECK_TIMER_INTERVAL * 1000, true);
174 break; 176 break;
175 } 177 }
176} 178}
177 179
178void DocTimer::stop(TimerIDs timer) 180void DocTimer::stop(TimerIDs timer)
179{ 181{
@@ -1029,264 +1031,275 @@ PwMerror PwMDoc::addCategory(const QString &category, unsigned int *categoryInde
1029 if (findCategory(category, categoryIndex)) 1031 if (findCategory(category, categoryIndex))
1030 return e_categoryExists; 1032 return e_categoryExists;
1031 } 1033 }
1032 PwMCategoryItem item; 1034 PwMCategoryItem item;
1033 item.name = category.latin1(); 1035 item.name = category.latin1();
1034 dta.push_back(item); 1036 dta.push_back(item);
1035 if (categoryIndex) 1037 if (categoryIndex)
1036 *categoryIndex = dta.size() - 1; 1038 *categoryIndex = dta.size() - 1;
1037 return e_success; 1039 return e_success;
1038} 1040}
1039 1041
1040bool PwMDoc::delEntry(const QString &category, unsigned int index, bool dontFlagDirty) 1042bool PwMDoc::delEntry(const QString &category, unsigned int index, bool dontFlagDirty)
1041{ 1043{
1042 unsigned int cat = 0; 1044 unsigned int cat = 0;
1043 1045
1044 if (!findCategory(category, &cat)) { 1046 if (!findCategory(category, &cat)) {
1045 BUG(); 1047 BUG();
1046 return false; 1048 return false;
1047 } 1049 }
1048 1050
1049 return delEntry(cat, index, dontFlagDirty); 1051 return delEntry(cat, index, dontFlagDirty);
1050} 1052}
1051 1053
1052bool PwMDoc::delEntry(unsigned int category, unsigned int index, bool dontFlagDirty) 1054bool PwMDoc::delEntry(unsigned int category, unsigned int index, bool dontFlagDirty)
1053{ 1055{
1054 if (isDeepLocked()) 1056 if (isDeepLocked())
1055 return false; 1057 return false;
1056 if (index > dta[category].d.size() - 1) 1058 if (index > dta[category].d.size() - 1)
1057 return false; 1059 return false;
1058 getDataChangedLock(); 1060 getDataChangedLock();
1059 if (!lockAt(category, index, false)) { 1061 if (!lockAt(category, index, false)) {
1060 putDataChangedLock(); 1062 putDataChangedLock();
1061 return false; 1063 return false;
1062 } 1064 }
1063 putDataChangedLock(); 1065 putDataChangedLock();
1064 int lvPos = dta[category].d[index].listViewPos; 1066 int lvPos = dta[category].d[index].listViewPos;
1065 1067
1066 // delete entry 1068 // delete entry
1067 dta[category].d.erase(dta[category].d.begin() + index); 1069 dta[category].d.erase(dta[category].d.begin() + index);
1068 1070
1069 unsigned int i, entries = numEntries(category); 1071 unsigned int i, entries = numEntries(category);
1070 if (!entries) { 1072 if (!entries) {
1071 // no more entries in this category, so 1073 // no more entries in this category, so
1072 // we can delete it, too. 1074 // we can delete it, too.
1073 BUG_ON(!delCategory(category)); 1075 BUG_ON(!delCategory(category));
1074 // delCategory() flags it dirty, so we need not to do so. 1076 // delCategory() flags it dirty, so we need not to do so.
1075 return true; 1077 return true;
1076 } 1078 }
1077 for (i = 0; i < entries; ++i) { 1079 for (i = 0; i < entries; ++i) {
1078 // decrement all listViewPositions that are greater than the deleted. 1080 // decrement all listViewPositions that are greater than the deleted.
1079 if (dta[category].d[i].listViewPos > lvPos) 1081 if (dta[category].d[i].listViewPos > lvPos)
1080 --dta[category].d[i].listViewPos; 1082 --dta[category].d[i].listViewPos;
1081 } 1083 }
1082 1084
1083 if (!dontFlagDirty) 1085 if (!dontFlagDirty)
1084 flagDirty(); 1086 flagDirty();
1085 return true; 1087 return true;
1086} 1088}
1087 1089
1088bool PwMDoc::editEntry(const QString &oldCategory, const QString &newCategory, 1090bool PwMDoc::editEntry(const QString &oldCategory, const QString &newCategory,
1089 unsigned int index, PwMDataItem *d, bool updateMeta) 1091 unsigned int index, PwMDataItem *d, bool updateMeta)
1090{ 1092{
1091 PWM_ASSERT(d); 1093 PWM_ASSERT(d);
1092 unsigned int oldCat = 0; 1094 unsigned int oldCat = 0;
1093 1095
1094 if (!findCategory(oldCategory, &oldCat)) { 1096 if (!findCategory(oldCategory, &oldCat)) {
1095 BUG(); 1097 BUG();
1096 return false; 1098 return false;
1097 } 1099 }
1098 1100
1099 return editEntry(oldCat, newCategory, index, d, updateMeta); 1101 return editEntry(oldCat, newCategory, index, d, updateMeta);
1100} 1102}
1101 1103
1102bool PwMDoc::editEntry(unsigned int oldCategory, const QString &newCategory, 1104bool PwMDoc::editEntry(unsigned int oldCategory, const QString &newCategory,
1103 unsigned int index, PwMDataItem *d, bool updateMeta) 1105 unsigned int index, PwMDataItem *d, bool updateMeta)
1104{ 1106{
1105 if (isDeepLocked()) 1107 if (isDeepLocked())
1106 return false; 1108 return false;
1107 if (updateMeta) { 1109 if (updateMeta) {
1108 d->meta.update = QDateTime::currentDateTime(); 1110 d->meta.update = QDateTime::currentDateTime();
1109 if (d->meta.create.isNull()) { 1111 if (d->meta.create.isNull()) {
1110 d->meta.create = d->meta.update; 1112 d->meta.create = d->meta.update;
1111 } 1113 }
1112 } 1114 }
1113 if (dta[oldCategory].name != newCategory.latin1()) { 1115 if (dta[oldCategory].name != newCategory.latin1()) {
1114 // the user changed the category. 1116 // the user changed the category.
1115 PwMerror ret; 1117 PwMerror ret;
1116 d->rev = 0; 1118 d->rev = 0;
1117 ret = addEntry(newCategory, d, true, false); 1119 ret = addEntry(newCategory, d, true, false);
1118 if (ret != e_success) 1120 if (ret != e_success)
1119 return false; 1121 return false;
1120 if (!delEntry(oldCategory, index, true)) 1122 if (!delEntry(oldCategory, index, true))
1121 return false; 1123 return false;
1122 } else { 1124 } else {
1123 d->rev = dta[oldCategory].d[index].rev + 1; // increment revision counter. 1125 d->rev = dta[oldCategory].d[index].rev + 1; // increment revision counter.
1124 dta[oldCategory].d[index] = *d; 1126 dta[oldCategory].d[index] = *d;
1125 } 1127 }
1126 flagDirty(); 1128 flagDirty();
1127 return true; 1129 return true;
1128} 1130}
1129 1131
1130unsigned int PwMDoc::numEntries(const QString &category) 1132unsigned int PwMDoc::numEntries(const QString &category)
1131{ 1133{
1132 unsigned int cat = 0; 1134 unsigned int cat = 0;
1133 1135
1134 if (!findCategory(category, &cat)) { 1136 if (!findCategory(category, &cat)) {
1135 BUG(); 1137 BUG();
1136 return 0; 1138 return 0;
1137 } 1139 }
1138 1140
1139 return numEntries(cat); 1141 return numEntries(cat);
1140} 1142}
1141 1143
1142bool PwMDoc::serializeDta(string *d) 1144bool PwMDoc::serializeDta(string *d)
1143{ 1145{
1144 PWM_ASSERT(d); 1146 PWM_ASSERT(d);
1145 Serializer ser; 1147 Serializer ser;
1146 if (!ser.serialize(dta)) 1148 if (!ser.serialize(dta))
1147 return false; 1149 return false;
1148 d->assign(ser.getXml()); 1150 d->assign(ser.getXml());
1149 if (!d->size()) 1151 if (!d->size())
1150 return false; 1152 return false;
1151 return true; 1153 return true;
1152} 1154}
1153 1155
1154bool PwMDoc::deSerializeDta(const string *d, bool entriesLocked) 1156bool PwMDoc::deSerializeDta(const string *d, bool entriesLocked)
1155{ 1157{
1156 PWM_ASSERT(d); 1158 PWM_ASSERT(d);
1159#ifndef PWM_EMBEDDED
1157 try { 1160 try {
1161
1158 Serializer ser(d->c_str()); 1162 Serializer ser(d->c_str());
1159 ser.setDefaultLockStat(entriesLocked); 1163 ser.setDefaultLockStat(entriesLocked);
1160 if (!ser.deSerialize(&dta)) 1164 if (!ser.deSerialize(&dta))
1161 return false; 1165 return false;
1162 } catch (PwMException) { 1166 } catch (PwMException) {
1163 return false; 1167 return false;
1164 } 1168 }
1169#else
1170 Serializer ser(d->c_str());
1171 ser.setDefaultLockStat(entriesLocked);
1172 if (!ser.deSerialize(&dta))
1173 return false;
1174 else
1175 return false;
1176#endif
1177
1165 emitDataChanged(this); 1178 emitDataChanged(this);
1166 return true; 1179 return true;
1167} 1180}
1168 1181
1169bool PwMDoc::getEntry(const QString &category, unsigned int index, 1182bool PwMDoc::getEntry(const QString &category, unsigned int index,
1170 PwMDataItem * d, bool unlockIfLocked) 1183 PwMDataItem * d, bool unlockIfLocked)
1171{ 1184{
1172 PWM_ASSERT(d); 1185 PWM_ASSERT(d);
1173 unsigned int cat = 0; 1186 unsigned int cat = 0;
1174 1187
1175 if (!findCategory(category, &cat)) { 1188 if (!findCategory(category, &cat)) {
1176 BUG(); 1189 BUG();
1177 return false; 1190 return false;
1178 } 1191 }
1179 1192
1180 return getEntry(cat, index, d, unlockIfLocked); 1193 return getEntry(cat, index, d, unlockIfLocked);
1181} 1194}
1182 1195
1183bool PwMDoc::getEntry(unsigned int category, unsigned int index, 1196bool PwMDoc::getEntry(unsigned int category, unsigned int index,
1184 PwMDataItem *d, bool unlockIfLocked) 1197 PwMDataItem *d, bool unlockIfLocked)
1185{ 1198{
1186 if (index > dta[category].d.size() - 1) 1199 if (index > dta[category].d.size() - 1)
1187 return false; 1200 return false;
1188 1201
1189 bool locked = isLocked(category, index); 1202 bool locked = isLocked(category, index);
1190 if (locked) { 1203 if (locked) {
1191 /* this entry is locked. We don't return a password, 1204 /* this entry is locked. We don't return a password,
1192 * until it's unlocked by the user by inserting 1205 * until it's unlocked by the user by inserting
1193 * chipcard or entering the mpw 1206 * chipcard or entering the mpw
1194 */ 1207 */
1195 if (unlockIfLocked) { 1208 if (unlockIfLocked) {
1196 if (!lockAt(category, index, false)) { 1209 if (!lockAt(category, index, false)) {
1197 return false; 1210 return false;
1198 } 1211 }
1199 locked = false; 1212 locked = false;
1200 } 1213 }
1201 } 1214 }
1202 1215
1203 *d = dta[category].d[index]; 1216 *d = dta[category].d[index];
1204 if (locked) 1217 if (locked)
1205 d->pw = LOCKED_STRING.latin1(); 1218 d->pw = LOCKED_STRING.latin1();
1206 1219
1207 return true; 1220 return true;
1208} 1221}
1209 1222
1210PwMerror PwMDoc::getCommentByLvp(const QString &category, int listViewPos, 1223PwMerror PwMDoc::getCommentByLvp(const QString &category, int listViewPos,
1211 string *foundComment) 1224 string *foundComment)
1212{ 1225{
1213 PWM_ASSERT(foundComment); 1226 PWM_ASSERT(foundComment);
1214 unsigned int cat = 0; 1227 unsigned int cat = 0;
1215 1228
1216 if (!findCategory(category, &cat)) 1229 if (!findCategory(category, &cat))
1217 return e_invalidArg; 1230 return e_invalidArg;
1218 1231
1219 unsigned int i, entries = numEntries(cat); 1232 unsigned int i, entries = numEntries(cat);
1220 for (i = 0; i < entries; ++i) { 1233 for (i = 0; i < entries; ++i) {
1221 if (dta[cat].d[i].listViewPos == listViewPos) { 1234 if (dta[cat].d[i].listViewPos == listViewPos) {
1222 *foundComment = dta[cat].d[i].comment; 1235 *foundComment = dta[cat].d[i].comment;
1223 if (dta[cat].d[i].binary) 1236 if (dta[cat].d[i].binary)
1224 return e_binEntry; 1237 return e_binEntry;
1225 return e_normalEntry; 1238 return e_normalEntry;
1226 } 1239 }
1227 } 1240 }
1228 BUG(); 1241 BUG();
1229 return e_generic; 1242 return e_generic;
1230} 1243}
1231 1244
1232bool PwMDoc::compressDta(string *d, char algo) 1245bool PwMDoc::compressDta(string *d, char algo)
1233{ 1246{
1234 PWM_ASSERT(d); 1247 PWM_ASSERT(d);
1235 switch (algo) { 1248 switch (algo) {
1236 case PWM_COMPRESS_GZIP: { 1249 case PWM_COMPRESS_GZIP: {
1237 CompressGzip comp; 1250 CompressGzip comp;
1238 return comp.compress(d); 1251 return comp.compress(d);
1239 } case PWM_COMPRESS_BZIP2: { 1252 } case PWM_COMPRESS_BZIP2: {
1240 CompressBzip2 comp; 1253 CompressBzip2 comp;
1241 return comp.compress(d); 1254 return comp.compress(d);
1242 } case PWM_COMPRESS_NONE: { 1255 } case PWM_COMPRESS_NONE: {
1243 return true; 1256 return true;
1244 } default: { 1257 } default: {
1245 BUG(); 1258 BUG();
1246 } 1259 }
1247 } 1260 }
1248 return false; 1261 return false;
1249} 1262}
1250 1263
1251bool PwMDoc::decompressDta(string *d, char algo) 1264bool PwMDoc::decompressDta(string *d, char algo)
1252{ 1265{
1253 PWM_ASSERT(d); 1266 PWM_ASSERT(d);
1254 switch (algo) { 1267 switch (algo) {
1255 case PWM_COMPRESS_GZIP: { 1268 case PWM_COMPRESS_GZIP: {
1256 CompressGzip comp; 1269 CompressGzip comp;
1257 return comp.decompress(d); 1270 return comp.decompress(d);
1258 } case PWM_COMPRESS_BZIP2: { 1271 } case PWM_COMPRESS_BZIP2: {
1259 CompressBzip2 comp; 1272 CompressBzip2 comp;
1260 return comp.decompress(d); 1273 return comp.decompress(d);
1261 } case PWM_COMPRESS_NONE: { 1274 } case PWM_COMPRESS_NONE: {
1262 return true; 1275 return true;
1263 } 1276 }
1264 } 1277 }
1265 return false; 1278 return false;
1266} 1279}
1267 1280
1268PwMerror PwMDoc::encrypt(string *d, const QString *pw, QFile *f, char algo) 1281PwMerror PwMDoc::encrypt(string *d, const QString *pw, QFile *f, char algo)
1269{ 1282{
1270 PWM_ASSERT(d); 1283 PWM_ASSERT(d);
1271 PWM_ASSERT(pw); 1284 PWM_ASSERT(pw);
1272 PWM_ASSERT(f); 1285 PWM_ASSERT(f);
1273 1286
1274 size_t encSize; 1287 size_t encSize;
1275 byte *encrypted = 0; 1288 byte *encrypted = 0;
1276 1289
1277 switch (algo) { 1290 switch (algo) {
1278 case PWM_CRYPT_BLOWFISH: { 1291 case PWM_CRYPT_BLOWFISH: {
1279 Blowfish::padNull(d); 1292 Blowfish::padNull(d);
1280 encSize = d->length(); 1293 encSize = d->length();
1281 encrypted = new byte[encSize]; 1294 encrypted = new byte[encSize];
1282 Blowfish bf; 1295 Blowfish bf;
1283 if (bf.bf_setkey((byte *) pw->latin1(), pw->length())) { 1296 if (bf.bf_setkey((byte *) pw->latin1(), pw->length())) {
1284 delete [] encrypted; 1297 delete [] encrypted;
1285 return e_weakPw; 1298 return e_weakPw;
1286 } 1299 }
1287 bf.bf_encrypt((byte *) encrypted, (byte *) d->c_str(), encSize); 1300 bf.bf_encrypt((byte *) encrypted, (byte *) d->c_str(), encSize);
1288 break; 1301 break;
1289 } 1302 }
1290 #ifndef PWM_EMBEDDED 1303 #ifndef PWM_EMBEDDED
1291 case PWM_CRYPT_AES128: 1304 case PWM_CRYPT_AES128:
1292 /*... fall through */ 1305 /*... fall through */
diff --git a/pwmanager/pwmanager/pwmprefs.cpp b/pwmanager/pwmanager/pwmprefs.cpp
index 5779ecc..d3847f6 100644
--- a/pwmanager/pwmanager/pwmprefs.cpp
+++ b/pwmanager/pwmanager/pwmprefs.cpp
@@ -1,191 +1,192 @@
1/* 1/*
2 This file is part of PwManager/Pi 2 This file is part of PwManager/Pi
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22 22
23 $Id$ 23 $Id$
24*/ 24*/
25 25
26 26
27#include <kconfig.h> 27#include <kconfig.h>
28#include <klocale.h> 28#include <klocale.h>
29#include <kstaticdeleter.h> 29#include <kstaticdeleter.h>
30 30
31#include "pwmprefs.h" 31#include "pwmprefs.h"
32 32
33PWMPrefs *PWMPrefs::sInstance = 0; 33PWMPrefs *PWMPrefs::sInstance = 0;
34static KStaticDeleter<PWMPrefs> staticDeleter; 34static KStaticDeleter<PWMPrefs> staticDeleter;
35 35
36PWMPrefs::PWMPrefs() 36PWMPrefs::PWMPrefs()
37 : KPimPrefs("pwmanagerrc") 37 : KPimPrefs("pwmanagerrc")
38{ 38{
39 KPrefs::setCurrentGroup( "Global" ); 39 KPrefs::setCurrentGroup( "Global" );
40 40
41 addItemString( "autoStart", &mAutoStart, "" ); 41 addItemString( "autoStart", &mAutoStart, "" );
42 addItemString( "browserCommand", &mBrowserCommand, "" ); 42 addItemString( "browserCommand", &mBrowserCommand, "" );
43 addItemString( "xtermCommand", &mXTermCommand, CONF_DEFAULT_XTERMCOMMAND); 43 addItemString( "xtermCommand", &mXTermCommand, CONF_DEFAULT_XTERMCOMMAND);
44 addItemFont( "entryFont", &mEntryFont); 44 addItemFont( "entryFont", &mEntryFont);
45 addItemInt( "pwTimeout", &mPwTimeout, CONF_DEFAULT_PWTIMEOUT ); 45 addItemInt( "pwTimeout", &mPwTimeout, CONF_DEFAULT_PWTIMEOUT );
46 addItemInt( "lockTimeout", &mLockTimeout, CONF_DEFAULT_LOCKTIMEOUT ); 46 addItemInt( "lockTimeout", &mLockTimeout, CONF_DEFAULT_LOCKTIMEOUT );
47 addItemInt( "compression", &mCompression, CONF_DEFAULT_COMPRESSION ); 47 addItemInt( "compression", &mCompression, CONF_DEFAULT_COMPRESSION );
48 addItemInt( "filePermissions", &mFilePermissions, CONF_DEFAULT_FILEPERMISSIONS ); 48 addItemInt( "filePermissions", &mFilePermissions, CONF_DEFAULT_FILEPERMISSIONS );
49 addItemInt( "minimizeLock", &mMinimizeLock, CONF_DEFAULT_MINIMIZELOCK ); 49 addItemInt( "minimizeLock", &mMinimizeLock, CONF_DEFAULT_MINIMIZELOCK );
50 addItemBool( "unlockOnOpen", &mUnlockOnOpen, CONF_DEFAULT_UNLOCKONOPEN ); 50 addItemBool( "unlockOnOpen", &mUnlockOnOpen, CONF_DEFAULT_UNLOCKONOPEN );
51 addItemBool( "tray", &mTray, CONF_DEFAULT_TRAY ); 51 addItemBool( "tray", &mTray, CONF_DEFAULT_TRAY );
52 addItemBool( "makeFileBackup", &mMakeFileBackup, CONF_DEFAULT_MAKEFILEBACKUP ); 52 addItemBool( "makeFileBackup", &mMakeFileBackup, CONF_DEFAULT_MAKEFILEBACKUP );
53 addItemBool( "autostartDeepLocked", &mAutostartDeeplocked, CONF_DEFAULT_AUTOSTART_DEEPL ); 53 addItemBool( "autostartDeepLocked", &mAutostartDeeplocked, CONF_DEFAULT_AUTOSTART_DEEPL );
54 addItemBool( "autoDeepLock", &mAutoDeeplock, CONF_DEFAULT_AUTODEEPLOCK ); 54 addItemBool( "autoDeepLock", &mAutoDeeplock, CONF_DEFAULT_AUTODEEPLOCK );
55 addItemBool( "kwalletEmu", &mKWalletEmu, CONF_DEFAULT_KWALLETEMU ); 55 addItemBool( "kwalletEmu", &mKWalletEmu, CONF_DEFAULT_KWALLETEMU );
56 addItemBool( "newEntrLockStat", &mNewEntrLockStat, CONF_DEFAULT_NEWENTRLOCKSTAT ); 56 addItemBool( "newEntrLockStat", &mNewEntrLockStat, CONF_DEFAULT_NEWENTRLOCKSTAT );
57 57
58 KPrefs::setCurrentGroup( "Wnd" ); 58 KPrefs::setCurrentGroup( "Wnd" );
59 59
60 addItemSize( "MainWndSize", &mMainWndSize); 60 addItemSize( "MainWndSize", &mMainWndSize);
61 addItemInt( "MainViewStyle", &mMainViewStyle, CONF_DEFAULT_MAINVIEWSTYLE ); 61 addItemInt( "MainViewStyle", &mMainViewStyle, CONF_DEFAULT_MAINVIEWSTYLE );
62 addItemBool( "autoMinimizeOnStart", &mAutoMinimizeOnStart, CONF_DEFAULT_AUTOMINIMIZE ); 62 addItemBool( "autoMinimizeOnStart", &mAutoMinimizeOnStart, CONF_DEFAULT_AUTOMINIMIZE );
63 addItemBool( "close", &mClose, CONF_DEFAULT_WNDCLOSE ); 63 addItemBool( "close", &mClose, CONF_DEFAULT_WNDCLOSE );
64 addItemIntList( "CommentSplitter", &mCommentSplitter );
64} 65}
65 66
66PWMPrefs::~PWMPrefs() 67PWMPrefs::~PWMPrefs()
67{ 68{
68} 69}
69 70
70PWMPrefs *PWMPrefs::instance() 71PWMPrefs *PWMPrefs::instance()
71{ 72{
72 if ( !sInstance ) { 73 if ( !sInstance ) {
73#ifdef PWM_EMBEDDED 74#ifdef PWM_EMBEDDED
74 sInstance = staticDeleter.setObject( new PWMPrefs() ); 75 sInstance = staticDeleter.setObject( new PWMPrefs() );
75#else //PWM_EMBEDDED 76#else //PWM_EMBEDDED
76 //US the following line has changed ???. Why 77 //US the following line has changed ???. Why
77 staticDeleter.setObject( sInstance, new PWMPrefs() ); 78 staticDeleter.setObject( sInstance, new PWMPrefs() );
78#endif //KAB_EMBEDDED 79#endif //KAB_EMBEDDED
79 sInstance->readConfig(); 80 sInstance->readConfig();
80 } 81 }
81 82
82 return sInstance; 83 return sInstance;
83} 84}
84 85
85 // US introduce a nonconst way to return the config object. 86 // US introduce a nonconst way to return the config object.
86KConfig* PWMPrefs::getConfig() 87KConfig* PWMPrefs::getConfig()
87{ 88{
88 return config(); 89 return config();
89} 90}
90 91
91/******************************************************************* 92/*******************************************************************
92 * functions for reading the configuration settings 93 * functions for reading the configuration settings
93 *******************************************************************/ 94 *******************************************************************/
94 95
95QString PWMPrefs::confGlobAutoStart() 96QString PWMPrefs::confGlobAutoStart()
96{ 97{
97 return mAutoStart; 98 return mAutoStart;
98} 99}
99 100
100QString PWMPrefs::confGlobBrowserCommand() 101QString PWMPrefs::confGlobBrowserCommand()
101{ 102{
102 return mBrowserCommand; 103 return mBrowserCommand;
103} 104}
104 105
105QString PWMPrefs::confGlobXtermCommand() 106QString PWMPrefs::confGlobXtermCommand()
106{ 107{
107 return mXTermCommand; 108 return mXTermCommand;
108} 109}
109 110
110QFont PWMPrefs::confGlobEntryFont() 111QFont PWMPrefs::confGlobEntryFont()
111{ 112{
112 return mEntryFont; 113 return mEntryFont;
113} 114}
114 115
115int PWMPrefs::confGlobPwTimeout() 116int PWMPrefs::confGlobPwTimeout()
116{ 117{
117 return mPwTimeout; 118 return mPwTimeout;
118} 119}
119 120
120int PWMPrefs::confGlobLockTimeout() 121int PWMPrefs::confGlobLockTimeout()
121{ 122{
122 return mLockTimeout; 123 return mLockTimeout;
123} 124}
124 125
125int PWMPrefs::confGlobCompression() 126int PWMPrefs::confGlobCompression()
126{ 127{
127 return mCompression; 128 return mCompression;
128} 129}
129 130
130int PWMPrefs::confGlobFilePermissions() 131int PWMPrefs::confGlobFilePermissions()
131{ 132{
132 return mFilePermissions; 133 return mFilePermissions;
133} 134}
134 135
135int PWMPrefs::confGlobMinimizeLock() 136int PWMPrefs::confGlobMinimizeLock()
136{ 137{
137 return mMinimizeLock; 138 return mMinimizeLock;
138} 139}
139 140
140bool PWMPrefs::confGlobUnlockOnOpen() 141bool PWMPrefs::confGlobUnlockOnOpen()
141{ 142{
142 return mUnlockOnOpen; 143 return mUnlockOnOpen;
143} 144}
144 145
145bool PWMPrefs::confGlobTray() 146bool PWMPrefs::confGlobTray()
146{ 147{
147 return mTray; 148 return mTray;
148} 149}
149 150
150bool PWMPrefs::confGlobMakeFileBackup() 151bool PWMPrefs::confGlobMakeFileBackup()
151{ 152{
152 return mMakeFileBackup; 153 return mMakeFileBackup;
153} 154}
154 155
155bool PWMPrefs::confGlobAutostartDeepLocked() 156bool PWMPrefs::confGlobAutostartDeepLocked()
156{ 157{
157 return mAutostartDeeplocked; 158 return mAutostartDeeplocked;
158} 159}
159 160
160bool PWMPrefs::confGlobAutoDeepLock() 161bool PWMPrefs::confGlobAutoDeepLock()
161{ 162{
162 return mAutoDeeplock; 163 return mAutoDeeplock;
163} 164}
164 165
165bool PWMPrefs::confGlobKwalletEmu() 166bool PWMPrefs::confGlobKwalletEmu()
166{ 167{
167 return mKWalletEmu; 168 return mKWalletEmu;
168} 169}
169 170
170bool PWMPrefs::confGlobNewEntrLockStat() 171bool PWMPrefs::confGlobNewEntrLockStat()
171{ 172{
172 return mNewEntrLockStat; 173 return mNewEntrLockStat;
173} 174}
174 175
175QSize PWMPrefs::confWndMainWndSize() 176QSize PWMPrefs::confWndMainWndSize()
176{ 177{
177 return mMainWndSize; 178 return mMainWndSize;
178} 179}
179 180
180int PWMPrefs::confWndMainViewStyle() 181int PWMPrefs::confWndMainViewStyle()
181{ 182{
182 return mMainViewStyle; 183 return mMainViewStyle;
183} 184}
184 185
185bool PWMPrefs::confWndAutoMinimizeOnStart() 186bool PWMPrefs::confWndAutoMinimizeOnStart()
186{ 187{
187 return mAutoMinimizeOnStart; 188 return mAutoMinimizeOnStart;
188} 189}
189 190
190bool PWMPrefs::confWndClose() 191bool PWMPrefs::confWndClose()
191{ 192{
diff --git a/pwmanager/pwmanager/pwmprefs.h b/pwmanager/pwmanager/pwmprefs.h
index bf7d8b1..6a89d10 100644
--- a/pwmanager/pwmanager/pwmprefs.h
+++ b/pwmanager/pwmanager/pwmprefs.h
@@ -9,138 +9,142 @@
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22 22
23 $Id$ 23 $Id$
24*/ 24*/
25 25
26#ifndef PWMPREFS_H 26#ifndef PWMPREFS_H
27#define PWMPREFS_H 27#define PWMPREFS_H
28 28
29#include <qstringlist.h> 29#include <qstringlist.h>
30#include <qsize.h> 30#include <qsize.h>
31 31
32#include <kpimprefs.h> 32#include <kpimprefs.h>
33 33
34class KConfig; 34class KConfig;
35 35
36#define conf() PWMPrefs::instance() 36#define conf() PWMPrefs::instance()
37 37
38 38
39 #define CONF_DEFAULT_PWTIMEOUT 10/* 10 sec */ 39 #define CONF_DEFAULT_PWTIMEOUT 10/* 10 sec */
40 #define CONF_DEFAULT_LOCKTIMEOUT 0/* 0 == disable */ 40 #define CONF_DEFAULT_LOCKTIMEOUT 0/* 0 == disable */
41 #define CONF_DEFAULT_TRAY true 41 #define CONF_DEFAULT_TRAY true
42 #define CONF_DEFAULT_UNLOCKONOPENfalse 42 #define CONF_DEFAULT_UNLOCKONOPENfalse
43 #define CONF_DEFAULT_MAINVIEWSTYLE0 43 #define CONF_DEFAULT_MAINVIEWSTYLE0
44 #define CONF_DEFAULT_COMPRESSION 0x01/* gzip */ 44 #define CONF_DEFAULT_COMPRESSION 0x01/* gzip */
45 #define CONF_DEFAULT_AUTOMINIMIZEfalse 45 #define CONF_DEFAULT_AUTOMINIMIZEfalse
46 #define CONF_DEFAULT_BROWSERCOMMAND"" 46 #define CONF_DEFAULT_BROWSERCOMMAND""
47 #define CONF_DEFAULT_XTERMCOMMAND"konsole -e" 47 #define CONF_DEFAULT_XTERMCOMMAND"konsole -e"
48 #define CONF_DEFAULT_FILEPERMISSIONS0600 48 #define CONF_DEFAULT_FILEPERMISSIONS0600
49 #define CONF_DEFAULT_MAKEFILEBACKUPfalse 49 #define CONF_DEFAULT_MAKEFILEBACKUPfalse
50 #define CONF_DEFAULT_AUTOSTART_DEEPLtrue 50 #define CONF_DEFAULT_AUTOSTART_DEEPLtrue
51 #define CONF_DEFAULT_AUTODEEPLOCKtrue 51 #define CONF_DEFAULT_AUTODEEPLOCKtrue
52 #define CONF_DEFAULT_KWALLETEMU true 52 #define CONF_DEFAULT_KWALLETEMU true
53 #define CONF_DEFAULT_MINIMIZELOCK 2/* deep-lock */ 53 #define CONF_DEFAULT_MINIMIZELOCK 2/* deep-lock */
54 #define CONF_DEFAULT_NEWENTRLOCKSTAT true/* locked */ 54 #define CONF_DEFAULT_NEWENTRLOCKSTAT true/* locked */
55 #define CONF_DEFAULT_WNDCLOSE true/* don't minimize to tray */ 55 #define CONF_DEFAULT_WNDCLOSE true/* don't minimize to tray */
56 56
57class PWMPrefs : public KPimPrefs 57class PWMPrefs : public KPimPrefs
58{ 58{
59 public: 59 public:
60 virtual ~PWMPrefs(); 60 virtual ~PWMPrefs();
61 61
62 static PWMPrefs *instance(); 62 static PWMPrefs *instance();
63 63
64public: 64public:
65 /* functions for reading the configuration settings */ 65 /* functions for reading the configuration settings */
66 /* GLOBAL */ 66 /* GLOBAL */
67 QString confGlobAutoStart(); 67 QString confGlobAutoStart();
68 QString confGlobBrowserCommand(); 68 QString confGlobBrowserCommand();
69 QString confGlobXtermCommand(); 69 QString confGlobXtermCommand();
70 QFont confGlobEntryFont(); 70 QFont confGlobEntryFont();
71 int confGlobPwTimeout(); 71 int confGlobPwTimeout();
72 int confGlobLockTimeout(); 72 int confGlobLockTimeout();
73 int confGlobCompression(); 73 int confGlobCompression();
74 int confGlobFilePermissions(); 74 int confGlobFilePermissions();
75 int confGlobMinimizeLock(); 75 int confGlobMinimizeLock();
76 bool confGlobUnlockOnOpen(); 76 bool confGlobUnlockOnOpen();
77 bool confGlobTray(); 77 bool confGlobTray();
78 bool confGlobMakeFileBackup(); 78 bool confGlobMakeFileBackup();
79 bool confGlobAutostartDeepLocked(); 79 bool confGlobAutostartDeepLocked();
80 bool confGlobAutoDeepLock(); 80 bool confGlobAutoDeepLock();
81 bool confGlobKwalletEmu(); 81 bool confGlobKwalletEmu();
82 bool confGlobNewEntrLockStat(); 82 bool confGlobNewEntrLockStat();
83 /* WND */ 83 /* WND */
84 QSize confWndMainWndSize(); 84 QSize confWndMainWndSize();
85 int confWndMainViewStyle(); 85 int confWndMainViewStyle();
86 bool confWndAutoMinimizeOnStart(); 86 bool confWndAutoMinimizeOnStart();
87 bool confWndClose(); 87 bool confWndClose();
88 88
89public: 89public:
90 /* functions for writing the configuration settings */ 90 /* functions for writing the configuration settings */
91 /* GLOBAL */ 91 /* GLOBAL */
92 void confGlobAutoStart(const QString &e); 92 void confGlobAutoStart(const QString &e);
93 void confGlobBrowserCommand(const QString &e); 93 void confGlobBrowserCommand(const QString &e);
94 void confGlobXtermCommand(const QString &e); 94 void confGlobXtermCommand(const QString &e);
95 void confGlobEntryFont(const QFont &e); 95 void confGlobEntryFont(const QFont &e);
96 void confGlobPwTimeout(int e); 96 void confGlobPwTimeout(int e);
97 void confGlobLockTimeout(int e); 97 void confGlobLockTimeout(int e);
98 void confGlobCompression(int e); 98 void confGlobCompression(int e);
99 void confGlobFilePermissions(int e); 99 void confGlobFilePermissions(int e);
100 void confGlobMinimizeLock(int e); 100 void confGlobMinimizeLock(int e);
101 void confGlobUnlockOnOpen(bool e); 101 void confGlobUnlockOnOpen(bool e);
102 void confGlobTray(bool e); 102 void confGlobTray(bool e);
103 void confGlobMakeFileBackup(bool e); 103 void confGlobMakeFileBackup(bool e);
104 void confGlobAutostartDeepLocked(bool e); 104 void confGlobAutostartDeepLocked(bool e);
105 void confGlobAutoDeepLock(bool e); 105 void confGlobAutoDeepLock(bool e);
106 void confGlobKwalletEmu(bool e); 106 void confGlobKwalletEmu(bool e);
107 void confGlobNewEntrLockStat(bool e); 107 void confGlobNewEntrLockStat(bool e);
108 /* WND */ 108 /* WND */
109 void confWndMainWndSize(const QSize &e); 109 void confWndMainWndSize(const QSize &e);
110 void confWndMainViewStyle(int e); 110 void confWndMainViewStyle(int e);
111 void confWndAutoMinimizeOnStart(bool e); 111 void confWndAutoMinimizeOnStart(bool e);
112 void confWndClose(bool e); 112 void confWndClose(bool e);
113 113
114 114
115 115
116 QString mAutoStart; 116 QString mAutoStart;
117 QString mBrowserCommand; 117 QString mBrowserCommand;
118 QString mXTermCommand; 118 QString mXTermCommand;
119 QFont mEntryFont; 119 QFont mEntryFont;
120 int mPwTimeout; 120 int mPwTimeout;
121 int mLockTimeout; 121 int mLockTimeout;
122 int mCompression; 122 int mCompression;
123 int mFilePermissions; 123 int mFilePermissions;
124 int mMinimizeLock; 124 int mMinimizeLock;
125 bool mUnlockOnOpen; 125 bool mUnlockOnOpen;
126 bool mTray; 126 bool mTray;
127 bool mMakeFileBackup; 127 bool mMakeFileBackup;
128 bool mAutostartDeeplocked; 128 bool mAutostartDeeplocked;
129 bool mAutoDeeplock; 129 bool mAutoDeeplock;
130 bool mKWalletEmu; 130 bool mKWalletEmu;
131 bool mNewEntrLockStat; 131 bool mNewEntrLockStat;
132 QSize mMainWndSize; 132 QSize mMainWndSize;
133 int mMainViewStyle; 133 int mMainViewStyle;
134 bool mAutoMinimizeOnStart; 134 bool mAutoMinimizeOnStart;
135 bool mClose; 135 bool mClose;
136 136
137 //US ENH
138 QValueList<int> mCommentSplitter;
139
140
137 // US introduce a nonconst way to return the config object. 141 // US introduce a nonconst way to return the config object.
138 KConfig* getConfig(); 142 KConfig* getConfig();
139 143
140 private: 144 private:
141 PWMPrefs(); 145 PWMPrefs();
142 146
143 static PWMPrefs *sInstance; 147 static PWMPrefs *sInstance;
144}; 148};
145 149
146#endif 150#endif
diff --git a/pwmanager/pwmanager/pwmviewstyle.cpp b/pwmanager/pwmanager/pwmviewstyle.cpp
index 51d8f6c..9704615 100644
--- a/pwmanager/pwmanager/pwmviewstyle.cpp
+++ b/pwmanager/pwmanager/pwmviewstyle.cpp
@@ -1,217 +1,239 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2004 by Michael Buesch * 3 * copyright (C) 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/*************************************************************************** 13/***************************************************************************
14 * copyright (C) 2004 by Ulf Schenk 14 * copyright (C) 2004 by Ulf Schenk
15 * This file is originaly based on version 1.0.1 of pwmanager 15 * This file is originaly based on version 1.0.1 of pwmanager
16 * and was modified to run on embedded devices that run microkde 16 * and was modified to run on embedded devices that run microkde
17 * 17 *
18 * $Id$ 18 * $Id$
19 **************************************************************************/ 19 **************************************************************************/
20 20
21#include "pwmviewstyle.h" 21#include "pwmviewstyle.h"
22#include "pwmexception.h" 22#include "pwmexception.h"
23#include "pwmviewstyle_0.h" 23#include "pwmviewstyle_0.h"
24#include "pwmviewstyle_1.h" 24#include "pwmviewstyle_1.h"
25#include "listviewpwm.h" 25#include "listviewpwm.h"
26#include "pwmview.h" 26#include "pwmview.h"
27#include "commentbox.h" 27#include "commentbox.h"
28#ifndef PWM_EMBEDDED 28#ifndef PWM_EMBEDDED
29#include "configuration.h" 29#include "configuration.h"
30#else 30#else
31#include "pwmprefs.h" 31#include "pwmprefs.h"
32#endif 32#endif
33 33
34PwMViewStyle::PwMViewStyle(QWidget *parent, const char *name) 34PwMViewStyle::PwMViewStyle(QWidget *parent, const char *name)
35 : QWidget(parent, name) 35 : QWidget(parent, name)
36{ 36{
37 curStyle = style_notset; 37 curStyle = style_notset;
38 s0 = 0; 38 s0 = 0;
39 s1 = 0; 39 s1 = 0;
40} 40}
41 41
42PwMViewStyle::~PwMViewStyle() 42PwMViewStyle::~PwMViewStyle()
43{ 43{
44 //US ENH : load and store the size of the listviewcolumns 44 //US ENH : store the size of the listviewcolumns
45 lv->saveLayout(conf()->getConfig(), "listview"); 45 switch (curStyle)
46 conf()->getConfig()->sync(); 46 {
47 case style_0:
48 s0->saveSettings(PWMPrefs::instance());
49 break;
50 case style_1:
51 s1->saveSettings(PWMPrefs::instance());
52 break;
53 default:
54 BUG();
55 }
56
57
58 PWMPrefs::instance()->getConfig()->sync();
47 59
48 delete_ifnot_null(s0); 60 delete_ifnot_null(s0);
49 delete_ifnot_null(s1); 61 delete_ifnot_null(s1);
50} 62}
51 63
52void PwMViewStyle::initStyle(style_t style) 64void PwMViewStyle::initStyle(style_t style)
53{ 65{
54 printDebug(string("initializing style ") + tostr(style)); 66 printDebug(string("initializing style ") + tostr(style));
55 bool wasMaximized = v->isMaximized(); 67 bool wasMaximized = v->isMaximized();
56 if (v->isVisible()) 68 if (v->isVisible())
57 v->hide(); 69 v->hide();
58 switch (style) { 70 switch (style) {
59 case style_0: 71 case style_0:
60 delete_ifnot_null(s0); 72 delete_ifnot_null(s0);
61 delete_ifnot_null(s1); 73 delete_ifnot_null(s1);
62 s0 = new PwMViewStyle_0(v); 74 s0 = new PwMViewStyle_0(v);
63 lv = s0->getLv(); 75 lv = s0->getLv();
64 commentBox = s0->getCommentBox(); 76 commentBox = s0->getCommentBox();
65 break; 77 break;
66 case style_1: 78 case style_1:
67 delete_ifnot_null(s0); 79 delete_ifnot_null(s0);
68 delete_ifnot_null(s1); 80 delete_ifnot_null(s1);
69 s1 = new PwMViewStyle_1(v); 81 s1 = new PwMViewStyle_1(v);
70 lv = s1->getLv(); 82 lv = s1->getLv();
71 commentBox = s1->getCommentBox(); 83 commentBox = s1->getCommentBox();
72 break; 84 break;
73 default: 85 default:
74 BUG(); 86 BUG();
75 return; 87 return;
76 } 88 }
77 curStyle = style; 89 curStyle = style;
78 connect(lv, SIGNAL(pressed(QListViewItem *)), 90 connect(lv, SIGNAL(pressed(QListViewItem *)),
79 v, SLOT(handleToggle(QListViewItem *))); 91 v, SLOT(handleToggle(QListViewItem *)));
80 connect(lv, SIGNAL(rightButtonClicked(QListViewItem *, const QPoint &, int)), 92 connect(lv, SIGNAL(rightButtonClicked(QListViewItem *, const QPoint &, int)),
81 v, SLOT(handleRightClick(QListViewItem *, const QPoint &, int))); 93 v, SLOT(handleRightClick(QListViewItem *, const QPoint &, int)));
82 connect(lv, SIGNAL(clicked(QListViewItem *)), 94 connect(lv, SIGNAL(clicked(QListViewItem *)),
83 v, SLOT(refreshCommentTextEdit(QListViewItem *))); 95 v, SLOT(refreshCommentTextEdit(QListViewItem *)));
84 lv->addColumn(i18n("Description"), 180); 96 lv->addColumn(i18n("Description"), 180);
85 lv->addColumn(i18n("Username"), 150); 97 lv->addColumn(i18n("Username"), 150);
86 lv->addColumn(i18n("Password"), 150); 98 lv->addColumn(i18n("Password"), 150);
87 lv->addColumn(i18n("URL"), 180); 99 lv->addColumn(i18n("URL"), 180);
88 lv->addColumn(i18n("Launcher"), 120); 100 lv->addColumn(i18n("Launcher"), 120);
89 v->tmpReEnableSort(); 101 v->tmpReEnableSort();
90 102
91 //US ENH : load and store the size of the listviewcolumns 103 //US ENH : load the size of the listviewcolumns
92 lv->restoreLayout(conf()->getConfig(), "listview"); 104 switch (style)
105 {
106 case style_0:
107 s0->restoreSettings(PWMPrefs::instance());
108 break;
109 case style_1:
110 s1->restoreSettings(PWMPrefs::instance());
111 break;
112 default:
113 BUG();
114 }
93 115
94 resizeView(v->size()); 116 resizeView(v->size());
95 v->updateView(); 117 v->updateView();
96 if (wasMaximized) { 118 if (wasMaximized) {
97 v->showMaximized(); 119 v->showMaximized();
98 } else { 120 } else {
99 v->show(); 121 v->show();
100 } 122 }
101 connect(lv, SIGNAL(layoutChanged()), 123 connect(lv, SIGNAL(layoutChanged()),
102 v, SLOT(reorgLp())); 124 v, SLOT(reorgLp()));
103} 125}
104 126
105void PwMViewStyle::resizeView(const QSize &size) 127void PwMViewStyle::resizeView(const QSize &size)
106{ 128{
107 switch (curStyle) { 129 switch (curStyle) {
108 case style_0: 130 case style_0:
109 PWM_ASSERT(s0); 131 PWM_ASSERT(s0);
110 s0->resize(size); 132 s0->resize(size);
111 return; 133 return;
112 case style_1: 134 case style_1:
113 PWM_ASSERT(s1); 135 PWM_ASSERT(s1);
114 s1->resize(size); 136 s1->resize(size);
115 return; 137 return;
116 default: 138 default:
117 BUG(); 139 BUG();
118 } 140 }
119} 141}
120 142
121QString PwMViewStyle::getCurrentCategory() 143QString PwMViewStyle::getCurrentCategory()
122{ 144{
123 switch (curStyle) { 145 switch (curStyle) {
124 case style_0: 146 case style_0:
125 PWM_ASSERT(s0); 147 PWM_ASSERT(s0);
126 return s0->getCurrentCategory(); 148 return s0->getCurrentCategory();
127 case style_1: 149 case style_1:
128 PWM_ASSERT(s1); 150 PWM_ASSERT(s1);
129 return s1->getCurrentCategory(); 151 return s1->getCurrentCategory();
130 default: 152 default:
131 BUG(); 153 BUG();
132 } 154 }
133 return ""; 155 return "";
134} 156}
135 157
136void PwMViewStyle::addCategory(const QString &cat) 158void PwMViewStyle::addCategory(const QString &cat)
137{ 159{
138 switch (curStyle) { 160 switch (curStyle) {
139 case style_0: 161 case style_0:
140 PWM_ASSERT(s0); 162 PWM_ASSERT(s0);
141 s0->addCategory(cat); 163 s0->addCategory(cat);
142 return; 164 return;
143 case style_1: 165 case style_1:
144 PWM_ASSERT(s1); 166 PWM_ASSERT(s1);
145 s1->addCategory(cat); 167 s1->addCategory(cat);
146 return; 168 return;
147 default: 169 default:
148 BUG(); 170 BUG();
149 } 171 }
150} 172}
151 173
152void PwMViewStyle::delCategory(const QString &cat) 174void PwMViewStyle::delCategory(const QString &cat)
153{ 175{
154 switch (curStyle) { 176 switch (curStyle) {
155 case style_0: 177 case style_0:
156 PWM_ASSERT(s0); 178 PWM_ASSERT(s0);
157 s0->delCategory(cat); 179 s0->delCategory(cat);
158 return; 180 return;
159 case style_1: 181 case style_1:
160 PWM_ASSERT(s1); 182 PWM_ASSERT(s1);
161 s1->delCategory(cat); 183 s1->delCategory(cat);
162 return; 184 return;
163 default: 185 default:
164 BUG(); 186 BUG();
165 } 187 }
166} 188}
167 189
168void PwMViewStyle::delAllCategories() 190void PwMViewStyle::delAllCategories()
169{ 191{
170 switch (curStyle) { 192 switch (curStyle) {
171 case style_0: 193 case style_0:
172 PWM_ASSERT(s0); 194 PWM_ASSERT(s0);
173 s0->delAllCategories(); 195 s0->delAllCategories();
174 return; 196 return;
175 case style_1: 197 case style_1:
176 PWM_ASSERT(s1); 198 PWM_ASSERT(s1);
177 s1->delAllCategories(); 199 s1->delAllCategories();
178 return; 200 return;
179 default: 201 default:
180 BUG(); 202 BUG();
181 } 203 }
182} 204}
183 205
184void PwMViewStyle::selectCategory(const QString &cat) 206void PwMViewStyle::selectCategory(const QString &cat)
185{ 207{
186 switch (curStyle) { 208 switch (curStyle) {
187 case style_0: 209 case style_0:
188 PWM_ASSERT(s0); 210 PWM_ASSERT(s0);
189 s0->selectCategory(cat); 211 s0->selectCategory(cat);
190 return; 212 return;
191 case style_1: 213 case style_1:
192 PWM_ASSERT(s1); 214 PWM_ASSERT(s1);
193 s1->selectCategory(cat); 215 s1->selectCategory(cat);
194 return; 216 return;
195 default: 217 default:
196 BUG(); 218 BUG();
197 } 219 }
198} 220}
199 221
200int PwMViewStyle::numCategories() 222int PwMViewStyle::numCategories()
201{ 223{
202 switch (curStyle) { 224 switch (curStyle) {
203 case style_0: 225 case style_0:
204 PWM_ASSERT(s0); 226 PWM_ASSERT(s0);
205 return s0->numCategories(); 227 return s0->numCategories();
206 case style_1: 228 case style_1:
207 PWM_ASSERT(s1); 229 PWM_ASSERT(s1);
208 return s1->numCategories(); 230 return s1->numCategories();
209 default: 231 default:
210 BUG(); 232 BUG();
211 } 233 }
212 return 0; 234 return 0;
213} 235}
214 236
215#ifndef PWM_EMBEDDED 237#ifndef PWM_EMBEDDED
216#include "pwmviewstyle.moc" 238#include "pwmviewstyle.moc"
217#endif 239#endif
diff --git a/pwmanager/pwmanager/pwmviewstyle_0.cpp b/pwmanager/pwmanager/pwmviewstyle_0.cpp
index 6d46ac6..7262684 100644
--- a/pwmanager/pwmanager/pwmviewstyle_0.cpp
+++ b/pwmanager/pwmanager/pwmviewstyle_0.cpp
@@ -1,93 +1,112 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2004 by Michael Buesch * 3 * copyright (C) 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 "pwmviewstyle_0.h" 20#include "pwmviewstyle_0.h"
21#include "pwmview.h" 21#include "pwmview.h"
22#include "listviewpwm.h" 22#include "listviewpwm.h"
23#include "commentbox.h" 23#include "commentbox.h"
24 24
25#include <klocale.h> 25#include <klocale.h>
26 26#include "pwmprefs.h"
27 27
28PwMViewStyle_0::PwMViewStyle_0(PwMView *view) 28PwMViewStyle_0::PwMViewStyle_0(PwMView *view)
29 : QObject() 29 : QObject()
30{ 30{
31 vbox1 = new QVBox(view); 31 vbox1 = new QVBox(view);
32 vbox1->setSpacing(3); 32 vbox1->setSpacing(3);
33 hbox1 = new QHBox(vbox1); 33 hbox1 = new QHBox(vbox1);
34 hbox1->setSpacing(10); 34 hbox1->setSpacing(10);
35 categoriesTitle = new QLabel(hbox1); 35 categoriesTitle = new QLabel(hbox1);
36 categoriesTitle->setText(i18n("Categories:")); 36 categoriesTitle->setText(i18n("Categories:"));
37 categoriesCombo = new QComboBox(hbox1); 37 categoriesCombo = new QComboBox(hbox1);
38 renCatButton = new QPushButton(i18n("&Rename"), hbox1); 38 renCatButton = new QPushButton(i18n("&Rename"), hbox1);
39 delCatButton = new QPushButton(i18n("&Delete"), hbox1); 39 delCatButton = new QPushButton(i18n("&Delete"), hbox1);
40#ifndef PWM_EMBEDDED 40#ifndef PWM_EMBEDDED
41 splitter1 = new QSplitter(vbox1); 41 splitter1 = new QSplitter(vbox1);
42 splitter1->setOrientation(Qt::Vertical); 42 splitter1->setOrientation(Qt::Vertical);
43#else 43#else
44 splitter1 = new KDGanttMinimizeSplitter( Qt::Vertical, vbox1); 44 splitter1 = new KDGanttMinimizeSplitter( Qt::Vertical, vbox1);
45 splitter1->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 45 splitter1->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
46 46
47 //US topLayout->addWidget(mMiniSplitter ); 47 //US topLayout->addWidget(mMiniSplitter );
48#endif 48#endif
49 lv = new ListViewPwM(splitter1); 49 lv = new ListViewPwM(splitter1);
50 commentBox = new CommentBox(splitter1); 50 commentBox = new CommentBox(splitter1);
51 // set sizes and styles 51 // set sizes and styles
52 commentBox->resize(commentBox->size().width(), 60); 52 commentBox->resize(commentBox->size().width(), 60);
53 categoriesTitle->setAlignment(Qt::AlignVCenter | Qt::AlignRight); 53 categoriesTitle->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
54 // connections 54 // connections
55 connect(categoriesCombo, SIGNAL(activated(int)), 55 connect(categoriesCombo, SIGNAL(activated(int)),
56 view, SLOT(shiftToView())); 56 view, SLOT(shiftToView()));
57 connect(renCatButton, SIGNAL(clicked()), 57 connect(renCatButton, SIGNAL(clicked()),
58 view, SLOT(renCatButton_slot())); 58 view, SLOT(renCatButton_slot()));
59 connect(delCatButton, SIGNAL(clicked()), 59 connect(delCatButton, SIGNAL(clicked()),
60 view, SLOT(delCatButton_slot())); 60 view, SLOT(delCatButton_slot()));
61} 61}
62 62
63PwMViewStyle_0::~PwMViewStyle_0() 63PwMViewStyle_0::~PwMViewStyle_0()
64{ 64{
65 delete vbox1; 65 delete vbox1;
66} 66}
67 67
68void PwMViewStyle_0::delCategory(const QString &cat) 68void PwMViewStyle_0::delCategory(const QString &cat)
69{ 69{
70 PWM_ASSERT(categoriesCombo); 70 PWM_ASSERT(categoriesCombo);
71 int i, count = categoriesCombo->count(); 71 int i, count = categoriesCombo->count();
72 for (i = 0; i < count; ++i) { 72 for (i = 0; i < count; ++i) {
73 if (categoriesCombo->text(i) == cat) { 73 if (categoriesCombo->text(i) == cat) {
74 categoriesCombo->removeItem(i); 74 categoriesCombo->removeItem(i);
75 return; 75 return;
76 } 76 }
77 } 77 }
78 BUG(); 78 BUG();
79} 79}
80 80
81void PwMViewStyle_0::selectCategory(const QString &cat) 81void PwMViewStyle_0::selectCategory(const QString &cat)
82{ 82{
83 PWM_ASSERT(categoriesCombo); 83 PWM_ASSERT(categoriesCombo);
84 int i, count = categoriesCombo->count(); 84 int i, count = categoriesCombo->count();
85 for (i = 0; i < count; ++i) { 85 for (i = 0; i < count; ++i) {
86 if (categoriesCombo->text(i) == cat) { 86 if (categoriesCombo->text(i) == cat) {
87 categoriesCombo->setCurrentItem(i); 87 categoriesCombo->setCurrentItem(i);
88 return; 88 return;
89 } 89 }
90 } 90 }
91 // fall back to 0 91 // fall back to 0
92 categoriesCombo->setCurrentItem(0); 92 categoriesCombo->setCurrentItem(0);
93} 93}
94
95
96//US ENH: I need a place to load the view dependend settings. Eg. splittersize
97void PwMViewStyle_0::restoreSettings(PWMPrefs* prefs)
98{
99 //load and store the size of the listviewcolumns
100 lv->restoreLayout(prefs->getConfig(), "listview");
101 splitter1->setSizes( prefs->mCommentSplitter );
102
103}
104
105//US ENH: I need a place to load the view dependend settings. Eg. splittersize
106void PwMViewStyle_0::saveSettings(PWMPrefs* prefs)
107{
108 //store the size of the listviewcolumns
109 lv->saveLayout(prefs->getConfig(), "listview");
110 prefs->mCommentSplitter = splitter1->sizes();
111
112}
diff --git a/pwmanager/pwmanager/pwmviewstyle_0.h b/pwmanager/pwmanager/pwmviewstyle_0.h
index cc564c3..bd93c06 100644
--- a/pwmanager/pwmanager/pwmviewstyle_0.h
+++ b/pwmanager/pwmanager/pwmviewstyle_0.h
@@ -1,99 +1,105 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2004 by Michael Buesch * 3 * copyright (C) 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#ifndef PWMVIEWSTYLE_0_H 20#ifndef PWMVIEWSTYLE_0_H
21#define PWMVIEWSTYLE_0_H 21#define PWMVIEWSTYLE_0_H
22 22
23#include <qhbox.h> 23#include <qhbox.h>
24#include <qvbox.h> 24#include <qvbox.h>
25#include <qpushbutton.h> 25#include <qpushbutton.h>
26#ifndef PWM_EMBEDDED 26#ifndef PWM_EMBEDDED
27#include <qtextedit.h> 27#include <qtextedit.h>
28#include <qsplitter.h> 28#include <qsplitter.h>
29#else 29#else
30#include <qmultilineedit.h> 30#include <qmultilineedit.h>
31#include <KDGanttMinimizeSplitter.h> 31#include <KDGanttMinimizeSplitter.h>
32#endif 32#endif
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qcombobox.h> 34#include <qcombobox.h>
35 35
36class PwMView; 36class PwMView;
37class ListViewPwM; 37class ListViewPwM;
38class CommentBox; 38class CommentBox;
39class PWMPrefs;
39 40
40class PwMViewStyle_0 : public QObject 41class PwMViewStyle_0 : public QObject
41{ 42{
42public: 43public:
43 PwMViewStyle_0(PwMView *view); 44 PwMViewStyle_0(PwMView *view);
44 ~PwMViewStyle_0(); 45 ~PwMViewStyle_0();
45 46
46 ListViewPwM * getLv() 47 ListViewPwM * getLv()
47 { return lv; } 48 { return lv; }
48 CommentBox * getCommentBox() 49 CommentBox * getCommentBox()
49 { return commentBox; } 50 { return commentBox; }
50 51
51 /** returns the currently selected category */ 52 /** returns the currently selected category */
52 QString getCurrentCategory() 53 QString getCurrentCategory()
53 { return categoriesCombo->currentText(); } 54 { return categoriesCombo->currentText(); }
54 /** add Category to the view */ 55 /** add Category to the view */
55 void addCategory(const QString &cat) 56 void addCategory(const QString &cat)
56 { categoriesCombo->insertItem(cat); } 57 { categoriesCombo->insertItem(cat); }
57 /** delete Category from view */ 58 /** delete Category from view */
58 void delCategory(const QString &cat); 59 void delCategory(const QString &cat);
59 /** delete all categories from view */ 60 /** delete all categories from view */
60 void delAllCategories() 61 void delAllCategories()
61 { categoriesCombo->clear(); } 62 { categoriesCombo->clear(); }
62 /** select the specified category */ 63 /** select the specified category */
63 void selectCategory(const QString &cat); 64 void selectCategory(const QString &cat);
64 /** returns the number of categories in this view. 65 /** returns the number of categories in this view.
65 * This value dosn't say anything about the number of 66 * This value dosn't say anything about the number of
66 * categories in the document. 67 * categories in the document.
67 */ 68 */
68 int numCategories() 69 int numCategories()
69 { return categoriesCombo->count(); } 70 { return categoriesCombo->count(); }
70 /** resize the view */ 71 /** resize the view */
71 void resize(const QSize &size) 72 void resize(const QSize &size)
72 { vbox1->resize(size); } 73 { vbox1->resize(size); }
73 74
75 //US ENH: I need a place to load the view dependend settings. Eg. splittersize
76 void restoreSettings(PWMPrefs* prefs);
77 void saveSettings(PWMPrefs* prefs);
78
79
74protected: 80protected:
75 /** main list view */ 81 /** main list view */
76 ListViewPwM *lv; 82 ListViewPwM *lv;
77 /** categories combo-box */ 83 /** categories combo-box */
78 QComboBox *categoriesCombo; 84 QComboBox *categoriesCombo;
79 /** title string for the categories combo or list box */ 85 /** title string for the categories combo or list box */
80 QLabel *categoriesTitle; 86 QLabel *categoriesTitle;
81 /** hbox1 for widget style */ 87 /** hbox1 for widget style */
82 QHBox *hbox1; 88 QHBox *hbox1;
83 /** vbox1 for widget style */ 89 /** vbox1 for widget style */
84 QVBox *vbox1; 90 QVBox *vbox1;
85 /** splitter for commentTextEdit */ 91 /** splitter for commentTextEdit */
86 #ifndef PWM_EMBEDDED 92 #ifndef PWM_EMBEDDED
87 QSplitter *splitter1; 93 QSplitter *splitter1;
88#else 94#else
89 KDGanttMinimizeSplitter * splitter1; 95 KDGanttMinimizeSplitter * splitter1;
90#endif 96#endif
91 /** push button to change the category name */ 97 /** push button to change the category name */
92 QPushButton *renCatButton; 98 QPushButton *renCatButton;
93 /** push button to delete the category */ 99 /** push button to delete the category */
94 QPushButton *delCatButton; 100 QPushButton *delCatButton;
95 /** comment box */ 101 /** comment box */
96 CommentBox *commentBox; 102 CommentBox *commentBox;
97}; 103};
98 104
99#endif 105#endif
diff --git a/pwmanager/pwmanager/pwmviewstyle_1.cpp b/pwmanager/pwmanager/pwmviewstyle_1.cpp
index 4c24bc4..8b2d6d3 100644
--- a/pwmanager/pwmanager/pwmviewstyle_1.cpp
+++ b/pwmanager/pwmanager/pwmviewstyle_1.cpp
@@ -1,130 +1,150 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2004 by Michael Buesch * 3 * copyright (C) 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 "pwmviewstyle_1.h" 20#include "pwmviewstyle_1.h"
21#include "pwmview.h" 21#include "pwmview.h"
22#include "listviewpwm.h" 22#include "listviewpwm.h"
23#include "commentbox.h" 23#include "commentbox.h"
24 24
25#include <klocale.h> 25#include <klocale.h>
26#include "pwmprefs.h"
26 27
27 #define INITIAL_CATEGORIES_WIDTH100 28 #define INITIAL_CATEGORIES_WIDTH100
28 29
29PwMViewStyle_1::PwMViewStyle_1(PwMView *view) 30PwMViewStyle_1::PwMViewStyle_1(PwMView *view)
30 : QObject() 31 : QObject()
31{ 32{
32#ifndef PWM_EMBEDDED 33#ifndef PWM_EMBEDDED
33 splitter = new QSplitter(view); 34 splitter = new QSplitter(view);
34#else 35#else
35 splitter = new KDGanttMinimizeSplitter( Qt::Horizontal, view); 36 splitter = new KDGanttMinimizeSplitter( Qt::Horizontal, view);
36 splitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 37 splitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
37 38
38 //US topLayout->addWidget(mMiniSplitter ); 39 //US topLayout->addWidget(mMiniSplitter );
39#endif 40#endif
40 41
41 vbox1 = new QVBox(splitter); 42 vbox1 = new QVBox(splitter);
42 categoriesTitle = new QLabel(vbox1); 43 categoriesTitle = new QLabel(vbox1);
43 categoriesList = new QListBox(vbox1); 44 categoriesList = new QListBox(vbox1);
44#ifndef PWM_EMBEDDED 45#ifndef PWM_EMBEDDED
45 splitter2 = new QSplitter(splitter); 46 splitter2 = new QSplitter(splitter);
46 splitter2->setOrientation(Qt::Vertical); 47 splitter2->setOrientation(Qt::Vertical);
47#else 48#else
48 splitter2 = new KDGanttMinimizeSplitter( Qt::Vertical, splitter); 49 splitter2 = new KDGanttMinimizeSplitter( Qt::Vertical, splitter);
49 splitter2->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 50 splitter2->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
50 51
51 //US topLayout->addWidget(mMiniSplitter ); 52 //US topLayout->addWidget(mMiniSplitter );
52#endif 53#endif
53 lv = new ListViewPwM(splitter2); 54 lv = new ListViewPwM(splitter2);
54 commentBox = new CommentBox(splitter2); 55 commentBox = new CommentBox(splitter2);
55 // set sizes and styles 56 // set sizes and styles
56 commentBox->resize(commentBox->size().width(), 60); 57 commentBox->resize(commentBox->size().width(), 60);
57 QValueList<int> sizes; 58 QValueList<int> sizes;
58#ifndef PWM_EMBEDDED 59#ifndef PWM_EMBEDDED
59 sizes.push_back(INITIAL_CATEGORIES_WIDTH); 60 sizes.push_back(INITIAL_CATEGORIES_WIDTH);
60 sizes.push_back(view->height() - INITIAL_CATEGORIES_WIDTH); 61 sizes.push_back(view->height() - INITIAL_CATEGORIES_WIDTH);
61#else 62#else
62 sizes.append(INITIAL_CATEGORIES_WIDTH); 63 sizes.append(INITIAL_CATEGORIES_WIDTH);
63 sizes.append(view->height() - INITIAL_CATEGORIES_WIDTH); 64 sizes.append(view->height() - INITIAL_CATEGORIES_WIDTH);
64#endif 65#endif
65 splitter->setSizes(sizes); 66 splitter->setSizes(sizes);
66 categoriesTitle->setAlignment(Qt::AlignHCenter); 67 categoriesTitle->setAlignment(Qt::AlignHCenter);
67#ifndef PWM_EMBEDDED 68#ifndef PWM_EMBEDDED
68 categoriesTitle->setFrameShape(QFrame::MenuBarPanel); 69 categoriesTitle->setFrameShape(QFrame::MenuBarPanel);
69#else 70#else
70 categoriesTitle->setFrameShape(QFrame::StyledPanel); 71 categoriesTitle->setFrameShape(QFrame::StyledPanel);
71#endif 72#endif
72 categoriesTitle->setText(i18n("Categories:")); 73 categoriesTitle->setText(i18n("Categories:"));
73 catCtxMenu = new QPopupMenu(view); 74 catCtxMenu = new QPopupMenu(view);
74 catCtxMenu->insertItem(i18n("&Rename"), 75 catCtxMenu->insertItem(i18n("&Rename"),
75 view, SLOT(renCatButton_slot())); 76 view, SLOT(renCatButton_slot()));
76 catCtxMenu->insertItem(i18n("&Delete"), 77 catCtxMenu->insertItem(i18n("&Delete"),
77 view, SLOT(delCatButton_slot())); 78 view, SLOT(delCatButton_slot()));
78 // connections 79 // connections
79 connect(categoriesList, SIGNAL(highlighted(int)), 80 connect(categoriesList, SIGNAL(highlighted(int)),
80 view, SLOT(shiftToView())); 81 view, SLOT(shiftToView()));
81 connect(categoriesList, 82 connect(categoriesList,
82 SIGNAL(rightButtonClicked(QListBoxItem *, const QPoint &)), 83 SIGNAL(rightButtonClicked(QListBoxItem *, const QPoint &)),
83 this, 84 this,
84 SLOT(catRightClick(QListBoxItem *, const QPoint &))); 85 SLOT(catRightClick(QListBoxItem *, const QPoint &)));
85} 86}
86 87
87PwMViewStyle_1::~PwMViewStyle_1() 88PwMViewStyle_1::~PwMViewStyle_1()
88{ 89{
89 delete catCtxMenu; 90 delete catCtxMenu;
90 delete splitter; 91 delete splitter;
91} 92}
92 93
93void PwMViewStyle_1::catRightClick(QListBoxItem *item, const QPoint &point) 94void PwMViewStyle_1::catRightClick(QListBoxItem *item, const QPoint &point)
94{ 95{
95 if (!item) 96 if (!item)
96 return; 97 return;
97 catCtxMenu->move(point); 98 catCtxMenu->move(point);
98 catCtxMenu->show(); 99 catCtxMenu->show();
99} 100}
100 101
101void PwMViewStyle_1::delCategory(const QString &cat) 102void PwMViewStyle_1::delCategory(const QString &cat)
102{ 103{
103 PWM_ASSERT(categoriesList); 104 PWM_ASSERT(categoriesList);
104 int i, count = categoriesList->count(); 105 int i, count = categoriesList->count();
105 for (i = 0; i < count; ++i) { 106 for (i = 0; i < count; ++i) {
106 if (categoriesList->text(i) == cat) { 107 if (categoriesList->text(i) == cat) {
107 categoriesList->removeItem(i); 108 categoriesList->removeItem(i);
108 return; 109 return;
109 } 110 }
110 } 111 }
111 BUG(); 112 BUG();
112} 113}
113 114
114void PwMViewStyle_1::selectCategory(const QString &cat) 115void PwMViewStyle_1::selectCategory(const QString &cat)
115{ 116{
116 PWM_ASSERT(categoriesList); 117 PWM_ASSERT(categoriesList);
117 int i, count = categoriesList->count(); 118 int i, count = categoriesList->count();
118 for (i = 0; i < count; ++i) { 119 for (i = 0; i < count; ++i) {
119 if (categoriesList->text(i) == cat) { 120 if (categoriesList->text(i) == cat) {
120 categoriesList->setCurrentItem(i); 121 categoriesList->setCurrentItem(i);
121 return; 122 return;
122 } 123 }
123 } 124 }
124 // fall back to 0 125 // fall back to 0
125 categoriesList->setCurrentItem(0); 126 categoriesList->setCurrentItem(0);
126} 127}
127 128
129//US ENH: I need a place to load the view dependend settings. Eg. splittersize
130void PwMViewStyle_1::restoreSettings(PWMPrefs* prefs)
131{
132 //load and store the size of the listviewcolumns
133 lv->restoreLayout(prefs->getConfig(), "listview");
134 splitter2->setSizes( prefs->mCommentSplitter );
135
136}
137
138//US ENH: I need a place to load the view dependend settings. Eg. splittersize
139void PwMViewStyle_1::saveSettings(PWMPrefs* prefs)
140{
141 //store the size of the listviewcolumns
142 lv->saveLayout(prefs->getConfig(), "listview");
143 prefs->mCommentSplitter = splitter2->sizes();
144
145}
146
147
128#ifndef PWM_EMBEDDED 148#ifndef PWM_EMBEDDED
129#include "pwmviewstyle_1.moc" 149#include "pwmviewstyle_1.moc"
130#endif 150#endif
diff --git a/pwmanager/pwmanager/pwmviewstyle_1.h b/pwmanager/pwmanager/pwmviewstyle_1.h
index a50f587..a7f100c 100644
--- a/pwmanager/pwmanager/pwmviewstyle_1.h
+++ b/pwmanager/pwmanager/pwmviewstyle_1.h
@@ -1,107 +1,112 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2004 by Michael Buesch * 3 * copyright (C) 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#ifndef PWMVIEWSTYLE_1_H 20#ifndef PWMVIEWSTYLE_1_H
21#define PWMVIEWSTYLE_1_H 21#define PWMVIEWSTYLE_1_H
22 22
23#include <qvbox.h> 23#include <qvbox.h>
24 24
25#ifndef PWM_EMBEDDED 25#ifndef PWM_EMBEDDED
26#include <qtextedit.h> 26#include <qtextedit.h>
27#include <qsplitter.h> 27#include <qsplitter.h>
28#else 28#else
29#include <qmultilineedit.h> 29#include <qmultilineedit.h>
30#include <KDGanttMinimizeSplitter.h> 30#include <KDGanttMinimizeSplitter.h>
31#endif 31#endif
32 32
33#include <qlabel.h> 33#include <qlabel.h>
34#include <qlistbox.h> 34#include <qlistbox.h>
35#include <qpopupmenu.h> 35#include <qpopupmenu.h>
36 36
37class PwMView; 37class PwMView;
38class ListViewPwM; 38class ListViewPwM;
39class CommentBox; 39class CommentBox;
40class PWMPrefs;
40 41
41class PwMViewStyle_1 : public QObject 42class PwMViewStyle_1 : public QObject
42{ 43{
43 Q_OBJECT 44 Q_OBJECT
44public: 45public:
45 PwMViewStyle_1(PwMView *view); 46 PwMViewStyle_1(PwMView *view);
46 ~PwMViewStyle_1(); 47 ~PwMViewStyle_1();
47 48
48 ListViewPwM * getLv() 49 ListViewPwM * getLv()
49 { return lv; } 50 { return lv; }
50 CommentBox * getCommentBox() 51 CommentBox * getCommentBox()
51 { return commentBox; } 52 { return commentBox; }
52 53
53 /** returns the currently selected category */ 54 /** returns the currently selected category */
54 QString getCurrentCategory() 55 QString getCurrentCategory()
55 { return categoriesList->currentText(); } 56 { return categoriesList->currentText(); }
56 /** add Category to the view */ 57 /** add Category to the view */
57 void addCategory(const QString &cat) 58 void addCategory(const QString &cat)
58 { categoriesList->insertItem(cat); } 59 { categoriesList->insertItem(cat); }
59 /** delete Category from view */ 60 /** delete Category from view */
60 void delCategory(const QString &cat); 61 void delCategory(const QString &cat);
61 /** delete all categories from view */ 62 /** delete all categories from view */
62 void delAllCategories() 63 void delAllCategories()
63 { categoriesList->clear(); } 64 { categoriesList->clear(); }
64 /** select the specified category */ 65 /** select the specified category */
65 void selectCategory(const QString &cat); 66 void selectCategory(const QString &cat);
66 /** returns the number of categories in this view. 67 /** returns the number of categories in this view.
67 * This value dosn't say anything about the number of 68 * This value dosn't say anything about the number of
68 * categories in the document. 69 * categories in the document.
69 */ 70 */
70 int numCategories() 71 int numCategories()
71 { return categoriesList->count(); } 72 { return categoriesList->count(); }
72 /** resize the view */ 73 /** resize the view */
73 void resize(const QSize &size) 74 void resize(const QSize &size)
74 { splitter->resize(size); } 75 { splitter->resize(size); }
75 76
77 //US ENH: I need a place to load the view dependend settings. Eg. splittersize
78 void restoreSettings(PWMPrefs* prefs);
79 void saveSettings(PWMPrefs* prefs);
80
76protected slots: 81protected slots:
77 /** user clicked right button in category list */ 82 /** user clicked right button in category list */
78 void catRightClick(QListBoxItem *item, const QPoint &point); 83 void catRightClick(QListBoxItem *item, const QPoint &point);
79 84
80protected: 85protected:
81 /** main list view */ 86 /** main list view */
82 ListViewPwM *lv; 87 ListViewPwM *lv;
83#ifndef PWM_EMBEDDED 88#ifndef PWM_EMBEDDED
84 /** main splitter widget */ 89 /** main splitter widget */
85 QSplitter *splitter; 90 QSplitter *splitter;
86 /** commentTextEdit splitter */ 91 /** commentTextEdit splitter */
87 QSplitter *splitter2; 92 QSplitter *splitter2;
88#else 93#else
89 /** main splitter widget */ 94 /** main splitter widget */
90 KDGanttMinimizeSplitter *splitter; 95 KDGanttMinimizeSplitter *splitter;
91 /** commentTextEdit splitter */ 96 /** commentTextEdit splitter */
92 KDGanttMinimizeSplitter *splitter2; 97 KDGanttMinimizeSplitter *splitter2;
93#endif 98#endif
94 99
95 /** categories list-box */ 100 /** categories list-box */
96 QListBox *categoriesList; 101 QListBox *categoriesList;
97 /** title string for the categories combo or list box */ 102 /** title string for the categories combo or list box */
98 QLabel *categoriesTitle; 103 QLabel *categoriesTitle;
99 /** hbox1 for widget style */ 104 /** hbox1 for widget style */
100 QVBox *vbox1; 105 QVBox *vbox1;
101 /** text-edit to display the comment */ 106 /** text-edit to display the comment */
102 CommentBox *commentBox; 107 CommentBox *commentBox;
103 /** category list context menu */ 108 /** category list context menu */
104 QPopupMenu *catCtxMenu; 109 QPopupMenu *catCtxMenu;
105}; 110};
106 111
107#endif 112#endif
diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp
index 9377e3d..a54ba8a 100644
--- a/pwmanager/pwmanager/serializer.cpp
+++ b/pwmanager/pwmanager/serializer.cpp
@@ -279,294 +279,280 @@ bool Serializer::readCategories(const QDomNode &n,
279 } 279 }
280 } 280 }
281 return true; 281 return true;
282} 282}
283 283
284bool Serializer::readEntries(const QDomNode &n, 284bool Serializer::readEntries(const QDomNode &n,
285 vector<PwMDataItem> *dta) 285 vector<PwMDataItem> *dta)
286{ 286{
287 QDomNodeList nl(n.childNodes()); 287 QDomNodeList nl(n.childNodes());
288 QDomNode cur; 288 QDomNode cur;
289 unsigned int numEntr = nl.count(), i; 289 unsigned int numEntr = nl.count(), i;
290 PwMDataItem curEntr; 290 PwMDataItem curEntr;
291 291
292 dta->clear(); 292 dta->clear();
293 for (i = 0; i < numEntr; ++i) { 293 for (i = 0; i < numEntr; ++i) {
294 cur = nl.item(i); 294 cur = nl.item(i);
295 if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW || 295 if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW ||
296 cur.nodeName().left(6) == ENTRY_PREFIX_OLD) { 296 cur.nodeName().left(6) == ENTRY_PREFIX_OLD) {
297 if (!extractEntry(cur, &curEntr)) { 297 if (!extractEntry(cur, &curEntr)) {
298 return false; 298 return false;
299 } 299 }
300 dta->push_back(curEntr); 300 dta->push_back(curEntr);
301 } else { 301 } else {
302 printDebug("Serializer::readEntries(): hm? not an entry?"); 302 printDebug("Serializer::readEntries(): hm? not an entry?");
303 } 303 }
304 } 304 }
305 return true; 305 return true;
306} 306}
307 307
308bool Serializer::extractEntry(const QDomNode &n, 308bool Serializer::extractEntry(const QDomNode &n,
309 PwMDataItem *dta) 309 PwMDataItem *dta)
310{ 310{
311 QDomNodeList nl(n.childNodes()); 311 QDomNodeList nl(n.childNodes());
312 QDomNode cur, cdata; 312 QDomNode cur, cdata;
313 unsigned int cnt = nl.count(), i; 313 unsigned int cnt = nl.count(), i;
314 QString name, text; 314 QString name, text;
315 315
316 if (!cnt) { 316 if (!cnt) {
317 printDebug("Serializer::extractEntry(): empty"); 317 printDebug("Serializer::extractEntry(): empty");
318 return false; 318 return false;
319 } 319 }
320 dta->clear(); 320 dta->clear();
321 for (i = 0; i < cnt; ++i) { 321 for (i = 0; i < cnt; ++i) {
322 cur = nl.item(i); 322 cur = nl.item(i);
323 name = cur.nodeName(); 323 name = cur.nodeName();
324 cdata = cur.firstChild(); 324 cdata = cur.firstChild();
325 if (unlikely(cdata.isCDATASection())) { 325 if (unlikely(cdata.isCDATASection())) {
326 text = cdata.toCDATASection().data(); 326 text = cdata.toCDATASection().data();
327 } else if (likely(cur.isElement())) { 327 } else if (likely(cur.isElement())) {
328 text = cur.toElement().text(); 328 text = cur.toElement().text();
329 } else { 329 } else {
330 printDebug("Serializer::extractEntry(): neither CDATA nor element."); 330 printDebug("Serializer::extractEntry(): neither CDATA nor element.");
331 return false; 331 return false;
332 } 332 }
333 if (text == " ") 333 if (text == " ")
334 text = ""; // for backward compatibility. 334 text = ""; // for backward compatibility.
335 if (name == ENTRY_DESC_NEW || 335 if (name == ENTRY_DESC_NEW ||
336 name == ENTRY_DESC_OLD) { 336 name == ENTRY_DESC_OLD) {
337 dta->desc = unescapeEntryData(text).latin1(); 337 dta->desc = unescapeEntryData(text).latin1();
338 } else if (name == ENTRY_NAME_NEW || 338 } else if (name == ENTRY_NAME_NEW ||
339 name == ENTRY_NAME_OLD) { 339 name == ENTRY_NAME_OLD) {
340 dta->name = unescapeEntryData(text).latin1(); 340 dta->name = unescapeEntryData(text).latin1();
341 } else if (name == ENTRY_PW_NEW || 341 } else if (name == ENTRY_PW_NEW ||
342 name == ENTRY_PW_OLD) { 342 name == ENTRY_PW_OLD) {
343 dta->pw = unescapeEntryData(text).latin1(); 343 dta->pw = unescapeEntryData(text).latin1();
344 } else if (name == ENTRY_COMMENT_NEW || 344 } else if (name == ENTRY_COMMENT_NEW ||
345 name == ENTRY_COMMENT_OLD) { 345 name == ENTRY_COMMENT_OLD) {
346 dta->comment = unescapeEntryData(text).latin1(); 346 dta->comment = unescapeEntryData(text).latin1();
347 } else if (name == ENTRY_URL_NEW || 347 } else if (name == ENTRY_URL_NEW ||
348 name == ENTRY_URL_OLD) { 348 name == ENTRY_URL_OLD) {
349 dta->url = unescapeEntryData(text).latin1(); 349 dta->url = unescapeEntryData(text).latin1();
350 } else if (name == ENTRY_LAUNCHER_NEW || 350 } else if (name == ENTRY_LAUNCHER_NEW ||
351 name == ENTRY_LAUNCHER_OLD) { 351 name == ENTRY_LAUNCHER_OLD) {
352 dta->launcher = unescapeEntryData(text).latin1(); 352 dta->launcher = unescapeEntryData(text).latin1();
353 } else if (name == ENTRY_LVP_NEW || 353 } else if (name == ENTRY_LVP_NEW ||
354 name == ENTRY_LVP_OLD) { 354 name == ENTRY_LVP_OLD) {
355 dta->listViewPos = strtol(text.latin1(), 0, 10); 355 dta->listViewPos = strtol(text.latin1(), 0, 10);
356 } else if (name == ENTRY_BIN_NEW) { 356 } else if (name == ENTRY_BIN_NEW) {
357 // ENTRY_BIN_NEW == ENTRY_BIN_OLD 357 // ENTRY_BIN_NEW == ENTRY_BIN_OLD
358 if (text == "0") { 358 if (text == "0") {
359 dta->binary = false; 359 dta->binary = false;
360 } else { 360 } else {
361 dta->binary = true; 361 dta->binary = true;
362 } 362 }
363 } else if (name == ENTRY_META_NEW) { 363 } else if (name == ENTRY_META_NEW) {
364 // ENTRY_META_NEW == ENTRY_META_OLD 364 // ENTRY_META_NEW == ENTRY_META_OLD
365 if (!extractMeta(cur, &dta->meta)) 365 if (!extractMeta(cur, &dta->meta))
366 return false; 366 return false;
367 } else { 367 } else {
368 printDebug(string("Serializer::extractEntry(): invalid: ") 368 printDebug(string("Serializer::extractEntry(): invalid: ")
369 + name.latin1()); 369 + name.latin1());
370 } 370 }
371 } 371 }
372 dta->lockStat = defaultLockStat; 372 dta->lockStat = defaultLockStat;
373 return true; 373 return true;
374} 374}
375 375
376bool Serializer::extractMeta(const QDomNode &n, 376bool Serializer::extractMeta(const QDomNode &n,
377 PwMMetaData *dta) 377 PwMMetaData *dta)
378{ 378{
379 QDomNode cur(n.firstChild()); 379 QDomNode cur(n.firstChild());
380 QString name, val; 380 QString name, val;
381 while (!cur.isNull()) { 381 while (!cur.isNull()) {
382 name = cur.nodeName(); 382 name = cur.nodeName();
383 val = cur.toElement().text(); 383 val = cur.toElement().text();
384 if (val == "") { 384 if (val == "") {
385 cur = cur.nextSibling(); 385 cur = cur.nextSibling();
386 continue; 386 continue;
387 } 387 }
388#ifndef PWM_EMBEDDED 388#ifndef PWM_EMBEDDED
389 if (name == META_CREATE_DATE) { 389 if (name == META_CREATE_DATE) {
390 dta->create = QDateTime::fromString(val, Qt::ISODate); 390 dta->create = QDateTime::fromString(val, Qt::ISODate);
391 } else if (name == META_VALID_DATE) { 391 } else if (name == META_VALID_DATE) {
392 dta->valid = QDateTime::fromString(val, Qt::ISODate); 392 dta->valid = QDateTime::fromString(val, Qt::ISODate);
393 } else if (name == META_EXPIRE_DATE) { 393 } else if (name == META_EXPIRE_DATE) {
394 dta->expire = QDateTime::fromString(val, Qt::ISODate); 394 dta->expire = QDateTime::fromString(val, Qt::ISODate);
395 } else if (name == META_UPDATE_DATE) { 395 } else if (name == META_UPDATE_DATE) {
396 dta->update = QDateTime::fromString(val, Qt::ISODate); 396 dta->update = QDateTime::fromString(val, Qt::ISODate);
397 } else if (name == META_UPDATE_INT) { 397 } else if (name == META_UPDATE_INT) {
398 dta->updateInt = strtoul(val.latin1(), 0, 10); 398 dta->updateInt = strtoul(val.latin1(), 0, 10);
399 } else if (name == META_UNIQUEID) { 399 } else if (name == META_UNIQUEID) {
400 dta->uniqueid = unescapeEntryData(val).latin1(); 400 dta->uniqueid = unescapeEntryData(val).latin1();
401 } else { 401 } else {
402 printDebug(string("extractMeta(): invalid: ") 402 printDebug(string("extractMeta(): invalid: ")
403 + name.latin1()); 403 + name.latin1());
404 } 404 }
405#else 405#else
406 406
407 QDateTime m_dt;
408
409 if ((name == META_CREATE_DATE) ||
410 (name == META_VALID_DATE) ||
411 (name == META_EXPIRE_DATE) ||
412 (name == META_UPDATE_DATE))
413 {
414 int pos = val.find("T");
415 QString date = val.left(pos);
416 QString time = val.mid(pos+1);
417 qDebug("Serializer::extractMeta from %s to date=%s ,time=%s",val.latin1(), date.latin1(), time.latin1() );
418 bool ok1, ok2;
419
420 QDate m_date = KGlobal::locale()->readDate(date, &ok1);
421 QTime m_time = KGlobal::locale()->readTime(time, &ok2);
422 if ((ok1 == false) || (ok2 == false))
423 qDebug("Serializer::extractMeta invalid date or time !!!!!!!!!!!!!");
424 m_dt.setDate(m_date);
425 m_dt.setTime(m_time);
426 }
427 407
408 bool ok = true;
428 409
429 if (name == META_CREATE_DATE) { 410 if (name == META_CREATE_DATE) {
430 dta->create = m_dt; 411 dta->create = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok);
431 } else if (name == META_VALID_DATE) { 412 } else if (name == META_VALID_DATE) {
432 dta->valid = m_dt; 413 dta->valid = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok);
433 } else if (name == META_EXPIRE_DATE) { 414 } else if (name == META_EXPIRE_DATE) {
434 dta->expire = m_dt; 415 dta->expire = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok);
435 } else if (name == META_UPDATE_DATE) { 416 } else if (name == META_UPDATE_DATE) {
436 dta->update = m_dt; 417 dta->update = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok);
437 } else if (name == META_UPDATE_INT) { 418 } else if (name == META_UPDATE_INT) {
438 dta->updateInt = strtoul(val.latin1(), 0, 10); 419 dta->updateInt = strtoul(val.latin1(), 0, 10);
439 } else if (name == META_UNIQUEID) { 420 } else if (name == META_UNIQUEID) {
440 dta->uniqueid = unescapeEntryData(val).latin1(); 421 dta->uniqueid = unescapeEntryData(val).latin1();
441 } else { 422 } else {
442 printDebug(string("extractMeta(): invalid: ") 423 printDebug(string("extractMeta(): invalid: ")
443 + name.latin1()); 424 + name.latin1());
444 } 425 }
426
427 if (ok == false)
428 qDebug("Serializer::extractMeta invalid date or time !!!!!!!!!!!!!");
429
430
445#endif 431#endif
446 cur = cur.nextSibling(); 432 cur = cur.nextSibling();
447 } 433 }
448 return true; 434 return true;
449} 435}
450 436
451bool Serializer::checkValid() 437bool Serializer::checkValid()
452{ 438{
453 PWM_ASSERT(domDoc); 439 PWM_ASSERT(domDoc);
454 QDomElement root(domDoc->documentElement()); 440 QDomElement root(domDoc->documentElement());
455 if (root.nodeName() != ROOT_MAGIC_NEW && 441 if (root.nodeName() != ROOT_MAGIC_NEW &&
456 root.nodeName() != ROOT_MAGIC_OLD) { 442 root.nodeName() != ROOT_MAGIC_OLD) {
457 printDebug("Serializer: wrong magic"); 443 printDebug("Serializer: wrong magic");
458 return false; 444 return false;
459 } 445 }
460 if (root.attribute(VER_STR_NEW) != COMPAT_VER_NEW && 446 if (root.attribute(VER_STR_NEW) != COMPAT_VER_NEW &&
461 root.attribute(VER_STR_OLD) != COMPAT_VER_OLD) { 447 root.attribute(VER_STR_OLD) != COMPAT_VER_OLD) {
462 printDebug("Serializer: wrong version"); 448 printDebug("Serializer: wrong version");
463 return false; 449 return false;
464 } 450 }
465 return true; 451 return true;
466} 452}
467 453
468QDomElement Serializer::genNewRoot() 454QDomElement Serializer::genNewRoot()
469{ 455{
470 PWM_ASSERT(domDoc); 456 PWM_ASSERT(domDoc);
471 QDomElement root(domDoc->createElement(ROOT_MAGIC_WR)); 457 QDomElement root(domDoc->createElement(ROOT_MAGIC_WR));
472 root.setAttribute(VER_STR_WR, COMPAT_VER_WR); 458 root.setAttribute(VER_STR_WR, COMPAT_VER_WR);
473 domDoc->appendChild(root); 459 domDoc->appendChild(root);
474 return root; 460 return root;
475} 461}
476 462
477bool Serializer::addCategories(QDomElement *e, 463bool Serializer::addCategories(QDomElement *e,
478 const vector<PwMCategoryItem> &dta) 464 const vector<PwMCategoryItem> &dta)
479{ 465{
480 unsigned int numCat = dta.size(), i; 466 unsigned int numCat = dta.size(), i;
481 QString curId, curName; 467 QString curId, curName;
482 QDomElement curCat; 468 QDomElement curCat;
483 469
484 for (i = 0; i < numCat; ++i) { 470 for (i = 0; i < numCat; ++i) {
485 curId = CAT_PREFIX_WR; 471 curId = CAT_PREFIX_WR;
486 curId += tostr(i).c_str(); 472 curId += tostr(i).c_str();
487 curName = dta[i].name.c_str(); 473 curName = dta[i].name.c_str();
488 curCat = domDoc->createElement(curId); 474 curCat = domDoc->createElement(curId);
489 curCat.setAttribute(CAT_NAME_WR, curName); 475 curCat.setAttribute(CAT_NAME_WR, curName);
490 if (!addEntries(&curCat, dta[i].d)) { 476 if (!addEntries(&curCat, dta[i].d)) {
491 return false; 477 return false;
492 } 478 }
493 e->appendChild(curCat); 479 e->appendChild(curCat);
494 } 480 }
495 return true; 481 return true;
496} 482}
497 483
498bool Serializer::addEntries(QDomElement *e, 484bool Serializer::addEntries(QDomElement *e,
499 const vector<PwMDataItem> &dta) 485 const vector<PwMDataItem> &dta)
500{ 486{
501 unsigned int numEntr = dta.size(), i; 487 unsigned int numEntr = dta.size(), i;
502 QString curId; 488 QString curId;
503 QDomElement curEntr; 489 QDomElement curEntr;
504 490
505 for (i = 0; i < numEntr; ++i) { 491 for (i = 0; i < numEntr; ++i) {
506 curId = ENTRY_PREFIX_WR; 492 curId = ENTRY_PREFIX_WR;
507 curId += tostr(i).c_str(); 493 curId += tostr(i).c_str();
508 curEntr = domDoc->createElement(curId); 494 curEntr = domDoc->createElement(curId);
509 if (!writeEntry(&curEntr, dta[i])) { 495 if (!writeEntry(&curEntr, dta[i])) {
510 return false; 496 return false;
511 } 497 }
512 e->appendChild(curEntr); 498 e->appendChild(curEntr);
513 } 499 }
514 return true; 500 return true;
515} 501}
516 502
517bool Serializer::writeEntry(QDomElement *e, 503bool Serializer::writeEntry(QDomElement *e,
518 const PwMDataItem &_dta) 504 const PwMDataItem &_dta)
519{ 505{
520#if WRITE_CDATA_SEC != 0 506#if WRITE_CDATA_SEC != 0
521 # define new_text(x)domDoc->createCDATASection(x) 507 # define new_text(x)domDoc->createCDATASection(x)
522 QDomCDATASection curText; 508 QDomCDATASection curText;
523#else 509#else
524 # define new_text(x)domDoc->createTextNode(x) 510 # define new_text(x)domDoc->createTextNode(x)
525 QDomText curText; 511 QDomText curText;
526#endif 512#endif
527 513
528 QDomText plainText; 514 QDomText plainText;
529 QDomElement tag; 515 QDomElement tag;
530 516
531 // begin -- This is for compatibility with the old serializer 517 // begin -- This is for compatibility with the old serializer
532 PwMDataItem dta = _dta; 518 PwMDataItem dta = _dta;
533 if (!dta.desc.size()) 519 if (!dta.desc.size())
534 dta.desc = " "; 520 dta.desc = " ";
535 if (!dta.name.size()) 521 if (!dta.name.size())
536 dta.name = " "; 522 dta.name = " ";
537 if (!dta.pw.size()) 523 if (!dta.pw.size())
538 dta.pw = " "; 524 dta.pw = " ";
539 if (!dta.comment.size()) 525 if (!dta.comment.size())
540 dta.comment = " "; 526 dta.comment = " ";
541 if (!dta.url.size()) 527 if (!dta.url.size())
542 dta.url = " "; 528 dta.url = " ";
543 if (!dta.launcher.size()) 529 if (!dta.launcher.size())
544 dta.launcher = " "; 530 dta.launcher = " ";
545 // end -- This is for compatibility with the old serializer 531 // end -- This is for compatibility with the old serializer
546 532
547 tag = domDoc->createElement(ENTRY_DESC_WR); 533 tag = domDoc->createElement(ENTRY_DESC_WR);
548 curText = new_text(escapeEntryData(dta.desc.c_str())); 534 curText = new_text(escapeEntryData(dta.desc.c_str()));
549 tag.appendChild(curText); 535 tag.appendChild(curText);
550 e->appendChild(tag); 536 e->appendChild(tag);
551 537
552 tag = domDoc->createElement(ENTRY_NAME_WR); 538 tag = domDoc->createElement(ENTRY_NAME_WR);
553 curText = new_text(escapeEntryData(dta.name.c_str())); 539 curText = new_text(escapeEntryData(dta.name.c_str()));
554 tag.appendChild(curText); 540 tag.appendChild(curText);
555 e->appendChild(tag); 541 e->appendChild(tag);
556 542
557 tag = domDoc->createElement(ENTRY_PW_WR); 543 tag = domDoc->createElement(ENTRY_PW_WR);
558 curText = new_text(escapeEntryData(dta.pw.c_str())); 544 curText = new_text(escapeEntryData(dta.pw.c_str()));
559 tag.appendChild(curText); 545 tag.appendChild(curText);
560 e->appendChild(tag); 546 e->appendChild(tag);
561 547
562 tag = domDoc->createElement(ENTRY_COMMENT_WR); 548 tag = domDoc->createElement(ENTRY_COMMENT_WR);
563 curText = new_text(escapeEntryData(dta.comment.c_str())); 549 curText = new_text(escapeEntryData(dta.comment.c_str()));
564 tag.appendChild(curText); 550 tag.appendChild(curText);
565 e->appendChild(tag); 551 e->appendChild(tag);
566 552
567 tag = domDoc->createElement(ENTRY_URL_WR); 553 tag = domDoc->createElement(ENTRY_URL_WR);
568 curText = new_text(escapeEntryData(dta.url.c_str())); 554 curText = new_text(escapeEntryData(dta.url.c_str()));
569 tag.appendChild(curText); 555 tag.appendChild(curText);
570 e->appendChild(tag); 556 e->appendChild(tag);
571 557
572 tag = domDoc->createElement(ENTRY_LAUNCHER_WR); 558 tag = domDoc->createElement(ENTRY_LAUNCHER_WR);