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 /libopie | |
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 @@ -1,110 +1,110 @@ /* =. 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. */ #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 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, 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 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); dlg.showMaximized(); if( dlg.exec() ) ret = dlg.fileName(); 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); dlg.showMaximized(); if( dlg.exec() ) ret = dlg.fileName(); return ret; } void OFileDialog::slotFileSelected(const QString & ) { accept(); diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h index 40d147e..e14253c 100644 --- a/libopie/ofiledialog.h +++ b/libopie/ofiledialog.h @@ -1,76 +1,76 @@ /* =. 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. */ #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 &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, // const QString& caption = QString::null ); private: class OFileDialogPrivate; OFileDialogPrivate *d; OFileSelector *file; private slots: void slotFileSelected( const QString & ); void slotDirSelected(const QString & ); }; diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 7a67ab2..6c59f89 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -86,78 +86,84 @@ namespace { return text(2); }else if( id == 3 ){ // date return text(3); } return ke; }; private: bool mLocked:1; bool dir:1; QString m_dir; }; }; 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 ); }else{ m_new->show(); } } void OFileSelector::setCloseVisible( bool visible ) { m_shClose = visible; if( m_selector == NORMAL ){ setNewVisible( m_shNew ); // yeah baby }else{ @@ -328,56 +334,56 @@ QString OFileSelector::selectedName() const }else { // installed view ; } return name; } QStringList OFileSelector::selectedNames()const { QStringList list; if( m_selector == NORMAL ){ list << selectedName(); }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 ){ path = QPEApplication::documentDir(); }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ ; } 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 CUSTOM: case EXTENDED: case EXTENDED_ALL: default: count = m_View->childCount(); break; @@ -412,74 +418,106 @@ QValueList<DocLnk> OFileSelector::selectedDocuments() const // 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 - 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; initializeListView(); 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) ); } reparse(); } } void OFileSelector::slotLocationActivated(const QString &file) { cd(file.left(file.find("<-",0,TRUE))); reparse(); } void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count) @@ -499,73 +537,81 @@ void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count pathList.append( currentPath ); m_location->insertStringList( pathList,-1); } } void OFileSelector::locationComboChanged() { 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 ){ - 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 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_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( ); } 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() { 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; @@ -615,155 +661,170 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) MimeType type( info->absFilePath() ); if( mime != tr("All") && type.id() != mime ) return; QPixmap pix = type.pixmap(); QString dir; QString name; bool locked; if( pix.isNull() ) pix = Resource::loadPixmap( "UnknownDocument-14"); dir = info->dirPath( true ); 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() ), dir, locked ); } void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) { if(!m_dir) return; if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){ bool locked = false; QString name; QPixmap pix; if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ locked = true; if( symlink ) pix = (*m_pixmaps)["symlinkedlocked"]; else pix = Resource::loadPixmap("lockedfolder"); }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 * */ 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") ); - 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 & ) ) ); } } void OFileSelector::initializeListView() { if( m_pseudo == 0 ){ 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 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 ) ); @@ -818,39 +879,39 @@ void OFileSelector::initializeListView() 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) ), + 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 ){ m_checkPerm = new QCheckBox(tr("Ser 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" ); @@ -863,33 +924,38 @@ void OFileSelector::initPics() 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 + */ +bool OFileSelector::compliesMime( const QString& mime ) { +} 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 ) @@ -1037,58 +1103,58 @@ void OFileSelector::reparse() // 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.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; }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" ); @@ -1112,23 +1178,23 @@ void OFileSelector::reparse() 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(); + 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,98 +1,132 @@ /* - 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. */ #ifndef opiefileselector_h #define opiefileselector_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 + * If you look for a Dialog check OFileDialog * */ class DocLnk; class QCheckBox; class QComboBox; class QPushButton; class FileSelector; class QGridLayout; class QLineEdit; 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(); // currently only for the FILESELECTOR Mode 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 @@ -117,33 +151,33 @@ class OFileSelector : public QWidget { bool showDirs()const { return m_dir; } void setShowDirs(bool ); const QListView* listView() { return m_View; }; bool isCaseSensetive()const { return m_case; } void setCaseSensetive(bool caSe ); bool showFiles()const { return m_files; }; void setShowFiles(bool ); 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(); void reparse(); // re reads the dir QString selectedName( )const; QStringList selectedNames()const; QString selectedPath() const; QStringList selectedPaths() const; QString directory()const; int fileCount(); @@ -162,48 +196,49 @@ class OFileSelector : public QWidget { void cancel(); void contextMenu(); private slots: void slotTest() { qWarning("slotTest" ); setLineEditVisible(false ); }; 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(); - + 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; 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; +// QStringList m_mimetypes; + QMap<QString, QStringList> m_mimetypes; FileSelector *m_select; 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; @@ -219,38 +254,48 @@ class OFileSelector : public QWidget { 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 &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(); |