-rw-r--r-- | libopie/ofileselector/ofilelistview.cpp | 85 | ||||
-rw-r--r-- | libopie/ofileselector/ofilelistview.h | 7 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselector.cpp | 283 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselector.h | 39 | ||||
-rw-r--r-- | libopie/ofileselector/ofileview.cpp | 7 | ||||
-rw-r--r-- | libopie/ofileselector/ofileview.h | 2 |
6 files changed, 153 insertions, 270 deletions
diff --git a/libopie/ofileselector/ofilelistview.cpp b/libopie/ofileselector/ofilelistview.cpp index 7108a5b..bb15764 100644 --- a/libopie/ofileselector/ofilelistview.cpp +++ b/libopie/ofileselector/ofilelistview.cpp @@ -1,7 +1,10 @@ +#include <qheader.h> + #include <qpe/mimetype.h> #include <qpe/resource.h> +#include <qpe/qpeapplication.h> #include "ofileselector.h" #include "ofileselectoritem.h" #include "ofilelistview.h" @@ -9,9 +12,31 @@ OFileListView::OFileListView( QWidget* parent, OFileSelector* sel) : QListView( parent ), OFileView( sel ) { - + QPEApplication::setStylusOperation( viewport(), + QPEApplication::RightOnHold); + addColumn(" " ); + addColumn(tr("Name"), 135 ); + addColumn(tr("Size"), -1 ); + addColumn(tr("Date"), 60 ); + addColumn(tr("Mime Type"), -1 ); + QHeader *head = header(); + head->hide(); + setSorting( 1 ); + setAllColumnsShowFocus( TRUE ); + + connect(this, SIGNAL(selectionChanged() ), + this, SLOT(slotSelectionChanged() ) ); + + connect(this, SIGNAL(currentChanged(QListViewItem *) ), + this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); + + connect(this, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), + this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); + + connect(this, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), + this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); } OFileListView::~OFileListView() { } @@ -122,4 +147,62 @@ QStringList OFileListView::selectedPaths()const { } int OFileListView::fileCount() { return childCount(); } +void OFileListView::sort() { + QListView::sort(); +} +void OFileListView::slotSelectionChanged() { + +} +void OFileListView::slotCurrentChanged( QListViewItem* item) { + if (!item ) + return; + + OFileSelectorItem* sel = (OFileSelectorItem*) item; + + qWarning("current changed"); + if(!sel->isDir() ){ + updateLine( sel->text(1) ); + + if (selector()->mode() == OFileSelector::Fileselector ) { + QStringList str = QStringList::split("->", sel->text(1) ); + QString path =sel->directory() + "/" + str[0].stripWhiteSpace(); + DocLnk lnk( path ); + fileSelected(lnk ); + fileSelected( path ); + } + } +} +void OFileListView::slotClicked( int button, QListViewItem* item, + const QPoint&, int ) { + if ( !item ) + return; + + if( button != Qt::LeftButton ) + return; + + OFileSelectorItem *sel = (OFileSelectorItem*)item; + + if(!sel->isLocked() ){ + QStringList str = QStringList::split("->", sel->text(1) ); + if( sel->isDir() ){ + changedDir( sel->directory() + "/" + str[0].stripWhiteSpace() ); + }else{ + updateLine( str[0].stripWhiteSpace() ); + QString path = sel->directory(); + path += "/"; + path += str[0].stripWhiteSpace(); + + DocLnk lnk( path ); + fileSelected( path ); + fileSelected( lnk ); + } + } +} +void OFileListView::slotRightButton( int button, QListViewItem* item, + const QPoint&, int ) { + if (!item || (button != Qt::RightButton )) + return; + + /* raise contextmenu */ +} diff --git a/libopie/ofileselector/ofilelistview.h b/libopie/ofileselector/ofilelistview.h index c7e9223..a83d70d 100644 --- a/libopie/ofileselector/ofilelistview.h +++ b/libopie/ofileselector/ofilelistview.h @@ -31,15 +31,20 @@ public: void addSymlink( const QString& mine, const QString& path, const QString& file, bool isSymlink = FALSE ); void cd( const QString& path ); QWidget* widget(); + void sort(); QString selectedName()const ; QStringList selectedNames()const; QString selectedPath()const; QStringList selectedPaths()const; int fileCount(); - +private slots: + void slotSelectionChanged(); + void slotCurrentChanged(QListViewItem* ); + void slotClicked( int, QListViewItem*, const QPoint&, int ); + void slotRightButton(int, QListViewItem*, const QPoint&, int ); }; #endif diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp index 16ee3ee..98b61f7 100644 --- a/libopie/ofileselector/ofileselector.cpp +++ b/libopie/ofileselector/ofileselector.cpp @@ -30,24 +30,25 @@ #include <sys/stat.h> #include "ofileview.h" #include "ofileselector.h" - +#include "olister.h" QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0; namespace { - int indexByString( const QComboBox *box, const QString &str ){ - int index= 0; - for(int i= 0; i < box->count(); i++ ){ - if( str == box->text(i ) ){ - index= i; - break; - } + /* let's find the index for a specified string */ + int indexByString( const QComboBox *box, const QString &str ){ + int index= 0; + for(int i= 0; i < box->count(); i++ ){ + /* found */ + if( str == box->text(i ) ){ + index= i; + break; + } + } + return index; } - return index; - } - } OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, const QString &dirName, @@ -57,21 +58,23 @@ OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, { 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() ) ); } OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, const char *name, bool newVisible, bool closeVisible ) : QWidget( parent, name ) { + /* update the mimefilter */ if (!mimeFilter.isEmpty() ) { QStringList list = QStringList::split(";", mimeFilter ); m_mimetypes.insert(mimeFilter, list ); } @@ -153,8 +156,9 @@ void OFileSelector::setYesCancelVisible( bool show ) void OFileSelector::setToolbarVisible( bool show ) { m_shTool = show; initializeListView(); // FIXME see above waste of memory + if(!m_shTool ){ m_location->hide(); m_up->hide(); m_homeButton->hide(); @@ -631,28 +635,8 @@ void OFileSelector::initVars() m_fnLabel = 0; m_new = 0; m_close = 0; } -void OFileSelector::addFile(const QString &, QFileInfo *info, bool ) -{ - if(!m_files) - return; - // if( !compliesMime(info->absFilePath(), mime ) ) - // return; - MimeType type( info->absFilePath() ); - if (!compliesMime( type.id() ) ) - return; - -} -void OFileSelector::addDir(const QString &, QFileInfo *, bool ) -{ - if(!m_dir) - return; -} -void OFileSelector::delItems() -{ - -} void OFileSelector::initializeName() { /** Name Layout Line * This is the Layout line arranged in @@ -728,8 +712,9 @@ void OFileSelector::initializeChooser() m_viewCheck->insertItem( tr("Documents") ); m_viewCheck->insertItem( tr("Files") ); m_viewCheck->insertItem( tr("All Files") ); + /* update to custom views */ updateMimeCheck(); connect( m_viewCheck, SIGNAL( activated(const QString & ) ), this, SLOT( slotViewCheck(const QString & ) ) ); @@ -813,34 +798,10 @@ void OFileSelector::initializeListView() } // off toolbar // the Main ListView // make a QWidgetStack first so Views can share the Toolbar - m_View = new QListView( m_pseudo, "Extended view"); - QPEApplication::setStylusOperation( m_View->viewport(), - QPEApplication::RightOnHold); - 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) ), - this, SLOT(slotClicked( 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() @@ -848,16 +809,16 @@ void OFileSelector::initializePerm() if( m_checkPerm == 0 ){ m_checkPerm = new QCheckBox(tr("Set 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" ); QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); + QPainter painter( &pm ); painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); pm.setMask( pm.createHeuristicMask( FALSE ) ); m_pixmaps->insert("dirsymlink", pm ); @@ -915,12 +876,8 @@ bool OFileSelector::compliesMime( const QString& mime ) { it = m_mimetypes.find(currentText ); if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText; else qWarning("found"), list = it.data(); } - // dump it now - //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { - // qWarning( "%s", (*it).latin1() ); - //} if ( list.contains(mime) ) return true; qWarning("list doesn't contain it "); @@ -944,113 +901,10 @@ void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) { slotFileSelected( lnk.name() ); // emit fileSelected( lnk ); } -void OFileSelector::slotSelectionChanged() -{ - -} -void OFileSelector::slotCurrentChanged(QListViewItem* /*item*/ ) -{ - /* - if( item == 0 ) - return; - if( m_selector == Extended || m_selector == ExtendedAll ) { - OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;) - qWarning("current changed"); - if(!sel->isDir() ){ - if( m_shLne ) - m_edit->setText( sel->text(1) ); - - if (m_mode == Fileselector ) { - QStringList str = QStringList::split("->", sel->text(1) ); - QString path =sel->directory() + "/" + str[0].stripWhiteSpace(); - emit fileSelected(path ); - DocLnk lnk( path ); - emit fileSelected(lnk ); - } - } - } */ -} -void OFileSelector::slotClicked( int /*button*/, QListViewItem */*item*/, const QPoint &, int) - -{ - /* - if ( item == 0 ) - return; - - if( button != Qt::LeftButton ) - return; - - switch( m_selector ){ - default: - break; - case Extended: // fall through - case ExtendedAll:{ - OFileSelectorItem *sel = (OFileSelectorItem*)item; - if(!sel->isLocked() ){ - QStringList str = QStringList::split("->", sel->text(1) ); - if( sel->isDir() ){ - cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); - // if MODE Dir m_shLne set the Text - }else{ - if( m_shLne ) - m_edit->setText( str[0].stripWhiteSpace() ); - qWarning("selected here in slot clicked"); - emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() ); - DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() ); - qWarning("file selected"); - emit fileSelected( lnk ); - } - } - break; - } - } */ -} -void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) -{ - if( item == 0 ) - return; - if( button != Qt::RightButton ) - return; - slotContextMenu( item ); -} -void OFileSelector::slotContextMenu( QListViewItem */*item*/) -{ - -} -void OFileSelector::slotChangedDir() -{ - /* - OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); - if(sel->isDir() ){ - QStringList str = QStringList::split("->", sel->text(1) ); - cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); - } - */ -} -void OFileSelector::slotOpen() -{ - /* - OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); - if(!sel->isDir() ){ - QStringList str = QStringList::split("->", sel->text(1) ); - slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() ); - qWarning("slot open"); - // DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() ); - //emit fileSelected( lnk ); - } - */ -} -void OFileSelector::slotRescan() -{ -} -void OFileSelector::slotRename() -{ - reparse(); -} void OFileSelector::slotDelete() { /* OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); @@ -1100,16 +954,16 @@ void OFileSelector::slotNavigate( ) void OFileSelector::reparse() { if( m_selector == Normal ) return; - if( m_selector == Extended || m_selector == ExtendedAll ) - m_View->clear(); - else // custom view - ; // currentView()->clear(); + + 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 @@ -1117,98 +971,29 @@ void OFileSelector::reparse() currentMimeType = m_mimeCheck->currentText(); m_mimeCheck->clear(); // 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.insert( type.id(), type.id() ); - } - - ++it; - } + m_mimetypes = currentLister()->mimeTypes( m_currentDir ); + // add them to the chooser updateMimeCheck(); m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); currentMimeType = m_mimeCheck->currentText(); } }else { // no autoMime // let the mimetype be set from out side the m_mimeCheck FEATURE - if( m_shChooser ){ + if( m_shChooser ) currentMimeType = m_mimeCheck->currentText(); -// updateMimeCheck(); - } + } // now we got our mimetypes we can add the files - QDir dir( m_currentDir ); + currentLister()->reparse( m_currentDir ); + /* we're done with adding let's sort */ + currentView()->sort(); + - int sort; - if ( m_case ) - sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); - else - sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); - dir.setSorting( sort ); - - int filter; - if( m_selector == ExtendedAll /*|| 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" ); - if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ - //qWarning(".. or ." ); - ++it; - continue; - } - if( fi->isSymLink() ){ - QString file = fi->dirPath( true ) + "/" + fi->readLink(); - for( int i = 0; i<=4; i++) { // 5 tries to prevent dos - QFileInfo info( file ); - if( !info.exists() ){ - addSymlink( currentMimeType, fi, TRUE ); - break; - }else if( info.isDir() ){ - addDir( currentMimeType, fi, TRUE ); - break; - }else if( info.isFile() ){ - addFile( currentMimeType, fi, TRUE ); - 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(); if( m_shTool ){ m_location->insertItem( m_currentDir ); } @@ -1251,12 +1036,16 @@ void OFileSelector::internContextMenu() { emit contextMenu(); } void OFileSelector::internChangedDir( const QString& s) { emit dirSelected( s ); + cd(s ); } void OFileSelector::internChangedDir( const QDir& s) { emit dirSelected( s ); } QPixmap OFileSelector::pixmap( const QString& s ) { return (*m_pixmaps)[s]; } +OLister* OFileSelector::currentLister()const { + return 0l; +} diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h index 12af732..a7b363f 100644 --- a/libopie/ofileselector/ofileselector.h +++ b/libopie/ofileselector/ofileselector.h @@ -67,8 +67,9 @@ class QVBoxLayout; class QPopupMenu; class QFileInfo; class QHBox; class OFileView; +class OLister; // /* the mimetypes one name and a list of mimetypes */ typedef QMap< QString, QStringList> MimeTypes; @@ -336,8 +337,9 @@ class OFileSelector : public QWidget { QValueList<DocLnk> selectedDocuments()const; OFileView* currentView(); OFileView* currentView()const; + OLister* currentLister()const; int filter(); int sorting(); QPixmap pixmap( const QString& ); @@ -368,29 +370,37 @@ class OFileSelector : public QWidget { private: FileSelector* m_select; 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; + 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; + QString m_currentDir; + QString m_name; QMap<QString, QStringList> m_mimetypes; 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_boxOk; + QHBox *m_boxName; QHBox *m_boxView; QPopupMenu *m_custom; @@ -411,11 +421,9 @@ class OFileSelector : public QWidget { 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(); @@ -440,19 +448,10 @@ class OFileSelector : public QWidget { 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(); virtual void slotHome(); virtual void slotDoc(); diff --git a/libopie/ofileselector/ofileview.cpp b/libopie/ofileselector/ofileview.cpp index 9bb40c9..38f722c 100644 --- a/libopie/ofileselector/ofileview.cpp +++ b/libopie/ofileselector/ofileview.cpp @@ -1,8 +1,9 @@ +#include <qlineedit.h> + #include <qpe/applnk.h> #include "ofileselector.h" - #include "ofileview.h" OFileView::OFileView( OFileSelector* sel) @@ -28,4 +29,8 @@ void OFileView::changedDir( const QDir& d ) { } OFileSelector* OFileView::selector() const { return m_sel; } +void OFileView::updateLine( const QString& str ) { + if (m_sel->m_shLne ) + m_sel->m_edit->setText( str ); +} diff --git a/libopie/ofileselector/ofileview.h b/libopie/ofileselector/ofileview.h index 1b397f5..a4b1748 100644 --- a/libopie/ofileselector/ofileview.h +++ b/libopie/ofileselector/ofileview.h @@ -80,8 +80,9 @@ public: virtual QStringList selectedNames()const = 0; virtual QString selectedPath()const = 0; virtual QStringList selectedPaths()const = 0; virtual int fileCount() = 0; + virtual void sort() =0; /*signals:*/ protected: @@ -89,8 +90,9 @@ protected: void fileSelected(const DocLnk & ); void contextMenu(); void changedDir(const QString &); void changedDir(const QDir & ); + void updateLine( const QString& ); OFileSelector* selector()const; private: OFileSelector* m_sel; |