summaryrefslogtreecommitdiff
authorzecke <zecke>2004-07-24 13:16:26 (UTC)
committer zecke <zecke>2004-07-24 13:16:26 (UTC)
commit144d91fee9e0ec0cb672508637c639cfbbf4e750 (patch) (unidiff)
tree802d12ac283361e3d5d710a6b8387dc22b88c462
parent1efb57a4cffc8a19a0dadbd008ff205d3d61d216 (diff)
downloadopie-144d91fee9e0ec0cb672508637c639cfbbf4e750.zip
opie-144d91fee9e0ec0cb672508637c639cfbbf4e750.tar.gz
opie-144d91fee9e0ec0cb672508637c639cfbbf4e750.tar.bz2
Delete the Views which are created in the OFileSelector
Add a new member and one method to register the view. The views themselves (baseclass) call this function. Simply going over the viewMap wouldn't work as we can have the same instance contained twice under a different name
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/fileselector/ofileselector.cpp19
-rw-r--r--libopie2/opieui/fileselector/ofileselector.h10
2 files changed, 24 insertions, 5 deletions
diff --git a/libopie2/opieui/fileselector/ofileselector.cpp b/libopie2/opieui/fileselector/ofileselector.cpp
index 5528aed..b06defd 100644
--- a/libopie2/opieui/fileselector/ofileselector.cpp
+++ b/libopie2/opieui/fileselector/ofileselector.cpp
@@ -1,195 +1,197 @@
1 1
2/* 2/*
3               =. This file is part of the OPIE Project 3               =. This file is part of the OPIE Project
4             .=l. Copyright (C) 2002,2003 Holger Freyther <zecke@handhelds.org> 4             .=l. Copyright (C) 2002,2003 Holger Freyther <zecke@handhelds.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This library is free software; you can 6 _;:,     .>    :=|. This library is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 8:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This library is distributed in the hope that 13    .i_,=:_.      -<s. This library is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
18..}^=.=       =       ; Library General Public License for more 18..}^=.=       =       ; Library General Public License for more
19++=   -.     .`     .: details. 19++=   -.     .`     .: details.
20 :     =  ...= . :.=- 20 :     =  ...= . :.=-
21 -.   .:....=;==+<; You should have received a copy of the GNU 21 -.   .:....=;==+<; You should have received a copy of the GNU
22  -_. . .   )=.  = Library General Public License along with 22  -_. . .   )=.  = Library General Public License along with
23    --        :-=` this library; see the file COPYING.LIB. 23    --        :-=` this library; see the file COPYING.LIB.
24 If not, write to the Free Software Foundation, 24 If not, write to the Free Software Foundation,
25 Inc., 59 Temple Place - Suite 330, 25 Inc., 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30/* hacky but we need to get FileSelector::filter */ 30/* hacky but we need to get FileSelector::filter */
31#define private public 31#define private public
32#include <qpe/fileselector.h> 32#include <qpe/fileselector.h>
33#undef private 33#undef private
34 34
35#include "ofileselector_p.h" 35#include "ofileselector_p.h"
36 36
37/* OPIE */ 37/* OPIE */
38#include <opie2/ofileselector.h> 38#include <opie2/ofileselector.h>
39#include <opie2/odebug.h> 39#include <opie2/odebug.h>
40 40
41#include <qpe/qpeapplication.h> 41#include <qpe/qpeapplication.h>
42#include <qpe/mimetype.h> 42#include <qpe/mimetype.h>
43#include <qpe/resource.h> 43#include <qpe/resource.h>
44#include <qpe/storage.h> 44#include <qpe/storage.h>
45 45
46/* QT */ 46/* QT */
47#include <qcombobox.h> 47#include <qcombobox.h>
48#include <qdir.h> 48#include <qdir.h>
49#include <qhbox.h> 49#include <qhbox.h>
50#include <qheader.h> 50#include <qheader.h>
51#include <qlabel.h> 51#include <qlabel.h>
52#include <qlayout.h> 52#include <qlayout.h>
53#include <qlineedit.h> 53#include <qlineedit.h>
54#include <qlistview.h> 54#include <qlistview.h>
55#include <qpopupmenu.h> 55#include <qpopupmenu.h>
56#include <qwidgetstack.h> 56#include <qwidgetstack.h>
57#include <qregexp.h> 57#include <qregexp.h>
58#include <qobjectlist.h> 58#include <qobjectlist.h>
59 59
60using namespace Opie::Ui::Internal; 60using namespace Opie::Ui::Internal;
61 61
62namespace Opie { 62namespace Opie {
63namespace Ui { 63namespace Ui {
64namespace Internal { 64namespace Internal {
65OFileViewInterface::OFileViewInterface( OFileSelector* selector ) 65OFileViewInterface::OFileViewInterface( OFileSelector* _selector )
66 : m_selector( selector ) 66 : m_selector( _selector )
67{} 67{
68 selector()->registerView( this );
69}
68 70
69OFileViewInterface::~OFileViewInterface() 71OFileViewInterface::~OFileViewInterface()
70{} 72{}
71 73
72QString OFileViewInterface::name()const 74QString OFileViewInterface::name()const
73{ 75{
74 return m_name; 76 return m_name;
75} 77}
76 78
77void OFileViewInterface::setName( const QString& name ) 79void OFileViewInterface::setName( const QString& name )
78{ 80{
79 m_name = name; 81 m_name = name;
80} 82}
81 83
82OFileSelector* OFileViewInterface::selector()const 84OFileSelector* OFileViewInterface::selector()const
83{ 85{
84 return m_selector; 86 return m_selector;
85} 87}
86 88
87DocLnk OFileViewInterface::selectedDocument()const 89DocLnk OFileViewInterface::selectedDocument()const
88{ 90{
89 return DocLnk( selectedName() ); 91 return DocLnk( selectedName() );
90} 92}
91 93
92bool OFileViewInterface::showNew()const 94bool OFileViewInterface::showNew()const
93{ 95{
94 return selector()->showNew(); 96 return selector()->showNew();
95} 97}
96 98
97bool OFileViewInterface::showClose()const 99bool OFileViewInterface::showClose()const
98{ 100{
99 return selector()->showClose(); 101 return selector()->showClose();
100} 102}
101 103
102MimeTypes OFileViewInterface::mimeTypes()const 104MimeTypes OFileViewInterface::mimeTypes()const
103{ 105{
104 return selector()->mimeTypes(); 106 return selector()->mimeTypes();
105} 107}
106 108
107QStringList OFileViewInterface::currentMimeType()const 109QStringList OFileViewInterface::currentMimeType()const
108{ 110{
109 return selector()->currentMimeType(); 111 return selector()->currentMimeType();
110} 112}
111 113
112void OFileViewInterface::activate( const QString& ) 114void OFileViewInterface::activate( const QString& )
113{ 115{
114 // not implemented here 116 // not implemented here
115} 117}
116 118
117void OFileViewInterface::ok() 119void OFileViewInterface::ok()
118{ 120{
119 emit selector()->ok(); 121 emit selector()->ok();
120} 122}
121 123
122void OFileViewInterface::cancel() 124void OFileViewInterface::cancel()
123{ 125{
124 emit selector()->cancel(); 126 emit selector()->cancel();
125} 127}
126 128
127void OFileViewInterface::closeMe() 129void OFileViewInterface::closeMe()
128{ 130{
129 emit selector()->closeMe(); 131 emit selector()->closeMe();
130} 132}
131 133
132void OFileViewInterface::fileSelected( const QString& str) 134void OFileViewInterface::fileSelected( const QString& str)
133{ 135{
134 emit selector()->fileSelected( str); 136 emit selector()->fileSelected( str);
135} 137}
136 138
137void OFileViewInterface::fileSelected( const DocLnk& lnk) 139void OFileViewInterface::fileSelected( const DocLnk& lnk)
138{ 140{
139 emit selector()->fileSelected( lnk ); 141 emit selector()->fileSelected( lnk );
140} 142}
141 143
142void OFileViewInterface::setCurrentFileName( const QString& str ) 144void OFileViewInterface::setCurrentFileName( const QString& str )
143{ 145{
144 selector()->m_lneEdit->setText( str ); 146 selector()->m_lneEdit->setText( str );
145} 147}
146 148
147QString OFileViewInterface::currentFileName()const 149QString OFileViewInterface::currentFileName()const
148{ 150{
149 return selector()->m_lneEdit->text(); 151 return selector()->m_lneEdit->text();
150} 152}
151 153
152QString OFileViewInterface::startDirectory()const 154QString OFileViewInterface::startDirectory()const
153{ 155{
154 return selector()->m_startDir; 156 return selector()->m_startDir;
155} 157}
156 158
157ODocumentFileView::ODocumentFileView( OFileSelector* selector ) 159ODocumentFileView::ODocumentFileView( OFileSelector* selector )
158 :OFileViewInterface( selector ) 160 :OFileViewInterface( selector )
159{ 161{
160 m_selector = 0; 162 m_selector = 0;
161 setName( QObject::tr("Documents") ); 163 setName( QObject::tr("Documents") );
162} 164}
163 165
164ODocumentFileView::~ODocumentFileView() 166ODocumentFileView::~ODocumentFileView()
165{ 167{
166} 168}
167 169
168QString ODocumentFileView::selectedName()const 170QString ODocumentFileView::selectedName()const
169{ 171{
170 if (!m_selector) 172 if (!m_selector)
171 return QString::null; 173 return QString::null;
172 174
173 return m_selector->selectedDocument().file(); 175 return m_selector->selectedDocument().file();
174} 176}
175 177
176QString ODocumentFileView::selectedPath()const 178QString ODocumentFileView::selectedPath()const
177{ 179{
178 return QPEApplication::documentDir(); 180 return QPEApplication::documentDir();
179} 181}
180 182
181QString ODocumentFileView::directory()const 183QString ODocumentFileView::directory()const
182{ 184{
183 return selectedPath(); 185 return selectedPath();
184} 186}
185 187
186void ODocumentFileView::reread() 188void ODocumentFileView::reread()
187{ 189{
188 if (!m_selector) 190 if (!m_selector)
189 return; 191 return;
190 192
191 m_selector->setNewVisible( showNew() ); 193 m_selector->setNewVisible( showNew() );
192 m_selector->setCloseVisible( showClose() ); 194 m_selector->setCloseVisible( showClose() );
193 m_selector->filter = currentMimeType().join(";"); 195 m_selector->filter = currentMimeType().join(";");
194 m_selector->reread(); 196 m_selector->reread();
195} 197}
@@ -386,257 +388,257 @@ OFileViewFileListView::OFileViewFileListView( QWidget* parent, const QString& st
386 388
387OFileViewFileListView::~OFileViewFileListView() 389OFileViewFileListView::~OFileViewFileListView()
388{ 390{
389} 391}
390 392
391void OFileViewFileListView::slotNew() 393void OFileViewFileListView::slotNew()
392{ 394{
393 DocLnk lnk; 395 DocLnk lnk;
394 emit selector()->newSelected( lnk ); 396 emit selector()->newSelected( lnk );
395} 397}
396 398
397OFileSelectorItem* OFileViewFileListView::currentItem()const 399OFileSelectorItem* OFileViewFileListView::currentItem()const
398{ 400{
399 QListViewItem* item = m_view->currentItem(); 401 QListViewItem* item = m_view->currentItem();
400 if (!item ) 402 if (!item )
401 return 0l; 403 return 0l;
402 404
403 return static_cast<OFileSelectorItem*>(item); 405 return static_cast<OFileSelectorItem*>(item);
404} 406}
405 407
406void OFileViewFileListView::reread( bool all ) 408void OFileViewFileListView::reread( bool all )
407{ 409{
408 m_view->clear(); 410 m_view->clear();
409 411
410 if (selector()->showClose() ) 412 if (selector()->showClose() )
411 m_btnClose->show(); 413 m_btnClose->show();
412 else 414 else
413 m_btnClose->hide(); 415 m_btnClose->hide();
414 416
415 if (selector()->showNew() ) 417 if (selector()->showNew() )
416 m_btnNew->show(); 418 m_btnNew->show();
417 else 419 else
418 m_btnNew->hide(); 420 m_btnNew->hide();
419 421
420 m_mimes = selector()->currentMimeType(); 422 m_mimes = selector()->currentMimeType();
421 m_all = all; 423 m_all = all;
422 424
423 QDir dir( m_currentDir ); 425 QDir dir( m_currentDir );
424 if (!dir.exists() ) 426 if (!dir.exists() )
425 return; 427 return;
426 428
427 dir.setSorting( QDir::Name | QDir::DirsFirst | QDir::Reversed ); 429 dir.setSorting( QDir::Name | QDir::DirsFirst | QDir::Reversed );
428 int filter; 430 int filter;
429 if (m_all ) 431 if (m_all )
430 filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; 432 filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
431 else 433 else
432 filter = QDir::Files | QDir::Dirs | QDir::All; 434 filter = QDir::Files | QDir::Dirs | QDir::All;
433 dir.setFilter( filter ); 435 dir.setFilter( filter );
434 436
435 // now go through all files 437 // now go through all files
436 const QFileInfoList *list = dir.entryInfoList(); 438 const QFileInfoList *list = dir.entryInfoList();
437 if (!list) 439 if (!list)
438 { 440 {
439 cdUP(); 441 cdUP();
440 return; 442 return;
441 } 443 }
442 444
443 QFileInfoListIterator it( *list ); 445 QFileInfoListIterator it( *list );
444 QFileInfo *fi; 446 QFileInfo *fi;
445 while( (fi=it.current() ) ) 447 while( (fi=it.current() ) )
446 { 448 {
447 if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ) 449 if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") )
448 { 450 {
449 ++it; 451 ++it;
450 continue; 452 continue;
451 } 453 }
452 454
453 /* 455 /*
454 * It is a symlink we try to resolve it now but don't let us attack by DOS 456 * It is a symlink we try to resolve it now but don't let us attack by DOS
455 * 457 *
456 */ 458 */
457 if( fi->isSymLink() ) 459 if( fi->isSymLink() )
458 { 460 {
459 QString file = fi->dirPath( true ) + "/" + fi->readLink(); 461 QString file = fi->dirPath( true ) + "/" + fi->readLink();
460 for( int i = 0; i<=4; i++) 462 for( int i = 0; i<=4; i++)
461 { // 5 tries to prevent dos 463 { // 5 tries to prevent dos
462 QFileInfo info( file ); 464 QFileInfo info( file );
463 if( !info.exists() ) 465 if( !info.exists() )
464 { 466 {
465 addSymlink( fi, TRUE ); 467 addSymlink( fi, TRUE );
466 break; 468 break;
467 } 469 }
468 else if( info.isDir() ) 470 else if( info.isDir() )
469 { 471 {
470 addDir( fi, TRUE ); 472 addDir( fi, TRUE );
471 break; 473 break;
472 } 474 }
473 else if( info.isFile() ) 475 else if( info.isFile() )
474 { 476 {
475 addFile( fi, TRUE ); 477 addFile( fi, TRUE );
476 break; 478 break;
477 } 479 }
478 else if( info.isSymLink() ) 480 else if( info.isSymLink() )
479 { 481 {
480 file = info.dirPath(true ) + "/" + info.readLink() ; 482 file = info.dirPath(true ) + "/" + info.readLink() ;
481 break; 483 break;
482 } 484 }
483 else if( i == 4) 485 else if( i == 4)
484 { // couldn't resolve symlink add it as symlink 486 { // couldn't resolve symlink add it as symlink
485 addSymlink( fi ); 487 addSymlink( fi );
486 } 488 }
487 } // off for loop for symlink resolving 489 } // off for loop for symlink resolving
488 } 490 }
489 else if( fi->isDir() ) 491 else if( fi->isDir() )
490 addDir( fi ); 492 addDir( fi );
491 else if( fi->isFile() ) 493 else if( fi->isFile() )
492 addFile( fi ); 494 addFile( fi );
493 495
494 ++it; 496 ++it;
495 } // of while loop 497 } // of while loop
496 m_view->sort(); 498 m_view->sort();
497 499
498} 500}
499int OFileViewFileListView::fileCount()const 501int OFileViewFileListView::fileCount()const
500{ 502{
501 return m_view->childCount(); 503 return m_view->childCount();
502} 504}
503 505
504QString OFileViewFileListView::currentDir()const 506QString OFileViewFileListView::currentDir()const
505{ 507{
506 return m_currentDir; 508 return m_currentDir;
507} 509}
508 510
509OFileSelector* OFileViewFileListView::selector() 511OFileSelector* OFileViewFileListView::selector()
510{ 512{
511 return m_sel; 513 return m_sel;
512} 514}
513 515
514bool OFileViewFileListView::eventFilter (QObject *o, QEvent *e) 516bool OFileViewFileListView::eventFilter (QObject *, QEvent *e)
515{ 517{
516 if ( e->type() == QEvent::KeyPress ) 518 if ( e->type() == QEvent::KeyPress )
517 { 519 {
518 QKeyEvent *k = (QKeyEvent *)e; 520 QKeyEvent *k = (QKeyEvent *)e;
519 if ( (k->key()==Key_Enter) || (k->key()==Key_Return)) 521 if ( (k->key()==Key_Enter) || (k->key()==Key_Return))
520 { 522 {
521 slotClicked( Qt::LeftButton,m_view->currentItem(),QPoint(0,0),0); 523 slotClicked( Qt::LeftButton,m_view->currentItem(),QPoint(0,0),0);
522 return true; 524 return true;
523 } 525 }
524 } 526 }
525 return false; 527 return false;
526} 528}
527 529
528void OFileViewFileListView::connectSlots() 530void OFileViewFileListView::connectSlots()
529{ 531{
530 connect(m_view, SIGNAL(clicked(QListViewItem*) ), 532 connect(m_view, SIGNAL(clicked(QListViewItem*) ),
531 this, SLOT(slotCurrentChanged(QListViewItem*) ) ); 533 this, SLOT(slotCurrentChanged(QListViewItem*) ) );
532 connect(m_view, SIGNAL(mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ), 534 connect(m_view, SIGNAL(mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ),
533 this, SLOT(slotClicked(int,QListViewItem*,const QPoint&,int) ) ); 535 this, SLOT(slotClicked(int,QListViewItem*,const QPoint&,int) ) );
534} 536}
535 537
536void OFileViewFileListView::slotCurrentChanged( QListViewItem* item) 538void OFileViewFileListView::slotCurrentChanged( QListViewItem* item)
537{ 539{
538 if (!item) 540 if (!item)
539 return; 541 return;
540#if 0 542#if 0
541 543
542 OFileSelectorItem *sel = static_cast<OFileSelectorItem*>(item); 544 OFileSelectorItem *sel = static_cast<OFileSelectorItem*>(item);
543 545
544 if (!sel->isDir() ) 546 if (!sel->isDir() )
545 { 547 {
546 selector()->m_lneEdit->setText( sel->text(1) ); 548 selector()->m_lneEdit->setText( sel->text(1) );
547 // if in fileselector mode we will emit selected 549 // if in fileselector mode we will emit selected
548 if ( selector()->mode() == OFileSelector::FileSelector ) 550 if ( selector()->mode() == OFileSelector::FileSelector )
549 { 551 {
550 odebug << "slot Current Changed" << oendl; 552 odebug << "slot Current Changed" << oendl;
551 QStringList str = QStringList::split("->", sel->text(1) ); 553 QStringList str = QStringList::split("->", sel->text(1) );
552 QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); 554 QString path = sel->directory() + "/" + str[0].stripWhiteSpace();
553 emit selector()->fileSelected( path ); 555 emit selector()->fileSelected( path );
554 DocLnk lnk( path ); 556 DocLnk lnk( path );
555 emit selector()->fileSelected( lnk ); 557 emit selector()->fileSelected( lnk );
556 } 558 }
557 } 559 }
558#endif 560#endif
559} 561}
560 562
561void OFileViewFileListView::slotClicked(int button , QListViewItem* item, const QPoint&, int ) 563void OFileViewFileListView::slotClicked(int button , QListViewItem* item, const QPoint&, int )
562{ 564{
563 if (!item || ( button != Qt::LeftButton) ) 565 if (!item || ( button != Qt::LeftButton) )
564 return; 566 return;
565 567
566 OFileSelectorItem *sel = static_cast<OFileSelectorItem*>(item); 568 OFileSelectorItem *sel = static_cast<OFileSelectorItem*>(item);
567 if (!sel->isLocked() ) 569 if (!sel->isLocked() )
568 { 570 {
569 QStringList str = QStringList::split("->", sel->text(1) ); 571 QStringList str = QStringList::split("->", sel->text(1) );
570 if (sel->isDir() ) 572 if (sel->isDir() )
571 { 573 {
572 m_currentDir = sel->directory() + "/" + str[0].stripWhiteSpace(); 574 m_currentDir = sel->directory() + "/" + str[0].stripWhiteSpace();
573 emit selector()->dirSelected( m_currentDir ); 575 emit selector()->dirSelected( m_currentDir );
574 reread( m_all ); 576 reread( m_all );
575 } 577 }
576 else 578 else
577 { // file 579 { // file
578 odebug << "slot Clicked" << oendl; 580 odebug << "slot Clicked" << oendl;
579 selector()->m_lneEdit->setText( str[0].stripWhiteSpace() ); 581 selector()->m_lneEdit->setText( str[0].stripWhiteSpace() );
580 QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); 582 QString path = sel->directory() + "/" + str[0].stripWhiteSpace();
581 emit selector()->fileSelected( path ); 583 emit selector()->fileSelected( path );
582 DocLnk lnk( path ); 584 DocLnk lnk( path );
583 emit selector()->fileSelected( lnk ); 585 emit selector()->fileSelected( lnk );
584 } 586 }
585 } // not locked 587 } // not locked
586} 588}
587 589
588void OFileViewFileListView::addFile( QFileInfo* info, bool symlink ) 590void OFileViewFileListView::addFile( QFileInfo* info, bool symlink )
589{ 591{
590 MimeType type( info->absFilePath() ); 592 MimeType type( info->absFilePath() );
591 if (!compliesMime( type.id() ) ) 593 if (!compliesMime( type.id() ) )
592 return; 594 return;
593 595
594 QPixmap pix = type.pixmap(); 596 QPixmap pix = type.pixmap();
595 QString dir, name; bool locked; 597 QString dir, name; bool locked;
596 if ( pix.isNull() ) 598 if ( pix.isNull() )
597 { 599 {
598 QWMatrix matrix; 600 QWMatrix matrix;
599 QPixmap pixer(Resource::loadPixmap("UnknownDocument") ); 601 QPixmap pixer(Resource::loadPixmap("UnknownDocument") );
600 matrix.scale( .4, .4 ); 602 matrix.scale( .4, .4 );
601 pix = pixer.xForm( matrix ); 603 pix = pixer.xForm( matrix );
602 } 604 }
603 dir = info->dirPath( true ); 605 dir = info->dirPath( true );
604 locked = false; 606 locked = false;
605 if ( symlink ) 607 if ( symlink )
606 name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); 608 name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink();
607 else 609 else
608 { 610 {
609 name = info->fileName(); 611 name = info->fileName();
610 if ( ( (selector()->mode() == OFileSelector::Open)&& !info->isReadable() ) || 612 if ( ( (selector()->mode() == OFileSelector::Open)&& !info->isReadable() ) ||
611 ( (selector()->mode() == OFileSelector::Save)&& !info->isWritable() ) ) 613 ( (selector()->mode() == OFileSelector::Save)&& !info->isWritable() ) )
612 { 614 {
613 locked = true; pix = Resource::loadPixmap("locked"); 615 locked = true; pix = Resource::loadPixmap("locked");
614 } 616 }
615 } 617 }
616 (void)new OFileSelectorItem( m_view, pix, name, 618 (void)new OFileSelectorItem( m_view, pix, name,
617 info->lastModified().toString(), QString::number( info->size() ), 619 info->lastModified().toString(), QString::number( info->size() ),
618 dir, locked ); 620 dir, locked );
619} 621}
620 622
621void OFileViewFileListView::addDir( QFileInfo* info, bool symlink ) 623void OFileViewFileListView::addDir( QFileInfo* info, bool symlink )
622{ 624{
623 bool locked = false; QString name; QPixmap pix; 625 bool locked = false; QString name; QPixmap pix;
624 626
625 if ( ( ( selector()->mode() == OFileSelector::Open ) && !info->isReadable() ) || 627 if ( ( ( selector()->mode() == OFileSelector::Open ) && !info->isReadable() ) ||
626 ( ( selector()->mode() == OFileSelector::Save ) && !info->isWritable() ) ) 628 ( ( selector()->mode() == OFileSelector::Save ) && !info->isWritable() ) )
627 { 629 {
628 locked = true; 630 locked = true;
629 if ( symlink ) 631 if ( symlink )
630 pix = Resource::loadPixmap( "opie/symlink" ); 632 pix = Resource::loadPixmap( "opie/symlink" );
631 else 633 else
632 pix = Resource::loadPixmap( "lockedfolder" ); 634 pix = Resource::loadPixmap( "lockedfolder" );
633 } 635 }
634 else 636 else
635 pix = symlink ? Resource::loadPixmap( "opie/symlink") : Resource::loadPixmap("folder"); 637 pix = symlink ? Resource::loadPixmap( "opie/symlink") : Resource::loadPixmap("folder");
636 638
637 name = symlink ? info->fileName() + " -> " + info->dirPath(true) + "/" + info->readLink() : 639 name = symlink ? info->fileName() + " -> " + info->dirPath(true) + "/" + info->readLink() :
638 info->fileName(); 640 info->fileName();
639 641
640 (void)new OFileSelectorItem( m_view, pix, name, 642 (void)new OFileSelectorItem( m_view, pix, name,
641 info->lastModified().toString(), 643 info->lastModified().toString(),
642 QString::number( info->size() ), 644 QString::number( info->size() ),
@@ -822,312 +824,319 @@ void OFileViewFileSystem::activate( const QString& str)
822 * @short new and complete c'tor 824 * @short new and complete c'tor
823 * 825 *
824 * Create a OFileSelector to let the user select a file. It can 826 * Create a OFileSelector to let the user select a file. It can
825 * either be used to open a file, select a save name in a dir or 827 * either be used to open a file, select a save name in a dir or
826 * as a dropin for the FileSelector. 828 * as a dropin for the FileSelector.
827 * 829 *
828 * <pre> 830 * <pre>
829 * QMap<QString, QStringList> mimeTypes; 831 * QMap<QString, QStringList> mimeTypes;
830 * QStringList types; 832 * QStringList types;
831 * types << "text@slash* "; 833 * types << "text@slash* ";
832 * types << "audio@slash*"; 834 * types << "audio@slash*";
833 * mimeTypes.insert( tr("Audio and Text"), types ); 835 * mimeTypes.insert( tr("Audio and Text"), types );
834 * mimeTypes.insert( tr("All"), "*@slash*); 836 * mimeTypes.insert( tr("All"), "*@slash*);
835 * 837 *
836 * now you could create your fileselector 838 * now you could create your fileselector
837 * </pre> 839 * </pre>
838 * 840 *
839 * 841 *
840 * @param parent the parent of this widget 842 * @param parent the parent of this widget
841 * @param mode The mode from the enum Mode (Open,Save,FILESELECTOR) 843 * @param mode The mode from the enum Mode (Open,Save,FILESELECTOR)
842 * @param sel The selector to be used 844 * @param sel The selector to be used
843 * @param dirName The name of the dir to start int 845 * @param dirName The name of the dir to start int
844 * @param fileName The fileName placed in the fileselector lineedit 846 * @param fileName The fileName placed in the fileselector lineedit
845 * @param mimetypes The MimeType map of used mimetypes 847 * @param mimetypes The MimeType map of used mimetypes
846 * @param showNew Show a New Button. Most likely to be used in the FileSelector view. 848 * @param showNew Show a New Button. Most likely to be used in the FileSelector view.
847 * @param showClose Show a Close Button. Most likely to be used in FileSelector view. 849 * @param showClose Show a Close Button. Most likely to be used in FileSelector view.
848 * 850 *
849 */ 851 */
850OFileSelector::OFileSelector( QWidget* parent, int mode, int sel, 852OFileSelector::OFileSelector( QWidget* parent, int mode, int sel,
851 const QString& dirName, const QString& fileName, 853 const QString& dirName, const QString& fileName,
852 const MimeTypes& mimetypes, 854 const MimeTypes& mimetypes,
853 bool showNew, bool showClose) 855 bool showNew, bool showClose)
854 :QWidget( parent, "OFileSelector" ) 856 :QWidget( parent, "OFileSelector" )
855{ 857{
856 m_current = 0; 858 m_current = 0;
857 m_shNew = showNew; 859 m_shNew = showNew;
858 m_shClose = showClose; 860 m_shClose = showClose;
859 m_mimeType = mimetypes; 861 m_mimeType = mimetypes;
860 m_startDir = dirName; 862 m_startDir = dirName;
861 863
862 m_mode = mode; 864 m_mode = mode;
863 m_selector = sel; 865 m_selector = sel;
864 866
865 initUI(); 867 initUI();
866 m_lneEdit->setText( fileName ); 868 m_lneEdit->setText( fileName );
867 initMime(); 869 initMime();
868 initViews(); 870 initViews();
869 871
870 QString str; 872 QString str;
871 switch ( m_selector ) 873 switch ( m_selector )
872 { 874 {
873 default: 875 default:
874 case Normal: 876 case Normal:
875 str = QObject::tr("Documents"); 877 str = QObject::tr("Documents");
876 m_cmbView->setCurrentItem( 0 ); 878 m_cmbView->setCurrentItem( 0 );
877 break; 879 break;
878 case Extended: 880 case Extended:
879 str = QObject::tr("Files"); 881 str = QObject::tr("Files");
880 m_cmbView->setCurrentItem( 1 ); 882 m_cmbView->setCurrentItem( 1 );
881 break; 883 break;
882 case ExtendedAll: 884 case ExtendedAll:
883 str = QObject::tr("All Files"); 885 str = QObject::tr("All Files");
884 m_cmbView->setCurrentItem( 2 ); 886 m_cmbView->setCurrentItem( 2 );
885 break; 887 break;
886 } 888 }
887 slotViewChange( str ); 889 slotViewChange( str );
888 890
889} 891}
890 892
891 893
892/** 894/**
893 * This a convience c'tor to just substitute the use of FileSelector 895 * This a convience c'tor to just substitute the use of FileSelector
894 */ 896 */
895OFileSelector::OFileSelector( const QString& mimeFilter, QWidget* parent, const char* name, 897OFileSelector::OFileSelector( const QString& mimeFilter, QWidget* parent, const char* name,
896 bool showNew, bool showClose ) 898 bool showNew, bool showClose )
897 : QWidget( parent, name ) 899 : QWidget( parent, name )
898{ 900{
899 m_current = 0; 901 m_current = 0;
900 m_shNew = showNew; 902 m_shNew = showNew;
901 m_shClose = showClose; 903 m_shClose = showClose;
902 m_startDir = QPEApplication::documentDir(); 904 m_startDir = QPEApplication::documentDir();
903 905
904 if (!mimeFilter.isEmpty() ) 906 if (!mimeFilter.isEmpty() )
905 m_mimeType.insert(mimeFilter, QStringList::split(";", mimeFilter ) ); 907 m_mimeType.insert(mimeFilter, QStringList::split(";", mimeFilter ) );
906 908
907 m_mode = OFileSelector::FileSelector; 909 m_mode = OFileSelector::FileSelector;
908 m_selector = OFileSelector::Normal; 910 m_selector = OFileSelector::Normal;
909 911
910 initUI(); 912 initUI();
911 initMime(); 913 initMime();
912 initViews(); 914 initViews();
913 m_cmbView->setCurrentItem( 0 ); 915 m_cmbView->setCurrentItem( 0 );
914 slotViewChange( QObject::tr("Documents") ); 916 slotViewChange( QObject::tr("Documents") );
915} 917}
916 918
917/* 919/*
918 * INIT UI will set up the basic GUI 920 * INIT UI will set up the basic GUI
919 * Layout: Simple VBoxLayout 921 * Layout: Simple VBoxLayout
920 * On top a WidgetStack containing the Views... 922 * On top a WidgetStack containing the Views...
921 * - List View 923 * - List View
922 * - Document View 924 * - Document View
923 * Below we will have a Label + LineEdit 925 * Below we will have a Label + LineEdit
924 * Below we will have two ComoBoxes one for choosing the view one for 926 * Below we will have two ComoBoxes one for choosing the view one for
925 * choosing the mimetype 927 * choosing the mimetype
926 */ 928 */
927void OFileSelector::initUI() 929void OFileSelector::initUI()
928{ 930{
929 QVBoxLayout* lay = new QVBoxLayout( this ); 931 QVBoxLayout* lay = new QVBoxLayout( this );
930 932
931 m_stack = new QWidgetStack( this ); 933 m_stack = new QWidgetStack( this );
932 lay->addWidget( m_stack, 1000 ); 934 lay->addWidget( m_stack, 1000 );
933 935
934 m_nameBox = new QHBox( this ); 936 m_nameBox = new QHBox( this );
935 (void)new QLabel( tr("Name:"), m_nameBox ); 937 (void)new QLabel( tr("Name:"), m_nameBox );
936 m_lneEdit = new QLineEdit( m_nameBox ); 938 m_lneEdit = new QLineEdit( m_nameBox );
937 m_lneEdit ->installEventFilter(this); 939 m_lneEdit ->installEventFilter(this);
938 lay->addWidget( m_nameBox ); 940 lay->addWidget( m_nameBox );
939 941
940 m_cmbBox = new QHBox( this ); 942 m_cmbBox = new QHBox( this );
941 m_cmbView = new QComboBox( m_cmbBox ); 943 m_cmbView = new QComboBox( m_cmbBox );
942 m_cmbMime = new QComboBox( m_cmbBox ); 944 m_cmbMime = new QComboBox( m_cmbBox );
943 lay->addWidget( m_cmbBox ); 945 lay->addWidget( m_cmbBox );
944} 946}
945 947
946/* 948/*
947 * This will make sure that the return key in the name edit causes dialogs to close 949 * This will make sure that the return key in the name edit causes dialogs to close
948 */ 950 */
949 951
950bool OFileSelector::eventFilter (QObject *o, QEvent *e) 952bool OFileSelector::eventFilter (QObject *, QEvent *e)
951{ 953{
952 if ( e->type() == QEvent::KeyPress ) 954 if ( e->type() == QEvent::KeyPress )
953 { 955 {
954 QKeyEvent *k = (QKeyEvent *)e; 956 QKeyEvent *k = (QKeyEvent *)e;
955 if ( (k->key()==Key_Enter) || (k->key()==Key_Return)) 957 if ( (k->key()==Key_Enter) || (k->key()==Key_Return))
956 { 958 {
957 emit ok(); 959 emit ok();
958 return true; 960 return true;
959 } 961 }
960 } 962 }
961 return false; 963 return false;
962} 964}
963 965
964/* 966/*
965 * This will insert the MimeTypes into the Combo Box 967 * This will insert the MimeTypes into the Combo Box
966 * And also connect the changed signal 968 * And also connect the changed signal
967 * 969 *
968 * AutoMimeTyping is disabled for now. It used to reparse a dir and then set available mimetypes 970 * AutoMimeTyping is disabled for now. It used to reparse a dir and then set available mimetypes
969 */ 971 */
970void OFileSelector::initMime() 972void OFileSelector::initMime()
971{ 973{
972 MimeTypes::Iterator it; 974 MimeTypes::Iterator it;
973 for ( it = m_mimeType.begin(); it != m_mimeType.end(); ++it ) 975 for ( it = m_mimeType.begin(); it != m_mimeType.end(); ++it )
974 { 976 {
975 m_cmbMime->insertItem( it.key() ); 977 m_cmbMime->insertItem( it.key() );
976 } 978 }
977 m_cmbMime->setCurrentItem( 0 ); 979 m_cmbMime->setCurrentItem( 0 );
978 980
979 connect( m_cmbMime, SIGNAL(activated(int) ), 981 connect( m_cmbMime, SIGNAL(activated(int) ),
980 this, SLOT(slotMimeTypeChanged() ) ); 982 this, SLOT(slotMimeTypeChanged() ) );
981 983
982} 984}
983 985
984void OFileSelector::initViews() 986void OFileSelector::initViews()
985{ 987{
986 m_cmbView->insertItem( QObject::tr("Documents") ); 988 m_cmbView->insertItem( QObject::tr("Documents") );
987 m_cmbView->insertItem( QObject::tr("Files") ); 989 m_cmbView->insertItem( QObject::tr("Files") );
988 m_cmbView->insertItem( QObject::tr("All Files") ); 990 m_cmbView->insertItem( QObject::tr("All Files") );
989 connect(m_cmbView, SIGNAL(activated(const QString&) ), 991 connect(m_cmbView, SIGNAL(activated(const QString&) ),
990 this, SLOT(slotViewChange(const QString&) ) ); 992 this, SLOT(slotViewChange(const QString&) ) );
991 993
992 994
993 m_views.insert( QObject::tr("Documents"), new ODocumentFileView(this) ); 995 m_views.insert( QObject::tr("Documents"), new ODocumentFileView(this) );
994 996
995 /* see above why add both */ 997 /* see above why add both */
996 OFileViewInterface* in = new OFileViewFileSystem( this ); 998 OFileViewInterface* in = new OFileViewFileSystem( this );
997 m_views.insert( QObject::tr("Files"), in ); 999 m_views.insert( QObject::tr("Files"), in );
998 m_views.insert( QObject::tr("All Files"), in ); 1000 m_views.insert( QObject::tr("All Files"), in );
999} 1001}
1000 1002
1003void OFileSelector::registerView( const Internal::OFileViewInterface* iface ) {
1004 m_viewsPtr.append( iface );
1005}
1006
1007
1001/** 1008/**
1002 * d'tor 1009 * d'tor
1003 */ 1010 */
1004OFileSelector::~OFileSelector() 1011OFileSelector::~OFileSelector()
1005{ 1012{
1013 m_viewsPtr.setAutoDelete( true );
1014 m_viewsPtr.clear();
1006} 1015}
1007 1016
1008 1017
1009 1018
1010/** 1019/**
1011 * Convience function for the fileselector 1020 * Convience function for the fileselector
1012 * make sure to delete the DocLnk 1021 * make sure to delete the DocLnk
1013 * 1022 *
1014 * @see DocLnk 1023 * @see DocLnk
1015 * @todo remove in ODP 1024 * @todo remove in ODP
1016 */ 1025 */
1017const DocLnk* OFileSelector::selected() 1026const DocLnk* OFileSelector::selected()
1018{ 1027{
1019 DocLnk* lnk = new DocLnk( currentView()->selectedDocument() ); 1028 DocLnk* lnk = new DocLnk( currentView()->selectedDocument() );
1020 return lnk; 1029 return lnk;
1021} 1030}
1022 1031
1023/** 1032/**
1024 * 1033 *
1025 * @return the name of the selected file 1034 * @return the name of the selected file
1026 */ 1035 */
1027QString OFileSelector::selectedName()const 1036QString OFileSelector::selectedName()const
1028{ 1037{
1029 return currentView()->selectedName(); 1038 return currentView()->selectedName();
1030} 1039}
1031 1040
1032 1041
1033/** 1042/**
1034 * @return the selected path 1043 * @return the selected path
1035 */ 1044 */
1036QString OFileSelector::selectedPath()const 1045QString OFileSelector::selectedPath()const
1037{ 1046{
1038 return currentView()->selectedPath(); 1047 return currentView()->selectedPath();
1039} 1048}
1040 1049
1041/** 1050/**
1042 * @return the directory name 1051 * @return the directory name
1043 */ 1052 */
1044QString OFileSelector::directory()const 1053QString OFileSelector::directory()const
1045{ 1054{
1046 return currentView()->directory(); 1055 return currentView()->directory();
1047} 1056}
1048 1057
1049/** 1058/**
1050 * @return a DocLnk for the selected document 1059 * @return a DocLnk for the selected document
1051 */ 1060 */
1052DocLnk OFileSelector::selectedDocument()const 1061DocLnk OFileSelector::selectedDocument()const
1053{ 1062{
1054 return currentView()->selectedDocument(); 1063 return currentView()->selectedDocument();
1055} 1064}
1056 1065
1057/** 1066/**
1058 * @return the number of items for the current view 1067 * @return the number of items for the current view
1059 */ 1068 */
1060int OFileSelector::fileCount()const 1069int OFileSelector::fileCount()const
1061{ 1070{
1062 return currentView()->fileCount(); 1071 return currentView()->fileCount();
1063} 1072}
1064 1073
1065/** 1074/**
1066 * @return reparse the file content 1075 * @return reparse the file content
1067 */ 1076 */
1068void OFileSelector::reread() 1077void OFileSelector::reread()
1069{ 1078{
1070 return currentView()->reread(); 1079 return currentView()->reread();
1071} 1080}
1072 1081
1073OFileViewInterface* OFileSelector::currentView()const 1082OFileViewInterface* OFileSelector::currentView()const
1074{ 1083{
1075 return m_current; 1084 return m_current;
1076} 1085}
1077 1086
1078bool OFileSelector::showNew()const 1087bool OFileSelector::showNew()const
1079{ 1088{
1080 return m_shNew; 1089 return m_shNew;
1081} 1090}
1082 1091
1083bool OFileSelector::showClose()const 1092bool OFileSelector::showClose()const
1084{ 1093{
1085 return m_shClose; 1094 return m_shClose;
1086} 1095}
1087 1096
1088MimeTypes OFileSelector::mimeTypes()const 1097MimeTypes OFileSelector::mimeTypes()const
1089{ 1098{
1090 return m_mimeType; 1099 return m_mimeType;
1091} 1100}
1092 1101
1093/** 1102/**
1094 * @return the Mode of the OFileSelector 1103 * @return the Mode of the OFileSelector
1095 */ 1104 */
1096int OFileSelector::mode()const 1105int OFileSelector::mode()const
1097{ 1106{
1098 return m_mode; 1107 return m_mode;
1099} 1108}
1100 1109
1101 1110
1102/** 1111/**
1103 * @return the Selector of the OFileSelector 1112 * @return the Selector of the OFileSelector
1104 */ 1113 */
1105int OFileSelector::selector()const 1114int OFileSelector::selector()const
1106{ 1115{
1107 return m_selector; 1116 return m_selector;
1108} 1117}
1109 1118
1110QStringList OFileSelector::currentMimeType()const 1119QStringList OFileSelector::currentMimeType()const
1111{ 1120{
1112 return m_mimeType[m_cmbMime->currentText()]; 1121 return m_mimeType[m_cmbMime->currentText()];
1113} 1122}
1114 1123
1115void OFileSelector::slotMimeTypeChanged() 1124void OFileSelector::slotMimeTypeChanged()
1116{ 1125{
1117 reread(); 1126 reread();
1118} 1127}
1119 1128
1120void OFileSelector::slotDocLnkBridge( const DocLnk& lnk) 1129void OFileSelector::slotDocLnkBridge( const DocLnk& lnk)
1121{ 1130{
1122 m_lneEdit->setText( lnk.name() ); 1131 m_lneEdit->setText( lnk.name() );
1123 emit fileSelected( lnk ); 1132 emit fileSelected( lnk );
1124 emit fileSelected( lnk.name() ); 1133 emit fileSelected( lnk.name() );
1125} 1134}
1126 1135
1127void OFileSelector::slotFileBridge( const QString& str) 1136void OFileSelector::slotFileBridge( const QString& str)
1128{ 1137{
1129 DocLnk lnk( str ); 1138 DocLnk lnk( str );
1130 emit fileSelected( lnk ); 1139 emit fileSelected( lnk );
1131} 1140}
1132 1141
1133void OFileSelector::slotViewChange( const QString& view ) 1142void OFileSelector::slotViewChange( const QString& view )
diff --git a/libopie2/opieui/fileselector/ofileselector.h b/libopie2/opieui/fileselector/ofileselector.h
index 8bcd9ee..de2b98a 100644
--- a/libopie2/opieui/fileselector/ofileselector.h
+++ b/libopie2/opieui/fileselector/ofileselector.h
@@ -1,222 +1,232 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (C) 2002,2003 Holger Freyther <zecke@handhelds.org> 3             .=l. Copyright (C) 2002,2003 Holger Freyther <zecke@handhelds.org>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This library is free software; you can 5 _;:,     .>    :=|. This library is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 7:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This library is distributed in the hope that 12    .i_,=:_.      -<s. This library is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
17..}^=.=       =       ; Library General Public License for more 17..}^=.=       =       ; Library General Public License for more
18++=   -.     .`     .: details. 18++=   -.     .`     .: details.
19 :     =  ...= . :.=- 19 :     =  ...= . :.=-
20 -.   .:....=;==+<; You should have received a copy of the GNU 20 -.   .:....=;==+<; You should have received a copy of the GNU
21  -_. . .   )=.  = Library General Public License along with 21  -_. . .   )=.  = Library General Public License along with
22    --        :-=` this library; see the file COPYING.LIB. 22    --        :-=` this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation, 23 If not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, 24 Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29/* 29/*
30 This is based on code and ideas of 30 This is based on code and ideas of
31 L. J. Potter ljp@llornkcor.com 31 L. J. Potter ljp@llornkcor.com
32 Thanks a lot 32 Thanks a lot
33*/ 33*/
34 34
35#ifndef OFILESELECTOR_H 35#ifndef OFILESELECTOR_H
36#define OFILESELECTOR_H 36#define OFILESELECTOR_H
37 37
38/* OPIE */ 38/* OPIE */
39#include <qpe/applnk.h> 39#include <qpe/applnk.h>
40 40
41/* QT */ 41/* QT */
42#include <qlist.h> 42#include <qlist.h>
43#include <qwidget.h> 43#include <qwidget.h>
44#include <qmap.h> 44#include <qmap.h>
45#include <qvaluelist.h> 45#include <qvaluelist.h>
46#include <qstringlist.h> 46#include <qstringlist.h>
47#include <qlist.h>
47 48
48class QLineEdit; 49class QLineEdit;
49class QComboBox; 50class QComboBox;
50class QWidgetStack; 51class QWidgetStack;
51class QHBox; 52class QHBox;
52 53
53typedef QMap<QString, QStringList> MimeTypes; 54typedef QMap<QString, QStringList> MimeTypes;
54 55
55namespace Opie { 56namespace Opie {
56namespace Ui { 57namespace Ui {
57 58
58namespace Internal { 59namespace Internal {
59class OFileViewInterface; 60class OFileViewInterface;
60class OFileViewFileListView; 61class OFileViewFileListView;
61} 62}
62 63
63 64
64/** 65/**
65 * @short a dropin replacement for the FileSelector 66 * @short a dropin replacement for the FileSelector
66 * 67 *
67 * This class is first used insert the OFileDialog. 68 * This class is first used insert the OFileDialog.
68 * It supports multiple view and mimetype filtering for now. 69 * It supports multiple view and mimetype filtering for now.
69 * 70 *
70 * @see OFileDialog 71 * @see OFileDialog
71 * @see FileSelector 72 * @see FileSelector
72 * @author zecke 73 * @author zecke
73 * @version 0.1 74 * @version 0.1
74 */ 75 */
75class OFileSelector : public QWidget 76class OFileSelector : public QWidget
76{ 77{
77 Q_OBJECT 78 Q_OBJECT
78 friend class Internal::OFileViewInterface; 79 friend class Internal::OFileViewInterface;
79 friend class Internal::OFileViewFileListView; 80 friend class Internal::OFileViewFileListView;
80 81
81public: 82public:
82 /** 83 /**
83 * The Mode of the Fileselector 84 * The Mode of the Fileselector
84 * Open = Open A File 85 * Open = Open A File
85 * Save = Save a File 86 * Save = Save a File
86 * FILESELECTOR = As A GUI in a screen to select a file 87 * FILESELECTOR = As A GUI in a screen to select a file
87 */ 88 */
88 enum Mode { Open=1, Save=2, FileSelector=4, OPEN=1, SAVE=2, FILESELECTOR=4 }; 89 enum Mode { Open=1, Save=2, FileSelector=4, OPEN=1, SAVE=2, FILESELECTOR=4 };
89 // enum OldMode { OPEN=1, SAVE=2, FILESELECTOR = 4 }; 90 // enum OldMode { OPEN=1, SAVE=2, FILESELECTOR = 4 };
90 /** 91 /**
91 * Normal = The old FileSelector 92 * Normal = The old FileSelector
92 * Extended = Dir View 93 * Extended = Dir View
93 * ExtendedAll = Dir View with all hidden files 94 * ExtendedAll = Dir View with all hidden files
94 * Default = What the vendor considers best 95 * Default = What the vendor considers best
95 */ 96 */
96 enum Selector { Normal = 0, Extended=1, ExtendedAll =2, Default=3, NORMAL=0,EXTENDED=1, EXTENDED_ALL =2, DEFAULT=3 }; 97 enum Selector { Normal = 0, Extended=1, ExtendedAll =2, Default=3, NORMAL=0,EXTENDED=1, EXTENDED_ALL =2, DEFAULT=3 };
97 // enum OldSelector { NORMAL = 0, EXTENDED =1, EXTENDED_ALL = 2}; 98 // enum OldSelector { NORMAL = 0, EXTENDED =1, EXTENDED_ALL = 2};
98 99
99 OFileSelector(QWidget* parent, int mode, int selector, 100 OFileSelector(QWidget* parent, int mode, int selector,
100 const QString& dirName, 101 const QString& dirName,
101 const QString& fileName, 102 const QString& fileName,
102 const MimeTypes& mimetypes = MimeTypes(), 103 const MimeTypes& mimetypes = MimeTypes(),
103 bool newVisible = FALSE, bool closeVisible = FALSE ); 104 bool newVisible = FALSE, bool closeVisible = FALSE );
104 105
105 OFileSelector(const QString& mimeFilter, QWidget* parent, 106 OFileSelector(const QString& mimeFilter, QWidget* parent,
106 const char* name = 0, bool newVisible = TRUE, bool closeVisible = FALSE ); 107 const char* name = 0, bool newVisible = TRUE, bool closeVisible = FALSE );
107 ~OFileSelector(); 108 ~OFileSelector();
108 109
109 const DocLnk* selected(); 110 const DocLnk* selected();
110 111
111 QString selectedName()const; 112 QString selectedName()const;
112 QString selectedPath()const; 113 QString selectedPath()const;
113 QString directory()const; 114 QString directory()const;
114 115
115 DocLnk selectedDocument()const; 116 DocLnk selectedDocument()const;
116 117
117 int fileCount()const; 118 int fileCount()const;
118 void reread(); 119 void reread();
119 120
120 int mode()const; 121 int mode()const;
121 int selector()const; 122 int selector()const;
122 123
123 /** 124 /**
124 * Set the Icon visible 125 * Set the Icon visible
125 * @param b Show or Hide the New Button 126 * @param b Show or Hide the New Button
126 */ 127 */
127 void setNewVisible( bool b ); 128 void setNewVisible( bool b );
128 129
129 /** 130 /**
130 * Set the Icon visible 131 * Set the Icon visible
131 */ 132 */
132 void setCloseVisible( bool b ); 133 void setCloseVisible( bool b );
133 134
134 /** 135 /**
135 * Set the Name Line visible 136 * Set the Name Line visible
136 */ 137 */
137 void setNameVisible( bool b ); 138 void setNameVisible( bool b );
138 139
139signals: 140signals:
140 /** 141 /**
141 * dirSelected is emitted whenever changed into a different dir 142 * dirSelected is emitted whenever changed into a different dir
142 */ 143 */
143 void dirSelected( const QString& ); 144 void dirSelected( const QString& );
144 145
145 /** 146 /**
146 * fileSelected is emitted when a file is selected 147 * fileSelected is emitted when a file is selected
147 * it uses a DocLnk as parameter 148 * it uses a DocLnk as parameter
148 */ 149 */
149 void fileSelected( const DocLnk& ); 150 void fileSelected( const DocLnk& );
150 151
151 /** 152 /**
152 * fileSelected is emitted when a file is selected 153 * fileSelected is emitted when a file is selected
153 * the complete path is a parameter 154 * the complete path is a parameter
154 */ 155 */
155 void fileSelected( const QString& ); 156 void fileSelected( const QString& );
156 157
157 /** 158 /**
158 * Create a new File with a DocLnk 159 * Create a new File with a DocLnk
159 */ 160 */
160 void newSelected( const DocLnk& ); 161 void newSelected( const DocLnk& );
161 162
162 void closeMe(); 163 void closeMe();
163 164
164 /** 165 /**
165 * Ok is emitted on a Qt::Key_Return or Q::Key_Enter 166 * Ok is emitted on a Qt::Key_Return or Q::Key_Enter
166 * in the line edit 167 * in the line edit
167 */ 168 */
168 void ok(); 169 void ok();
169 void cancel(); 170 void cancel();
170 171
171 /* used by the ViewInterface */ 172 /* used by the ViewInterface */
172private: 173private:
173 bool showNew()const; 174 bool showNew()const;
174 bool showClose()const; 175 bool showClose()const;
175 MimeTypes mimeTypes()const; 176 MimeTypes mimeTypes()const;
176 QStringList currentMimeType()const; 177 QStringList currentMimeType()const;
177 178
178private: 179private:
179 /* inits the Widgets */ 180 /* inits the Widgets */
180 void initUI(); 181 void initUI();
181 /* inits the MimeType ComboBox content + connects signals and slots */ 182 /* inits the MimeType ComboBox content + connects signals and slots */
182 void initMime(); 183 void initMime();
183 /* init the Views :) */ 184 /* init the Views :) */
184 void initViews(); 185 void initViews();
185 186
187
188 /*
189 * register a view for deletion.
190 * This happens on creation of a OFileViewInterface
191 */
192 void registerView( const Internal::OFileViewInterface* );
193
186private: 194private:
187 QLineEdit* m_lneEdit; // the LineEdit for the Name 195 QLineEdit* m_lneEdit; // the LineEdit for the Name
188 QComboBox *m_cmbView, *m_cmbMime; // two ComboBoxes to select the View and MimeType 196 QComboBox *m_cmbView, *m_cmbMime; // two ComboBoxes to select the View and MimeType
189 QWidgetStack* m_stack; // our widget stack which will contain the views 197 QWidgetStack* m_stack; // our widget stack which will contain the views
190 Internal::OFileViewInterface* currentView() const; // returns the currentView 198 Internal::OFileViewInterface* currentView() const; // returns the currentView
191 Internal::OFileViewInterface* m_current; // here is the view saved 199 Internal::OFileViewInterface* m_current; // here is the view saved
192 bool m_shNew : 1; // should we show New? 200 bool m_shNew : 1; // should we show New?
193 bool m_shClose : 1; // should we show Close? 201 bool m_shClose : 1; // should we show Close?
194 MimeTypes m_mimeType; // list of mimetypes 202 MimeTypes m_mimeType; // list of mimetypes
195 203
196 QMap<QString, Internal::OFileViewInterface*> m_views; // QString translated view name + ViewInterface Ptr 204 QMap<QString, Internal::OFileViewInterface*> m_views; // QString translated view name + ViewInterface Ptr
205 /* views register themselves automatically */
206 QList<Internal::OFileViewInterface> m_viewsPtr;
197 QHBox* m_nameBox; // the LineEdit + Label is hold here 207 QHBox* m_nameBox; // the LineEdit + Label is hold here
198 QHBox* m_cmbBox; // this holds the two combo boxes 208 QHBox* m_cmbBox; // this holds the two combo boxes
199 209
200 QString m_startDir; 210 QString m_startDir;
201 int m_mode; 211 int m_mode;
202 int m_selector; 212 int m_selector;
203 213
204 struct Data; // used for future versions 214 struct Data; // used for future versions
205 Data *d; 215 Data *d;
206 216
207private slots: 217private slots:
208 void slotMimeTypeChanged(); 218 void slotMimeTypeChanged();
209 219
210 /* will set the text of the lineedit and emit a fileChanged signal */ 220 /* will set the text of the lineedit and emit a fileChanged signal */
211 void slotDocLnkBridge( const DocLnk& ); 221 void slotDocLnkBridge( const DocLnk& );
212 void slotFileBridge( const QString& ); 222 void slotFileBridge( const QString& );
213 void slotViewChange( const QString& ); 223 void slotViewChange( const QString& );
214 224
215 bool eventFilter (QObject *o, QEvent *e); 225 bool eventFilter (QObject *o, QEvent *e);
216 226
217}; 227};
218 228
219} 229}
220} 230}
221 231
222#endif 232#endif