-rw-r--r-- | libopie/ofileselector/ofileselector.cpp | 15 | ||||
-rw-r--r-- | libopie/ofileselector/olister.cpp | 10 | ||||
-rw-r--r-- | libopie/ofileselector/olister.h | 18 | ||||
-rw-r--r-- | libopie/ofileselector/olocallister.cpp | 29 | ||||
-rw-r--r-- | libopie/ofileselector/olocallister.h | 5 |
5 files changed, 62 insertions, 15 deletions
diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp index 255e79e..9ce07dd 100644 --- a/libopie/ofileselector/ofileselector.cpp +++ b/libopie/ofileselector/ofileselector.cpp @@ -233,78 +233,72 @@ void OFileSelector::setShowFiles(bool show ) } /// 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("List View"); break; case ExtendedAll: text = tr("All List View"); 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_shLne ) { - name = m_currentDir + "/" +m_edit->text(); - }else{ - name = m_currentDir + "/" + currentView()->selectedName(); - } + name = currentLister()->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(); } /* normal case to do */ return path; } QStringList OFileSelector::selectedPaths() const { QStringList list; list << selectedPath(); return list; } QString OFileSelector::directory()const @@ -393,98 +387,95 @@ QString OFileSelector::currentMimeType() const{ } void OFileSelector::slotMimeCheck(const QString &mime) { if( m_selector == Normal ){ initializeOldSelector(); 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 ¤tPath, 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() { initFactory(); m_lay = new QVBoxLayout( this ); m_lay->setSpacing(0 ); /* take care of the main view... */ initToolbar(); //if( m_shChooser ) // the Chooser for the view and Mimetypes initializeChooser(); /* initialize the file lister */ 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(";"); } } initializeOldSelector(); }else{ initializeView(); } if( m_shLne ) // the LineEdit with the current FileName initializeName(); if( m_shPerm ) // the Permission QCheckBox initializePerm(); @@ -825,74 +816,74 @@ void OFileSelector::slotFileSelected( const QString &string ) m_edit->setText( string ); emit fileSelected( string ); } void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) { slotFileSelected( lnk.name() ); // emit fileSelected( lnk ); } 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() { + // FIXME won't work on non filesystem based systems + // better call the Olister 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; 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 ) { diff --git a/libopie/ofileselector/olister.cpp b/libopie/ofileselector/olister.cpp index ea09940..aaaf6a2 100644 --- a/libopie/ofileselector/olister.cpp +++ b/libopie/ofileselector/olister.cpp @@ -1,33 +1,34 @@ #include <qcombobox.h> +#include <qlineedit.h> #include "olister.h" #include "ofileview.h" #include "opixmapprovider.h" #include "ofileselector.h" OLister::OLister( OFileSelector* view) : m_view( view ), m_acc( 0l ) { m_prov = new OPixmapProvider( view ); } OLister::~OLister() { delete m_prov; } void OLister::setPixmapProvider( OPixmapProvider* prov ) { delete m_prov; m_prov = prov; } bool OLister::showFiles()const { return m_view->showFiles(); } bool OLister::showDirs()const { return m_view->showDirs(); } void OLister::addFile( const QString& mine, QFileInfo* info, const QString& extra, bool isSymlink ) { int t = isSymlink ? OPixmapProvider::File | OPixmapProvider::Symlink : OPixmapProvider::File; QPixmap pix = provider()->pixmap(t, mine, @@ -83,89 +84,98 @@ void OLister::addDir( const QString& mine, dir, extra, isSymlink ); } void OLister::addSymlink( const QString& mine, QFileInfo* info, const QString& extra, bool isSymlink ) { QPixmap pix = provider()->pixmap( OPixmapProvider::Symlink, mine, info ); view()->currentView()->addSymlink( pix, mine, info, extra, isSymlink ); } void OLister::addSymlink( const QString& mine, const QString& path, const QString& name, const QString& extra, bool isSymlink ) { QPixmap pix = provider()->pixmap( OPixmapProvider::Symlink, mine, path, name ); view()->currentView()->addSymlink( pix, mine, path, name, extra, isSymlink ); } OFileSelector* OLister::view() { return m_view; } +OFileSelector* OLister::view()const { + return m_view; +} OPixmapProvider* OLister::provider() { return m_prov; } bool OLister::compliesMime( const QString& mime ) { return view()->compliesMime( mime ); } void OLister::internFileSelected( const QString& dir ) { view()->internFileSelected( dir ); } void OLister::internChangedDir( const QString& dir ) { view()->internChangedDir( dir ); } OListerCmbAccess* OLister::comboBox() { if (!m_acc ) m_acc = new OListerCmbAccess( view()->m_location ); return m_acc; } OListerCmbAccess::OListerCmbAccess(QComboBox* cmb ) : m_cmb( cmb ) {} OListerCmbAccess::~OListerCmbAccess() { } void OListerCmbAccess::clear() { if ( m_cmb ) m_cmb->clear(); } void OListerCmbAccess::setCurrentItem( const QString& add, bool FORCE_ADD) { if ( !m_cmb ) return; int c = m_cmb->count(); for ( int i = 0; i < m_cmb->count(); i++ ) { if ( m_cmb->text(i) == add ) { m_cmb->setCurrentItem( i ); return; } } if (!FORCE_ADD ) return; m_cmb->insertItem(add ); m_cmb->setCurrentItem( c ); } void OListerCmbAccess::insert( const QString& str ) { if ( m_cmb ) m_cmb->insertItem( str ); } QString OListerCmbAccess::currentText()const { QString str; if (m_cmb ) str = m_cmb->currentText(); return str; } +QString OLister::lineEdit()const { + if ( view()->m_shLne ) + return view()->m_edit->text(); + + return QString::null; +} diff --git a/libopie/ofileselector/olister.h b/libopie/ofileselector/olister.h index cd84316..4adb9f8 100644 --- a/libopie/ofileselector/olister.h +++ b/libopie/ofileselector/olister.h @@ -1,114 +1,130 @@ #ifndef OPIE_FILE_LISTER_H #define OPIE_FILE_LISTER_H #include <qfileinfo.h> #include <qmap.h> #include <qstring.h> #include <qstringlist.h> class QComboBox; class OPixmapProvider; class OFileSelector; class OListerCmbAccess; /** * lister is something like KIO but very * very basic and currently only for * populating our views. * This is a base class which needs to be implemented. * @see OLocalLister for a filesystem based implementation */ class OLister { public: OLister( OFileSelector* ); virtual ~OLister(); - virtual void reparse(const QString& path) = 0; + + /** + * if path == QString::null reread current dir + */ + virtual void reparse(const QString& path = QString::null ) = 0; /** * return a list of available mimetypes */ virtual QMap<QString, QStringList> mimeTypes( const QString& dir ) = 0; void setPixmapProvider( OPixmapProvider* ); /* some way a slot */ virtual void fileSelected( const QString& dir, const QString& file, const QString& extra ) = 0; virtual void changedDir( const QString& dir, const QString& file, const QString& extra ) = 0; + virtual QString selectedName()const = 0; + virtual QStringList selectedNames()const = 0; protected: /** * I hate too big classes * this is a way to group * access to a ComboBox * which might exist or * not in a secure way */ OListerCmbAccess* comboBox(); bool showFiles()const; bool showDirs()const; bool compliesMime( const QString& mime ); void addFile( const QString& mine, QFileInfo*, const QString& extra = QString::null, bool isSymlink = FALSE ); void addFile( const QString& mine, const QString& path, const QString& file, const QString& extra = QString::null, bool isSymlink = FALSE ); void addDir( const QString& mine, QFileInfo*, const QString& extra = QString::null, bool isSymlink = FALSE ); void addDir( const QString& mine, const QString& path, const QString& dir, const QString& extra = QString::null, bool isSymlink = FALSE ); void addSymlink( const QString& mine, QFileInfo* info, const QString& extra = QString::null, bool isSymlink = FALSE); void addSymlink( const QString& mine, const QString& path, const QString& name, const QString& extra = QString::null, bool isSymlink = FALSE ); OFileSelector* view(); + OFileSelector* view()const; OPixmapProvider* provider(); void internFileSelected( const QString& file ); void internChangedDir( const QString& dir ); + + /** + * try to take + * the text from the mainwindows + * lineedit + * if it's not available QString::null + * will be returned + */ + QString lineEdit()const; private: OFileSelector* m_view; OPixmapProvider* m_prov; OListerCmbAccess* m_acc; class Private; Private *d; }; class OListerCmbAccess { friend class OLister; public: OListerCmbAccess( QComboBox* = 0l); ~OListerCmbAccess(); /** * clears the combobox */ void clear(); /** * set's @param add to be the current Item * if the item is not present it'll be removed */ void setCurrentItem( const QString& add, bool FORECE_ADD = TRUE ); /** * inserts the the String at * a non predictable position... The position is determined * by the QComboBox code */ void insert( const QString& ); diff --git a/libopie/ofileselector/olocallister.cpp b/libopie/ofileselector/olocallister.cpp index 5d7884d..4d36d64 100644 --- a/libopie/ofileselector/olocallister.cpp +++ b/libopie/ofileselector/olocallister.cpp @@ -1,88 +1,93 @@ #include <qdir.h> #include <qfileinfo.h> #include <qmap.h> #include <qpe/mimetype.h> #include "ofileselector.h" +#include "ofileview.h" #include "olocallister.h" OLocalLister::OLocalLister( OFileSelector* file ) : OLister( file ) { + m_dir = QDir::homeDirPath(); } OLocalLister::~OLocalLister() { } QMap<QString, QStringList> OLocalLister::mimeTypes( const QString& curDir ) { QMap<QString, QStringList> mimes; // let's find possible mimetypes QDir dir( curDir ); dir.setFilter( QDir::Files | QDir::Readable ); dir.setSorting( QDir::Size ); const QFileInfoList *list = dir.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; while( (fi=it.current() ) ) { /* skip .desktop */ if( fi->extension() == QString::fromLatin1("desktop") ){ ++it; continue; } MimeType type( fi->absFilePath() ); if( !mimes.contains( type.id() ) ){ mimes.insert( type.id(), type.id() ); } ++it; } return mimes; } /** * FIXME mimecheck * use mime check for that * filter dirs * filter filters * filter files * filter mimetypes */ -void OLocalLister::reparse( const QString& path ) { +void OLocalLister::reparse( const QString& pa ) { + if (!pa.isEmpty() ) + m_dir = pa; + QString currentMimeType; - QDir dir( path ); + QDir dir( m_dir ); dir.setSorting( view()->sorting() ); dir.setFilter( view()->filter() ); const QFileInfoList *list = dir.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; while( (fi=it.current() ) ){ if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ ++it; continue; } if( fi->isSymLink() ){ QString file = fi->dirPath( true ) + "/" + fi->readLink(); /* * 5 tries to prevent dos attack */ for( int i = 0; i<=4; i++) { QFileInfo info( file ); if( !info.exists() ){ addSymlink( currentMimeType, fi, QString::null, TRUE ); break; }else if( info.isDir() ){ if (!showDirs() ) break; addDir( currentMimeType, fi, QString::null, TRUE ); @@ -94,32 +99,52 @@ void OLocalLister::reparse( const QString& path ) { /* check if we comply to the mimetype */ MimeType type( info.absFilePath() ); if (compliesMime( type.id() ) ) addFile( currentMimeType, fi, QString::null, TRUE ); break; }else if( info.isSymLink() ){ file = info.dirPath(true ) + "/" + info.readLink() ; break; }else if( i == 4){ addSymlink( currentMimeType, fi ); } } }else if( fi->isDir() ){ if (showDirs() ) addDir( currentMimeType, fi ); }else if( fi->isFile() ){ if ( showFiles() ) addFile( currentMimeType, fi ); } ++it; } // of while loop } /* more accepting it code */ void OLocalLister::fileSelected( const QString& dir, const QString& file, const QString& ) { internFileSelected( dir + "/" + file ); } void OLocalLister::changedDir( const QString& dir, const QString& file, const QString& ) { internChangedDir( dir + "/" + file ); } +/* + * assemble the the Url now + */ +QString OLocalLister::selectedName()const { + QString str = m_dir; + QString name = lineEdit(); + + if ( name.isEmpty() ) + name = view()->currentView()->selectedName(); + + str += "/" + name; + + return str; +} +QStringList OLocalLister::selectedNames()const { + QStringList list; + list << selectedName(); + + return list; +} diff --git a/libopie/ofileselector/olocallister.h b/libopie/ofileselector/olocallister.h index 01e6f3c..0cdf51f 100644 --- a/libopie/ofileselector/olocallister.h +++ b/libopie/ofileselector/olocallister.h @@ -1,16 +1,21 @@ #ifndef OPIE_LOCAL_LISTER #define OPIE_LOCAL_LISTER #include "olister.h" class OLocalLister : public OLister { public: OLocalLister( OFileSelector* ); ~OLocalLister(); void reparse( const QString& path ); QMap<QString, QStringList> mimeTypes(const QString& dir ); void fileSelected( const QString& dir, const QString& file, const QString& ); void changedDir( const QString& dir, const QString& file,const QString& ); + QString selectedName()const; + QStringList selectedNames()const; + +private: + QString m_dir; }; #endif |