-rw-r--r-- | libopie/ofiledialog.cc | 18 | ||||
-rw-r--r-- | libopie/ofiledialog.h | 18 | ||||
-rw-r--r-- | libopie/ofileselector.cc | 160 | ||||
-rw-r--r-- | libopie/ofileselector.h | 77 |
4 files changed, 192 insertions, 81 deletions
diff --git a/libopie/ofiledialog.cc b/libopie/ofiledialog.cc index 164fadd..4783004 100644 --- a/libopie/ofiledialog.cc +++ b/libopie/ofiledialog.cc @@ -1,28 +1,28 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 <> .>+-= - _;:, .> :=|. This library is free software; you can + _;:, .> :=|. 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 + .%`+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. + -- :-=` 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. */ @@ -34,13 +34,13 @@ #include "ofiledialog.h" OFileDialog::OFileDialog(const QString &caption, QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName, - const QStringList &mimetypes ) + 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, @@ -54,13 +54,13 @@ OFileDialog::OFileDialog(const QString &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; } @@ -72,13 +72,13 @@ DocLnk OFileDialog::selectedDocument()const { return file->selectedDocument(); } QString OFileDialog::getOpenFileName(int selector, const QString &startDir, const QString &file, - const QStringList &mimes, + const MimeTypes &mimes, QWidget *wid, const QString &caption ) { QString ret; OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption, wid, OFileSelector::OPEN, selector, startDir, file, mimes); @@ -88,13 +88,13 @@ QString OFileDialog::getOpenFileName(int selector, return ret; } QString OFileDialog::getSaveFileName(int selector, const QString &startDir, const QString &file, - const QStringList &mimes, + const MimeTypes &mimes, QWidget *wid, const QString &caption ) { QString ret; OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption, wid, OFileSelector::SAVE, selector, startDir, file, mimes); diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h index 40d147e..e14253c 100644 --- a/libopie/ofiledialog.h +++ b/libopie/ofiledialog.h @@ -1,28 +1,28 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 zecke <zecke@handhelds.org> .>+-= - _;:, .> :=|. This library is free software; you can + _;:, .> :=|. 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 + .%`+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. + -- :-=` 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. */ @@ -36,31 +36,31 @@ class OFileDialog : public QDialog { Q_OBJECT public: OFileDialog(const QString &caption, QWidget *, int mode, int selector, - const QString &dirName, + const QString &dirName, const QString &fileName = QString::null, - const QStringList &mimetypes = QStringList() ); + 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 QStringList& mimefilter = QStringList(), + 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 QStringList& mimefilter = QStringList(), + 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, diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 7a67ab2..6c59f89 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -96,58 +96,64 @@ namespace { }; }; OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, const QString &dirName, - const QString &fileName, - const QStringList &mimeTypes ) + 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() ) ); + //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); } OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, const char *name, bool newVisible, bool closeVisible ) : QWidget( parent, name ) { - m_mimetypes = QStringList::split(";", mimeFilter ); + if (!mimeFilter.isEmpty() ) { + QStringList list = QStringList::split(";", mimeFilter ); + m_mimetypes.insert(mimeFilter, list ); + } initVars(); - m_currentDir = QPEApplication::documentDir(); + m_currentDir = QPEApplication::documentDir(); m_mode = OPEN; 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 = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ; - m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") , + 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 to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); @@ -338,13 +344,13 @@ QStringList OFileSelector::selectedNames()const }else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { 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 ){ @@ -361,13 +367,13 @@ QStringList OFileSelector::selectedPaths() const return list; } QString OFileSelector::directory()const { if( m_selector == NORMAL ) return QPEApplication::documentDir(); - + return QDir(m_currentDir).absPath(); } int OFileSelector::fileCount() { int count; @@ -422,19 +428,21 @@ void OFileSelector::slotCancel() } 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 - m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), + // yes currentMime fixes that for us + QString mime = currentMimeType(); + m_select = new FileSelector(mime, m_stack, "fileselector", FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //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; @@ -442,34 +450,64 @@ void OFileSelector::slotViewCheck(const QString &sel) reparse(); m_stack->raiseWidget( EXTENDED ); }else if( sel == tr("All Files") ){ m_selector = EXTENDED_ALL; initializeListView(); reparse(); - m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter + 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 ){ + //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( mime == tr("All") ? QString::null : mime, - m_stack, "fileselector", - FALSE, FALSE); + m_select = new FileSelector( newMimeType, + m_stack, "fileselector", + FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); updateMimes(); - m_mimeCheck->clear(); - m_mimeCheck->insertStringList(m_mimetypes ); + 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) ); } @@ -509,13 +547,21 @@ void OFileSelector::init() { m_lay = new QVBoxLayout( this ); m_lay->setSpacing(0 ); m_stack = new QWidgetStack( this ); if( m_selector == NORMAL ){ - m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), + 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", FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //connect to close me and other signals as well @@ -542,20 +588,20 @@ void OFileSelector::init() initializeYes( ); } void OFileSelector::updateMimes() { if( m_autoMime ){ m_mimetypes.clear(); - m_mimetypes.append( tr("All") ); + 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.append( (*dit)->type() ); + m_mimetypes.insert( (*dit)->type(), (*dit)->type() ); } }// else done in reparse } } void OFileSelector::initVars() { @@ -625,13 +671,13 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) if( symlink ) name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); else { name = info->fileName(); if( ( m_mode == OPEN && !info->isReadable() )|| ( m_mode == SAVE && !info->isWritable() ) ){ - + locked = true; pix = Resource::loadPixmap("locked"); } } new OFileSelectorItem( m_View, pix, name, info->lastModified().toString(), QString::number( info->size() ), @@ -654,44 +700,45 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) }else { // readable pix = symlink ? (*m_pixmaps)["dirsymlink"] : Resource::loadPixmap("folder") ; } name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; new OFileSelectorItem( m_View, pix, name, info->lastModified().toString(), - QString::number( info->size() ), + QString::number( info->size() ), info->dirPath( true ), locked, true ); }// else CUSTOM View } void OFileSelector::delItems() { } void OFileSelector::initializeName() { /** Name Layout Line - * This is the Layout line arranged in - * horizontal way each components + * 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? + // maybe show the components? // } void OFileSelector::initializeYes() { /** The Save Cancel bar * @@ -710,30 +757,44 @@ void OFileSelector::initializeYes() 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") ); - if(!m_autoMime ) - m_mimeCheck->insertItem(m_mimetypes.join(",") ); - else{ - updateMimes(); - m_mimeCheck->insertStringList( m_mimetypes ); - } + 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 & ) ) ); } } @@ -743,17 +804,17 @@ void OFileSelector::initializeListView() 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 + // toolbar members { // location QComboBox m_location = new QComboBox( m_boxToolbar ); - m_location->setEditable( TRUE ); + 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 @@ -828,19 +889,19 @@ void OFileSelector::initializeListView() 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) ), + 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 )), + 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_pseudoLayout->addWidget( m_View, 288 ); m_stack->addWidget( m_pseudo, EXTENDED ); } } void OFileSelector::initializePerm() { if( m_checkPerm == 0 ){ @@ -873,13 +934,18 @@ bool OFileSelector::compliesMime( const QString &path, const QString &mime ) 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 + */ +bool OFileSelector::compliesMime( const QString& mime ) { +} void OFileSelector::slotFileSelected( const QString &string ) { if( m_shLne ) m_edit->setText( string ); emit fileSelected( string ); } @@ -1047,38 +1113,38 @@ void OFileSelector::reparse() ++it; continue; } MimeType type( fi->absFilePath() ); if( !m_mimetypes.contains( type.id() ) ){ //qWarning("Type %s", type.id().latin1() ); - m_mimetypes.append( type.id() ); + m_mimetypes.insert( type.id(), type.id() ); } ++it; } // add them to the chooser - m_mimeCheck->insertItem( tr("All") ); - m_mimeCheck->insertStringList( m_mimetypes ); + updateMimeCheck(); m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); currentMimeType = m_mimeCheck->currentText(); } }else { // no autoMime - currentMimeType = m_mimetypes.join(";"); + // let the mimetype be set from out side the m_mimeCheck FEATURE + if( m_shChooser ){ - m_mimeCheck->clear(); - m_mimeCheck->insertItem(m_mimetypes.join(",") ); + 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 + else sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); dir.setSorting( sort ); int filter; if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){ filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; @@ -1122,13 +1188,13 @@ void OFileSelector::reparse() }else if( fi->isFile() ){ addFile( currentMimeType, fi ); } //qWarning( "%s", fi->fileName().latin1() ); ++it; } // of while loop - m_View->sort(); + m_View->sort(); if( m_shTool ){ m_location->insertItem( m_currentDir ); } // reenable painting and updates } diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 47697b9..f2d5f84 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -1,33 +1,33 @@ /* - This is based on code and idea of + 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 + _;:, .> :=|. 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 + .%`+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. + -- :-=` 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. */ @@ -40,17 +40,18 @@ #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 + * If you look for a Dialog check OFileDialog * */ class DocLnk; class QCheckBox; class QComboBox; class QPushButton; @@ -61,28 +62,61 @@ class QLabel; class QWidgetStack; class QHBoxLayout; class QVBoxLayout; class QPopupMenu; class QFileInfo; class QHBox; -// +// +typedef QMap< QString, QStringList> MimeTypes; class OFileSelector : public QWidget { Q_OBJECT 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 + * EXTENDED_ALL also shows 'hidden' files + */ enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 }; + + /** + * This is reserved for futrue views + */ enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; - OFileSelector(QWidget *wid, int mode, int selector, + /** + * 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 QStringList &mimetypes = QStringList() ); + 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(); @@ -127,13 +161,13 @@ class OFileSelector : public QWidget { bool cd(const QString &path ); int mode()const { return m_mode; }; int selector()const { return m_selector; }; void setSelector( int ); - + bool showPopup()const { return m_showPopup; }; void setShowPopup( bool pop ) { m_showPopup = pop; }; void setPopupMenu( QPopupMenu * ); // void updateLay(); @@ -172,13 +206,13 @@ class OFileSelector : public QWidget { void slotInsertLocationPath(const QString &, int); void locationComboChanged(); private: void init(); void updateMimes(); - + protected: private: int m_mode, m_selector; QComboBox *m_location, *m_mimeCheck, *m_viewCheck; QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; @@ -187,13 +221,14 @@ class OFileSelector : public QWidget { QCheckBox *m_checkPerm; QWidget *m_pseudo; QVBoxLayout *m_pseudoLayout; QString m_currentDir; QString m_name; - QStringList m_mimetypes; +// QStringList m_mimetypes; + QMap<QString, QStringList> m_mimetypes; FileSelector *m_select; QWidgetStack *m_stack; QVBoxLayout *m_lay; QGridLayout *m_Oselector; @@ -229,18 +264,28 @@ class OFileSelector : public QWidget { void initializeName(); void initializeYes(); void initializeChooser(); void initializeListView(); void initializePerm(); void initPics(); - bool compliesMime(const QString &path, const QString &mime); - + 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); |