author | zecke <zecke> | 2002-06-26 18:01:53 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-06-26 18:01:53 (UTC) |
commit | 76f87a51800511fe108edbcd14d4dd40ead6f391 (patch) (side-by-side diff) | |
tree | 1d1b3cf7c3bbd98d294cac738b3bfa277964b32d | |
parent | 125dc1fe52d7a3c8be1b955c79d729cc935c8b6d (diff) | |
download | opie-76f87a51800511fe108edbcd14d4dd40ead6f391.zip opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.gz opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.bz2 |
Improve mimetype handling
API is now fixed
2 Bugs outstanding though
-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 @@ -4,3 +4,3 @@ .>+-= - _;:, .> :=|. This library is free software; you can + _;:, .> :=|. This library is free software; you can .> <`_, > . <= redistribute it and/or modify it under @@ -10,4 +10,4 @@ ._= =} : 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; @@ -18,6 +18,6 @@ ++= -. .` .: 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, @@ -39,3 +39,3 @@ OFileDialog::OFileDialog(const QString &caption, const QString &fileName, - const QStringList &mimetypes ) + const QMap<QString,QStringList>& mimetypes ) : QDialog( wid, "OFileDialog", true ) @@ -59,3 +59,3 @@ OFileDialog::OFileDialog(const QString &caption, - + file->setYesCancelVisible( false ); // relayout @@ -77,3 +77,3 @@ QString OFileDialog::getOpenFileName(int selector, const QString &file, - const QStringList &mimes, + const MimeTypes &mimes, QWidget *wid, @@ -93,3 +93,3 @@ QString OFileDialog::getSaveFileName(int selector, const QString &file, - const QStringList &mimes, + const MimeTypes &mimes, QWidget *wid, diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h index 40d147e..e14253c 100644 --- a/libopie/ofiledialog.h +++ b/libopie/ofiledialog.h @@ -4,3 +4,3 @@ .>+-= - _;:, .> :=|. This library is free software; you can + _;:, .> :=|. This library is free software; you can .> <`_, > . <= redistribute it and/or modify it under @@ -10,4 +10,4 @@ ._= =} : 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; @@ -18,6 +18,6 @@ ++= -. .` .: 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, @@ -41,5 +41,5 @@ class OFileDialog : public QDialog { 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; @@ -52,3 +52,3 @@ class OFileDialog : public QDialog { const QString &fileName = QString::null, - const QStringList& mimefilter = QStringList(), + const MimeTypes& mime = MimeTypes(), QWidget *wid = 0, @@ -59,3 +59,3 @@ class OFileDialog : public QDialog { const QString& fileName = QString::null, - const QStringList& mimefilter = QStringList(), + const MimeTypes& mimefilter = MimeTypes(), QWidget *wid = 0, diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 7a67ab2..6c59f89 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -101,4 +101,4 @@ 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") @@ -106,2 +106,4 @@ OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, m_mimetypes = mimeTypes; + if (mode == SAVE ) + m_name = fileName; initVars(); @@ -111,3 +113,3 @@ OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, init(); -QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); + //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); } @@ -119,5 +121,8 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, { - 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; @@ -131,3 +136,3 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, - + } @@ -137,2 +142,3 @@ OFileSelector::~OFileSelector() + } @@ -145,4 +151,4 @@ void OFileSelector::setNewVisible( bool visible ) // 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", @@ -343,3 +349,3 @@ QStringList OFileSelector::selectedNames()const /** If mode is set to the Dir selection this will return the selected path. - * + * * @@ -366,3 +372,3 @@ QString OFileSelector::directory()const return QPEApplication::documentDir(); - + return QDir(m_currentDir).absPath(); @@ -427,3 +433,5 @@ void OFileSelector::slotViewCheck(const QString &sel) // 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", @@ -433,3 +441,3 @@ void OFileSelector::slotViewCheck(const QString &sel) //connect to close me and other signals as well - + m_stack->addWidget( m_select, NORMAL ); @@ -447,5 +455,26 @@ void OFileSelector::slotViewCheck(const QString &sel) 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) @@ -453,7 +482,17 @@ 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); @@ -465,6 +504,5 @@ void OFileSelector::slotMimeCheck(const QString &mime) updateMimes(); - m_mimeCheck->clear(); - m_mimeCheck->insertStringList(m_mimetypes ); + updateMimeCheck(); m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); - } + //} }else{ // others @@ -514,3 +552,11 @@ void OFileSelector::init() 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", @@ -547,3 +593,3 @@ void OFileSelector::updateMimes() m_mimetypes.clear(); - m_mimetypes.append( tr("All") ); + m_mimetypes.insert( tr("All"), QString::null ); if( m_selector == NORMAL ){ @@ -554,3 +600,3 @@ void OFileSelector::updateMimes() if( !m_mimetypes.contains( (*dit)->type() ) ) - m_mimetypes.append( (*dit)->type() ); + m_mimetypes.insert( (*dit)->type(), (*dit)->type() ); } @@ -630,3 +676,3 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) ( m_mode == SAVE && !info->isWritable() ) ){ - + locked = true; pix = Resource::loadPixmap("locked"); @@ -659,3 +705,3 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) info->lastModified().toString(), - QString::number( info->size() ), + QString::number( info->size() ), info->dirPath( true ), locked, @@ -672,4 +718,4 @@ 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 @@ -683,2 +729,3 @@ void OFileSelector::initializeName() m_edit = new QLineEdit( m_boxName ); + m_edit->setText( m_name ); //m_boxName->addWidget( m_fnLabel ); @@ -690,3 +737,3 @@ void OFileSelector::initializeName() }// else we already initialized - // maybe show the components? + // maybe show the components? // @@ -715,2 +762,20 @@ void OFileSelector::initializeYes() } +/* + * 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() @@ -727,8 +792,4 @@ void OFileSelector::initializeChooser() 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 & ) ), @@ -748,3 +809,3 @@ void OFileSelector::initializeListView() - // toolbar members + // toolbar members { @@ -752,3 +813,3 @@ void OFileSelector::initializeListView() m_location = new QComboBox( m_boxToolbar ); - m_location->setEditable( TRUE ); + m_location->setEditable( TRUE ); m_location->setDuplicatesEnabled( FALSE ); @@ -833,9 +894,9 @@ void OFileSelector::initializeListView() - 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 ); @@ -878,3 +939,8 @@ bool OFileSelector::compliesMime( const QString &path, const QString &mime ) } +/* 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 ) @@ -1052,3 +1118,3 @@ void OFileSelector::reparse() //qWarning("Type %s", type.id().latin1() ); - m_mimetypes.append( type.id() ); + m_mimetypes.insert( type.id(), type.id() ); } @@ -1058,4 +1124,3 @@ void OFileSelector::reparse() // add them to the chooser - m_mimeCheck->insertItem( tr("All") ); - m_mimeCheck->insertStringList( m_mimetypes ); + updateMimeCheck(); m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); @@ -1064,6 +1129,7 @@ void OFileSelector::reparse() }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(); } @@ -1077,3 +1143,3 @@ void OFileSelector::reparse() sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); - else + else sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); @@ -1127,3 +1193,3 @@ void OFileSelector::reparse() } // of while loop - m_View->sort(); + m_View->sort(); if( m_shTool ){ diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 47697b9..f2d5f84 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -1,3 +1,3 @@ /* - This is based on code and idea of + This is based on code and ideas of L. J. Potter ljp@llornkcor.com @@ -9,3 +9,3 @@ .>+-= - _;:, .> :=|. This library is free software; you can + _;:, .> :=|. This library is free software; you can .> <`_, > . <= redistribute it and/or modify it under @@ -15,4 +15,4 @@ ._= =} : 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; @@ -23,6 +23,6 @@ ++= -. .` .: 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, @@ -45,2 +45,3 @@ #include <qlistview.h> + /** This is OPIEs FileDialog Widget. You can use it @@ -49,3 +50,3 @@ * 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 * @@ -66,4 +67,5 @@ class QFileInfo; class QHBox; -// +// +typedef QMap< QString, QStringList> MimeTypes; @@ -72,12 +74,44 @@ class OFileSelector : public QWidget { 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, @@ -132,3 +166,3 @@ class OFileSelector : public QWidget { void setSelector( int ); - + bool showPopup()const { return m_showPopup; }; @@ -177,3 +211,3 @@ class OFileSelector : public QWidget { void updateMimes(); - + protected: @@ -192,3 +226,4 @@ class OFileSelector : public QWidget { QString m_name; - QStringList m_mimetypes; +// QStringList m_mimetypes; + QMap<QString, QStringList> m_mimetypes; @@ -234,4 +269,14 @@ class OFileSelector : public QWidget { 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; @@ -239,3 +284,3 @@ class OFileSelector : public QWidget { static QMap<QString,QPixmap> *m_pixmaps; - + private slots: |