From b7e50e77e0b22b3dd0feee43b15d0152d9ca8abb Mon Sep 17 00:00:00 2001 From: ar Date: Sat, 14 Aug 2004 19:17:39 +0000 Subject: - add OFileDialog::getDirectory() this function open a file dialog to select a directory. it can show Directories and All Directories. the first one is without and the second is with hidden directories. --- diff --git a/libopie2/opieui/fileselector/ofiledialog.cpp b/libopie2/opieui/fileselector/ofiledialog.cpp index beb4d6c..ebce0ef 100644 --- a/libopie2/opieui/fileselector/ofiledialog.cpp +++ b/libopie2/opieui/fileselector/ofiledialog.cpp @@ -70,7 +70,10 @@ void saveLastDir( const QString& key, const QString& file ) Config cfg( QFileInfo(qApp->argv()[0]).fileName() ); cfg.setGroup( key ); QFileInfo inf( file ); - cfg.writeEntry("LastDir", inf.dirPath( true ) ); + if ( inf.isFile() ) + cfg.writeEntry("LastDir", inf.dirPath( true ) ); + else + cfg.writeEntry("LastDir", file ); } }; @@ -204,6 +207,36 @@ QString OFileDialog::getSaveFileName(int selector, return ret; } +/** + * This opens up a filedialog in select directory mode + * + * @param selector the Selector Mode + * @param startDir Where to start from + * @param wid the parent + * @param caption of the dialog if QString::null tr("Open") will be used + * @return the directoryName or QString::null + */ +QString OFileDialog::getDirectory(int selector, + const QString &_startDir, + QWidget *wid, + const QString &caption ) +{ + QString ret; + QString startDir = _startDir; + if ( startDir.isEmpty() ) + startDir = lastUsedDir( "FileDialog-SELECTDIR" ); + + OFileDialog dlg( caption.isEmpty() ? tr( "Select Directory" ) : caption, + wid, OFileSelector::DirectorySelector, selector, startDir ); + dlg.showMaximized(); + if ( dlg.exec() ) + { + ret = dlg.fileName(); + saveLastDir( "FileDialog-SELECTDIR", ret ); + } + return ret; +} + void OFileDialog::slotFileSelected(const QString & ) { accept(); diff --git a/libopie2/opieui/fileselector/ofiledialog.h b/libopie2/opieui/fileselector/ofiledialog.h index dfecf3d..569f45c 100644 --- a/libopie2/opieui/fileselector/ofiledialog.h +++ b/libopie2/opieui/fileselector/ofiledialog.h @@ -89,6 +89,11 @@ public: QWidget *wid = 0, const QString &caption = QString::null ); + static QString getDirectory(int selector, + const QString &startDir = QString::null, + 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 ); diff --git a/libopie2/opieui/fileselector/ofileselector.cpp b/libopie2/opieui/fileselector/ofileselector.cpp index b06defd..346eeae 100644 --- a/libopie2/opieui/fileselector/ofileselector.cpp +++ b/libopie2/opieui/fileselector/ofileselector.cpp @@ -428,10 +428,13 @@ void OFileViewFileListView::reread( bool all ) dir.setSorting( QDir::Name | QDir::DirsFirst | QDir::Reversed ); int filter; - if (m_all ) - filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; - else - filter = QDir::Files | QDir::Dirs | QDir::All; + filter = QDir::Dirs; + if ( selector()->mode() != OFileSelector::DIRECTORYSELECTOR ) + filter = filter | QDir::Files | QDir::All; + + if ( m_all ) + filter = filter | QDir::Hidden; + dir.setFilter( filter ); // now go through all files @@ -814,7 +817,7 @@ QWidget* OFileViewFileSystem::widget( QWidget* parent ) void OFileViewFileSystem::activate( const QString& str) { - m_all = (str != QObject::tr("Files") ); + m_all = ( str.find( "All" ) != -1 ); } @@ -874,16 +877,31 @@ OFileSelector::OFileSelector( QWidget* parent, int mode, int sel, { default: case Normal: - str = QObject::tr("Documents"); + if ( m_mode == DIRECTORYSELECTOR ) + str = QObject::tr("Directories"); + else + str = QObject::tr("Documents"); m_cmbView->setCurrentItem( 0 ); break; case Extended: - str = QObject::tr("Files"); - m_cmbView->setCurrentItem( 1 ); + if ( m_mode == DIRECTORYSELECTOR ) + { + str = QObject::tr("Directories"); + m_cmbView->setCurrentItem( 0 ); + } else { + str = QObject::tr("Files"); + m_cmbView->setCurrentItem( 1 ); + } break; case ExtendedAll: - str = QObject::tr("All Files"); - m_cmbView->setCurrentItem( 2 ); + if ( m_mode == DIRECTORYSELECTOR ) + { + str = QObject::tr("All Directories"); + m_cmbView->setCurrentItem( 1 ); + } else { + str = QObject::tr("All Files"); + m_cmbView->setCurrentItem( 2 ); + } break; } slotViewChange( str ); @@ -985,19 +1003,31 @@ void OFileSelector::initMime() void OFileSelector::initViews() { - m_cmbView->insertItem( QObject::tr("Documents") ); - m_cmbView->insertItem( QObject::tr("Files") ); - m_cmbView->insertItem( QObject::tr("All Files") ); + if ( m_mode == OFileSelector::DIRECTORYSELECTOR ) + { + m_cmbView->insertItem( QObject::tr("Directories") ); + m_cmbView->insertItem( QObject::tr("All Directories") ); + } else { + m_cmbView->insertItem( QObject::tr("Documents") ); + m_cmbView->insertItem( QObject::tr("Files") ); + m_cmbView->insertItem( QObject::tr("All Files") ); + } + connect(m_cmbView, SIGNAL(activated(const QString&) ), this, SLOT(slotViewChange(const QString&) ) ); - - m_views.insert( QObject::tr("Documents"), new ODocumentFileView(this) ); - /* see above why add both */ OFileViewInterface* in = new OFileViewFileSystem( this ); - m_views.insert( QObject::tr("Files"), in ); - m_views.insert( QObject::tr("All Files"), in ); + + if ( m_mode == OFileSelector::DIRECTORYSELECTOR ) + { + m_views.insert( QObject::tr("Directories"), in ); + m_views.insert( QObject::tr("All Directories"), in ); + } else { + m_views.insert( QObject::tr("Documents"), new ODocumentFileView(this) ); + m_views.insert( QObject::tr("Files"), in ); + m_views.insert( QObject::tr("All Files"), in ); + } } void OFileSelector::registerView( const Internal::OFileViewInterface* iface ) { diff --git a/libopie2/opieui/fileselector/ofileselector.h b/libopie2/opieui/fileselector/ofileselector.h index de2b98a..b1cd405 100644 --- a/libopie2/opieui/fileselector/ofileselector.h +++ b/libopie2/opieui/fileselector/ofileselector.h @@ -85,8 +85,9 @@ public: * Open = Open A File * Save = Save a File * FILESELECTOR = As A GUI in a screen to select a file + * SelectDir = Select a Directory */ - enum Mode { Open=1, Save=2, FileSelector=4, OPEN=1, SAVE=2, FILESELECTOR=4 }; + enum Mode { Open = 1, Save = 2, DirectorySelector = 3, FileSelector = 4, OPEN = 1, SAVE = 2, DIRECTORYSELECTOR = 3, FILESELECTOR = 4 }; // enum OldMode { OPEN=1, SAVE=2, FILESELECTOR = 4 }; /** * Normal = The old FileSelector -- cgit v0.9.0.2