summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector/ofiledialog.cpp116
-rw-r--r--libopie/ofileselector/ofiledialog.h77
-rw-r--r--libopie/ofileselector/ofilelistview.cpp118
-rw-r--r--libopie/ofileselector/ofilelistview.h45
-rw-r--r--libopie/ofileselector/ofileselector.cpp1246
-rw-r--r--libopie/ofileselector/ofileselector.h474
-rw-r--r--libopie/ofileselector/ofileselectoritem.cpp53
-rw-r--r--libopie/ofileselector/ofileselectoritem.h30
-rw-r--r--libopie/ofileselector/ofileview.cpp28
-rw-r--r--libopie/ofileselector/ofileview.h109
10 files changed, 2296 insertions, 0 deletions
diff --git a/libopie/ofileselector/ofiledialog.cpp b/libopie/ofileselector/ofiledialog.cpp
new file mode 100644
index 0000000..4783004
--- a/dev/null
+++ b/libopie/ofileselector/ofiledialog.cpp
@@ -0,0 +1,116 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 <>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include <qpe/applnk.h>
+#include <qstring.h>
+#include <qapplication.h>
+#include <qlayout.h>
+
+#include "ofiledialog.h"
+
+OFileDialog::OFileDialog(const QString &caption,
+ QWidget *wid, int mode, int selector,
+ const QString &dirName,
+ const QString &fileName,
+ const QMap<QString,QStringList>& mimetypes )
+ : QDialog( wid, "OFileDialog", true )
+{
+ // QVBoxLayout *lay = new QVBoxLayout(this);
+ //showMaximized();
+ QVBoxLayout *lay = new QVBoxLayout(this );
+ file = new OFileSelector(this , mode, selector,
+ dirName, fileName,
+ mimetypes );
+ lay->addWidget( file );
+
+ //lay->addWidget( file );
+ //showFullScreen();
+ setCaption( caption.isEmpty() ? tr("FileDialog") : caption );
+ connect(file, SIGNAL(fileSelected(const QString&) ),
+ this, SLOT(slotFileSelected(const QString&) ) );
+
+ connect(file, SIGNAL(dirSelected(const QString &) ),
+ this, SLOT(slotDirSelected(const QString &) ) );
+
+
+ file->setYesCancelVisible( false ); // relayout
+}
+QString OFileDialog::mimetype()const
+{
+ return QString::null;
+}
+QString OFileDialog::fileName()const
+{
+ return file->selectedName();
+}
+DocLnk OFileDialog::selectedDocument()const
+{
+ return file->selectedDocument();
+}
+QString OFileDialog::getOpenFileName(int selector,
+ const QString &startDir,
+ const QString &file,
+ const MimeTypes &mimes,
+ QWidget *wid,
+ const QString &caption )
+{
+ QString ret;
+ OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption,
+ wid, OFileSelector::OPEN, selector, startDir, file, mimes);
+ dlg.showMaximized();
+ if( dlg.exec() )
+ ret = dlg.fileName();
+
+ return ret;
+}
+QString OFileDialog::getSaveFileName(int selector,
+ const QString &startDir,
+ const QString &file,
+ const MimeTypes &mimes,
+ QWidget *wid,
+ const QString &caption )
+{
+ QString ret;
+ OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption,
+ wid, OFileSelector::SAVE, selector, startDir, file, mimes);
+ dlg.showMaximized();
+ if( dlg.exec() )
+ ret = dlg.fileName();
+
+ return ret;
+}
+
+void OFileDialog::slotFileSelected(const QString & )
+{
+ accept();
+}
+void OFileDialog::slotDirSelected(const QString & )
+{
+ // if mode
+ //accept();
+}
diff --git a/libopie/ofileselector/ofiledialog.h b/libopie/ofileselector/ofiledialog.h
new file mode 100644
index 0000000..e14253c
--- a/dev/null
+++ b/libopie/ofileselector/ofiledialog.h
@@ -0,0 +1,77 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 zecke <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+
+#ifndef OpieFileDialog_h
+#define OpieFileDialog_h
+
+#include <qdialog.h>
+
+#include <opie/ofileselector.h>
+
+class OFileDialog : public QDialog {
+ Q_OBJECT
+ public:
+ OFileDialog(const QString &caption,
+ QWidget *, int mode, int selector,
+ const QString &dirName,
+ const QString &fileName = QString::null,
+ const MimeTypes &mimetypes = MimeTypes() );
+ QString mimetype() const;
+ QString fileName() const;
+ DocLnk selectedDocument()const;
+
+ // static methods
+ static QString getOpenFileName(int selector,
+ const QString& startDir = QString::null,
+ const QString &fileName = QString::null,
+ const MimeTypes& mime = MimeTypes(),
+ QWidget *wid = 0,
+ const QString &caption = QString::null );
+
+ static QString getSaveFileName(int selector,
+ const QString& startDir = QString::null,
+ const QString& fileName = QString::null,
+ const MimeTypes& mimefilter = MimeTypes(),
+ QWidget *wid = 0,
+ const QString &caption = QString::null );
+
+ //let's OFileSelector catch up first
+ //static QString getExistingDirectory(const QString& startDir = QString::null,
+ // QWidget *parent = 0,
+ // const QString& caption = QString::null );
+ private:
+ class OFileDialogPrivate;
+ OFileDialogPrivate *d;
+ OFileSelector *file;
+
+ private slots:
+ void slotFileSelected( const QString & );
+ void slotDirSelected(const QString & );
+};
+#endif
diff --git a/libopie/ofileselector/ofilelistview.cpp b/libopie/ofileselector/ofilelistview.cpp
new file mode 100644
index 0000000..0c7d45b
--- a/dev/null
+++ b/libopie/ofileselector/ofilelistview.cpp
@@ -0,0 +1,118 @@
+
+#include "ofileselector.h"
+#include "ofileselectoritem.h"
+#include "ofilelistview.h"
+
+
+OFileListView::OFileListView( QWidget* parent, OFileSelector* sel)
+ : QListView( parent ), OFileView( sel )
+{
+
+}
+OFileListView::~OFileListView() {
+
+}
+void OFileListView::clear() {
+ QListView::clear();
+}
+void OFileListView::addFile( const QString& mime,
+ QFileInfo* info,
+ bool isSymlink ) {
+ MimeType type( info->absFilePath() );
+ QPixmap pix = type.pixmap();
+ QString dir;
+ QString name;
+ bool locked = false;
+
+ if( pix.isNull() )
+ pix = Resource::loadPixmap( "UnknownDocument-14");
+
+ dir = info->dirPath( true );
+
+ if( isSymlink )
+ name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink();
+ else {
+ name = info->fileName();
+ if( ( selector()->mode() == Open && !info->isReadable() )||
+ ( selector()->mode() == Save && !info->isWritable() ) ){
+
+ locked = true; pix = Resource::loadPixmap("locked");
+ }
+ }
+ new OFileSelectorItem( this, pix, name,
+ info->lastModified().toString(),
+ QString::number( info->size() ),
+ dir, locked );
+}
+void OFileListView::addFile( const QString& /*mime*/, const QString& /*dir*/,
+ const QString& /*file*/, bool /*isSyml*/ ) {
+
+}
+void OFileListView::addDir( const QString& mime,
+ QFileInfo* info, bool isSym ) {
+
+ bool locked = false;
+ QString name;
+ QPixmap pix;
+
+ if( ( selector()->mode() == Open && !info->isReadable() ) ||
+ ( selector()->mode() == Save && !info->isWritable() ) ){
+
+ locked = true;
+
+ if( symlink )
+ pix = selector()->pixmap("symlinkedlocked");
+ else
+ pix = Resource::loadPixmap("lockedfolder");
+
+ }else { // readable
+ pix = symlink ? selector()->pixmap("dirsymlink") : Resource::loadPixmap("folder") ;
+ }
+
+ name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ;
+
+ new OFileSelectorItem( this, pix, name,
+ info->lastModified().toString(),
+ QString::number( info->size() ),
+ info->dirPath( true ), locked,
+ true );
+
+}
+void OFileListView::addDir( const QString& mime, const QString& dir,
+ const QString& file, bool ) {
+
+}
+void OFileListView::addSymlink( const QString& mime,
+ QFileInfo* info,
+ bool isSym ) {
+
+}
+void OFileListView::addSymlink( const QString& mime, const QString& path,
+ const QString& file, bool isSym ) {
+
+}
+void OFileListView::cd( const QString& ) {
+
+}
+QWidget* OFileListView::widget() {
+ return this;
+}
+QString OFileListView::selectedName()const{
+ QListViewItem *item = currentItem();
+ if (!item )
+ return QString::null;
+
+ return item->text( 1 );
+}
+QStringList OFileListView::selectedNames()const {
+
+}
+QString OFileListView::selectedPath()const {
+
+}
+QString OFileListView::selectedPaths()const {
+
+}
+int OFileListView::fileCount() {
+ return childCount();
+}
diff --git a/libopie/ofileselector/ofilelistview.h b/libopie/ofileselector/ofilelistview.h
new file mode 100644
index 0000000..c7e9223
--- a/dev/null
+++ b/libopie/ofileselector/ofilelistview.h
@@ -0,0 +1,45 @@
+#ifndef OPIE_FILE_LIST_VIEW_H
+#define OPIE_FILE_LIST_VIEW_H
+
+#include <qlistview.h>
+
+#include "ofileview.h"
+
+class OFileListView : public QListView, public OFileView {
+ Q_OBJECT
+public:
+ OFileListView( QWidget* parent, OFileSelector* );
+ ~OFileListView();
+
+ void clear();
+ void addFile( const QString& mine,
+ QFileInfo* info,
+ bool isSymlink = FALSE );
+
+ void addFile( const QString& mime,
+ const QString& dir,
+ const QString& file,
+ bool = false );
+
+ void addDir( const QString& mime,
+ QFileInfo* info, bool = FALSE );
+ void addDir( const QString& mime, const QString& dir,
+ const QString& file, bool = FALSE );
+
+ void addSymlink( const QString& mime,
+ QFileInfo* info, bool = FALSE );
+ void addSymlink( const QString& mine, const QString& path,
+ const QString& file, bool isSymlink = FALSE );
+ void cd( const QString& path );
+ QWidget* widget();
+
+ QString selectedName()const ;
+ QStringList selectedNames()const;
+
+ QString selectedPath()const;
+ QStringList selectedPaths()const;
+ int fileCount();
+
+};
+
+#endif
diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp
new file mode 100644
index 0000000..f655606
--- a/dev/null
+++ b/libopie/ofileselector/ofileselector.cpp
@@ -0,0 +1,1246 @@
+
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qheader.h>
+#include <qlabel.h>
+#include <qabstractlayout.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qlistview.h>
+#include <qmessagebox.h>
+#include <qpainter.h>
+#include <qpushbutton.h>
+#include <qwidgetstack.h>
+#include <qpopupmenu.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtimer.h>
+
+#include <qpe/qpeapplication.h>
+#include <qpe/applnk.h>
+#include <qpe/global.h>
+#include <qpe/mimetype.h>
+#include <qpe/resource.h>
+#include <qpe/storage.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#include "ofileview.h"
+#include "ofileselector.h"
+
+
+QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0;
+
+namespace {
+ int indexByString( const QComboBox *box, const QString &str ){
+ int index= 0;
+ for(int i= 0; i < box->count(); i++ ){
+ if( str == box->text(i ) ){
+ index= i;
+ break;
+ }
+ }
+ return index;
+ }
+
+}
+
+OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
+ const QString &dirName,
+ const QString &fileName,
+ const QMap<QString,QStringList>& mimeTypes)
+ : QWidget( wid, "OFileSelector")
+{
+ m_mimetypes = mimeTypes;
+ if (mode == Save )
+ m_name = fileName;
+ initVars();
+ m_mode = mode;
+ m_selector = selector;
+ m_currentDir = dirName;
+ init();
+ //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
+}
+
+OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
+ const char *name, bool newVisible,
+ bool closeVisible )
+ : QWidget( parent, name )
+{
+ if (!mimeFilter.isEmpty() ) {
+ QStringList list = QStringList::split(";", mimeFilter );
+ m_mimetypes.insert(mimeFilter, list );
+ }
+ initVars();
+ m_currentDir = QPEApplication::documentDir();
+ m_mode = Fileselector;
+ m_selector = Normal;
+ m_shClose = closeVisible;
+ m_shNew = newVisible;
+ m_shLne = false;
+ m_shPerm = false;
+ m_shYesNo = false;
+ init();
+
+
+}
+
+OFileSelector::~OFileSelector()
+{
+
+
+}
+
+void OFileSelector::setNewVisible( bool visible )
+{
+ m_shNew = visible;
+ if( m_selector == Normal ){
+ delete m_select;
+ // we need to initialize but keep the selected mimetype
+ QString mime = currentMimeType();
+ m_select = new FileSelector( mime ,
+ m_stack, "fileselector",
+ m_shNew, m_shClose);
+
+ connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
+ this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
+ connect(m_select, SIGNAL(closeMe() ),
+ this, SIGNAL(closeMe() ) );
+ //connect to close me and other signals as well
+ m_stack->addWidget( m_select, Normal );
+ }else{
+ m_new->show();
+ }
+}
+void OFileSelector::setCloseVisible( bool visible )
+{
+ m_shClose = visible;
+ if( m_selector == Normal ){
+ setNewVisible( m_shNew ); // yeah baby
+ }else{
+ m_close->show();
+ }
+}
+void OFileSelector::reread()
+{
+ if( m_selector == Normal ){
+ setNewVisible( m_shNew ); // make it a initializeSelector
+ }else {
+ reparse();
+ }
+}
+
+const DocLnk *OFileSelector::selected()
+{
+ DocLnk *lnk = new DocLnk(selectedDocument() );
+ return lnk;
+}
+
+void OFileSelector::setYesCancelVisible( bool show )
+{
+ initializeYes(); // FIXME if YesCancel is not shown we will initialize it to hide it :(
+ m_shYesNo = show;
+ if( m_shYesNo )
+ m_boxOk->show();
+ else
+ m_boxOk->hide();
+
+}
+void OFileSelector::setToolbarVisible( bool show )
+{
+ m_shTool = show;
+ initializeListView(); // FIXME see above waste of memory
+ if(!m_shTool ){
+ m_location->hide();
+ m_up->hide();
+ m_homeButton->hide();
+ m_docButton->hide();
+ }else{
+ m_location->show();
+ m_up->show();
+ m_homeButton->show();
+ m_docButton->show();
+ }
+}
+void OFileSelector::setPermissionBarVisible( bool show )
+{
+ m_shPerm = show;
+ initializePerm();
+ if( m_shPerm )
+ m_checkPerm->show();
+ else
+ m_checkPerm->hide();
+}
+void OFileSelector::setLineEditVisible( bool show )
+{
+ if( show ){
+ initializeName();
+ m_boxName->show();
+ }else{
+ if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go
+ m_boxName->hide();
+ }
+ }
+ m_shLne = show;
+}
+
+void OFileSelector::setChooserVisible( bool show )
+{
+ m_shChooser = show;
+ initializeChooser();
+ if( m_shChooser ){
+ m_boxView->hide();
+ }else{
+ m_boxView->show();
+ }
+}
+
+QCheckBox* OFileSelector::permissionCheckbox()
+{
+ if( m_selector == Normal )
+ return 0l;
+ else
+ return m_checkPerm;
+}
+bool OFileSelector::setPermission()const
+{
+ return m_checkPerm == 0 ? false : m_checkPerm->isChecked();
+}
+void OFileSelector::setPermissionChecked( bool check )
+{
+ if( m_checkPerm )
+ m_checkPerm->setChecked( check );
+}
+
+void OFileSelector::setMode(int mode) // FIXME do direct raising
+{
+ m_mode = mode;
+ if( m_selector == Normal )
+ return;
+}
+void OFileSelector::setShowDirs(bool )
+{
+ m_dir = true;
+ reparse();
+}
+void OFileSelector::setCaseSensetive(bool caSe )
+{
+ m_case = caSe;
+ reparse();
+}
+void OFileSelector::setShowFiles(bool show )
+{
+ m_files = show;
+ reparse();
+}
+///
+bool OFileSelector::cd(const QString &path )
+{
+ m_currentDir = path;
+ reparse();
+ return true;
+}
+void OFileSelector::setSelector(int mode )
+{
+QString text;
+ switch( mode ){
+ case Normal:
+ text = tr("Documents");
+ break;
+ case Extended:
+ text = tr("Files");
+ break;
+ case ExtendedAll:
+ text = tr("All Files");
+ break;
+ }
+ slotViewCheck( text );
+}
+
+void OFileSelector::setPopupFactory(OPopupMenuFactory *popup )
+{
+/* m_custom = popup;
+ m_showPopup = true;
+*/
+}
+
+//void OFileSelector::updateL
+
+QString OFileSelector::selectedName() const
+{
+ QString name;
+ if( m_selector == Normal ){
+ DocLnk lnk = m_select->selectedDocument();
+ name = lnk.file();
+ }else if( m_selector == Extended || m_selector == ExtendedAll ){
+ if ( m_shLne ) {
+ name = m_currentDir + "/" +m_edit->text();
+ }else{
+ name = m_currentDir + "/" + currentView()->selectedName();
+ }
+ }
+ return name;
+}
+QStringList OFileSelector::selectedNames()const
+{
+ QStringList list;
+ if( m_selector == Normal ){
+ list << selectedName();
+ }else {
+ list << selectedName(); // FIXME implement multiple Selections
+ }
+ return list;
+}
+/** If mode is set to the Dir selection this will return the selected path.
+ *
+ *
+ */
+QString OFileSelector::selectedPath()const
+{
+ QString path;
+ if( m_selector == Normal ){
+ path = QPEApplication::documentDir();
+ }else if( m_selector == Extended || m_selector == ExtendedAll ){
+ ; //FIXME
+ }
+ return path;
+}
+QStringList OFileSelector::selectedPaths() const
+{
+ QStringList list;
+ list << selectedPath();
+ return list;
+}
+QString OFileSelector::directory()const
+{
+ if( m_selector == Normal )
+ return QPEApplication::documentDir();
+
+ return QDir(m_currentDir).absPath();
+}
+
+int OFileSelector::fileCount()
+{
+ int count;
+ switch( m_selector ){
+ case Normal:
+ count = m_select->fileCount();
+ break;
+ case Extended:
+ case ExtendedAll:
+ default:
+ count = currentView()->childCount();
+ break;
+ }
+ return count;
+}
+DocLnk OFileSelector::selectedDocument() const
+{
+ DocLnk lnk;
+ switch( m_selector ){
+ case Normal:{
+ lnk = m_select->selectedDocument();
+ break;
+ }
+ case Extended:
+ case ExtendedAll:
+ default:
+ lnk = DocLnk( selectedName() ); // new DocLnk
+ break;
+ }
+ return lnk;
+}
+QValueList<DocLnk> OFileSelector::selectedDocuments() const
+{
+ QValueList<DocLnk> docs;
+ docs.append( selectedDocument() );
+ return docs;
+}
+
+
+// slots internal
+
+void OFileSelector::slotOk()
+{
+ emit ok();
+}
+void OFileSelector::slotCancel()
+{
+ emit cancel();
+}
+void OFileSelector::slotViewCheck(const QString &sel)
+{
+ if( sel == tr("Documents" ) ){
+ if( m_select == 0 ){
+ // autMime? fix cause now we use All and not the current
+ // yes currentMime fixes that for us
+ QString mime = currentMimeType();
+ m_select = new FileSelector(mime,
+ m_stack, "fileselector",
+ m_shNew, m_shClose);
+ connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
+ this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
+ connect(m_select, SIGNAL(closeMe() ),
+ this, SIGNAL(closeMe() ) );
+ //connect to close me and other signals as well
+
+ m_stack->addWidget( m_select, Normal );
+ }
+ m_stack->raiseWidget( Normal );
+ m_selector = Normal;
+ }else if( sel == tr("Files") ){
+ m_selector = Extended;
+ initializeListView();
+ reparse();
+ m_stack->raiseWidget( Extended );
+ }else if( sel == tr("All Files") ){
+ m_selector = ExtendedAll;
+ initializeListView();
+ reparse();
+ m_stack->raiseWidget( Extended ); // same widget other QFileFilter
+ }
+}
+// not yet finished.....
+QString OFileSelector::currentMimeType() const{
+ QString mime;
+ QString currentText;
+ if (m_shChooser )
+ currentText = m_mimeCheck->currentText();
+
+ if (tr("All") == currentText ) return QString::null;
+ else if (currentText.isEmpty() ) {
+ ;
+ }else {
+ QMap<QString, QStringList>::ConstIterator it;
+ it = m_mimetypes.find( currentText );
+ if ( it == m_mimetypes.end() ) {
+ mime = it.data().join(";");
+ }else{
+ mime = currentText;
+ }
+ }
+ return mime;
+}
+void OFileSelector::slotMimeCheck(const QString &mime)
+{
+ if( m_selector == Normal ){
+ //if( m_autoMime ){
+ QString newMimeType;
+ if (mime != tr("All") ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.find(mime);
+ if ( it != m_mimetypes.end() ) {
+ newMimeType = it.data().join(";");
+ }else{
+ newMimeType = mime;
+ }
+ }
+ delete m_select;
+ m_select = new FileSelector( newMimeType,
+ m_stack, "fileselector",
+ m_shNew, m_shClose);
+
+ connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
+ this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
+ connect(m_select, SIGNAL(closeMe() ),
+ this, SIGNAL(closeMe() ) );
+ //connect to close me and other signals as well
+ m_stack->addWidget( m_select, Normal );
+ m_stack->raiseWidget( Normal );
+ updateMimes();
+ updateMimeCheck();
+ m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
+ //}
+ }else{ // others
+ qWarning("Mime %s", mime.latin1() );
+ if(m_shChooser ){
+ qWarning("Current Text %s", m_mimeCheck->currentText().latin1() );
+ //m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
+ }
+ reparse();
+ }
+
+}
+/*
+ * Ok if a non dir gets inserted into this combobox
+ * we need to change it
+ * QFileInfo and dirPath will give us the right Dir
+ */
+void OFileSelector::slotLocationActivated(const QString &file)
+{
+ qWarning("slotLocationActivated");
+ QString name = file.left( file.find("<-", 0, TRUE ) );
+ QFileInfo info( name );
+ if ( info.isFile() )
+ cd(info.dirPath( TRUE ) ); //absolute
+ else
+ cd(name );
+ reparse();
+}
+void OFileSelector::slotInsertLocationPath(const QString &currentPath, int count)
+{
+ QStringList pathList;
+ bool underDog = FALSE;
+ for(int i=0;i<count;i++) {
+ pathList << m_location->text(i);
+ if( m_location->text(i) == currentPath)
+ underDog = TRUE;
+ }
+ if( !underDog) {
+ m_location->clear();
+ if( currentPath.left(2)=="//")
+ pathList.append( currentPath.right(currentPath.length()-1) );
+ else
+ pathList.append( currentPath );
+ m_location->insertStringList( pathList,-1);
+ }
+}
+/*
+ * Do not crash anymore
+ * don't try to change dir to a file
+ */
+void OFileSelector::locationComboChanged()
+{
+ QFileInfo info( m_location->lineEdit()->text() );
+ qWarning("info %s %s", info.dirPath(true).latin1(), m_location->lineEdit()->text().latin1() );
+ if (info.isFile() )
+ cd(info.dirPath(TRUE) ); //absolute path
+ else
+ cd( m_location->lineEdit()->text() );
+
+ reparse();
+}
+void OFileSelector::init()
+{
+ m_lay = new QVBoxLayout( this );
+ m_lay->setSpacing(0 );
+
+ m_stack = new QWidgetStack( this );
+ if( m_selector == Normal ){
+ QString mime;
+ if (!m_autoMime) {
+ if (!m_mimetypes.isEmpty() ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.begin(); // cause we're in the init
+ mime = it.data().join(";");
+ }
+ }
+ m_select = new FileSelector(mime,
+ m_stack, "fileselector",
+ m_shNew, m_shClose);
+
+ connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
+ this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
+ connect(m_select, SIGNAL(closeMe() ),
+ this, SIGNAL( closeMe() ) );
+ //connect to close me and other signals as well
+
+ m_stack->addWidget( m_select, Normal );
+ m_stack->raiseWidget( Normal );
+ }else{ // we're in init so it will be EXTENDED or EXTENDED_ALL
+ // and initializeListview will take care of those
+ // toolbar get's generade in initializeListView
+ initializeListView( ); // will raise the widget as well
+ m_stack->raiseWidget( Extended );
+ }
+ m_lay->addWidget( m_stack, 100 ); // add to the layout 10 = stretch
+
+ if( m_shLne ) // the LineEdit with the current FileName
+ initializeName();
+
+ if( m_shPerm ) // the Permission QCheckBox
+ initializePerm();
+
+ if( m_shChooser ) // the Chooser for the view and Mimetypes
+ initializeChooser();
+
+ if( m_shYesNo ) // the Yes No button row
+ initializeYes( );
+
+ if (m_selector != Normal )
+ reparse();
+}
+void OFileSelector::updateMimes()
+{
+ if( m_autoMime ){
+ m_mimetypes.clear();
+ m_mimetypes.insert( tr("All"), QString::null );
+ if( m_selector == Normal ){
+ DocLnkSet set;
+ Global::findDocuments(&set, QString::null );
+ QListIterator<DocLnk> dit( set.children() );
+ for( ; dit.current(); ++dit ){
+ if( !m_mimetypes.contains( (*dit)->type() ) )
+ m_mimetypes.insert( (*dit)->type(), (*dit)->type() );
+ }
+ }// else done in reparse
+ }
+}
+void OFileSelector::initVars()
+{
+ if( m_mimetypes.isEmpty() )
+ m_autoMime = true;
+ else
+ m_autoMime = false;
+
+ m_shClose = false;
+ m_shNew = false;
+ m_shTool = true;
+ m_shPerm = false;
+ m_shLne = true;
+ m_shChooser = true;
+ m_shYesNo = true;
+ m_case = false;
+ m_dir = true;
+ m_files = true;
+ m_showPopup = false;
+
+ if(m_pixmaps == 0 ) // init the pixmaps
+ initPics();
+
+ // pointers
+ m_location = 0;
+ m_mimeCheck = 0;
+ m_viewCheck = 0;
+ m_homeButton = 0;
+ m_docButton = 0;
+ m_hideButton = 0;
+ m_ok = 0;
+ m_cancel = 0;
+ m_reread = 0;
+ m_up = 0;
+ m_View = 0;
+ m_checkPerm = 0;
+ m_pseudo = 0;
+ m_pseudoLayout = 0;
+ m_select = 0;
+ m_stack = 0;
+ m_lay = 0;
+ m_Oselector = 0;
+ m_boxToolbar = 0;
+ m_boxOk = 0;
+ m_boxName = 0;
+ m_boxView = 0;
+ m_custom = 0;
+ m_edit = 0;
+ m_fnLabel = 0;
+ m_new = 0;
+ m_close = 0;
+}
+void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
+{
+ if(!m_files)
+ return;
+ // if( !compliesMime(info->absFilePath(), mime ) )
+ // return;
+ MimeType type( info->absFilePath() );
+ if (!compliesMime( type.id() ) )
+ return;
+
+}
+void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
+{
+ if(!m_dir)
+ return;
+}
+void OFileSelector::delItems()
+{
+
+}
+void OFileSelector::initializeName()
+{
+ /** Name Layout Line
+ * This is the Layout line arranged in
+ * horizontal way each components
+ * are next to each other
+ * but we will only do this if
+ * we didn't initialize a while ago.
+ */
+ if( m_boxName == 0 ){
+ m_boxName = new QHBox( this ); // remove this this? or use a QHBox
+ m_fnLabel = new QLabel( m_boxName );
+ m_fnLabel->setText( tr("Name:") );
+ m_edit = new QLineEdit( m_boxName );
+ m_edit->setText( m_name );
+ //m_boxName->addWidget( m_fnLabel );
+ m_boxName->setMargin( 5 );
+ m_boxName->setSpacing( 8 );
+ //m_boxName->setStretchFactor(m_edit, 100 ); // 100 is stretch factor
+
+ m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout
+ }// else we already initialized
+ // maybe show the components?
+ //
+}
+void OFileSelector::initializeYes()
+{
+ /** The Save Cancel bar
+ *
+ */
+ if( m_boxOk == 0 ){
+ m_boxOk = new QHBox( this );
+ m_ok = new QPushButton( tr("&Save"),m_boxOk , "save" );
+ m_cancel = new QPushButton( tr("C&ancel"), m_boxOk, "cancel" );
+
+ //m_boxOk->addWidget( m_ok );
+ //m_boxOk->addWidget( m_cancel );
+ m_boxOk->setMargin( 5 );
+ m_boxOk->setSpacing( 10 );
+ m_lay->addWidget( m_boxOk, 0 );
+
+ connect( m_ok, SIGNAL( clicked() ),
+ this, SLOT(slotOk() ) );
+ connect( m_cancel, SIGNAL( clicked() ),
+ this, SLOT( slotCancel() ) );
+ }
+}
+/*
+ * OK m_mimeCheck is a QComboBox we now want to fill
+ * out that combobox
+ * if automime we need to update the mimetypes
+ */
+void OFileSelector::updateMimeCheck() {
+ m_mimeCheck->clear();
+ if (m_autoMime ) {
+ //m_mimeCheck->insertItem( tr("All") );
+ updateMimes();
+ }
+
+ QMap<QString, QStringList>::Iterator it;
+ for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) {
+ m_mimeCheck->insertItem( it.key() );
+ }
+}
+
+void OFileSelector::initializeChooser()
+{
+ if( m_boxView == 0 ){
+ m_boxView = new QHBox( this );
+ m_viewCheck = new QComboBox( m_boxView, "view check");
+ m_mimeCheck = new QComboBox( m_boxView, "mime check");
+ m_boxView->setSpacing( 8 );
+ m_lay->addWidget(m_boxView, 0 );
+
+ m_viewCheck->insertItem( tr("Documents") );
+ m_viewCheck->insertItem( tr("Files") );
+ m_viewCheck->insertItem( tr("All Files") );
+ updateMimeCheck();
+
+ connect( m_viewCheck, SIGNAL( activated(const QString & ) ),
+ this, SLOT( slotViewCheck(const QString & ) ) );
+ connect( m_mimeCheck, SIGNAL( activated(const QString & ) ),
+ this, SLOT( slotMimeCheck( const QString & ) ) );
+ }
+}
+void OFileSelector::initializeListView()
+{
+ qWarning("initializeListView");
+ if( m_pseudo == 0 ){
+ qWarning("init");
+ m_pseudo = new QWidget( m_stack, "Pseudo Widget");
+ m_pseudoLayout = new QVBoxLayout( m_pseudo );
+ // toolbar
+ m_boxToolbar = new QHBox( m_pseudo );
+ m_boxToolbar->setSpacing(0 ); // next to each other please
+
+ // toolbar members
+ {
+ // location QComboBox
+ m_location = new QComboBox( m_boxToolbar );
+ m_location->setEditable( TRUE );
+ m_location->setDuplicatesEnabled( FALSE );
+ connect( m_location, SIGNAL(activated(const QString &) ),
+ this, SLOT( slotLocationActivated(const QString &) ) );
+ connect( m_location->lineEdit(), SIGNAL(returnPressed() ),
+ this, SLOT(locationComboChanged() ) );
+ // UP Button
+ m_up = new QPushButton(Resource::loadIconSet("up"),"",
+ m_boxToolbar,"cdUpButton");
+ m_up->setFixedSize( QSize( 20, 20 ) );
+ connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) );
+ m_up->setFlat(TRUE);
+
+ // Home Button
+ m_homeButton = new QPushButton(Resource::loadIconSet("home") ,
+ "", m_boxToolbar);
+ m_homeButton->setFixedSize( QSize( 20, 20 ) );
+ connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) );
+ m_homeButton->setFlat(TRUE);
+ // Documents Button
+ m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"",
+ m_boxToolbar,"docsButton");
+ m_docButton->setFixedSize( QSize( 20, 20 ) );
+ connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) );
+ m_docButton->setFlat(TRUE);
+
+ // Close button
+ m_close = new QPushButton( Resource::loadIconSet( "close"), "",
+ m_boxToolbar );
+ connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) );
+ m_close->setFixedSize( 20, 20 );
+
+ m_boxToolbar->setFixedHeight( 20 );
+ m_pseudoLayout->addWidget(m_boxToolbar );
+
+ // let;s fill the Location ComboBox
+ StorageInfo storage;
+ const QList<FileSystem> &fs = storage.fileSystems();
+ QListIterator<FileSystem> it ( fs );
+ for( ; it.current(); ++it ){
+ const QString disk = (*it)->name();
+ const QString path = (*it)->path();
+ m_location->insertItem(path+ "<-"+disk );
+ }
+ int count = m_location->count();
+ m_location->insertItem( m_currentDir );
+ m_location->setCurrentItem( count );
+ // due to the New and Close button we can not simply hide m_boxToolBar to not show it
+ if( !m_shTool ){
+ m_location->hide( );
+ m_up->hide( );
+ m_homeButton->hide( );
+ m_docButton->hide( );
+ }
+ if(!m_shClose )
+ m_close->hide();
+ //if(!m_shNew)
+ //m_close->hide();
+
+ } // off toolbar
+ // the Main ListView
+ // make a QWidgetStack first so Views can share the Toolbar
+ m_View = new QListView( m_pseudo, "Extended view");
+ QPEApplication::setStylusOperation( m_View->viewport(),
+ QPEApplication::RightOnHold);
+ m_View->addColumn(" " );
+ m_View->addColumn(tr("Name"), 135 );
+ m_View->addColumn(tr("Size"), -1 );
+ m_View->addColumn(tr("Date"), 60 );
+ m_View->addColumn(tr("Mime Type"), -1 );
+ QHeader *header = m_View->header();
+ header->hide();
+ m_View->setSorting( 1 );
+ m_View->setAllColumnsShowFocus( TRUE );
+
+ connect(m_View, SIGNAL(selectionChanged() ),
+ this, SLOT(slotSelectionChanged() ) );
+
+ connect(m_View, SIGNAL(currentChanged(QListViewItem *) ),
+ this, SLOT(slotCurrentChanged(QListViewItem * ) ) );
+
+ connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
+ this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) );
+
+ connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
+ this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) );
+
+ m_pseudoLayout->addWidget( m_View, 288 );
+ m_stack->addWidget( m_pseudo, Extended );
+ }
+}
+void OFileSelector::initializePerm()
+{
+ if( m_checkPerm == 0 ){
+ m_checkPerm = new QCheckBox(tr("Set Permission"), this, "perm");
+ m_checkPerm->setChecked( false );
+ m_lay->addWidget( m_checkPerm );
+
+ }
+}
+void OFileSelector::initPics()
+{
+ m_pixmaps = new QMap<QString,QPixmap>;
+ QPixmap pm = Resource::loadPixmap( "folder" );
+ QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
+ QPainter painter( &pm );
+ painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
+ pm.setMask( pm.createHeuristicMask( FALSE ) );
+ m_pixmaps->insert("dirsymlink", pm );
+
+ QPixmap pm2 = Resource::loadPixmap( "lockedfolder" );
+ QPainter pen(&pm2 );
+ pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk );
+ pm2.setMask( pm2.createHeuristicMask( FALSE ) );
+ m_pixmaps->insert("symlinkedlocked", pm2 );
+}
+// if a mime complies with the m_mimeCheck->currentItem
+bool OFileSelector::compliesMime( const QString &path, const QString &mime )
+{
+ if( mime == "All" )
+ return true;
+ MimeType type( path );
+ if( type.id() == mime )
+ return true;
+ return false;
+}
+/* check if the mimetype in mime
+ * complies with the one which is current
+ */
+/*
+ * We've the mimetype of the file
+ * We need to get the stringlist of the current mimetype
+ *
+ * mime = image/jpeg
+ * QStringList = 'image/*'
+ * or QStringList = image/jpeg;image/png;application/x-ogg
+ * or QStringList = application/x-ogg;image/*;
+ * with all these mime filters it should get acceptes
+ * to do so we need to look if mime is contained inside
+ * the stringlist
+ * if it's contained return true
+ * if not ( I'm no RegExp expert at all ) we'll look if a '/*'
+ * is contained in the mimefilter and then we will
+ * look if both are equal until the '/'
+ */
+bool OFileSelector::compliesMime( const QString& mime ) {
+ qWarning("mimetype is %s", mime.latin1() );
+ QString currentText;
+ if (m_shChooser )
+ currentText = m_mimeCheck->currentText();
+
+ qWarning("current text is %s", currentText.latin1() );
+ QMap<QString, QStringList>::Iterator it;
+ QStringList list;
+ if ( currentText == tr("All") ) return true;
+ else if ( currentText.isEmpty() && !m_mimetypes.isEmpty() ) {
+ it = m_mimetypes.begin();
+ list = it.data();
+ }else if ( currentText.isEmpty() ) return true;
+ else{
+ it = m_mimetypes.find(currentText );
+ if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText;
+ else qWarning("found"), list = it.data();
+ }
+ // dump it now
+ //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
+ // qWarning( "%s", (*it).latin1() );
+ //}
+
+
+ if ( list.contains(mime) ) return true;
+ qWarning("list doesn't contain it ");
+ QStringList::Iterator it2;
+ int pos;
+ int pos2;
+ for ( it2 = list.begin(); it2 != list.end(); ++it2 ) {
+ pos = (*it2).findRev("/*");
+ if ( pos >= 0 ) {
+ if ( mime.contains( (*it2).left(pos) ) ) return true;
+ }
+ }
+ return false;
+}
+void OFileSelector::slotFileSelected( const QString &string )
+{
+ if( m_shLne )
+ m_edit->setText( string );
+ emit fileSelected( string );
+}
+void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
+{
+ slotFileSelected( lnk.name() );
+ // emit fileSelected( lnk );
+}
+void OFileSelector::slotSelectionChanged()
+{
+
+}
+void OFileSelector::slotCurrentChanged(QListViewItem* item )
+{
+ if( item == 0 )
+ return;
+ if( m_selector == Extended || m_selector == ExtendedAll ) {
+ OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
+ qWarning("current changed");
+ if(!sel->isDir() ){
+ if( m_shLne )
+ m_edit->setText( sel->text(1) );
+
+ if (m_mode == Fileselector ) {
+ QStringList str = QStringList::split("->", sel->text(1) );
+ QString path =sel->directory() + "/" + str[0].stripWhiteSpace();
+ emit fileSelected(path );
+ DocLnk lnk( path );
+ emit fileSelected(lnk );
+ }
+ }
+ }
+}
+void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int)
+{
+ if ( item == 0 )
+ return;
+
+ if( button != Qt::LeftButton )
+ return;
+
+ switch( m_selector ){
+ default:
+ break;
+ case Extended: // fall through
+ case ExtendedAll:{
+ OFileSelectorItem *sel = (OFileSelectorItem*)item;
+ if(!sel->isLocked() ){
+ QStringList str = QStringList::split("->", sel->text(1) );
+ if( sel->isDir() ){
+ cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ // if MODE Dir m_shLne set the Text
+ }else{
+ if( m_shLne )
+ m_edit->setText( str[0].stripWhiteSpace() );
+ qWarning("selected here in slot clicked");
+ emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ qWarning("file selected");
+ emit fileSelected( lnk );
+ }
+ }
+ break;
+ }
+ }
+}
+void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int )
+{
+ if( item == 0 )
+ return;
+
+ if( button != Qt::RightButton )
+ return;
+ slotContextMenu( item );
+}
+void OFileSelector::slotContextMenu( QListViewItem *item)
+{
+
+}
+void OFileSelector::slotChangedDir()
+{
+ OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
+ if(sel->isDir() ){
+ QStringList str = QStringList::split("->", sel->text(1) );
+ cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ }
+}
+void OFileSelector::slotOpen()
+{
+ OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
+ if(!sel->isDir() ){
+ QStringList str = QStringList::split("->", sel->text(1) );
+ slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() );
+ qWarning("slot open");
+ // DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ //emit fileSelected( lnk );
+ }
+}
+void OFileSelector::slotRescan()
+{
+
+}
+void OFileSelector::slotRename()
+{
+ reparse();
+}
+void OFileSelector::slotDelete()
+{
+ OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
+ QStringList list = QStringList::split("->", sel->text(1) );
+ if( sel->isDir() ){
+ QString str = QString::fromLatin1("rm -rf ") + sel->directory() +"/" + list[0]; //better safe than sorry
+ switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0],
+ tr("Yes"),tr("No"),0,1,1) ) {
+ case 0:
+ ::system(str.utf8().data() );
+ break;
+ }
+ } else {
+ QFile::remove( list[0] );
+ }
+ m_View->takeItem( sel );
+ delete sel;
+}
+void OFileSelector::cdUP()
+{
+ QDir dir( m_currentDir );
+ dir.cdUp();
+ if(dir.exists() ){
+ m_currentDir = dir.absPath();
+ reparse();
+ int count = m_location->count();
+ slotInsertLocationPath( m_currentDir, count);
+ m_location->setCurrentItem( indexByString( m_location, m_currentDir));
+ //this wont work in all instances
+ // FIXME
+ }
+}
+void OFileSelector::slotHome()
+{
+ cd(QDir::homeDirPath() );
+}
+void OFileSelector::slotDoc()
+{
+ cd(QPEApplication::documentDir() );
+}
+void OFileSelector::slotNavigate( )
+{
+
+}
+// fill the View with life
+void OFileSelector::reparse()
+{
+ if( m_selector == Normal )
+ return;
+ if( m_selector == Extended || m_selector == ExtendedAll )
+ m_View->clear();
+ else // custom view
+ ; // currentView()->clear();
+ if( m_shChooser)
+ qWarning("reparse %s", m_mimeCheck->currentText().latin1() );
+
+ QString currentMimeType;
+ // let's update the mimetype
+ if( m_autoMime ){
+ m_mimetypes.clear();
+ // ok we can change mimetype so we need to be able to give a selection
+ if( m_shChooser ) {
+ currentMimeType = m_mimeCheck->currentText();
+ m_mimeCheck->clear();
+
+ // let's find possible mimetypes
+ QDir dir( m_currentDir );
+ dir.setFilter( QDir::Files | QDir::Readable );
+ dir.setSorting( QDir::Size );
+ const QFileInfoList *list = dir.entryInfoList();
+ QFileInfoListIterator it( *list );
+ QFileInfo *fi;
+ while( (fi=it.current() ) ) {
+ if( fi->extension() == QString::fromLatin1("desktop") ){
+ ++it;
+ continue;
+ }
+ MimeType type( fi->absFilePath() );
+ if( !m_mimetypes.contains( type.id() ) ){
+ //qWarning("Type %s", type.id().latin1() );
+ m_mimetypes.insert( type.id(), type.id() );
+ }
+
+ ++it;
+ }
+ // add them to the chooser
+ updateMimeCheck();
+ m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
+ currentMimeType = m_mimeCheck->currentText();
+ }
+ }else { // no autoMime
+ // let the mimetype be set from out side the m_mimeCheck FEATURE
+
+ if( m_shChooser ){
+ currentMimeType = m_mimeCheck->currentText();
+// updateMimeCheck();
+ }
+ }
+ // now we got our mimetypes we can add the files
+
+ QDir dir( m_currentDir );
+
+ int sort;
+ if ( m_case )
+ sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
+ else
+ sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
+ dir.setSorting( sort );
+
+ int filter;
+ if( m_selector == ExtendedAll /*|| m_selector ==CUSTOM_ALL */ ){
+ filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
+ }else
+ filter = QDir::Files | QDir::Dirs | QDir::All;
+ dir.setFilter( filter );
+
+ // now go through all files
+ const QFileInfoList *list = dir.entryInfoList();
+ QFileInfoListIterator it( *list );
+ QFileInfo *fi;
+ while( (fi=it.current() ) ){
+ //qWarning("True and only" );
+ if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){
+ //qWarning(".. or ." );
+ ++it;
+ continue;
+ }
+ if( fi->isSymLink() ){
+ QString file = fi->dirPath( true ) + "/" + fi->readLink();
+ for( int i = 0; i<=4; i++) { // 5 tries to prevent dos
+ QFileInfo info( file );
+ if( !info.exists() ){
+ addSymlink( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isDir() ){
+ addDir( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isFile() ){
+ addFile( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isSymLink() ){
+ file = info.dirPath(true ) + "/" + info.readLink() ;
+ break;
+ }else if( i == 4){
+ addSymlink( currentMimeType, fi );
+ }
+ } // off for loop
+ }else if( fi->isDir() ){
+ addDir( currentMimeType, fi );
+ }else if( fi->isFile() ){
+ addFile( currentMimeType, fi );
+ }
+ //qWarning( "%s", fi->fileName().latin1() );
+ ++it;
+ } // of while loop
+ m_View->sort();
+ if( m_shTool ){
+ m_location->insertItem( m_currentDir );
+
+ }
+ // reenable painting and updates
+}
+
+
+OFileView* OFileSelector::currentView() {
+ return 0l;
+}
+int OFileSelector::filter() {
+ int filter;
+ if ( m_selector == ExtendedAll )
+ filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
+ else
+ filter = QDir::Files | QDir::Dirs | QDir::All ;
+
+ return filter;
+}
+int OFileSelector::sorting() {
+ int sort;
+
+ if (m_case )
+ sort = ( QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed );
+ else
+ sort = ( QDir::Name | QDir::DirsFirst | QDir::Reversed );
+
+ return sort;
+}
+void OFileSelector::internFileSelected( const QString& s) {
+ emit fileSelected( s );
+}
+void OFileSelector::internFileSelected( const DocLnk& d ) {
+ emit fileSelected( d );
+}
+void OFileSelector::internContextMenu() {
+ emit contextMenu();
+}
+void OFileSelector::internChangedDir( const QString& s) {
+ emit dirSelected( s );
+}
+void OFileSelector::internChangedDir( const QDir& s) {
+ emit dirSelected( s );
+}
diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h
new file mode 100644
index 0000000..937569d
--- a/dev/null
+++ b/libopie/ofileselector/ofileselector.h
@@ -0,0 +1,474 @@
+/*
+ This is based on code and ideas of
+ L. J. Potter ljp@llornkcor.com
+ Thanks a lot
+
+
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef opiefileselector_h
+#define opiefileselector_h
+
+#include <qpe/fileselector.h>
+
+#include <qdir.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qpixmap.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qvaluelist.h>
+
+#include <qpe/applnk.h>
+#include <qlistview.h>
+
+/** This is OPIEs FileDialog Widget. You can use it
+ * as a dropin replacement of the fileselector and
+ * or use any of the new features.
+ * This is also a complete FileSave and FileLoad widget
+ * If you look for a Dialog check OFileDialog
+ *
+ */
+class DocLnk;
+class QCheckBox;
+class QComboBox;
+class QPushButton;
+class QGridLayout;
+class QLineEdit;
+class QLabel;
+class QWidgetStack;
+class QHBoxLayout;
+class QVBoxLayout;
+class QPopupMenu;
+class QFileInfo;
+class QHBox;
+class OFileView;
+//
+
+/* the mimetypes one name and a list of mimetypes */
+typedef QMap< QString, QStringList> MimeTypes;
+
+/**
+ * FIXME later
+ */
+struct OPopupMenuFactory {
+ OPopupMenuFactory() {}
+
+};
+
+
+/**
+ * Opie the default OFileSelector
+ * It features multiple views.
+ */
+class OFileSelector : public QWidget {
+ Q_OBJECT
+
+ /* friends are evil but I don't want to make the
+ * methods public
+ */
+ friend class OLister;
+ friend class OFileView;
+ public:
+ /**
+ * The mode of the file selector
+ * Either open, save, fileselector or dir browsing mode
+ *
+ */
+ enum Mode {Open = 1, Save = 2, Fileselector = 4, Dir = 8 };
+
+ /**
+ * Selector. Either Normal for the one shipped with
+ * libqpe or Extended. for the Extended
+ * ExtendedAll also shows 'hidden' files
+ */
+ enum Selector{Normal=0, Extended = 1, ExtendedAll =2 };
+
+ /**
+ * This is reserved for futrue views
+ */
+ enum View { Dirs = 1, Files = 2, Tree = 4, Icon = 8 };
+
+ /**
+ * A c'tor which should be used for advanced mode
+ * @param wid the parent
+ * @param mode the Mode of the Selector
+ * @param selector the current View of the Selector
+ * @param dirName in which dir to start
+ * @param fileName a proposed filename
+ * @param mimetypes A list of mimetypes \
+ * QString is for a identifier name like "Text files"
+ * the coresponding QStringList is used for the mimetypes
+ * if empty it'll fill the list of mimetypes depending
+ * on the content of the current directory
+ */
+
+ OFileSelector(QWidget *wid, int mode, int selector,
+ const QString &dirName,
+ const QString &fileName = QString::null,
+ const MimeTypes &mimetypes = MimeTypes() );
+
+
+ /**
+ * This is a QPE compatible c'tor
+ */
+ OFileSelector(const QString &mimeFilter, QWidget *parent,
+ const char *name, bool newVisible = TRUE,
+ bool closeVisible = FALSE );
+
+ ~OFileSelector();
+
+ // currently only for the FileSelector Mode
+ /* compability mode but only work
+ * with FileSelector
+ */
+ void setNewVisible( bool /*b*/ );
+ void setCloseVisible(bool /*b*/ );
+
+ // end file selector mode
+ // deprecated
+ void reread();
+ // make sure not to leak please
+ const DocLnk *selected();
+ // end deprecated
+
+ /**
+ * @return if the toolbar is visible
+ */
+ bool isToolbarVisible() const { return m_shTool; };
+
+ /**
+ * @return if the permissionBas is visible
+ */
+ bool isPermissionBarVisible() const { return m_shPerm; };
+
+ /**
+ * @return if the lineEdit is visible
+ */
+ bool isLineEditVisible()const { return m_shLne; };
+
+ /**
+ * if the chooser is visible
+ */
+ bool isChooserVisible( )const { return m_shChooser; };
+
+ /**
+ * @return if the yesCancel Bar is visible
+ */
+ bool isYesCancelVisible()const { return m_shYesNo; };
+
+ /**
+ * set Yes/Cancel visible
+ */
+ void setYesCancelVisible( bool show );
+
+ /**
+ * set the toolbar visible
+ */
+ void setToolbarVisible( bool show );
+
+ /**
+ * set the permissionBar to be visible
+ */
+ void setPermissionBarVisible( bool show );
+
+ /**
+ * set the lineedit for file entering visible
+ */
+ void setLineEditVisible(bool show) ;
+
+ /**
+ * set the chooser is visible
+ */
+ void setChooserVisible( bool chooser );
+
+ /**
+ * The permissionCheckbox
+ *
+ */
+ QCheckBox* permissionCheckbox();
+
+ /**
+ * setPermission
+ */
+ bool setPermission() const;
+
+ /**
+ * set ther permission to bool
+ */
+ void setPermissionChecked( bool check );
+
+ /**
+ * set the Selector Mode
+ */
+ void setMode( int );
+
+ /**
+ * whether or not to show dirs
+ */
+ bool showDirs()const { return m_dir; }
+
+ /**
+ * setShowDirs
+ */
+ void setShowDirs(bool );
+
+ /**
+ * set CaseSensetive
+ */
+ bool isCaseSensetive()const { return m_case; }
+
+ /**
+ * set if to be case sensetive
+ */
+ void setCaseSensetive(bool caSe );
+
+ /**
+ * @return if to show files
+ */
+ bool showFiles()const { return m_files; };
+
+ /**
+ * set if files should be shown
+ */
+ void setShowFiles(bool );
+
+ /**
+ * change dir to path
+ */
+ bool cd(const QString &path );
+
+
+ /**
+ * return the mode of the fileselector
+ */
+ int mode()const { return m_mode; };
+
+ /**
+ * return the selector
+ */
+ int selector()const { return m_selector; };
+
+ /**
+ * set the Selector
+ */
+ void setSelector( int );
+
+ /**
+ * wether or not to show popups
+ */
+ bool showPopup()const { return m_showPopup; };
+
+ /**
+ * set show popups
+ */
+ void setShowPopup( bool pop ) { m_showPopup = pop; }
+
+ /**
+ * set the popup factory
+ */
+ void setPopupFactory( OPopupMenuFactory * );
+
+ /**
+ * reparse the current directory and updates
+ * the views + mimetypes
+ */
+ void reparse(); // re reads the dir
+
+ /**
+ * return the selected name
+ */
+ QString selectedName( )const;
+
+ /**
+ * for multiple selections return multiple
+ * filenames
+ */
+ QStringList selectedNames()const;
+
+ /**
+ * return the complete to the file
+ */
+ QString selectedPath() const;
+
+ /**
+ * return the completed paths
+ */
+ QStringList selectedPaths() const;
+
+ /**
+ * the current directory
+ */
+ QString directory()const;
+
+ /**
+ * fileCount
+ */
+ int fileCount();
+
+ DocLnk selectedDocument()const;
+
+ QValueList<DocLnk> selectedDocuments()const;
+
+ OFileView* currentView();
+ int filter();
+ int sorting();
+
+ signals:
+ void fileSelected( const DocLnk & );
+ void fileSelected( const QString & );
+ void dirSelected(const QString &dir );
+ void dirSelected( const QDir& );
+ void closeMe();
+ void ok();
+ void cancel();
+ void contextMenu();
+
+ private slots:
+ void slotOk();
+ void slotCancel();
+ void slotViewCheck(const QString & );
+ void slotMimeCheck(const QString & );
+ void slotLocationActivated(const QString & );
+ void slotInsertLocationPath(const QString &, int);
+ void locationComboChanged();
+
+ private:
+ void init();
+ void updateMimes();
+
+
+ private:
+
+ FileSelector* m_select;
+ int m_mode, m_selector;
+ QComboBox *m_location, *m_mimeCheck, *m_viewCheck;
+ QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel;
+ QPushButton *m_reread, *m_up, *m_new, *m_close;
+ QListView *m_View;
+ QCheckBox *m_checkPerm;
+ QWidget *m_pseudo;
+ QVBoxLayout *m_pseudoLayout;
+
+ QString m_currentDir;
+ QString m_name;
+// QStringList m_mimetypes;
+ QMap<QString, QStringList> m_mimetypes;
+
+
+ QWidgetStack *m_stack;
+ QVBoxLayout *m_lay;
+ QGridLayout *m_Oselector;
+
+ QHBox *m_boxToolbar;
+ QHBox *m_boxOk; // (no layout anymore) wait
+ QHBox *m_boxName; // (no Layout anymore) wait
+ QHBox *m_boxView;
+
+ QPopupMenu *m_custom;
+
+ QLineEdit *m_edit;
+ QLabel *m_fnLabel;
+
+ bool m_shClose : 1;
+ bool m_shNew : 1;
+ bool m_shTool : 1;
+ bool m_shPerm : 1;
+ bool m_shLne : 1;
+ bool m_shChooser : 1;
+ bool m_shYesNo : 1;
+ bool m_boCheckPerm : 1;
+ bool m_autoMime : 1;
+ bool m_case : 1;
+ bool m_dir : 1;
+ bool m_files : 1;
+ bool m_showPopup : 1;
+
+ void initVars();
+ virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE );
+ virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE );
+ virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){};
+ void delItems();
+ void initializeName();
+ void initializeYes();
+ void initializeChooser();
+ void initializeListView();
+ void initializePerm();
+ void initPics();
+ bool compliesMime(const QString &path,
+ const QString &mime);
+ bool compliesMime(const QString& mime );
+ /**
+ * Updates the QComboBox with the current mimetypes
+ */
+ void updateMimeCheck();
+
+ /**
+ * Returns the current mimetype
+ */
+ QString currentMimeType()const;
+ class OFileSelectorPrivate;
+ OFileSelectorPrivate *d;
+ static QMap<QString,QPixmap> *m_pixmaps;
+
+private slots:
+ void slotFileSelected(const QString & ); // not really meant to be a slot
+ void slotFileBridgeSelected( const DocLnk & );
+ virtual void slotSelectionChanged();
+ virtual void slotCurrentChanged(QListViewItem* );
+ virtual void slotClicked( int, QListViewItem *item, const QPoint &, int);
+ virtual void slotRightButton(int, QListViewItem *, const QPoint &, int );
+ virtual void slotContextMenu( QListViewItem *item);
+ // listview above
+ // popup below
+ virtual void slotChangedDir();
+ virtual void slotOpen();
+ virtual void slotRescan();
+ virtual void slotRename();
+ virtual void slotDelete();
+ virtual void cdUP();
+ virtual void slotHome();
+ virtual void slotDoc();
+ virtual void slotNavigate( );
+
+ /* for OLister */
+private:
+
+ /* for OFileView */
+private:
+ void internFileSelected( const QString& );
+ void internFileSelected( const DocLnk& );
+ void internContextMenu();
+ void internChangedDir( const QString& );
+ void internChangedDir( const QDir& ) ;
+
+};
+
+
+#endif
+
diff --git a/libopie/ofileselector/ofileselectoritem.cpp b/libopie/ofileselector/ofileselectoritem.cpp
new file mode 100644
index 0000000..1e745a1
--- a/dev/null
+++ b/libopie/ofileselector/ofileselectoritem.cpp
@@ -0,0 +1,53 @@
+#include "ofileselectoritem.h"
+
+OFileSelectorItem::OFileSelectorItem( QListView*view,
+ const QPixmap& pix,
+ const QString& path,
+ const QString& date,
+ const QString& size,
+ const QString& dir,
+ bool isLocked,
+ bool isDir )
+ : QListViewItem( view )
+{
+ setPixmap( 0, pix );
+ setText( 1, path );
+ setText( 2, size );
+ setText( 3, date );
+ m_dir = isDir;
+ m_locked = isLocked;
+ m_dirStr = dir;
+}
+OFileSelectorItem::~OFileSelectorItem() {
+}
+bool OFileSelectorItem::isLocked()const {
+ return m_locked;
+}
+QString OFileSelectorItem::directory()const {
+ return m_dirStr;
+}
+bool OFileSelectorItem::isDir()const {
+ return m_dir;
+}
+QString OFileSelectorItem::path() const {
+ return text(1);
+}
+QString OFileSelectorItem::key( int id, bool ) {
+ QString ke;
+
+ if( id == 0 || id == 1 ){ // name
+ if( m_dir ){
+ ke.append("0" );
+ ke.append( text(1) );
+ }else{
+ ke.append("1" );
+ ke.append( text(1) );
+ }
+ }else if( id == 2 ){ // size
+ return text(2);
+ }else if( id == 3 ){ // date
+ return text(3);
+ }
+
+ return ke;
+}
diff --git a/libopie/ofileselector/ofileselectoritem.h b/libopie/ofileselector/ofileselectoritem.h
new file mode 100644
index 0000000..21460c4
--- a/dev/null
+++ b/libopie/ofileselector/ofileselectoritem.h
@@ -0,0 +1,30 @@
+#ifndef OPIE_FILE_SELECTOR_ITEM_H
+#define OPIE_FILE_SELECTOR_ITEM_H
+
+#include <qlistview.h>
+
+class OFileSelectorItem : public QListViewItem {
+public:
+ OFileSelectorItem( QListView* view,
+ const QPixmap&,
+ const QString& path,
+ const QString& date,
+ const QString& size,
+ const QString& dir,
+ bool isLocked,
+ bool isDir = false);
+ ~OFileSelectorItem();
+ bool isLocked() const;
+ QString directory()const;
+ bool isDir()const;
+ QString path()const;
+ QString key(int id, bool );
+
+private:
+ bool m_locked : 1;
+ bool m_dir : 1;
+ QString m_dirStr;
+
+};
+
+#endif
diff --git a/libopie/ofileselector/ofileview.cpp b/libopie/ofileselector/ofileview.cpp
new file mode 100644
index 0000000..71843c1
--- a/dev/null
+++ b/libopie/ofileselector/ofileview.cpp
@@ -0,0 +1,28 @@
+#include <qpe/applnk.h>
+
+#include "ofileselector.h"
+
+#include "ofileview.h"
+
+
+OFileView::OFileView( OFileSelector* sel)
+ : m_sel( sel )
+{
+}
+OFileView::~OFileView() {
+}
+void OFileView::fileSelected( const QString& s ) {
+ m_sel->internFileSelected( s );
+}
+void OFileView::fileSelected( const DocLnk& s) {
+ m_sel->internFileSelected( s );
+}
+void OFileView::contextMenu() {
+ m_sel->internContextMenu();
+}
+void OFileView::changedDir( const QString& s) {
+ m_sel->internChangedDir( s );
+}
+void OFileView::changedDir( const QDir& d ) {
+ m_sel->internChangedDir( d );
+}
diff --git a/libopie/ofileselector/ofileview.h b/libopie/ofileselector/ofileview.h
new file mode 100644
index 0000000..997266a
--- a/dev/null
+++ b/libopie/ofileselector/ofileview.h
@@ -0,0 +1,109 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 zecke <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This library is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; Library General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = Library General Public License along with
+    --        :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef ofileview_h
+#define ofileview_h
+
+#include <qobject.h>
+#include <qwidget.h>
+#include <qpopupmenu.h>
+
+class QFileInfo;
+class QDir;
+class DocLnk;
+
+/**
+ * A OFileView is a specialised View for the
+ * OFileSelector
+ * With a View you can chage the user visible
+ * representation of a OFileLister
+ * OFileView is just a basic interface which helps you to
+ * write new views
+ */
+class OFileSelector;
+class OFileView {
+public:
+ OFileView( OFileSelector* );
+ OFileView();
+ virtual ~OFileView();
+
+ virtual void clear() = 0;
+ virtual void addFile(const QString &mine,
+ QFileInfo *info,
+ bool isSymlink = FALSE ) = 0;
+ virtual void addFile(const QString& mine, const QString& dir,
+ const QString& file, bool = FALSE ) = 0;
+
+ virtual void addDir (const QString &mine,
+ QFileInfo *info,
+ bool isSymlink = FALSE ) = 0;
+ virtual void addDir (const QString& mine, const QString& dir,
+ const QString& file, bool = FALSE) = 0;
+
+ virtual void addSymlink(const QString &mime,
+ QFileInfo *info,
+ bool isSymlink = FALSE ) = 0;
+ virtual void addSymlink(const QString& mine,
+ const QString& path,
+ const QString& file,
+ bool isSymlink = FALSE ) = 0;
+
+ virtual void cd(const QString &path ) = 0;
+ virtual QWidget* widget() = 0;
+
+ virtual QString selectedName()const = 0;
+ virtual QStringList selectedNames()const = 0;
+ virtual QString selectedPath()const = 0;
+ virtual QStringList selectedPaths()const = 0;
+ virtual int fileCount() = 0;
+
+/*signals:*/
+protected:
+
+ void fileSelected(const QString &);
+ void fileSelected(const DocLnk & );
+ void contextMenu();
+ void changedDir(const QString &);
+ void changedDir(const QDir & );
+ OFileSelector* selector();
+
+private:
+ OFileSelector* m_sel;
+};
+
+class OFileViewFactory {
+ public:
+ OFileViewFactory() {} ;
+ virtual ~OFileViewFactory() = 0;
+
+ OFileView* newView(QWidget *parent, const char *name );
+ QString name()const;
+};
+
+
+#endif