summaryrefslogtreecommitdiff
authorzcarsten <zcarsten>2003-08-06 20:15:19 (UTC)
committer zcarsten <zcarsten>2003-08-06 20:15:19 (UTC)
commite14f10f07d8477ee49cd487587732e27a3307878 (patch) (unidiff)
treee46ff1986ce5c0cbba2283d80a878df432f874d8
parentba25812361114b7cf059a3a1fb3aed42f8a7ebde (diff)
downloadopie-e14f10f07d8477ee49cd487587732e27a3307878.zip
opie-e14f10f07d8477ee49cd487587732e27a3307878.tar.gz
opie-e14f10f07d8477ee49cd487587732e27a3307878.tar.bz2
addCategory corrected
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/zsafe/zsafe.cpp44
1 files changed, 34 insertions, 10 deletions
diff --git a/noncore/apps/zsafe/zsafe.cpp b/noncore/apps/zsafe/zsafe.cpp
index ef16b46..e86b3d2 100644
--- a/noncore/apps/zsafe/zsafe.cpp
+++ b/noncore/apps/zsafe/zsafe.cpp
@@ -2088,1265 +2088,1289 @@ int ZSafe::loadInit(const char* _filename, const char *password)
2088 } /* for (count2) */ 2088 } /* for (count2) */
2089 2089
2090 krc2->rc2_decrypt (plaintext); 2090 krc2->rc2_decrypt (plaintext);
2091 memcpy ((unsigned char *) (buffer + bufferIndex), plaintext, 8); 2091 memcpy ((unsigned char *) (buffer + bufferIndex), plaintext, 8);
2092 bufferIndex += 8; 2092 bufferIndex += 8;
2093 buffer[bufferIndex + 1] = '\0'; 2093 buffer[bufferIndex + 1] = '\0';
2094 } /* while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) */ 2094 } /* while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) */
2095 size -= buffer[size - 1]; 2095 size -= buffer[size - 1];
2096 lastcount = 0; 2096 lastcount = 0;
2097 2097
2098 /* This will point to the starting index */ 2098 /* This will point to the starting index */
2099 bufferIndex = 0; 2099 bufferIndex = 0;
2100 return PWERR_GOOD; 2100 return PWERR_GOOD;
2101} 2101}
2102 2102
2103int ZSafe::loadEntry(char *entry[FIELD_SIZE]) 2103int ZSafe::loadEntry(char *entry[FIELD_SIZE])
2104{ 2104{
2105 /* Strip off PKCS 5 padding 2105 /* Strip off PKCS 5 padding
2106 * Should check to make sure it's good here 2106 * Should check to make sure it's good here
2107 */ 2107 */
2108 int count, count1=0; 2108 int count, count1=0;
2109 2109
2110 for (count = lastcount; count < size; count++) { 2110 for (count = lastcount; count < size; count++) {
2111 if ((unsigned char) (buffer[count]) == 255) { 2111 if ((unsigned char) (buffer[count]) == 255) {
2112 if (buffer[bufferIndex] == '\0') { 2112 if (buffer[bufferIndex] == '\0') {
2113 bufferIndex++; 2113 bufferIndex++;
2114 } 2114 }
2115 entry[count1] = (char *) malloc (count - bufferIndex + 1); 2115 entry[count1] = (char *) malloc (count - bufferIndex + 1);
2116 memcpy (entry[count1], (unsigned char *) (buffer + bufferIndex), count - bufferIndex); 2116 memcpy (entry[count1], (unsigned char *) (buffer + bufferIndex), count - bufferIndex);
2117 entry[count1][count - bufferIndex] = '\0'; 2117 entry[count1][count - bufferIndex] = '\0';
2118 count++; 2118 count++;
2119 bufferIndex = count; 2119 bufferIndex = count;
2120 count1++; 2120 count1++;
2121 if (count1 == FIELD_SIZE) { 2121 if (count1 == FIELD_SIZE) {
2122 lastcount = count; 2122 lastcount = count;
2123 return 1; 2123 return 1;
2124 } 2124 }
2125 } /* if ((unsigned char) (buffer[count]) == 255) */ 2125 } /* if ((unsigned char) (buffer[count]) == 255) */
2126 } /* for (count = 0; count < size; count++) */ 2126 } /* for (count = 0; count < size; count++) */
2127 2127
2128 return 2; 2128 return 2;
2129} 2129}
2130 2130
2131int ZSafe::loadFinalize(void) 2131int ZSafe::loadFinalize(void)
2132{ 2132{
2133 fclose (fd); 2133 fclose (fd);
2134 if (buffer) free(buffer); 2134 if (buffer) free(buffer);
2135 return PWERR_GOOD; 2135 return PWERR_GOOD;
2136} 2136}
2137 2137
2138bool ZSafe::saveDocument(const char* _filename, 2138bool ZSafe::saveDocument(const char* _filename,
2139 bool withPwd, 2139 bool withPwd,
2140 const char* ) 2140 const char* )
2141{ 2141{
2142 if (filename.isEmpty()) 2142 if (filename.isEmpty())
2143 { 2143 {
2144 QMessageBox::critical( 0, tr("ZSafe"), 2144 QMessageBox::critical( 0, tr("ZSafe"),
2145 tr("No document defined.\nYou have to create a new document")); 2145 tr("No document defined.\nYou have to create a new document"));
2146 return false; 2146 return false;
2147 } 2147 }
2148 2148
2149 // if (m_password.isEmpty()) 2149 // if (m_password.isEmpty())
2150 // withPwd = true; // the document must be saved with a valid password 2150 // withPwd = true; // the document must be saved with a valid password
2151 if (withPwd) 2151 if (withPwd)
2152 { 2152 {
2153 bool pwdOk = FALSE; 2153 bool pwdOk = FALSE;
2154 while (!pwdOk) 2154 while (!pwdOk)
2155 { 2155 {
2156 getDocPassword(tr("Enter Password")); 2156 getDocPassword(tr("Enter Password"));
2157 if (m_password.isEmpty()) 2157 if (m_password.isEmpty())
2158 { 2158 {
2159 2159
2160 QMessageBox::critical( 0, tr("ZSafe"), 2160 QMessageBox::critical( 0, tr("ZSafe"),
2161 tr("Password is empty.\nPlease enter again.")); 2161 tr("Password is empty.\nPlease enter again."));
2162 continue; 2162 continue;
2163 } 2163 }
2164 2164
2165 QString firstPasswd = m_password; 2165 QString firstPasswd = m_password;
2166 2166
2167 getDocPassword(tr("Reenter Password")); 2167 getDocPassword(tr("Reenter Password"));
2168 if (m_password.isEmpty()) 2168 if (m_password.isEmpty())
2169 { 2169 {
2170 QMessageBox::critical( 0, tr("ZSafe"), 2170 QMessageBox::critical( 0, tr("ZSafe"),
2171 tr("Password is empty.\nPlease enter again.")); 2171 tr("Password is empty.\nPlease enter again."));
2172 continue; 2172 continue;
2173 } 2173 }
2174 if (firstPasswd != m_password) 2174 if (firstPasswd != m_password)
2175 { 2175 {
2176 2176
2177 QMessageBox::critical( 0, tr("ZSafe"), 2177 QMessageBox::critical( 0, tr("ZSafe"),
2178 tr("Passwords must be identical.\nPlease enter again.")); 2178 tr("Passwords must be identical.\nPlease enter again."));
2179 continue; 2179 continue;
2180 } 2180 }
2181 pwdOk = TRUE; 2181 pwdOk = TRUE;
2182 modified = false; 2182 modified = false;
2183 } 2183 }
2184 } 2184 }
2185 else if (modified) 2185 else if (modified)
2186 { 2186 {
2187 QString fns(_filename); 2187 QString fns(_filename);
2188 fns = fns.right (fns.length() - fns.findRev ('/') - 1); 2188 fns = fns.right (fns.length() - fns.findRev ('/') - 1);
2189 switch( QMessageBox::information( this, tr("ZSafe"), 2189 switch( QMessageBox::information( this, tr("ZSafe"),
2190 tr("Do you want to save ") + fns + tr("\nbefore continuing?"), 2190 tr("Do you want to save ") + fns + tr("\nbefore continuing?"),
2191 tr("&Save"), 2191 tr("&Save"),
2192 tr("&Don't Save"), 2192 tr("&Don't Save"),
2193 0 // Enter == button 0 2193 0 // Enter == button 0
2194 ) ) 2194 ) )
2195 { // Escape == button 2 2195 { // Escape == button 2
2196 case 0: // Save clicked, Alt-S or Enter pressed. 2196 case 0: // Save clicked, Alt-S or Enter pressed.
2197 modified = false; 2197 modified = false;
2198 break; 2198 break;
2199 case 1: // Don't Save clicked or Alt-D pressed 2199 case 1: // Don't Save clicked or Alt-D pressed
2200 modified = false; 2200 modified = false;
2201 return true; 2201 return true;
2202 } 2202 }
2203 } 2203 }
2204 modified = false; 2204 modified = false;
2205 2205
2206 if (m_password.isEmpty()) 2206 if (m_password.isEmpty())
2207 return false; 2207 return false;
2208 2208
2209 int retval = saveInit(_filename, m_password); 2209 int retval = saveInit(_filename, m_password);
2210 // int retval = saveInit(_filename, "test"); 2210 // int retval = saveInit(_filename, "test");
2211 if (retval != PWERR_GOOD) { 2211 if (retval != PWERR_GOOD) {
2212 return false; 2212 return false;
2213 } 2213 }
2214 2214
2215 char* entry[FIELD_SIZE]; 2215 char* entry[FIELD_SIZE];
2216 2216
2217 // save the validation entry 2217 // save the validation entry
2218 { 2218 {
2219 int i=0; 2219 int i=0;
2220 entry[i] = (char*)malloc(strlen("ZSAFECATEGORY")+1); 2220 entry[i] = (char*)malloc(strlen("ZSAFECATEGORY")+1);
2221 strcpy(entry[i++], "ZSAFECATEGORY"); 2221 strcpy(entry[i++], "ZSAFECATEGORY");
2222 entry[i] = (char*)malloc(strlen("name")+1); 2222 entry[i] = (char*)malloc(strlen("name")+1);
2223 strcpy(entry[i++], "name"); 2223 strcpy(entry[i++], "name");
2224 entry[i] = (char*)malloc(strlen("username")+1); 2224 entry[i] = (char*)malloc(strlen("username")+1);
2225 strcpy(entry[i++], "username"); 2225 strcpy(entry[i++], "username");
2226 entry[i] = (char*)malloc(strlen("password")+1); 2226 entry[i] = (char*)malloc(strlen("password")+1);
2227 strcpy(entry[i++], "password"); 2227 strcpy(entry[i++], "password");
2228 entry[i] = (char*)malloc(strlen("comment")+1); 2228 entry[i] = (char*)malloc(strlen("comment")+1);
2229 strcpy(entry[i++], "comment"); 2229 strcpy(entry[i++], "comment");
2230 2230
2231 entry[i] = (char*)malloc(strlen("field5")+1); 2231 entry[i] = (char*)malloc(strlen("field5")+1);
2232 strcpy(entry[i++], "field5"); 2232 strcpy(entry[i++], "field5");
2233 entry[i] = (char*)malloc(strlen("field6")+1); 2233 entry[i] = (char*)malloc(strlen("field6")+1);
2234 strcpy(entry[i++], "field6"); 2234 strcpy(entry[i++], "field6");
2235 2235
2236 retval = saveEntry(entry); 2236 retval = saveEntry(entry);
2237 for (int z=0; z<i; z++) free(entry[z]); 2237 for (int z=0; z<i; z++) free(entry[z]);
2238 if (retval == PWERR_DATA) { 2238 if (retval == PWERR_DATA) {
2239 qWarning("1: Error writing file, contents not saved"); 2239 qWarning("1: Error writing file, contents not saved");
2240 saveFinalize(); 2240 saveFinalize();
2241 return false; 2241 return false;
2242 } 2242 }
2243// #ifndef WIN32 2243// #ifndef WIN32
2244 conf->writeEntry(APP_KEY+"valzsafe", 1); 2244 conf->writeEntry(APP_KEY+"valzsafe", 1);
2245// #endif 2245// #endif
2246 saveConf(); 2246 saveConf();
2247 } 2247 }
2248 2248
2249 QListViewItem *i; 2249 QListViewItem *i;
2250 // step through all categories 2250 // step through all categories
2251 for (i = ListView->firstChild(); 2251 for (i = ListView->firstChild();
2252 i != NULL; 2252 i != NULL;
2253 i = i->nextSibling()) 2253 i = i->nextSibling())
2254 { 2254 {
2255 // step through all subitems 2255 // step through all subitems
2256 QListViewItem *si; 2256 QListViewItem *si;
2257 for (si = i->firstChild(); 2257 for (si = i->firstChild();
2258 si != NULL; 2258 si != NULL;
2259 si = si->nextSibling()) 2259 si = si->nextSibling())
2260 { 2260 {
2261 int j=0; 2261 int j=0;
2262 entry[j] = (char*)malloc(strlen(i->text(0))+1); 2262 entry[j] = (char*)malloc(strlen(i->text(0))+1);
2263 strcpy(entry[j++], i->text(0)); 2263 strcpy(entry[j++], i->text(0));
2264 entry[j] = (char*)malloc(strlen(si->text(0))+1); 2264 entry[j] = (char*)malloc(strlen(si->text(0))+1);
2265 strcpy(entry[j++], si->text(0)); 2265 strcpy(entry[j++], si->text(0));
2266 entry[j] = (char*)malloc(strlen(si->text(1))+1); 2266 entry[j] = (char*)malloc(strlen(si->text(1))+1);
2267 strcpy(entry[j++], si->text(1)); 2267 strcpy(entry[j++], si->text(1));
2268 entry[j] = (char*)malloc(strlen(si->text(2))+1); 2268 entry[j] = (char*)malloc(strlen(si->text(2))+1);
2269 strcpy(entry[j++], si->text(2)); 2269 strcpy(entry[j++], si->text(2));
2270 entry[j] = (char*)malloc(strlen(si->text(3))+1); 2270 entry[j] = (char*)malloc(strlen(si->text(3))+1);
2271 strcpy(entry[j++], si->text(3)); 2271 strcpy(entry[j++], si->text(3));
2272 2272
2273 entry[j] = (char*)malloc(strlen(si->text(4))+1); 2273 entry[j] = (char*)malloc(strlen(si->text(4))+1);
2274 strcpy(entry[j++], si->text(4)); 2274 strcpy(entry[j++], si->text(4));
2275 entry[j] = (char*)malloc(strlen(si->text(5))+1); 2275 entry[j] = (char*)malloc(strlen(si->text(5))+1);
2276 strcpy(entry[j++], si->text(5)); 2276 strcpy(entry[j++], si->text(5));
2277 2277
2278 retval = saveEntry(entry); 2278 retval = saveEntry(entry);
2279 for (int z=0; z<j; z++) 2279 for (int z=0; z<j; z++)
2280 { 2280 {
2281 free(entry[z]); 2281 free(entry[z]);
2282 } 2282 }
2283 if (retval == PWERR_DATA) { 2283 if (retval == PWERR_DATA) {
2284 qWarning("1: Error writing file, contents not saved"); 2284 qWarning("1: Error writing file, contents not saved");
2285 saveFinalize(); 2285 saveFinalize();
2286 return false; 2286 return false;
2287 } 2287 }
2288 2288
2289 } 2289 }
2290 } 2290 }
2291 2291
2292 if (saveFinalize() == PWERR_DATA) { 2292 if (saveFinalize() == PWERR_DATA) {
2293 qWarning("2: Error writing file, contents not saved"); 2293 qWarning("2: Error writing file, contents not saved");
2294 return false; 2294 return false;
2295 } else { 2295 } else {
2296#ifndef DESKTOP 2296#ifndef DESKTOP
2297 Global::statusMessage (tr("Password file saved.")); 2297 Global::statusMessage (tr("Password file saved."));
2298#endif 2298#endif
2299 modified = false; 2299 modified = false;
2300 return true; 2300 return true;
2301 } 2301 }
2302} 2302}
2303 2303
2304PasswordForm *newPwdDialog; 2304PasswordForm *newPwdDialog;
2305bool newPwdDialogResult = false; 2305bool newPwdDialogResult = false;
2306void ZSafe::setPasswordDialogDone() 2306void ZSafe::setPasswordDialogDone()
2307{ 2307{
2308 newPwdDialogResult = true; 2308 newPwdDialogResult = true;
2309 newPwdDialog->close(); 2309 newPwdDialog->close();
2310} 2310}
2311 2311
2312void ZSafe::getDocPassword(QString title) 2312void ZSafe::getDocPassword(QString title)
2313{ 2313{
2314qWarning ("getDocPassword"); 2314qWarning ("getDocPassword");
2315 // open the 'Password' dialog 2315 // open the 'Password' dialog
2316 PasswordForm *dialog = new PasswordForm(this, title, TRUE); 2316 PasswordForm *dialog = new PasswordForm(this, title, TRUE);
2317 newPwdDialog = dialog; 2317 newPwdDialog = dialog;
2318 newPwdDialogResult = false; 2318 newPwdDialogResult = false;
2319 2319
2320 connect( dialog->PasswordField, SIGNAL( returnPressed() ), 2320 connect( dialog->PasswordField, SIGNAL( returnPressed() ),
2321 this, SLOT( setPasswordDialogDone() ) ); 2321 this, SLOT( setPasswordDialogDone() ) );
2322 2322
2323 // CS: !!! 2323 // CS: !!!
2324 // int pos = filename.findRev ('/'); 2324 // int pos = filename.findRev ('/');
2325 QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); 2325 QString ti = filename.right (filename.length() - filename.findRev ('/') - 1);
2326#ifdef WIN32 2326#ifdef WIN32
2327 dialog->setCaption("Qt " + ti); 2327 dialog->setCaption("Qt " + ti);
2328#else 2328#else
2329 dialog->setCaption(ti); 2329 dialog->setCaption(ti);
2330#endif 2330#endif
2331 // dialog->setCaption(title); 2331 // dialog->setCaption(title);
2332 2332
2333 dialog->PasswordField->setFocus(); 2333 dialog->PasswordField->setFocus();
2334 DialogCode result = (DialogCode) dialog->exec(); 2334 DialogCode result = (DialogCode) dialog->exec();
2335#ifdef DESKTOP 2335#ifdef DESKTOP
2336 result = Accepted; 2336 result = Accepted;
2337#endif 2337#endif
2338 2338
2339 QString password; 2339 QString password;
2340 if (result == Accepted || newPwdDialogResult) 2340 if (result == Accepted || newPwdDialogResult)
2341 { 2341 {
2342 m_password = dialog->PasswordField->text(); 2342 m_password = dialog->PasswordField->text();
2343 } 2343 }
2344 else 2344 else
2345 { 2345 {
2346 exitZs (1); 2346 exitZs (1);
2347 } 2347 }
2348} 2348}
2349 2349
2350int ZSafe::saveInit(const char *_filename, const char *password) 2350int ZSafe::saveInit(const char *_filename, const char *password)
2351{ 2351{
2352 char key[128]; 2352 char key[128];
2353 unsigned int j = 0; 2353 unsigned int j = 0;
2354 unsigned int keylength; 2354 unsigned int keylength;
2355 // int val; 2355 // int val;
2356 int count2; 2356 int count2;
2357 Krc2* krc2 = new Krc2(); 2357 Krc2* krc2 = new Krc2();
2358 2358
2359 /* first we should check the permissions of the filename */ 2359 /* first we should check the permissions of the filename */
2360/* 2360/*
2361 if (QFile::exists(_filename)) { 2361 if (QFile::exists(_filename)) {
2362 val = checkFile(_filename); 2362 val = checkFile(_filename);
2363 if (val != PWERR_GOOD) 2363 if (val != PWERR_GOOD)
2364 return val; 2364 return val;
2365 } else 2365 } else
2366 { 2366 {
2367 val = creat (_filename, (S_IRUSR | S_IWUSR)); 2367 val = creat (_filename, (S_IRUSR | S_IWUSR));
2368 if (val == -1) 2368 if (val == -1)
2369 return PWERR_OPEN; 2369 return PWERR_OPEN;
2370 else 2370 else
2371 close(val); 2371 close(val);
2372 } 2372 }
2373*/ 2373*/
2374 QFileInfo f (_filename); 2374 QFileInfo f (_filename);
2375 save_buffer_length = f.size(); 2375 save_buffer_length = f.size();
2376 save_buffer_length = ((save_buffer_length / 1024)+1) * 1024; 2376 save_buffer_length = ((save_buffer_length / 1024)+1) * 1024;
2377 2377
2378 fd = fopen (_filename, "wb"); 2378 fd = fopen (_filename, "wb");
2379 if (fd == NULL) 2379 if (fd == NULL)
2380 return PWERR_OPEN; 2380 return PWERR_OPEN;
2381 2381
2382 buffer = (char*)malloc(save_buffer_length); 2382 buffer = (char*)malloc(save_buffer_length);
2383 2383
2384 /* make the key ready */ 2384 /* make the key ready */
2385 for (j = 0; password[j] != '\0'; j++) { 2385 for (j = 0; password[j] != '\0'; j++) {
2386 key[j] = password[j]; 2386 key[j] = password[j];
2387 } 2387 }
2388 keylength = j; 2388 keylength = j;
2389 krc2->rc2_expandkey (key, keylength, 128); 2389 krc2->rc2_expandkey (key, keylength, 128);
2390 2390
2391 /* First, we make the IV */ 2391 /* First, we make the IV */
2392 for (count2 = 0; count2 < 4; count2++) { 2392 for (count2 = 0; count2 < 4; count2++) {
2393 iv[count2] = rand (); 2393 iv[count2] = rand ();
2394 putc ((unsigned char) (iv[count2] >> 8), fd); 2394 putc ((unsigned char) (iv[count2] >> 8), fd);
2395 putc ((unsigned char) (iv[count2] & 0xff), fd); 2395 putc ((unsigned char) (iv[count2] & 0xff), fd);
2396 } 2396 }
2397 2397
2398 bufferIndex = 0; 2398 bufferIndex = 0;
2399 return PWERR_GOOD; 2399 return PWERR_GOOD;
2400} 2400}
2401 2401
2402 2402
2403int ZSafe::saveEntry(char *entry[FIELD_SIZE]) 2403int ZSafe::saveEntry(char *entry[FIELD_SIZE])
2404{ 2404{
2405 char *text1; 2405 char *text1;
2406 int count2, count3; 2406 int count2, count3;
2407 unsigned short ciphertext[4]; 2407 unsigned short ciphertext[4];
2408 Krc2* krc2 = new Krc2(); 2408 Krc2* krc2 = new Krc2();
2409 2409
2410 buffer = (char*)memset(buffer, '\0', save_buffer_length); 2410 buffer = (char*)memset(buffer, '\0', save_buffer_length);
2411 2411
2412 for (count2 = 0; count2 < FIELD_SIZE; count2++) { 2412 for (count2 = 0; count2 < FIELD_SIZE; count2++) {
2413 text1 = entry[count2]; 2413 text1 = entry[count2];
2414 if (strlen (text1) == 0) { 2414 if (strlen (text1) == 0) {
2415 strncat(buffer, " ", strlen(" ")); 2415 strncat(buffer, " ", strlen(" "));
2416 } else { 2416 } else {
2417 strncat(buffer, text1, strlen(text1)); 2417 strncat(buffer, text1, strlen(text1));
2418 } 2418 }
2419 /* Use 255 as the marker. \n is too tough to test for */ 2419 /* Use 255 as the marker. \n is too tough to test for */
2420 buffer[strlen (buffer)] = 255; 2420 buffer[strlen (buffer)] = 255;
2421 } /*for (count2 = 0; count2 < 5; count2++)*/ 2421 } /*for (count2 = 0; count2 < 5; count2++)*/
2422 count2 = 0; 2422 count2 = 0;
2423 /* I'm using CBC mode and encrypting the data straight from top down. 2423 /* I'm using CBC mode and encrypting the data straight from top down.
2424 * At the bottom, encrypted, I will append an MD5 hash of the file, eventually. 2424 * At the bottom, encrypted, I will append an MD5 hash of the file, eventually.
2425 * PKCS 5 padding (explained at the code section 2425 * PKCS 5 padding (explained at the code section
2426 */ 2426 */
2427 while (count2 < (int)strlen (buffer)) { 2427 while (count2 < (int)strlen (buffer)) {
2428#ifndef WORDS_BIGENDIAN 2428#ifndef WORDS_BIGENDIAN
2429 plaintext[bufferIndex] = buffer[count2 + 1] << 8; 2429 plaintext[bufferIndex] = buffer[count2 + 1] << 8;
2430 plaintext[bufferIndex] += buffer[count2] & 0xff; 2430 plaintext[bufferIndex] += buffer[count2] & 0xff;
2431#endif 2431#endif
2432#ifdef WORDS_BIGENDIAN 2432#ifdef WORDS_BIGENDIAN
2433 plaintext[bufferIndex] = buffer[count2] << 8; 2433 plaintext[bufferIndex] = buffer[count2] << 8;
2434 plaintext[bufferIndex] += buffer[count2 + 1] & 0xff; 2434 plaintext[bufferIndex] += buffer[count2 + 1] & 0xff;
2435#endif 2435#endif
2436 bufferIndex++; 2436 bufferIndex++;
2437 if (bufferIndex == 4) { 2437 if (bufferIndex == 4) {
2438 krc2->rc2_encrypt (plaintext); 2438 krc2->rc2_encrypt (plaintext);
2439 2439
2440 for (count3 = 0; count3 < 4; count3++) { 2440 for (count3 = 0; count3 < 4; count3++) {
2441 ciphertext[count3] = iv[count3] ^ plaintext[count3]; 2441 ciphertext[count3] = iv[count3] ^ plaintext[count3];
2442 2442
2443 /* Now store the ciphertext as the iv */ 2443 /* Now store the ciphertext as the iv */
2444 iv[count3] = plaintext[count3]; 2444 iv[count3] = plaintext[count3];
2445 2445
2446 /* reset the buffer index */ 2446 /* reset the buffer index */
2447 bufferIndex = 0; 2447 bufferIndex = 0;
2448 if (putc ((unsigned char) (ciphertext[count3] >> 8), fd) == EOF) return PWERR_DATA; 2448 if (putc ((unsigned char) (ciphertext[count3] >> 8), fd) == EOF) return PWERR_DATA;
2449 if (putc ((unsigned char) (ciphertext[count3] & 0xff), fd) == EOF) return PWERR_DATA; 2449 if (putc ((unsigned char) (ciphertext[count3] & 0xff), fd) == EOF) return PWERR_DATA;
2450 } /*for (count3 = 0; count3 < 5; count3++)*/ 2450 } /*for (count3 = 0; count3 < 5; count3++)*/
2451 } /*if (bufferIndex == 5)*/ 2451 } /*if (bufferIndex == 5)*/
2452 /* increment a short, not a byte */ 2452 /* increment a short, not a byte */
2453 count2 += 2; 2453 count2 += 2;
2454 } /*while (count2 < strlen (buffer))*/ 2454 } /*while (count2 < strlen (buffer))*/
2455 int ret = PWERR_GOOD; 2455 int ret = PWERR_GOOD;
2456 return ret; 2456 return ret;
2457} 2457}
2458 2458
2459int ZSafe::saveFinalize(void) 2459int ZSafe::saveFinalize(void)
2460{ 2460{
2461 int count1, retval = PWERR_GOOD; 2461 int count1, retval = PWERR_GOOD;
2462 unsigned short ciphertext[4]; 2462 unsigned short ciphertext[4];
2463 Krc2* krc2 = new Krc2(); 2463 Krc2* krc2 = new Krc2();
2464 2464
2465 /* Tack on the PKCS 5 padding 2465 /* Tack on the PKCS 5 padding
2466 * How it works is we fill up the last n bytes with the value n 2466 * How it works is we fill up the last n bytes with the value n
2467 * 2467 *
2468 * So, if we have, say, 13 bytes, 8 of which are used, we have 5 left 2468 * So, if we have, say, 13 bytes, 8 of which are used, we have 5 left
2469 * over, leaving us 3 short, so we fill it in with 3's. 2469 * over, leaving us 3 short, so we fill it in with 3's.
2470 * 2470 *
2471 * If we come out even, we fill it with 8 8s 2471 * If we come out even, we fill it with 8 8s
2472 * 2472 *
2473 * um, except that in this instance we are using 4 shorts instead of 8 bytes. 2473 * um, except that in this instance we are using 4 shorts instead of 8 bytes.
2474 * so, half everything 2474 * so, half everything
2475 */ 2475 */
2476 for (count1 = bufferIndex; count1 < 4; count1++) { 2476 for (count1 = bufferIndex; count1 < 4; count1++) {
2477 plaintext[count1] = (4 - bufferIndex); 2477 plaintext[count1] = (4 - bufferIndex);
2478 } 2478 }
2479 krc2->rc2_encrypt (plaintext); 2479 krc2->rc2_encrypt (plaintext);
2480 for (count1 = 0; count1 < 4; count1++) { 2480 for (count1 = 0; count1 < 4; count1++) {
2481 ciphertext[count1] = iv[count1] ^ plaintext[count1]; 2481 ciphertext[count1] = iv[count1] ^ plaintext[count1];
2482 if (putc ((unsigned char) (ciphertext[count1] >> 8), fd) == EOF) retval = PWERR_DATA; 2482 if (putc ((unsigned char) (ciphertext[count1] >> 8), fd) == EOF) retval = PWERR_DATA;
2483 if (putc ((unsigned char) (ciphertext[count1] & 0xff), fd) == EOF) retval = PWERR_DATA; 2483 if (putc ((unsigned char) (ciphertext[count1] & 0xff), fd) == EOF) retval = PWERR_DATA;
2484 } 2484 }
2485 2485
2486 fclose (fd); 2486 fclose (fd);
2487 free(buffer); 2487 free(buffer);
2488 return retval; 2488 return retval;
2489} 2489}
2490 2490
2491void ZSafe::quitMe () 2491void ZSafe::quitMe ()
2492{ 2492{
2493 qWarning ("QUIT..."); 2493 qWarning ("QUIT...");
2494 2494
2495 if (modified) 2495 if (modified)
2496 { 2496 {
2497 switch( QMessageBox::information( this, tr("ZSafe"), 2497 switch( QMessageBox::information( this, tr("ZSafe"),
2498 tr("Do you want to save\nbefore exiting?"), 2498 tr("Do you want to save\nbefore exiting?"),
2499 tr("&Save"), 2499 tr("&Save"),
2500 tr("S&ave with\nnew\npassword"), 2500 tr("S&ave with\nnew\npassword"),
2501 tr("&Don't Save"), 2501 tr("&Don't Save"),
2502 0 // Enter == button 0 2502 0 // Enter == button 0
2503 ) ) 2503 ) )
2504 { // Escape == button 2 2504 { // Escape == button 2
2505 case 0: // Save clicked, Alt-S or Enter pressed. 2505 case 0: // Save clicked, Alt-S or Enter pressed.
2506 // save 2506 // save
2507 modified = false; 2507 modified = false;
2508 saveDocument(filename, FALSE); 2508 saveDocument(filename, FALSE);
2509 exitZs (1); 2509 exitZs (1);
2510 break; 2510 break;
2511 case 1: // 2511 case 1: //
2512 // Save with new password 2512 // Save with new password
2513 modified = false; 2513 modified = false;
2514 saveDocument(filename, TRUE); 2514 saveDocument(filename, TRUE);
2515 exitZs (1); 2515 exitZs (1);
2516 break; 2516 break;
2517 case 2: // Don't Save clicked or Alt-D pressed 2517 case 2: // Don't Save clicked or Alt-D pressed
2518 // don't save but exitZs 2518 // don't save but exitZs
2519 exitZs (1); 2519 exitZs (1);
2520 break; 2520 break;
2521 } 2521 }
2522 } 2522 }
2523 exitZs (1); 2523 exitZs (1);
2524 2524
2525} 2525}
2526 2526
2527void ZSafe::categoryFieldActivated( const QString& category) 2527void ZSafe::categoryFieldActivated( const QString& category)
2528{ 2528{
2529 if (categoryDialog) 2529 if (categoryDialog)
2530 setCategoryDialogFields(categoryDialog, category); 2530 setCategoryDialogFields(categoryDialog, category);
2531} 2531}
2532 2532
2533void ZSafe::addCategory() 2533void ZSafe::addCategory()
2534{ 2534{
2535 if (filename.isEmpty()) 2535 if (filename.isEmpty())
2536 { 2536 {
2537 QMessageBox::critical( 0, tr("ZSafe"), 2537 QMessageBox::critical( 0, tr("ZSafe"),
2538 tr("No document defined.\nYou have to create a new document")); 2538 tr("No document defined.\nYou have to create a new document"));
2539 return; 2539 return;
2540 } 2540 }
2541 else 2541 else
2542 { 2542 {
2543 // open the 'Category' dialog 2543 // open the 'Category' dialog
2544 bool initIcons = false; 2544 bool initIcons = false;
2545 // open the 'Category' dialog 2545 // open the 'Category' dialog
2546 CategoryDialog *dialog; 2546 CategoryDialog *dialog;
2547 if (categoryDialog) 2547 if (categoryDialog)
2548 { 2548 {
2549 dialog = categoryDialog; 2549 dialog = categoryDialog;
2550 } 2550 }
2551 else 2551 else
2552 { 2552 {
2553 categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); 2553 categoryDialog = new CategoryDialog(this, tr("Category"), TRUE);
2554#ifdef WIN32 2554#ifdef WIN32
2555 categoryDialog->setCaption ("Qt " + tr("Category")); 2555 categoryDialog->setCaption ("Qt " + tr("Category"));
2556#endif 2556#endif
2557 dialog = categoryDialog; 2557 dialog = categoryDialog;
2558 connect( dialog->CategoryField, 2558 connect( dialog->CategoryField,
2559 SIGNAL( activated ( const QString &)), 2559 SIGNAL( activated ( const QString &)),
2560 this, SLOT( categoryFieldActivated( const QString & ) ) ); 2560 this, SLOT( categoryFieldActivated( const QString & ) ) );
2561 initIcons = true; 2561 initIcons = true;
2562 } 2562 }
2563 2563
2564#ifdef DESKTOP 2564#ifdef DESKTOP
2565#ifndef WIN32 2565#ifndef WIN32
2566 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); 2566 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" );
2567#else 2567#else
2568 // read all categories from the config file and store 2568 // read all categories from the config file and store
2569 // into a list 2569 // into a list
2570 QFile f (cfgFile); 2570 QFile f (cfgFile);
2571 QStringList list; 2571 QStringList list;
2572 if ( f.open(IO_ReadOnly) ) { // file opened successfully 2572 if ( f.open(IO_ReadOnly) ) { // file opened successfully
2573 QTextStream t( &f ); // use a text stream 2573 QTextStream t( &f ); // use a text stream
2574 QString s; 2574 QString s;
2575 int n = 1; 2575 int n = 1;
2576 while ( !t.eof() ) { // until end of file... 2576 while ( !t.eof() ) { // until end of file...
2577 s = t.readLine(); // line of text excluding '\n' 2577 s = t.readLine(); // line of text excluding '\n'
2578 list.append(s); 2578 list.append(s);
2579 } 2579 }
2580 f.close(); 2580 f.close();
2581 } 2581 }
2582#endif 2582#endif
2583#else 2583#else
2584 // read all categories from the config file and store 2584 // read all categories from the config file and store
2585 // into a list 2585 // into a list
2586 QFile f (cfgFile); 2586 QFile f (cfgFile);
2587 QStringList list; 2587 QStringList list;
2588 if ( f.open(IO_ReadOnly) ) { // file opened successfully 2588 if ( f.open(IO_ReadOnly) ) { // file opened successfully
2589 QTextStream t( &f ); // use a text stream 2589 QTextStream t( &f ); // use a text stream
2590 QString s; 2590 QString s;
2591 while ( !t.eof() ) { // until end of file... 2591 while ( !t.eof() ) { // until end of file...
2592 s = t.readLine(); // line of text excluding '\n' 2592 s = t.readLine(); // line of text excluding '\n'
2593 list.append(s); 2593 list.append(s);
2594 } 2594 }
2595 f.close(); 2595 f.close();
2596 } 2596 }
2597#endif 2597#endif
2598 QStringList::Iterator it = list.begin(); 2598 QStringList::Iterator it = list.begin();
2599 QString categ; 2599 QString categ;
2600 QString firstCategory;
2600 dialog->CategoryField->clear(); // remove all items 2601 dialog->CategoryField->clear(); // remove all items
2601 while( it != list.end() ) 2602 while( it != list.end() )
2602 { 2603 {
2603 QString *cat = new QString (*it); 2604 QString *cat = new QString (*it);
2604 if (cat->contains("-field1", FALSE)) 2605 if (cat->contains("-field1", FALSE))
2605 { 2606 {
2606#ifdef DESKTOP 2607#ifdef DESKTOP
2607#ifndef WIN32 2608#ifndef WIN32
2608 categ = cat->section ("-field1", 0, 0); 2609 categ = cat->section ("-field1", 0, 0);
2609#else 2610#else
2610 int pos = cat->find ("-field1"); 2611 int pos = cat->find ("-field1");
2611 categ = cat->left (pos); 2612 categ = cat->left (pos);
2612#endif 2613#endif
2613#else 2614#else
2614 int pos = cat->find ("-field1"); 2615 int pos = cat->find ("-field1");
2615 cat->truncate(pos); 2616 cat->truncate(pos);
2616 categ = *cat; 2617 categ = *cat;
2617#endif 2618#endif
2618 if (!categ.isEmpty()) 2619 if (!categ.isEmpty())
2619 { 2620 {
2620 dialog->CategoryField->insertItem (categ, -1); 2621 dialog->CategoryField->insertItem (categ, -1);
2622 if (firstCategory.isEmpty())
2623 firstCategory = categ;
2621 } 2624 }
2622 } 2625 }
2623 ++it; 2626 ++it;
2624 } 2627 }
2625 2628
2626 2629
2627 setCategoryDialogFields(dialog); 2630 if (firstCategory.isEmpty())
2631 setCategoryDialogFields(dialog);
2632 else
2633 setCategoryDialogFields(dialog, firstCategory);
2628 2634
2629 // CategoryDialog *dialog = new CategoryDialog(this, "Category", TRUE); 2635 // CategoryDialog *dialog = new CategoryDialog(this, "Category", TRUE);
2630 2636
2631 if (initIcons) 2637 if (initIcons)
2632 { 2638 {
2633 Wait waitDialog(this, tr("Wait dialog")); 2639 Wait waitDialog(this, tr("Wait dialog"));
2634 waitDialog.waitLabel->setText(tr("Gathering icons...")); 2640 waitDialog.waitLabel->setText(tr("Gathering icons..."));
2635 waitDialog.show(); 2641 waitDialog.show();
2636 qApp->processEvents(); 2642 qApp->processEvents();
2637 2643
2638#ifdef DESKTOP 2644#ifdef DESKTOP
2639 QDir d(iconPath); 2645 QDir d(iconPath);
2640#else 2646#else
2641 QDir d(QPEApplication::qpeDir() + "/pics/"); 2647 QDir d(QPEApplication::qpeDir() + "/pics/");
2642#endif 2648#endif
2643 d.setFilter( QDir::Files); 2649 d.setFilter( QDir::Files);
2644 2650
2645 const QFileInfoList *list = d.entryInfoList(); 2651 const QFileInfoList *list = d.entryInfoList();
2646 QFileInfoListIterator it( *list ); // create list iterator 2652 QFileInfoListIterator it( *list ); // create list iterator
2647 QFileInfo *fi; // pointer for traversing 2653 QFileInfo *fi; // pointer for traversing
2648 2654
2649 dialog->IconField->insertItem("predefined"); 2655 dialog->IconField->insertItem("predefined");
2650 while ( (fi=it.current()) ) { // for each file... 2656 while ( (fi=it.current()) ) { // for each file...
2651 QString fileName = fi->fileName(); 2657 QString fileName = fi->fileName();
2652 if(fileName.right(4) == ".png"){ 2658 if(fileName.right(4) == ".png"){
2653 fileName = fileName.mid(0,fileName.length()-4); 2659 fileName = fileName.mid(0,fileName.length()-4);
2654#ifdef DESKTOP 2660#ifdef DESKTOP
2655 QPixmap imageOfFile; 2661 QPixmap imageOfFile;
2656 imageOfFile.load(iconPath + fi->fileName()); 2662 imageOfFile.load(iconPath + fi->fileName());
2657#else 2663#else
2658 QPixmap imageOfFile(Resource::loadPixmap(fileName)); 2664 QPixmap imageOfFile(Resource::loadPixmap(fileName));
2659#endif 2665#endif
2660 QImage foo = imageOfFile.convertToImage(); 2666 QImage foo = imageOfFile.convertToImage();
2661 foo = foo.smoothScale(16,16); 2667 foo = foo.smoothScale(16,16);
2662 imageOfFile.convertFromImage(foo); 2668 imageOfFile.convertFromImage(foo);
2663 dialog->IconField->insertItem(imageOfFile,fileName); 2669 dialog->IconField->insertItem(imageOfFile,fileName);
2664 } 2670 }
2665 ++it; 2671 ++it;
2666 } 2672 }
2667 waitDialog.hide(); 2673 waitDialog.hide();
2668 } 2674 }
2669 2675
2670#ifndef WIN32 2676#ifndef WIN32
2671 dialog->show(); 2677 dialog->show();
2672#endif 2678#endif
2673#ifndef DESKTOP 2679#ifndef DESKTOP
2674 // dialog->move (20, 100); 2680 // dialog->move (20, 100);
2675#endif 2681#endif
2676 DialogCode result = (DialogCode) dialog->exec(); 2682 DialogCode result = (DialogCode) dialog->exec();
2677#ifdef DESKTOP 2683#ifdef DESKTOP
2678 result = Accepted; 2684 result = Accepted;
2679#endif 2685#endif
2680 2686
2681 QString category; 2687 QString category;
2682 QString icon; 2688 QString icon;
2683 QString fullIconPath; 2689 QString fullIconPath;
2684 QPixmap *pix; 2690 QPixmap *pix;
2685 if (result == Accepted) 2691 if (result == Accepted)
2686 { 2692 {
2687 modified = true; 2693 modified = true;
2688 category = dialog->CategoryField->currentText(); 2694 category = dialog->CategoryField->currentText();
2689 icon = dialog->IconField->currentText()+".png"; 2695 icon = dialog->IconField->currentText()+".png";
2690 2696
2691 qWarning (category); 2697 qWarning (category);
2692 2698
2693 QListViewItem *li = new ShadedListItem( 1, ListView ); 2699 QListViewItem *li = new ShadedListItem( 1, ListView );
2694 Category *c1 = new Category(); 2700 Category *c1 = new Category();
2695 c1->setCategoryName(category); 2701 c1->setCategoryName(category);
2696 2702
2697 // if (!icon.isEmpty() && !icon.isNull()) 2703 // if (!icon.isEmpty() && !icon.isNull())
2698 if (icon != "predefined.png") 2704 if (icon != "predefined.png")
2699 { 2705 {
2700 // build the full path 2706 // build the full path
2701 fullIconPath = iconPath + icon; 2707 fullIconPath = iconPath + icon;
2702 pix = new QPixmap (fullIconPath); 2708 pix = new QPixmap (fullIconPath);
2703 // pix->resize(14, 14); 2709 // pix->resize(14, 14);
2704 if (pix) 2710 if (pix)
2705 { 2711 {
2706 // save the full pixmap name into the config file 2712 // save the full pixmap name into the config file
2707// #ifndef WIN32 2713// #ifndef WIN32
2708 conf->writeEntry(APP_KEY+category, icon); 2714 conf->writeEntry(APP_KEY+category, icon);
2709// #endif 2715// #endif
2710 saveConf(); 2716 saveConf();
2711 QImage img = pix->convertToImage(); 2717 QImage img = pix->convertToImage();
2712 pix->convertFromImage(img.smoothScale(14,14)); 2718 pix->convertFromImage(img.smoothScale(14,14));
2713 c1->setIcon (*pix); 2719 c1->setIcon (*pix);
2714 c1->setIconName(icon); 2720 c1->setIconName(icon);
2715 } 2721 }
2716 else 2722 else
2717 { 2723 {
2718 QPixmap folder( ( const char** ) general_data ); 2724 QPixmap folder( ( const char** ) general_data );
2719 c1->setIcon (folder); 2725 c1->setIcon (folder);
2720 } 2726 }
2721 } 2727 }
2722 else 2728 else
2723 { 2729 {
2724 c1->setIcon (*getPredefinedIcon(category)); 2730 c1->setIcon (*getPredefinedIcon(category));
2725 } 2731 }
2726 2732
2727 c1->setListItem (li); 2733 c1->setListItem (li);
2728 c1->initListItem(); 2734 c1->initListItem();
2729 categories.insert (c1->getCategoryName(), c1); 2735 categories.insert (c1->getCategoryName(), c1);
2730 2736
2731 saveCategoryDialogFields(dialog); 2737 saveCategoryDialogFields(dialog);
2732 } 2738 }
2733 else 2739 else
2734 { 2740 {
2735 // delete dialog; 2741 // delete dialog;
2736 dialog->hide(); 2742 dialog->hide();
2737 return; 2743 return;
2738 } 2744 }
2739 2745
2740 } 2746 }
2741 2747
2742} 2748}
2743 2749
2744void ZSafe::delCategory() 2750void ZSafe::delCategory()
2745{ 2751{
2746 if (!selectedItem) 2752 if (!selectedItem)
2747 return; 2753 return;
2748 if (isCategory(selectedItem)) 2754 if (isCategory(selectedItem))
2749 { 2755 {
2750 switch( QMessageBox::information( this, tr("ZSafe"), 2756 switch( QMessageBox::information( this, tr("ZSafe"),
2751 tr("Do you want to delete?"), 2757 tr("Do you want to delete?"),
2752 tr("&Delete"), tr("D&on't Delete"), 2758 tr("&Delete"), tr("D&on't Delete"),
2753 0 // Enter == button 0 2759 0 // Enter == button 0
2754 ) ) { // Escape == button 2 2760 ) ) { // Escape == button 2
2755 case 0: // Delete clicked, Alt-S or Enter pressed. 2761 case 0: // Delete clicked, Alt-S or Enter pressed.
2756 // Delete from the category list 2762 // Delete from the category list
2757 modified = true; 2763 modified = true;
2758 categories.remove (selectedItem->text(0)); 2764 categories.remove (selectedItem->text(0));
2759// #ifndef WIN32 2765// #ifndef WIN32
2760 conf->removeEntry (selectedItem->text(0)); 2766 conf->removeEntry (selectedItem->text(0));
2761// #endif 2767// #endif
2762 saveConf(); 2768 saveConf();
2763 2769
2764 // Delete the selected item and all subitems 2770 // Delete the selected item and all subitems
2765 // step through all subitems 2771 // step through all subitems
2766 QListViewItem *si; 2772 QListViewItem *si;
2767 for (si = selectedItem->firstChild(); 2773 for (si = selectedItem->firstChild();
2768 si != NULL; ) 2774 si != NULL; )
2769 { 2775 {
2770 QListViewItem *_si = si; 2776 QListViewItem *_si = si;
2771 si = si->nextSibling(); 2777 si = si->nextSibling();
2772 selectedItem->takeItem(_si); // remove from view list 2778 selectedItem->takeItem(_si); // remove from view list
2773 if (_si) delete _si; 2779 if (_si) delete _si;
2774 } 2780 }
2775 ListView->takeItem(selectedItem); 2781 ListView->takeItem(selectedItem);
2776 delete selectedItem; 2782 delete selectedItem;
2777 2783
2778 selectedItem = NULL; 2784 selectedItem = NULL;
2779 break; 2785 break;
2780 case 1: // Don't delete 2786 case 1: // Don't delete
2781 break; 2787 break;
2782 } 2788 }
2783 2789
2784 } 2790 }
2785} 2791}
2786 2792
2787void ZSafe::setCategoryDialogFields(CategoryDialog *dialog) 2793void ZSafe::setCategoryDialogFields(CategoryDialog *dialog)
2788{ 2794{
2789 dialog->Field1->setText(getFieldLabel (selectedItem, "1", tr("Name"))); 2795 if (!dialog)
2790 dialog->Field2->setText(getFieldLabel (selectedItem, "2", tr("Username"))); 2796 return;
2791 dialog->Field3->setText(getFieldLabel (selectedItem, "3", tr("Password")));
2792 dialog->Field4->setText(getFieldLabel (selectedItem, "4", tr("Comment")));
2793 dialog->Field5->setText(getFieldLabel (selectedItem, "5", tr("Field 4")));
2794 dialog->Field6->setText(getFieldLabel (selectedItem, "6", tr("Field 5")));
2795 2797
2796 QString icon; 2798 QString icon;
2797 Category *cat= categories.find (selectedItem->text(0)); 2799 if (selectedItem)
2798 if (cat)
2799 { 2800 {
2800 icon = cat->getIconName(); 2801 dialog->Field1->setText(getFieldLabel (selectedItem, "1", tr("Name")));
2802 dialog->Field2->setText(getFieldLabel (selectedItem, "2", tr("Username")));
2803 dialog->Field3->setText(getFieldLabel (selectedItem, "3", tr("Password")));
2804 dialog->Field4->setText(getFieldLabel (selectedItem, "4", tr("Comment")));
2805 dialog->Field5->setText(getFieldLabel (selectedItem, "5", tr("Field 4")));
2806 dialog->Field6->setText(getFieldLabel (selectedItem, "6", tr("Field 5")));
2807
2808 Category *cat= categories.find (selectedItem->text(0));
2809 if (cat)
2810 {
2811 icon = cat->getIconName();
2812 }
2813 }
2814 else
2815 {
2816 dialog->Field1->setText(tr("Name"));
2817 dialog->Field2->setText(tr("Username"));
2818 dialog->Field3->setText(tr("Password"));
2819 dialog->Field4->setText(tr("Comment"));
2820 dialog->Field5->setText(tr("Field 4"));
2821 dialog->Field6->setText(tr("Field 5"));
2801 } 2822 }
2802 2823
2803#ifdef DESKTOP 2824#ifdef DESKTOP
2804 QDir d(iconPath); 2825 QDir d(iconPath);
2805#else 2826#else
2806 QDir d(QPEApplication::qpeDir() + "/pics/"); 2827 QDir d(QPEApplication::qpeDir() + "/pics/");
2807#endif 2828#endif
2808 d.setFilter( QDir::Files); 2829 d.setFilter( QDir::Files);
2809 2830
2810 const QFileInfoList *list = d.entryInfoList(); 2831 const QFileInfoList *list = d.entryInfoList();
2811 int i=0; 2832 int i=0;
2812 QFileInfoListIterator it( *list ); // create list iterator 2833 QFileInfoListIterator it( *list ); // create list iterator
2813 QFileInfo *fi; // pointer for traversing 2834 QFileInfo *fi; // pointer for traversing
2814 if (icon.isEmpty() || icon.isNull()) 2835 if (icon.isEmpty() || icon.isNull())
2815 { 2836 {
2816 dialog->IconField->setCurrentItem(0); 2837 dialog->IconField->setCurrentItem(0);
2817 } 2838 }
2818 else 2839 else
2819 { 2840 {
2820 while ( (fi=it.current()) ) 2841 while ( (fi=it.current()) )
2821 { // for each file... 2842 { // for each file...
2822 QString fileName = fi->fileName(); 2843 QString fileName = fi->fileName();
2823 if(fileName.right(4) == ".png") 2844 if(fileName.right(4) == ".png")
2824 { 2845 {
2825 fileName = fileName.mid(0,fileName.length()-4); 2846 fileName = fileName.mid(0,fileName.length()-4);
2826 2847
2827 if(fileName+".png"==icon) 2848 if(fileName+".png"==icon)
2828 { 2849 {
2829 dialog->IconField->setCurrentItem(i+1); 2850 dialog->IconField->setCurrentItem(i+1);
2830 break; 2851 break;
2831 } 2852 }
2832 ++i; 2853 ++i;
2833 } 2854 }
2834 ++it; 2855 ++it;
2835 } 2856 }
2836 } 2857 }
2837} 2858}
2838 2859
2839void ZSafe::setCategoryDialogFields(CategoryDialog *dialog, QString category) 2860void ZSafe::setCategoryDialogFields(CategoryDialog *dialog, QString category)
2840{ 2861{
2862 if (!dialog)
2863 return;
2864
2841 dialog->Field1->setText(getFieldLabel (category, "1", tr("Name"))); 2865 dialog->Field1->setText(getFieldLabel (category, "1", tr("Name")));
2842 dialog->Field2->setText(getFieldLabel (category, "2", tr("Username"))); 2866 dialog->Field2->setText(getFieldLabel (category, "2", tr("Username")));
2843 dialog->Field3->setText(getFieldLabel (category, "3", tr("Password"))); 2867 dialog->Field3->setText(getFieldLabel (category, "3", tr("Password")));
2844 dialog->Field4->setText(getFieldLabel (category, "4", tr("Comment"))); 2868 dialog->Field4->setText(getFieldLabel (category, "4", tr("Comment")));
2845 dialog->Field5->setText(getFieldLabel (category, "5", tr("Field 4"))); 2869 dialog->Field5->setText(getFieldLabel (category, "5", tr("Field 4")));
2846 dialog->Field6->setText(getFieldLabel (category, "6", tr("Field 5"))); 2870 dialog->Field6->setText(getFieldLabel (category, "6", tr("Field 5")));
2847 2871
2848 QString icon; 2872 QString icon;
2849 Category *cat= categories.find (category); 2873 Category *cat= categories.find (category);
2850 if (cat) 2874 if (cat)
2851 { 2875 {
2852 icon = cat->getIconName(); 2876 icon = cat->getIconName();
2853 } 2877 }
2854 2878
2855#ifdef DESKTOP 2879#ifdef DESKTOP
2856 QDir d(iconPath); 2880 QDir d(iconPath);
2857#else 2881#else
2858 QDir d(QPEApplication::qpeDir() + "/pics/"); 2882 QDir d(QPEApplication::qpeDir() + "/pics/");
2859#endif 2883#endif
2860 d.setFilter( QDir::Files); 2884 d.setFilter( QDir::Files);
2861 2885
2862 const QFileInfoList *list = d.entryInfoList(); 2886 const QFileInfoList *list = d.entryInfoList();
2863 int i=0; 2887 int i=0;
2864 QFileInfoListIterator it( *list ); // create list iterator 2888 QFileInfoListIterator it( *list ); // create list iterator
2865 QFileInfo *fi; // pointer for traversing 2889 QFileInfo *fi; // pointer for traversing
2866 if (icon.isEmpty() || icon.isNull()) 2890 if (icon.isEmpty() || icon.isNull())
2867 { 2891 {
2868 dialog->IconField->setCurrentItem(0); 2892 dialog->IconField->setCurrentItem(0);
2869 } 2893 }
2870 else 2894 else
2871 { 2895 {
2872 while ( (fi=it.current()) ) 2896 while ( (fi=it.current()) )
2873 { // for each file... 2897 { // for each file...
2874 QString fileName = fi->fileName(); 2898 QString fileName = fi->fileName();
2875 if(fileName.right(4) == ".png") 2899 if(fileName.right(4) == ".png")
2876 { 2900 {
2877 fileName = fileName.mid(0,fileName.length()-4); 2901 fileName = fileName.mid(0,fileName.length()-4);
2878 2902
2879 if(fileName+".png"==icon) 2903 if(fileName+".png"==icon)
2880 { 2904 {
2881 dialog->IconField->setCurrentItem(i+1); 2905 dialog->IconField->setCurrentItem(i+1);
2882 break; 2906 break;
2883 } 2907 }
2884 ++i; 2908 ++i;
2885 } 2909 }
2886 ++it; 2910 ++it;
2887 } 2911 }
2888 } 2912 }
2889} 2913}
2890 2914
2891void ZSafe::saveCategoryDialogFields(CategoryDialog *dialog) 2915void ZSafe::saveCategoryDialogFields(CategoryDialog *dialog)
2892{ 2916{
2893 QString app_key = APP_KEY; 2917 QString app_key = APP_KEY;
2894#ifndef DESKTOP 2918#ifndef DESKTOP
2895 conf->setGroup ("fieldDefs"); 2919 conf->setGroup ("fieldDefs");
2896#else 2920#else
2897#ifndef WIN32 2921#ifndef WIN32
2898 app_key += "/fieldDefs/"; 2922 app_key += "/fieldDefs/";
2899#endif 2923#endif
2900#endif 2924#endif
2901 QString category = dialog->CategoryField->currentText(); 2925 QString category = dialog->CategoryField->currentText();
2902// #ifndef WIN32 2926// #ifndef WIN32
2903 conf->writeEntry(app_key+category+"-field1", dialog->Field1->text()); 2927 conf->writeEntry(app_key+category+"-field1", dialog->Field1->text());
2904 conf->writeEntry(app_key+category+"-field2", dialog->Field2->text()); 2928 conf->writeEntry(app_key+category+"-field2", dialog->Field2->text());
2905 conf->writeEntry(app_key+category+"-field3", dialog->Field3->text()); 2929 conf->writeEntry(app_key+category+"-field3", dialog->Field3->text());
2906 conf->writeEntry(app_key+category+"-field4", dialog->Field4->text()); 2930 conf->writeEntry(app_key+category+"-field4", dialog->Field4->text());
2907 conf->writeEntry(app_key+category+"-field5", dialog->Field5->text()); 2931 conf->writeEntry(app_key+category+"-field5", dialog->Field5->text());
2908 conf->writeEntry(app_key+category+"-field6", dialog->Field6->text()); 2932 conf->writeEntry(app_key+category+"-field6", dialog->Field6->text());
2909// #endif 2933// #endif
2910 saveConf(); 2934 saveConf();
2911#ifndef DESKTOP 2935#ifndef DESKTOP
2912 conf->setGroup ("zsafe"); 2936 conf->setGroup ("zsafe");
2913#endif 2937#endif
2914} 2938}
2915 2939
2916void ZSafe::editCategory() 2940void ZSafe::editCategory()
2917{ 2941{
2918 if (!selectedItem) 2942 if (!selectedItem)
2919 return; 2943 return;
2920 if (isCategory(selectedItem)) 2944 if (isCategory(selectedItem))
2921 { 2945 {
2922 QString category = selectedItem->text(0); 2946 QString category = selectedItem->text(0);
2923 bool initIcons = false; 2947 bool initIcons = false;
2924 // open the 'Category' dialog 2948 // open the 'Category' dialog
2925 CategoryDialog *dialog; 2949 CategoryDialog *dialog;
2926 if (categoryDialog) 2950 if (categoryDialog)
2927 { 2951 {
2928 dialog = categoryDialog; 2952 dialog = categoryDialog;
2929 } 2953 }
2930 else 2954 else
2931 { 2955 {
2932 categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); 2956 categoryDialog = new CategoryDialog(this, tr("Category"), TRUE);
2933#ifdef WIN32 2957#ifdef WIN32
2934 categoryDialog->setCaption ("Qt " + tr("Category")); 2958 categoryDialog->setCaption ("Qt " + tr("Category"));
2935#endif 2959#endif
2936 dialog = categoryDialog; 2960 dialog = categoryDialog;
2937 connect( dialog->CategoryField, 2961 connect( dialog->CategoryField,
2938 SIGNAL( activated ( const QString &)), 2962 SIGNAL( activated ( const QString &)),
2939 this, SLOT( categoryFieldActivated( const QString & ) ) ); 2963 this, SLOT( categoryFieldActivated( const QString & ) ) );
2940 initIcons = true; 2964 initIcons = true;
2941 } 2965 }
2942 setCategoryDialogFields(dialog); 2966 setCategoryDialogFields(dialog);
2943 2967
2944#ifdef DESKTOP 2968#ifdef DESKTOP
2945#ifndef WIN32 2969#ifndef WIN32
2946 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); 2970 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" );
2947#else 2971#else
2948 // read all categories from the config file and store 2972 // read all categories from the config file and store
2949 // into a list 2973 // into a list
2950 QFile f (cfgFile); 2974 QFile f (cfgFile);
2951 QStringList list; 2975 QStringList list;
2952 if ( f.open(IO_ReadOnly) ) { // file opened successfully 2976 if ( f.open(IO_ReadOnly) ) { // file opened successfully
2953 QTextStream t( &f ); // use a text stream 2977 QTextStream t( &f ); // use a text stream
2954 QString s; 2978 QString s;
2955 int n = 1; 2979 int n = 1;
2956 while ( !t.eof() ) { // until end of file... 2980 while ( !t.eof() ) { // until end of file...
2957 s = t.readLine(); // line of text excluding '\n' 2981 s = t.readLine(); // line of text excluding '\n'
2958 list.append(s); 2982 list.append(s);
2959 } 2983 }
2960 f.close(); 2984 f.close();
2961 } 2985 }
2962#endif 2986#endif
2963#else 2987#else
2964 // read all categories from the config file and store 2988 // read all categories from the config file and store
2965 // into a list 2989 // into a list
2966 QFile f (cfgFile); 2990 QFile f (cfgFile);
2967 QStringList list; 2991 QStringList list;
2968 if ( f.open(IO_ReadOnly) ) { // file opened successfully 2992 if ( f.open(IO_ReadOnly) ) { // file opened successfully
2969 QTextStream t( &f ); // use a text stream 2993 QTextStream t( &f ); // use a text stream
2970 QString s; 2994 QString s;
2971 while ( !t.eof() ) { // until end of file... 2995 while ( !t.eof() ) { // until end of file...
2972 s = t.readLine(); // line of text excluding '\n' 2996 s = t.readLine(); // line of text excluding '\n'
2973 list.append(s); 2997 list.append(s);
2974 } 2998 }
2975 f.close(); 2999 f.close();
2976 } 3000 }
2977#endif 3001#endif
2978 QStringList::Iterator it = list.begin(); 3002 QStringList::Iterator it = list.begin();
2979 QString categ; 3003 QString categ;
2980 dialog->CategoryField->clear(); // remove all items 3004 dialog->CategoryField->clear(); // remove all items
2981 int i=0; 3005 int i=0;
2982 bool foundCategory = false; 3006 bool foundCategory = false;
2983 while( it != list.end() ) 3007 while( it != list.end() )
2984 { 3008 {
2985 QString *cat = new QString (*it); 3009 QString *cat = new QString (*it);
2986 if (cat->contains("-field1", FALSE)) 3010 if (cat->contains("-field1", FALSE))
2987 { 3011 {
2988#ifdef DESKTOP 3012#ifdef DESKTOP
2989#ifndef WIN32 3013#ifndef WIN32
2990 categ = cat->section ("-field1", 0, 0); 3014 categ = cat->section ("-field1", 0, 0);
2991#else 3015#else
2992 int pos = cat->find ("-field1"); 3016 int pos = cat->find ("-field1");
2993 categ = cat->left (pos); 3017 categ = cat->left (pos);
2994#endif 3018#endif
2995#else 3019#else
2996 int pos = cat->find ("-field1"); 3020 int pos = cat->find ("-field1");
2997 cat->truncate(pos); 3021 cat->truncate(pos);
2998 categ = *cat; 3022 categ = *cat;
2999#endif 3023#endif
3000 if (!categ.isEmpty()) 3024 if (!categ.isEmpty())
3001 { 3025 {
3002 dialog->CategoryField->insertItem (categ, i); 3026 dialog->CategoryField->insertItem (categ, i);
3003 if (category.compare(categ) == 0) 3027 if (category.compare(categ) == 0)
3004 { 3028 {
3005 dialog->CategoryField->setCurrentItem(i); 3029 dialog->CategoryField->setCurrentItem(i);
3006 foundCategory = true; 3030 foundCategory = true;
3007 } 3031 }
3008 i++; 3032 i++;
3009 } 3033 }
3010 } 3034 }
3011 ++it; 3035 ++it;
3012 } 3036 }
3013 if (!foundCategory) 3037 if (!foundCategory)
3014 { 3038 {
3015 dialog->CategoryField->insertItem (category, i); 3039 dialog->CategoryField->insertItem (category, i);
3016 dialog->CategoryField->setCurrentItem(i); 3040 dialog->CategoryField->setCurrentItem(i);
3017 } 3041 }
3018 3042
3019 QString icon; 3043 QString icon;
3020 Category *cat= categories.find (selectedItem->text(0)); 3044 Category *cat= categories.find (selectedItem->text(0));
3021 if (cat) 3045 if (cat)
3022 { 3046 {
3023 icon = cat->getIconName(); 3047 icon = cat->getIconName();
3024 } 3048 }
3025 3049
3026 if (initIcons) 3050 if (initIcons)
3027 { 3051 {
3028 3052
3029 Wait waitDialog(this, tr("Wait dialog")); 3053 Wait waitDialog(this, tr("Wait dialog"));
3030 waitDialog.waitLabel->setText(tr("Gathering icons...")); 3054 waitDialog.waitLabel->setText(tr("Gathering icons..."));
3031 waitDialog.show(); 3055 waitDialog.show();
3032 qApp->processEvents(); 3056 qApp->processEvents();
3033 3057
3034#ifdef DESKTOP 3058#ifdef DESKTOP
3035 QDir d(iconPath); 3059 QDir d(iconPath);
3036#else 3060#else
3037 QDir d(QPEApplication::qpeDir() + "/pics/"); 3061 QDir d(QPEApplication::qpeDir() + "/pics/");
3038#endif 3062#endif
3039 d.setFilter( QDir::Files); 3063 d.setFilter( QDir::Files);
3040 3064
3041 const QFileInfoList *list = d.entryInfoList(); 3065 const QFileInfoList *list = d.entryInfoList();
3042 int i=0; 3066 int i=0;
3043 QFileInfoListIterator it( *list ); // create list iterator 3067 QFileInfoListIterator it( *list ); // create list iterator
3044 QFileInfo *fi; // pointer for traversing 3068 QFileInfo *fi; // pointer for traversing
3045 if (icon.isEmpty() || icon.isNull()) 3069 if (icon.isEmpty() || icon.isNull())
3046 { 3070 {
3047 dialog->IconField->setCurrentItem(0); 3071 dialog->IconField->setCurrentItem(0);
3048 } 3072 }
3049 3073
3050 dialog->IconField->insertItem("predefined"); 3074 dialog->IconField->insertItem("predefined");
3051 while ( (fi=it.current()) ) { // for each file... 3075 while ( (fi=it.current()) ) { // for each file...
3052 QString fileName = fi->fileName(); 3076 QString fileName = fi->fileName();
3053 if(fileName.right(4) == ".png") 3077 if(fileName.right(4) == ".png")
3054 { 3078 {
3055 fileName = fileName.mid(0,fileName.length()-4); 3079 fileName = fileName.mid(0,fileName.length()-4);
3056#ifdef DESKTOP 3080#ifdef DESKTOP
3057 QPixmap imageOfFile; 3081 QPixmap imageOfFile;
3058 imageOfFile.load(iconPath + fi->fileName()); 3082 imageOfFile.load(iconPath + fi->fileName());
3059#else 3083#else
3060 QPixmap imageOfFile(Resource::loadPixmap(fileName)); 3084 QPixmap imageOfFile(Resource::loadPixmap(fileName));
3061#endif 3085#endif
3062 QImage foo = imageOfFile.convertToImage(); 3086 QImage foo = imageOfFile.convertToImage();
3063 foo = foo.smoothScale(16,16); 3087 foo = foo.smoothScale(16,16);
3064 imageOfFile.convertFromImage(foo); 3088 imageOfFile.convertFromImage(foo);
3065 dialog->IconField->insertItem(imageOfFile,fileName); 3089 dialog->IconField->insertItem(imageOfFile,fileName);
3066 if(fileName+".png"==icon) 3090 if(fileName+".png"==icon)
3067 dialog->IconField->setCurrentItem(i+1); 3091 dialog->IconField->setCurrentItem(i+1);
3068 ++i; 3092 ++i;
3069 } 3093 }
3070 ++it; 3094 ++it;
3071 } 3095 }
3072 waitDialog.hide(); 3096 waitDialog.hide();
3073 } 3097 }
3074 else 3098 else
3075 { 3099 {
3076#ifdef DESKTOP 3100#ifdef DESKTOP
3077 // QDir d(QDir::homeDirPath() + "/pics/"); 3101 // QDir d(QDir::homeDirPath() + "/pics/");
3078 QDir d(iconPath); 3102 QDir d(iconPath);
3079#else 3103#else
3080 QDir d(QPEApplication::qpeDir() + "/pics/"); 3104 QDir d(QPEApplication::qpeDir() + "/pics/");
3081#endif 3105#endif
3082 d.setFilter( QDir::Files); 3106 d.setFilter( QDir::Files);
3083 3107
3084 const QFileInfoList *list = d.entryInfoList(); 3108 const QFileInfoList *list = d.entryInfoList();
3085 int i=0; 3109 int i=0;
3086 QFileInfoListIterator it( *list ); // create list iterator 3110 QFileInfoListIterator it( *list ); // create list iterator
3087 QFileInfo *fi; // pointer for traversing 3111 QFileInfo *fi; // pointer for traversing
3088 if (icon.isEmpty() || icon.isNull()) 3112 if (icon.isEmpty() || icon.isNull())
3089 { 3113 {
3090 dialog->IconField->setCurrentItem(0); 3114 dialog->IconField->setCurrentItem(0);
3091 } 3115 }
3092 else 3116 else
3093 { 3117 {
3094 3118
3095 while ( (fi=it.current()) ) 3119 while ( (fi=it.current()) )
3096 { // for each file... 3120 { // for each file...
3097 QString fileName = fi->fileName(); 3121 QString fileName = fi->fileName();
3098 if(fileName.right(4) == ".png") 3122 if(fileName.right(4) == ".png")
3099 { 3123 {
3100 fileName = fileName.mid(0,fileName.length()-4); 3124 fileName = fileName.mid(0,fileName.length()-4);
3101 3125
3102 3126
3103 if(fileName+".png"==icon) 3127 if(fileName+".png"==icon)
3104 { 3128 {
3105 dialog->IconField->setCurrentItem(i+1); 3129 dialog->IconField->setCurrentItem(i+1);
3106 break; 3130 break;
3107 } 3131 }
3108 ++i; 3132 ++i;
3109 } 3133 }
3110 ++it; 3134 ++it;
3111 } 3135 }
3112 } 3136 }
3113 } 3137 }
3114 3138
3115 // dialog->show(); 3139 // dialog->show();
3116#ifndef DESKTOP 3140#ifndef DESKTOP
3117 // dialog->move (20, 100); 3141 // dialog->move (20, 100);
3118#endif 3142#endif
3119 DialogCode result = (DialogCode) dialog->exec(); 3143 DialogCode result = (DialogCode) dialog->exec();
3120#ifdef DESKTOP 3144#ifdef DESKTOP
3121 result = Accepted; 3145 result = Accepted;
3122#endif 3146#endif
3123 3147
3124 QString fullIconPath; 3148 QString fullIconPath;
3125 QPixmap *pix; 3149 QPixmap *pix;
3126 if (result == Accepted) 3150 if (result == Accepted)
3127 { 3151 {
3128 modified = true; 3152 modified = true;
3129 if (category != dialog->CategoryField->currentText()) 3153 if (category != dialog->CategoryField->currentText())
3130 { 3154 {
3131 categories.remove (category); 3155 categories.remove (category);
3132// #ifndef WIN32 3156// #ifndef WIN32
3133 conf->removeEntry(category); 3157 conf->removeEntry(category);
3134// #endif 3158// #endif
3135 saveConf(); 3159 saveConf();
3136 } 3160 }
3137 3161
3138 category = dialog->CategoryField->currentText(); 3162 category = dialog->CategoryField->currentText();
3139 icon = dialog->IconField->currentText()+".png"; 3163 icon = dialog->IconField->currentText()+".png";
3140 3164
3141 if (cat) 3165 if (cat)
3142 { 3166 {
3143 qWarning("Category found"); 3167 qWarning("Category found");
3144 3168
3145 // if (!icon.isEmpty() && !icon.isNull()) 3169 // if (!icon.isEmpty() && !icon.isNull())
3146 if (icon != "predefined.png") 3170 if (icon != "predefined.png")
3147 { 3171 {
3148 // build the full path 3172 // build the full path
3149 fullIconPath = iconPath + icon; 3173 fullIconPath = iconPath + icon;
3150 pix = new QPixmap (fullIconPath); 3174 pix = new QPixmap (fullIconPath);
3151 if (pix) 3175 if (pix)
3152 { 3176 {
3153 // save the full pixmap name into the config file 3177 // save the full pixmap name into the config file
3154// #ifndef WIN32 3178// #ifndef WIN32
3155 conf->writeEntry(APP_KEY+category, icon); 3179 conf->writeEntry(APP_KEY+category, icon);
3156// #endif 3180// #endif
3157 saveConf(); 3181 saveConf();
3158 QImage img = pix->convertToImage(); 3182 QImage img = pix->convertToImage();
3159 pix->convertFromImage(img.smoothScale(14,14)); 3183 pix->convertFromImage(img.smoothScale(14,14));
3160 cat->setIconName (icon); 3184 cat->setIconName (icon);
3161 cat->setIcon (*pix); 3185 cat->setIcon (*pix);
3162 } 3186 }
3163 } 3187 }
3164 else 3188 else
3165 { 3189 {
3166// #ifndef WIN32 3190// #ifndef WIN32
3167 conf->removeEntry (category); 3191 conf->removeEntry (category);
3168// #endif 3192// #endif
3169 saveConf(); 3193 saveConf();
3170 cat->setIcon (*getPredefinedIcon(category)); 3194 cat->setIcon (*getPredefinedIcon(category));
3171 } 3195 }
3172 3196
3173 // change the category name of the selected category 3197 // change the category name of the selected category
3174 QListViewItem *catItem = cat->getListItem(); 3198 QListViewItem *catItem = cat->getListItem();
3175 if (catItem) 3199 if (catItem)
3176 { 3200 {
3177 qWarning (category); 3201 qWarning (category);
3178 catItem->setText( 0, tr( category ) ); 3202 catItem->setText( 0, tr( category ) );
3179 cat->setCategoryName (tr(category)); 3203 cat->setCategoryName (tr(category));
3180 cat->initListItem(); 3204 cat->initListItem();
3181 categories.insert (category, cat); 3205 categories.insert (category, cat);
3182 } 3206 }
3183 } 3207 }
3184 saveCategoryDialogFields(dialog); 3208 saveCategoryDialogFields(dialog);
3185 } 3209 }
3186 else 3210 else
3187 { 3211 {
3188 // delete dialog; 3212 // delete dialog;
3189 dialog->hide(); 3213 dialog->hide();
3190 return; 3214 return;
3191 } 3215 }
3192 3216
3193 } 3217 }
3194} 3218}
3195 3219
3196void ZSafe::cutItem() 3220void ZSafe::cutItem()
3197{ 3221{
3198 if (!selectedItem) 3222 if (!selectedItem)
3199 return; 3223 return;
3200 if (!isCategory(selectedItem)) 3224 if (!isCategory(selectedItem))
3201 { 3225 {
3202 IsCut = true; 3226 IsCut = true;
3203 copiedItem = selectedItem; 3227 copiedItem = selectedItem;
3204 } 3228 }
3205} 3229}
3206 3230
3207void ZSafe::copyItem() 3231void ZSafe::copyItem()
3208{ 3232{
3209 if (!selectedItem) 3233 if (!selectedItem)
3210 return; 3234 return;
3211 if (!isCategory(selectedItem)) 3235 if (!isCategory(selectedItem))
3212 { 3236 {
3213 IsCopy = true; 3237 IsCopy = true;
3214 copiedItem = selectedItem; 3238 copiedItem = selectedItem;
3215 } 3239 }
3216} 3240}
3217 3241
3218// paste item into category 3242// paste item into category
3219void ZSafe::pasteItem() 3243void ZSafe::pasteItem()
3220{ 3244{
3221 if (!selectedItem) 3245 if (!selectedItem)
3222 return; 3246 return;
3223 if (isCategory(selectedItem)) 3247 if (isCategory(selectedItem))
3224 { 3248 {
3225 modified = true; 3249 modified = true;
3226 if (IsCut) 3250 if (IsCut)
3227 { 3251 {
3228 if (copiedItem) 3252 if (copiedItem)
3229 { 3253 {
3230 // add the new item 3254 // add the new item
3231 QListViewItem *i = new ShadedListItem (0, selectedItem); 3255 QListViewItem *i = new ShadedListItem (0, selectedItem);
3232 // i->setOpen (TRUE); 3256 // i->setOpen (TRUE);
3233 i->setText (0, copiedItem->text(0)); 3257 i->setText (0, copiedItem->text(0));
3234 i->setText (1, copiedItem->text(1)); 3258 i->setText (1, copiedItem->text(1));
3235 i->setText (2, copiedItem->text(2)); 3259 i->setText (2, copiedItem->text(2));
3236 i->setText (3, copiedItem->text(3)); 3260 i->setText (3, copiedItem->text(3));
3237 i->setText (4, copiedItem->text(4)); 3261 i->setText (4, copiedItem->text(4));
3238 i->setText (5, copiedItem->text(5)); 3262 i->setText (5, copiedItem->text(5));
3239 selectedItem->setOpen( TRUE ); 3263 selectedItem->setOpen( TRUE );
3240 3264
3241 // remove the cutted item 3265 // remove the cutted item
3242 copiedItem->parent()->takeItem(copiedItem); 3266 copiedItem->parent()->takeItem(copiedItem);
3243 selectedItem = NULL; 3267 selectedItem = NULL;
3244 } 3268 }
3245 } 3269 }
3246 else if (IsCopy) 3270 else if (IsCopy)
3247 { 3271 {
3248 if (copiedItem) 3272 if (copiedItem)
3249 { 3273 {
3250 // add the new item 3274 // add the new item
3251 QListViewItem *i = new ShadedListItem (0, selectedItem); 3275 QListViewItem *i = new ShadedListItem (0, selectedItem);
3252 // i->setOpen (TRUE); 3276 // i->setOpen (TRUE);
3253 i->setText (0, copiedItem->text(0)); 3277 i->setText (0, copiedItem->text(0));
3254 i->setText (1, copiedItem->text(1)); 3278 i->setText (1, copiedItem->text(1));
3255 i->setText (2, copiedItem->text(2)); 3279 i->setText (2, copiedItem->text(2));
3256 i->setText (3, copiedItem->text(3)); 3280 i->setText (3, copiedItem->text(3));
3257 i->setText (4, copiedItem->text(4)); 3281 i->setText (4, copiedItem->text(4));
3258 i->setText (5, copiedItem->text(5)); 3282 i->setText (5, copiedItem->text(5));
3259 selectedItem->setOpen( TRUE ); 3283 selectedItem->setOpen( TRUE );
3260 } 3284 }
3261 } 3285 }
3262 } 3286 }
3263 IsCut = false; 3287 IsCut = false;
3264 IsCopy = false; 3288 IsCopy = false;
3265} 3289}
3266 3290
3267void ZSafe::newDocument() 3291void ZSafe::newDocument()
3268{ 3292{
3269 3293
3270 // open the file dialog 3294 // open the file dialog
3271#ifndef DESKTOP 3295#ifndef DESKTOP
3272#ifndef NO_OPIE 3296#ifndef NO_OPIE
3273 QMap<QString, QStringList> mimeTypes; 3297 QMap<QString, QStringList> mimeTypes;
3274 mimeTypes.insert(tr("All"), QStringList() ); 3298 mimeTypes.insert(tr("All"), QStringList() );
3275 mimeTypes.insert(tr("ZSafe"), "zsafe/*" ); 3299 mimeTypes.insert(tr("ZSafe"), "zsafe/*" );
3276 QString newFile = OFileDialog::getSaveFileName( OFileSelector::EXTENDED_ALL, 3300 QString newFile = OFileDialog::getSaveFileName( OFileSelector::EXTENDED_ALL,
3277 QDir::homeDirPath() + "/Documents/application/zsafe", 3301 QDir::homeDirPath() + "/Documents/application/zsafe",
3278 QString::null, 3302 QString::null,
3279 mimeTypes, 3303 mimeTypes,
3280 this, 3304 this,
3281 tr ("Create new ZSafe document")); 3305 tr ("Create new ZSafe document"));
3282#else 3306#else
3283 QString newFile = ScQtFileEdit::getSaveAsFileName(this, 3307 QString newFile = ScQtFileEdit::getSaveAsFileName(this,
3284 tr ("Create new ZSafe document"), 3308 tr ("Create new ZSafe document"),
3285 QDir::homeDirPath() + "/Documents/application/zsafe", 3309 QDir::homeDirPath() + "/Documents/application/zsafe",
3286 "*.zsf"); 3310 "*.zsf");
3287#endif 3311#endif
3288#else 3312#else
3289 QString newFile = QFileDialog::getSaveFileName( 3313 QString newFile = QFileDialog::getSaveFileName(
3290 QDir::homeDirPath() + "/Documents/application/zsafe", 3314 QDir::homeDirPath() + "/Documents/application/zsafe",
3291 "ZSafe (*.zsf)", 3315 "ZSafe (*.zsf)",
3292 this, 3316 this,
3293 "ZSafe File Dialog" 3317 "ZSafe File Dialog"
3294 "Choose a ZSafe file" ); 3318 "Choose a ZSafe file" );
3295#endif 3319#endif
3296 3320
3297 // open the new document 3321 // open the new document
3298 if (newFile && newFile.length() > 0 ) 3322 if (newFile && newFile.length() > 0 )
3299 { 3323 {
3300 // save the previous opened document 3324 // save the previous opened document
3301 if (!filename.isEmpty()) 3325 if (!filename.isEmpty())
3302 saveDocument(filename, FALSE); 3326 saveDocument(filename, FALSE);
3303 3327
3304 modified = true; 3328 modified = true;
3305 3329
3306 // clear the password list 3330 // clear the password list
3307 QListViewItem *i; 3331 QListViewItem *i;
3308 QListViewItem *c = NULL; 3332 QListViewItem *c = NULL;
3309 // step through all categories 3333 // step through all categories
3310 for (i = ListView->firstChild(); 3334 for (i = ListView->firstChild();
3311 i != NULL; 3335 i != NULL;
3312 i = i->nextSibling()) 3336 i = i->nextSibling())
3313 { 3337 {
3314 if (c) delete c; // delete the previous category 3338 if (c) delete c; // delete the previous category
3315 3339
3316 c = i; 3340 c = i;
3317 // step through all subitems 3341 // step through all subitems
3318 QListViewItem *si; 3342 QListViewItem *si;
3319 for (si = i->firstChild(); 3343 for (si = i->firstChild();
3320 si != NULL; ) 3344 si != NULL; )
3321 { 3345 {
3322 QListViewItem *_si = si; 3346 QListViewItem *_si = si;
3323 si = si->nextSibling(); 3347 si = si->nextSibling();
3324 i->takeItem(_si); // remove from view list 3348 i->takeItem(_si); // remove from view list
3325 if (_si) delete _si; 3349 if (_si) delete _si;
3326 } 3350 }
3327 } 3351 }
3328 if (c) delete c; // delete the previous category 3352 if (c) delete c; // delete the previous category
3329 categories.clear(); 3353 categories.clear();
3330 3354
3331 // m_password = ""; 3355 // m_password = "";
3332 selectedItem = NULL; 3356 selectedItem = NULL;
3333 3357
3334 filename = newFile; 3358 filename = newFile;
3335 3359
3336 // save the current filename to the config file 3360 // save the current filename to the config file
3337 conf->writeEntry(APP_KEY+"document", filename); 3361 conf->writeEntry(APP_KEY+"document", filename);
3338 saveConf(); 3362 saveConf();
3339 QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); 3363 QString ti = filename.right (filename.length() - filename.findRev ('/') - 1);
3340#ifdef WIN32 3364#ifdef WIN32
3341 this->setCaption("Qt ZSafe: " + ti); 3365 this->setCaption("Qt ZSafe: " + ti);
3342#else 3366#else
3343 this->setCaption("ZSafe: " + ti); 3367 this->setCaption("ZSafe: " + ti);
3344#endif 3368#endif
3345 3369
3346 // openDocument(filename); 3370 // openDocument(filename);
3347 3371
3348 QMessageBox::information( this, tr("ZSafe"), 3372 QMessageBox::information( this, tr("ZSafe"),
3349 tr("Now you have to enter\na password twice for your\nnewly created document."), tr("&OK"), 0); 3373 tr("Now you have to enter\na password twice for your\nnewly created document."), tr("&OK"), 0);
3350 3374
3351 saveDocumentWithPwd(); 3375 saveDocumentWithPwd();
3352 } 3376 }