-rw-r--r-- | libopie/ofileselector.cc | 135 | ||||
-rw-r--r-- | libopie/ofileselector.h | 4 |
2 files changed, 69 insertions, 70 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index d1f1e1f..ce66f51 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -81,17 +81,18 @@ namespace { OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName, const QStringList &mimetypes ) : QWidget( wid ) { if(wid!=0) resize(wid->width(),wid->height()); m_selector = selector; m_currentDir = dirName; m_name = fileName; - m_mimetypes = mimetypes; + requestedMimeTypesList = m_mimetypes = mimetypes; + // if( mimetypes.isEmpty() ) // m_autoMime = true; m_mode = mode; m_shTool = true; m_shPerm = true; m_shLne = true; m_shChooser = true; @@ -181,50 +182,46 @@ void OFileSelector::delItems() QLayoutIterator it = m_lay->iterator(); while ( it.current() != 0 ){ it.deleteCurrent(); } } void OFileSelector::init() { - +// qDebug("init"); m_stack = new QWidgetStack(this, "wstack" ); - if( m_selector == NORMAL ){ QString currMime; if( m_mimeCheck != 0 ) currMime = m_mimeCheck->currentText(); - updateMimes(); m_select = new FileSelector( currMime == "All" ? QString::null : currMime , m_stack, "fileselector", FALSE, FALSE ); m_stack->addWidget(m_select, NORMAL ); m_lay->addWidget(m_stack ); m_stack->raiseWidget(NORMAL ); connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); m_pseudoLayout = 0l; - }else { + if( m_selector != NORMAL ) { initializeListView(); } - if(m_shLne ){ initializeName(); } - if(m_shPerm ){ m_checkPerm = new QCheckBox(tr("Set Permission"), this, "Permission" ); m_checkPerm->setChecked( false ); m_lay->addWidget(m_checkPerm ); } - if( m_shChooser ) initializeChooser(); - if(m_shYesNo ) initializeYes(); - + + m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, requestedMimeTypesList.first()) ); + reparse(); } void OFileSelector::setYesCancelVisible( bool show ) { if ( show == m_shYesNo ) return; m_shYesNo = show; @@ -411,22 +408,20 @@ bool OFileSelector::compliesMime(const QString &path, const QString &mime ) MimeType type( path ); if( type.id() == mime ) return true; return false; } void OFileSelector::reparse() { + qDebug("reparse"); if(m_View== 0 || m_selector == NORMAL) return; - m_View->clear(); - - QString currMime =m_mimeCheck->currentText(); // update the mimetype now if( m_autoMime ) { QDir dir( m_currentDir ); m_mimetypes.clear(); m_mimeCheck->clear(); dir.setFilter( QDir::Files | QDir::Readable ); dir.setSorting(QDir::Size ); @@ -465,60 +460,61 @@ void OFileSelector::reparse() else filter |= QDir::All; */ if( m_selector == EXTENDED_ALL ) filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; else filter = QDir::Files | QDir::Dirs | QDir::All; dir.setFilter( filter ); - + qDebug("infoList"); const QFileInfoList *list = dir.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; while( (fi=it.current()) ){ if(fi->fileName() == ".." || fi->fileName() == "." ){ ++it; continue; } - qWarning("Test: %s", fi->fileName().latin1() ); +// qWarning("Test: %s", fi->fileName().latin1() ); if(fi->isSymLink() ){ - qWarning("Symlink %s", fi->fileName().latin1() ); +// qWarning("Symlink %s", fi->fileName().latin1() ); QString file = fi->dirPath(true)+"/"+ fi->readLink(); - qWarning("File ->%s", file.latin1() ); +// qWarning("File ->%s", file.latin1() ); for(int i=0; i<=4; i++ ){ // prepend from dos QFileInfo info( file ); if( !info.exists() ){ - qWarning("does not exist" ); +// qWarning("does not exist" ); addSymlink(currMime, fi, TRUE ); break; }else if( info.isDir() ){ - qWarning("isDir" ); +// qWarning("isDir" ); addDir(currMime, fi, TRUE ); break; }else if( info.isFile() ){ - qWarning("isFile" ); +// qWarning("isFile" ); addFile(currMime, fi, TRUE ); break; }else if( info.isSymLink() ){ file = info.dirPath(true)+ "/"+ info.readLink(); - qWarning("isSymlink again %s", file.latin1() ); +// qWarning("isSymlink again %s", file.latin1() ); }else if( i == 4 ){ // just insert it and have the symlink symbol addSymlink(currMime, fi ); - qWarning("level too deep" ); +// qWarning("level too deep" ); } } }else if( fi->isDir() ){ addDir(currMime, fi ); }else if( fi->isFile() ) { // file ? addFile(currMime, fi ); } ++it; } m_View->sort(); +// m_View->ensureItemVisible(); } QString OFileSelector::directory()const { QDir d( m_currentDir); return d.absPath(); } @@ -581,17 +577,17 @@ void OFileSelector::initializeChooser() 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{ // check updateMimes(); - m_mimeCheck->insertStringList( m_mimetypes ); + m_mimeCheck->insertStringList( m_mimetypes ); // } connect( m_viewCheck, SIGNAL(activated(const QString &) ), this, SLOT(slotViewCheck(const QString & ) ) ); connect( m_mimeCheck, SIGNAL(activated(const QString &) ), this, SLOT(slotMimeCheck(const QString & ) ) ); } @@ -641,91 +637,93 @@ void OFileSelector::slotViewCheck(const QString &view ){ m_stack->addWidget( m_select, NORMAL ); m_mimeCheck->clear(); m_selector = NORMAL; updateMimes(); m_mimeCheck->insertStringList( m_mimetypes ); m_stack->raiseWidget( NORMAL ); connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); - }else if(view == QString::fromLatin1("Files") ){ + } else if(view == QString::fromLatin1("Files") ){ // remove from the stack delete m_select; m_select = 0; delete m_View; m_View = 0; - - m_selector = EXTENDED; - // create the ListView or IconView initializeListView(); - reparse(); - }else if(view == QString::fromLatin1("All Files") ) { + } else if(view == QString::fromLatin1("All Files") ) { // remove from the stack delete m_select; m_select = 0; delete m_View; m_View = 0; m_selector = EXTENDED_ALL; initializeListView(); reparse(); - }; + } } void OFileSelector::updateMimes() // lets check which mode is active // check the current dir for items then { m_mimetypes.clear(); m_mimetypes.append("All" ); - if( m_selector == NORMAL ){ +// 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() ); } - }else{ +// }else{ // should be allreday updatet - ; - } + // ; + // } } void OFileSelector::initializeListView() -{ +{ + // in the instance that a developer selected the view to be Files or Entended, + // in the initial initialization, you are deleting objects here + // that aren't even existing yet. + // just to make sure but clean it up better FIXME - delete m_View; - m_View = 0; - delete m_boxToolbar; - delete m_homeButton; - delete m_docButton; - delete m_location; - delete m_up; + // if( m_View) delete m_View; +// m_View = 0; +// if(m_boxToolbar) delete m_boxToolbar; +// if(m_homeButton) delete m_homeButton; +// if(m_docButton) delete m_docButton; +// if( m_location) delete m_location; +// if(m_up) delete m_up; //delete m_pseudo; //if(m_pseudoLayout!=0 ) // why did you overload malloc //delete m_pseudoLayout; m_boxToolbar = 0; m_homeButton = 0; m_docButton = 0; m_location = 0; m_up = 0; m_pseudo = 0; m_pseudoLayout = 0; - // time for the toolbar + qDebug(" time for the toolbar "); m_pseudo = new QWidget(m_stack, "Pseudo Widget"); m_pseudoLayout = new QVBoxLayout(m_pseudo ); if(m_shTool ){ m_boxToolbar = new QHBoxLayout( ); m_boxToolbar->setAutoAdd( true ); m_location = new QComboBox(m_pseudo ); + m_location ->setEditable(TRUE); connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) ); + connect( m_location->lineEdit(),SIGNAL(returnPressed()), this,SLOT( locationComboChanged())); m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton"); m_up->setFixedSize( QSize( 20, 20 ) ); connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); m_up->setFlat(TRUE); m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo); m_homeButton->setFixedSize( QSize( 20, 20 ) ); @@ -737,29 +735,30 @@ void OFileSelector::initializeListView() connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); m_docButton->setFlat(TRUE); m_boxToolbar->addWidget(m_location ); m_boxToolbar->addWidget(m_up ); m_boxToolbar->addWidget(m_homeButton ); m_boxToolbar->addWidget(m_docButton ); m_pseudoLayout->addLayout(m_boxToolbar ); - // lets fill the combobox + qDebug("lets fill the combobox"); StorageInfo storage; const QList<FileSystem> &fs = storage.fileSystems(); QListIterator<FileSystem> it ( fs ); for( ; it.current(); ++it ){ const QString disk = (*it)->name(); const QString path = (*it)->path(); m_location->insertItem(path+ "<-"+disk ); } int count = m_location->count(); m_location->insertItem(m_currentDir ); m_location->setCurrentItem( count ); }; + m_View = new QListView(m_pseudo, "Extended view" ); m_stack->addWidget( m_pseudo, EXTENDED ); m_stack->raiseWidget( EXTENDED ); m_pseudoLayout->addWidget(m_View ); QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold); // set up the stuff // Pixmap Name Date Size mime //(m_View->header() )->hide(); @@ -778,28 +777,29 @@ void OFileSelector::initializeListView() 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 ) ) ); }; + /* If a item is locked depends on the mode if we're in OPEN !isReadable is locked if we're in SAVE !isWriteable is locked */ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){ - qWarning("Add Files" ); +// qWarning("Add Files" ); if( !m_files ){ - qWarning("not mfiles" ); +// qWarning("not mfiles" ); return; } MimeType type( info->filePath() ); QString name; QString dir; bool locked= false; if(mime == "All" ){ @@ -896,53 +896,53 @@ void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) void OFileSelector::slotSelectionChanged() // get the current items // fixme { qWarning("selection changed" ); } void OFileSelector::slotCurrentChanged(QListViewItem *item ) { - qWarning("current changed" ); +// qWarning("current changed" ); if( item == 0 ) return; if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ OFileSelectorItem *sel = (OFileSelectorItem*)item; if(!sel->isDir() ){ - qWarning("is not dir" ); +// qWarning("is not dir" ); if(m_shLne ){ m_edit->setText(sel->text(1) ); - qWarning("setTexy" ); +// qWarning("setTexy" ); } } }else { qWarning("mode not extended" ); } } // either select or change dir void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &point, int ) { if( item == 0 ) return; if( button != Qt::LeftButton ) return; - qWarning("clicked" ); +// qWarning("clicked" ); if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ - qWarning("inside" ); +// qWarning("inside" ); OFileSelectorItem *sel = (OFileSelectorItem*)item; if(!sel->isLocked() ){ // not locked either changedir or open QStringList str = QStringList::split("->", sel->text(1) ); if(sel->isDir() ){ cd( sel->directory() + "/" + str[0] ); } else { - qWarning("file" ); +// qWarning("file" ); if(m_shLne ) m_edit->setText(str[0] ); emit fileSelected(str[0] ); // emit DocLnk need to do it } } else { qWarning( "locked" ); } @@ -951,23 +951,23 @@ void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint & void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) { if (item == 0 ) return; if( button != Qt::RightButton ) return; - qWarning("right button" ); +// qWarning("right button" ); slotContextMenu(item); } void OFileSelector::slotContextMenu(QListViewItem *item) { - qWarning("context menu" ); +// qWarning("context menu" ); if( item ==0 || !m_showPopup ) return; if( m_custom !=0){ m_custom->exec(); }else{ QPopupMenu menu; QAction up; @@ -1009,37 +1009,40 @@ void OFileSelector::slotContextMenu(QListViewItem *item) this, SLOT(slotDelete() ) ); menu.exec(QCursor::pos() ); } } bool OFileSelector::cd(const QString &str ) { - qWarning(" dir %s", str.latin1() ); +// qWarning(" dir %s", str.latin1() ); QDir dir( str); if(dir.exists() ){ m_currentDir = dir.absPath(); reparse(); if(m_shTool ){ int count = m_location->count(); insertLocationPath( str ,count ); m_location->setCurrentItem( count ); } return true; } return false; } void OFileSelector::insertLocationPath(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( pathList.grep( currentPath,TRUE).isEmpty() ) { + 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); } } @@ -1070,17 +1073,17 @@ void OFileSelector::slotRescan() void OFileSelector::slotRename() { // rename inline } void OFileSelector::slotDelete() { - qWarning("delete slot" ); +// qWarning("delete slot" ); OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); QStringList list = QStringList::split("->", sel->text(1) ); if( sel->isDir() ){ QString str = QString::fromLatin1("rm -rf ") + 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() ); @@ -1096,32 +1099,23 @@ void OFileSelector::slotDelete() void OFileSelector::cdUP() { QDir dir( m_currentDir ); dir.cdUp(); if(dir.exists() ){ m_currentDir = dir.absPath(); reparse(); int count = m_location->count(); - insertLocationPath( m_currentDir,count ); - m_location->setCurrentItem( indexFromString(m_currentDir )); + insertLocationPath( m_currentDir, count); + m_location->setCurrentItem( indexByString( m_location, m_currentDir)); //this wont work in all instances // FIXME } } -int OFileSelector::indexFromString(const QString &str) { - - for(int i=0;i< m_location->count();i++) { - if(str == m_location->text(i)) - return i; - } - return 0; -} - void OFileSelector::slotHome() { cd(QDir::homeDirPath() ); } void OFileSelector::slotDoc() { cd(QDir::homeDirPath() + "/Documents" ); @@ -1131,8 +1125,13 @@ void OFileSelector::slotNavigate() { } void OFileSelector::locationComboActivated(const QString & file ) { cd(file.left(file.find("<-",0,TRUE))); reparse(); } + +void OFileSelector::locationComboChanged() { + cd( m_location->lineEdit()->text()); + reparse(); +} diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 81a9e63..babe09f 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -187,17 +187,17 @@ class OFileSelector : public QWidget { protected slots: void slotOk(); void slotCancel(); void slotViewCheck(const QString & ); void slotMimeCheck(const QString & ); void locationComboActivated(const QString & ); void insertLocationPath(const QString &, int); - int indexFromString(const QString &); + void locationComboChanged(); protected: void init(); void updateMimes(); protected: private: int m_mode, m_selector; @@ -206,17 +206,17 @@ class OFileSelector : public QWidget { QPushButton *m_reread, *m_up; QListView *m_View; QCheckBox *m_checkPerm; QWidget *m_pseudo; QVBoxLayout *m_pseudoLayout; QString m_currentDir; QString m_name; - QStringList m_mimetypes; + QStringList m_mimetypes, requestedMimeTypesList; FileSelector *m_select; QWidgetStack *m_stack; QVBoxLayout *m_lay; QGridLayout *m_Oselector; QHBoxLayout *m_boxToolbar; QHBoxLayout *m_boxOk; |