-rw-r--r-- | bin/kdepim/WhatsNew.txt | 3 | ||||
-rw-r--r-- | microkde/ofileselector_p.cpp | 34 |
2 files changed, 30 insertions, 7 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index eaf4b56..dd02be5 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt | |||
@@ -1,36 +1,39 @@ | |||
1 | Info about the changes in new versions of KDE-Pim/Pi | 1 | Info about the changes in new versions of KDE-Pim/Pi |
2 | 2 | ||
3 | 3 | ||
4 | ********** VERSION 2.1.8 ************ | 4 | ********** VERSION 2.1.8 ************ |
5 | 5 | ||
6 | KO/Pi: | 6 | KO/Pi: |
7 | Added info about the completion sate of a todo in the ListView/Searchdialog. | 7 | Added info about the completion sate of a todo in the ListView/Searchdialog. |
8 | If in TodoView is selected "do not show compledted todos" then completed todos are not shown in the ListView as well. | 8 | If in TodoView is selected "do not show compledted todos" then completed todos are not shown in the ListView as well. |
9 | 9 | ||
10 | KA/Pi: | 10 | KA/Pi: |
11 | In the addressee selection dialog now the formatted name is shown, if not empty. | 11 | In the addressee selection dialog now the formatted name is shown, if not empty. |
12 | 12 | ||
13 | Fixed in the file selector on the Zaurus the problem that symbolic links to files/dirs were ignored. | ||
14 | Fixed the sorting for size in the file selector on the Z. | ||
15 | |||
13 | ********** VERSION 2.1.7 ************ | 16 | ********** VERSION 2.1.7 ************ |
14 | 17 | ||
15 | KO/Pi: | 18 | KO/Pi: |
16 | Fixed several problems in the new Resource handling. | 19 | Fixed several problems in the new Resource handling. |
17 | Added more options to the search dialog. | 20 | Added more options to the search dialog. |
18 | Fixed a problem in the Month view. | 21 | Fixed a problem in the Month view. |
19 | Added more options to the dialog when setting a todo to stopped. | 22 | Added more options to the dialog when setting a todo to stopped. |
20 | 23 | ||
21 | Fixed two small problems in KO/PiAlarm applet. | 24 | Fixed two small problems in KO/PiAlarm applet. |
22 | 25 | ||
23 | ********** VERSION 2.1.6 ************ | 26 | ********** VERSION 2.1.6 ************ |
24 | 27 | ||
25 | This release is for testing only. | 28 | This release is for testing only. |
26 | 29 | ||
27 | KO/Pi: | 30 | KO/Pi: |
28 | Added to the list view (the list view is used in search dialog as well) the possibility to print it. | 31 | Added to the list view (the list view is used in search dialog as well) the possibility to print it. |
29 | Added to the list view the possibility to hide entries, if you do not want to print all entries of the list view. | 32 | Added to the list view the possibility to hide entries, if you do not want to print all entries of the list view. |
30 | Added to the list view the possibility to add all subtodos of selected todos to an export/beam. | 33 | Added to the list view the possibility to add all subtodos of selected todos to an export/beam. |
31 | Added to the search dialog the possibility to make an additive search such that you can get a better list for export/printout. | 34 | Added to the search dialog the possibility to make an additive search such that you can get a better list for export/printout. |
32 | Added to the search dialog the possibility to hide the checkboxes such that there is more space for the list view on the Zaurus. | 35 | Added to the search dialog the possibility to hide the checkboxes such that there is more space for the list view on the Zaurus. |
33 | Fixed a problem in the AlarmTimer Applet: Now utf8 messages are displayed properly. | 36 | Fixed a problem in the AlarmTimer Applet: Now utf8 messages are displayed properly. |
34 | 37 | ||
35 | Added support for multiple calendar files in KO/Pi. Only local ical (*.ics) files are supported as calendars. | 38 | Added support for multiple calendar files in KO/Pi. Only local ical (*.ics) files are supported as calendars. |
36 | In the sync profile config it is still missing to specify a particular calendar to sync with this profile. That setting will be added later. | 39 | In the sync profile config it is still missing to specify a particular calendar to sync with this profile. That setting will be added later. |
diff --git a/microkde/ofileselector_p.cpp b/microkde/ofileselector_p.cpp index f85f8f4..e2af32b 100644 --- a/microkde/ofileselector_p.cpp +++ b/microkde/ofileselector_p.cpp | |||
@@ -135,83 +135,101 @@ QWidget* ODocumentFileView::widget( QWidget* parent ) { | |||
135 | if (!m_selector ) { | 135 | if (!m_selector ) { |
136 | m_selector = new FileSelector(currentMimeType().join(";"), parent, "fileselector", showNew(), showClose() ); | 136 | m_selector = new FileSelector(currentMimeType().join(";"), parent, "fileselector", showNew(), showClose() ); |
137 | QObject::connect(m_selector, SIGNAL(fileSelected( const DocLnk& ) ), | 137 | QObject::connect(m_selector, SIGNAL(fileSelected( const DocLnk& ) ), |
138 | selector(), SLOT(slotDocLnkBridge(const DocLnk&) ) ); | 138 | selector(), SLOT(slotDocLnkBridge(const DocLnk&) ) ); |
139 | QObject::connect(m_selector, SIGNAL(closeMe() ), | 139 | QObject::connect(m_selector, SIGNAL(closeMe() ), |
140 | selector(), SIGNAL(closeMe() ) ); | 140 | selector(), SIGNAL(closeMe() ) ); |
141 | QObject::connect(m_selector, SIGNAL(newSelected(const DocLnk& ) ), | 141 | QObject::connect(m_selector, SIGNAL(newSelected(const DocLnk& ) ), |
142 | selector(), SIGNAL(newSelected(const DocLnk& ) ) ); | 142 | selector(), SIGNAL(newSelected(const DocLnk& ) ) ); |
143 | } | 143 | } |
144 | 144 | ||
145 | return m_selector; | 145 | return m_selector; |
146 | } | 146 | } |
147 | 147 | ||
148 | /* | 148 | /* |
149 | * This is the file system view used | 149 | * This is the file system view used |
150 | * we use a QListView + QListViewItems for it | 150 | * we use a QListView + QListViewItems for it |
151 | */ | 151 | */ |
152 | 152 | ||
153 | OFileSelectorItem::OFileSelectorItem( QListView* view, const QPixmap& pixmap, | 153 | OFileSelectorItem::OFileSelectorItem( QListView* view, const QPixmap& pixmap, |
154 | const QString& path, const QString& date, | 154 | const QString& path, const QString& date, |
155 | const QString& size, const QString& dir, | 155 | const QString& size, const QString& dir, |
156 | bool isLocked, bool isDir ) | 156 | bool isLocked, bool isDir ) |
157 | : QListViewItem( view ) | 157 | : QListViewItem( view ) |
158 | { | 158 | { |
159 | |||
160 | QString kind; | ||
161 | QString _path = path; | ||
162 | if ( isDir ) | ||
163 | kind = "dir"; | ||
164 | else | ||
165 | kind = "file"; | ||
159 | setPixmap(0, pixmap ); | 166 | setPixmap(0, pixmap ); |
160 | setText(1, path ); | 167 | int arrow = path.find( "->" ); |
168 | if (arrow > 0 ) { | ||
169 | kind += path.mid( arrow ); | ||
170 | _path = path.left(arrow); | ||
171 | } | ||
172 | setText(1, _path ); | ||
161 | setText(2, size ); | 173 | setText(2, size ); |
162 | setText(3, date ); | 174 | setText(3, date ); |
175 | setText(4, kind ); | ||
163 | m_isDir = isDir; | 176 | m_isDir = isDir; |
164 | m_dir = dir; | 177 | m_dir = dir; |
165 | m_locked = isLocked; | 178 | m_locked = isLocked; |
166 | } | 179 | } |
167 | OFileSelectorItem::~OFileSelectorItem() { | 180 | OFileSelectorItem::~OFileSelectorItem() { |
168 | 181 | ||
169 | } | 182 | } |
170 | bool OFileSelectorItem::isLocked()const { | 183 | bool OFileSelectorItem::isLocked()const { |
171 | return m_locked; | 184 | return m_locked; |
172 | } | 185 | } |
173 | QString OFileSelectorItem::directory()const { | 186 | QString OFileSelectorItem::directory()const { |
174 | return m_dir; | 187 | return m_dir; |
175 | } | 188 | } |
176 | bool OFileSelectorItem::isDir()const { | 189 | bool OFileSelectorItem::isDir()const { |
177 | return m_isDir; | 190 | return m_isDir; |
178 | } | 191 | } |
179 | QString OFileSelectorItem::path()const { | 192 | QString OFileSelectorItem::path()const { |
180 | return text( 1 ); | 193 | return text( 1 ); |
181 | } | 194 | } |
182 | QString OFileSelectorItem::key( int id, bool )const { | 195 | QString OFileSelectorItem::key( int id, bool )const { |
183 | QString ke; | 196 | QString ke; |
184 | if( id == 0 || id == 1 ){ // name | 197 | if( id == 0 || id == 1 ){ // name |
185 | if( m_isDir ){ | 198 | if( m_isDir ){ |
186 | ke.append("0" ); | 199 | ke.append("0" ); |
187 | ke.append( text(1) ); | 200 | ke.append( text(1) ); |
188 | }else{ | 201 | }else{ |
189 | ke.append("1" ); | 202 | ke.append("1" ); |
190 | ke.append( text(1) ); | 203 | ke.append( text(1) ); |
191 | } | 204 | } |
192 | return ke; | 205 | return ke; |
193 | }else | 206 | } else if ( id == 2 ) { |
207 | QString sort = "00000000"; | ||
208 | sort = sort.left( 9-text( 2 ).length()) + text( 2 ); | ||
209 | return sort; | ||
210 | |||
211 | } else | ||
194 | return text( id ); | 212 | return text( id ); |
195 | 213 | ||
196 | } | 214 | } |
197 | 215 | ||
198 | OFileViewFileListView::OFileViewFileListView( QWidget* parent, const QString& startDir, | 216 | OFileViewFileListView::OFileViewFileListView( QWidget* parent, const QString& startDir, |
199 | OFileSelector* sel) | 217 | OFileSelector* sel) |
200 | : QWidget( parent ), m_sel( sel ) { | 218 | : QWidget( parent ), m_sel( sel ) { |
201 | m_all = false; | 219 | m_all = false; |
202 | QVBoxLayout* lay = new QVBoxLayout( this ); | 220 | QVBoxLayout* lay = new QVBoxLayout( this ); |
203 | m_currentDir = startDir; | 221 | m_currentDir = startDir; |
204 | 222 | ||
205 | /* | 223 | /* |
206 | * now we add a special bar | 224 | * now we add a special bar |
207 | * One Button For Up | 225 | * One Button For Up |
208 | * Home | 226 | * Home |
209 | * Doc | 227 | * Doc |
210 | * And a dropdown menu with FileSystems | 228 | * And a dropdown menu with FileSystems |
211 | * FUTURE: one to change dir with lineedit | 229 | * FUTURE: one to change dir with lineedit |
212 | * Bookmarks | 230 | * Bookmarks |
213 | * Create Dir | 231 | * Create Dir |
214 | */ | 232 | */ |
215 | QHBox* box = new QHBox(this ); | 233 | QHBox* box = new QHBox(this ); |
216 | box->setBackgroundMode( PaletteButton ); | 234 | box->setBackgroundMode( PaletteButton ); |
217 | box->setSpacing( 0 ); | 235 | box->setSpacing( 0 ); |
@@ -324,62 +342,64 @@ void OFileViewFileListView::reread( bool all ) { | |||
324 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | 342 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; |
325 | else | 343 | else |
326 | filter = QDir::Files | QDir::Dirs | QDir::All; | 344 | filter = QDir::Files | QDir::Dirs | QDir::All; |
327 | dir.setFilter( filter ); | 345 | dir.setFilter( filter ); |
328 | 346 | ||
329 | // now go through all files | 347 | // now go through all files |
330 | const QFileInfoList *list = dir.entryInfoList(); | 348 | const QFileInfoList *list = dir.entryInfoList(); |
331 | if (!list) { | 349 | if (!list) { |
332 | cdUP(); | 350 | cdUP(); |
333 | return; | 351 | return; |
334 | } | 352 | } |
335 | QFileInfoListIterator it( *list ); | 353 | QFileInfoListIterator it( *list ); |
336 | QFileInfo *fi; | 354 | QFileInfo *fi; |
337 | while( (fi=it.current() ) ){ | 355 | while( (fi=it.current() ) ){ |
338 | if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ | 356 | if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ |
339 | ++it; | 357 | ++it; |
340 | continue; | 358 | continue; |
341 | } | 359 | } |
342 | 360 | ||
343 | /* | 361 | /* |
344 | * It is a symlink we try to resolve it now but don't let us attack by DOS | 362 | * It is a symlink we try to resolve it now but don't let us attack by DOS |
345 | * | 363 | * |
346 | */ | 364 | */ |
347 | if( fi->isSymLink() ){ | 365 | if( fi->isSymLink() ){ |
348 | QString file = fi->dirPath( true ) + "/" + fi->readLink(); | 366 | qDebug("SYMLINK "); |
349 | for( int i = 0; i<=4; i++) { // 5 tries to prevent dos | 367 | QString file = fi->readLink(); |
368 | for( int i = 0; i<=5; i++) { // 5 tries to prevent dos | ||
350 | QFileInfo info( file ); | 369 | QFileInfo info( file ); |
370 | qDebug("FILE %s ", file.latin1()); | ||
351 | if( !info.exists() ){ | 371 | if( !info.exists() ){ |
352 | addSymlink( fi, TRUE ); | 372 | addSymlink( fi, TRUE ); |
353 | break; | 373 | break; |
354 | }else if( info.isDir() ){ | 374 | }else if( info.isDir() ){ |
355 | addDir( fi, TRUE ); | 375 | addDir( fi, TRUE ); |
356 | break; | 376 | break; |
357 | }else if( info.isFile() ){ | 377 | }else if( info.isFile() ){ |
358 | addFile( fi, TRUE ); | 378 | addFile( fi, TRUE ); |
359 | break; | 379 | break; |
360 | }else if( info.isSymLink() ){ | 380 | }else if( info.isSymLink() ){ |
361 | file = info.dirPath(true ) + "/" + info.readLink() ; | 381 | file = info.readLink() ; |
362 | break; | 382 | break; |
363 | }else if( i == 4){ // couldn't resolve symlink add it as symlink | 383 | }else if( i == 4){ // couldn't resolve symlink add it as symlink |
364 | addSymlink( fi ); | 384 | addSymlink( fi ); |
365 | } | 385 | } |
366 | } // off for loop for symlink resolving | 386 | } // off for loop for symlink resolving |
367 | }else if( fi->isDir() ) | 387 | }else if( fi->isDir() ) |
368 | addDir( fi ); | 388 | addDir( fi ); |
369 | else if( fi->isFile() ) | 389 | else if( fi->isFile() ) |
370 | addFile( fi ); | 390 | addFile( fi ); |
371 | 391 | ||
372 | ++it; | 392 | ++it; |
373 | } // of while loop | 393 | } // of while loop |
374 | m_view->sort(); | 394 | m_view->sort(); |
375 | 395 | ||
376 | } | 396 | } |
377 | int OFileViewFileListView::fileCount()const{ | 397 | int OFileViewFileListView::fileCount()const{ |
378 | return m_view->childCount(); | 398 | return m_view->childCount(); |
379 | } | 399 | } |
380 | QString OFileViewFileListView::currentDir()const{ | 400 | QString OFileViewFileListView::currentDir()const{ |
381 | return m_currentDir; | 401 | return m_currentDir; |
382 | } | 402 | } |
383 | OFileSelector* OFileViewFileListView::selector() { | 403 | OFileSelector* OFileViewFileListView::selector() { |
384 | return m_sel; | 404 | return m_sel; |
385 | } | 405 | } |
@@ -465,75 +485,75 @@ void OFileViewFileListView::slotClicked(int button , QListViewItem* item, const | |||
465 | selector()->m_lneEdit->setText( str[0].stripWhiteSpace() ); | 485 | selector()->m_lneEdit->setText( str[0].stripWhiteSpace() ); |
466 | QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); | 486 | QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); |
467 | emit selector()->fileSelected( path ); | 487 | emit selector()->fileSelected( path ); |
468 | DocLnk lnk( path ); | 488 | DocLnk lnk( path ); |
469 | emit selector()->fileSelected( lnk ); | 489 | emit selector()->fileSelected( lnk ); |
470 | } | 490 | } |
471 | } // not locked | 491 | } // not locked |
472 | } | 492 | } |
473 | void OFileViewFileListView::addFile( QFileInfo* info, bool symlink ) { | 493 | void OFileViewFileListView::addFile( QFileInfo* info, bool symlink ) { |
474 | MimeType type( info->absFilePath() ); | 494 | MimeType type( info->absFilePath() ); |
475 | if (!compliesMime( type.id() ) ) | 495 | if (!compliesMime( type.id() ) ) |
476 | return; | 496 | return; |
477 | 497 | ||
478 | QPixmap pix = type.pixmap(); | 498 | QPixmap pix = type.pixmap(); |
479 | QString dir, name; bool locked; | 499 | QString dir, name; bool locked; |
480 | if ( pix.isNull() ) { | 500 | if ( pix.isNull() ) { |
481 | QWMatrix matrix; | 501 | QWMatrix matrix; |
482 | QPixmap pixer(Resource::loadPixmap("UnknownDocument") ); | 502 | QPixmap pixer(Resource::loadPixmap("UnknownDocument") ); |
483 | matrix.scale( .4, .4 ); | 503 | matrix.scale( .4, .4 ); |
484 | pix = pixer.xForm( matrix ); | 504 | pix = pixer.xForm( matrix ); |
485 | } | 505 | } |
486 | dir = info->dirPath( true ); | 506 | dir = info->dirPath( true ); |
487 | locked = false; | 507 | locked = false; |
488 | if ( symlink ) | 508 | if ( symlink ) |
489 | name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); | 509 | name = info->fileName() + " -> " + info->readLink(); |
490 | else{ | 510 | else{ |
491 | name = info->fileName(); | 511 | name = info->fileName(); |
492 | if ( ( (selector()->mode() == OFileSelector::Open)&& !info->isReadable() ) || | 512 | if ( ( (selector()->mode() == OFileSelector::Open)&& !info->isReadable() ) || |
493 | ( (selector()->mode() == OFileSelector::Save)&& !info->isWritable() ) ) { | 513 | ( (selector()->mode() == OFileSelector::Save)&& !info->isWritable() ) ) { |
494 | locked = true; pix = Resource::loadPixmap("locked"); | 514 | locked = true; pix = Resource::loadPixmap("locked"); |
495 | } | 515 | } |
496 | } | 516 | } |
497 | (void)new OFileSelectorItem( m_view, pix, name, | 517 | (void)new OFileSelectorItem( m_view, pix, name, |
498 | KGlobal::locale()->formatDateTime(info->lastModified(),true, true, KLocale::ISODate), | 518 | KGlobal::locale()->formatDateTime(info->lastModified(),true, true, KLocale::ISODate), |
499 | QString::number( info->size() ), | 519 | QString::number( info->size() ), |
500 | dir, locked ); | 520 | dir, locked ); |
501 | } | 521 | } |
502 | void OFileViewFileListView::addDir( QFileInfo* info, bool symlink ) { | 522 | void OFileViewFileListView::addDir( QFileInfo* info, bool symlink ) { |
503 | bool locked = false; QString name; QPixmap pix; | 523 | bool locked = false; QString name; QPixmap pix; |
504 | 524 | ||
505 | if ( ( ( selector()->mode() == OFileSelector::Open ) && !info->isReadable() ) || | 525 | if ( ( ( selector()->mode() == OFileSelector::Open ) && !info->isReadable() ) || |
506 | ( ( selector()->mode() == OFileSelector::Save ) && !info->isWritable() ) ) { | 526 | ( ( selector()->mode() == OFileSelector::Save ) && !info->isWritable() ) ) { |
507 | locked = true; | 527 | locked = true; |
508 | if ( symlink ) | 528 | if ( symlink ) |
509 | pix = Resource::loadPixmap( "symlink" ); | 529 | pix = Resource::loadPixmap( "symlink" ); |
510 | else | 530 | else |
511 | pix = Resource::loadPixmap( "lockedfolder" ); | 531 | pix = Resource::loadPixmap( "lockedfolder" ); |
512 | }else | 532 | }else |
513 | pix = symlink ? Resource::loadPixmap( "symlink") : Resource::loadPixmap("folder"); | 533 | pix = symlink ? Resource::loadPixmap( "symlink") : Resource::loadPixmap("folder"); |
514 | 534 | ||
515 | name = symlink ? info->fileName() + " -> " + info->dirPath(true) + "/" + info->readLink() : | 535 | name = symlink ? info->fileName() + " -> " + info->readLink() : |
516 | info->fileName(); | 536 | info->fileName(); |
517 | 537 | ||
518 | (void)new OFileSelectorItem( m_view, pix, name, | 538 | (void)new OFileSelectorItem( m_view, pix, name, |
519 | KGlobal::locale()->formatDateTime(info->lastModified(),true, true, KLocale::ISODate), | 539 | KGlobal::locale()->formatDateTime(info->lastModified(),true, true, KLocale::ISODate), |
520 | QString::number( info->size() ), | 540 | QString::number( info->size() ), |
521 | info->dirPath( true ), locked, true ); | 541 | info->dirPath( true ), locked, true ); |
522 | 542 | ||
523 | 543 | ||
524 | } | 544 | } |
525 | void OFileViewFileListView::addSymlink( QFileInfo* , bool ) { | 545 | void OFileViewFileListView::addSymlink( QFileInfo* , bool ) { |
526 | 546 | ||
527 | } | 547 | } |
528 | void OFileViewFileListView::cdUP() { | 548 | void OFileViewFileListView::cdUP() { |
529 | QDir dir( m_currentDir ); | 549 | QDir dir( m_currentDir ); |
530 | dir.cdUp(); | 550 | dir.cdUp(); |
531 | 551 | ||
532 | if (!dir.exists() ) | 552 | if (!dir.exists() ) |
533 | m_currentDir = "/"; | 553 | m_currentDir = "/"; |
534 | else | 554 | else |
535 | m_currentDir = dir.absPath(); | 555 | m_currentDir = dir.absPath(); |
536 | 556 | ||
537 | emit selector()->dirSelected( m_currentDir ); | 557 | emit selector()->dirSelected( m_currentDir ); |
538 | reread( m_all ); | 558 | reread( m_all ); |
539 | } | 559 | } |