author | llornkcor <llornkcor> | 2002-04-24 03:22:24 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-04-24 03:22:24 (UTC) |
commit | 219994e9d1de70b44c994ccee57060741f22d428 (patch) (side-by-side diff) | |
tree | 2acfcae2a6bfc432266ee1d0cb76285a95fe683f | |
parent | c9159a3d5192799f5b2911d13337f04f50b1ac5a (diff) | |
download | opie-219994e9d1de70b44c994ccee57060741f22d428.zip opie-219994e9d1de70b44c994ccee57060741f22d428.tar.gz opie-219994e9d1de70b44c994ccee57060741f22d428.tar.bz2 |
fixed location combo showing redundant directories and multiple seperators
-rw-r--r-- | libopie/ofileselector.cc | 123 | ||||
-rw-r--r-- | libopie/ofileselector.h | 15 |
2 files changed, 111 insertions, 27 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index cb18039..d1f1e1f 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -37,16 +37,18 @@ #include <qcheckbox.h> #include <qlabel.h> #include <qheader.h> #include <qdir.h> #include <qpainter.h> #include <qaction.h> #include <qpopupmenu.h> #include <qcursor.h> +#include <qstringlist.h> +#include <qmessagebox.h> #include <qpe/qpeapplication.h> #include <qpe/fileselector.h> #include <qpe/applnk.h> #include <qpe/global.h> #include <qpe/mimetype.h> #include <qpe/resource.h> #include <qpe/storage.h> @@ -129,16 +131,17 @@ OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString if(m_pixmaps == 0 ) // init the pixmaps initPics(); m_lay = new QVBoxLayout(this); init(); m_edit->setText( fileName ); } + void OFileSelector::initPics() { qWarning("init pics" ); 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 ); @@ -146,17 +149,18 @@ void OFileSelector::initPics() m_pixmaps->insert("dirsymlink", pm ); 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 ); -}; +} + // let's initialize the gui /** -------------------- | cmbBox Button | -------------------- | FileSlector | | or | | OSelector | @@ -174,16 +178,17 @@ void OFileSelector::initPics() */ void OFileSelector::delItems() { QLayoutIterator it = m_lay->iterator(); while ( it.current() != 0 ){ it.deleteCurrent(); } } + void OFileSelector::init() { m_stack = new QWidgetStack(this, "wstack" ); if( m_selector == NORMAL ){ QString currMime; if( m_mimeCheck != 0 ) currMime = m_mimeCheck->currentText(); @@ -211,17 +216,17 @@ void OFileSelector::init() if( m_shChooser ) initializeChooser(); if(m_shYesNo ) initializeYes(); -}; +} void OFileSelector::setYesCancelVisible( bool show ) { if ( show == m_shYesNo ) return; m_shYesNo = show; if( !show ){ delete m_ok; @@ -256,94 +261,105 @@ void OFileSelector::setPermissionBarVisible( bool show ) { if( show == m_shPerm ) return; m_shPerm = show; updateLay(); } + void OFileSelector::setLineEditVisible( bool show ) { if( show == m_shLne ) return; m_shLne = show; if( !show ){ delete m_edit; delete m_fnLabel; m_edit = 0; m_fnLabel = 0; //delete m_boxName; will be deleted } updateLay(); } + void OFileSelector::setChooserVisible( bool show ) { if( show = m_shChooser ) return; m_shChooser = show; if( !show ){ delete m_mimeCheck; delete m_viewCheck; m_mimeCheck = 0; m_viewCheck = 0; } updateLay(); } + QCheckBox* OFileSelector::permissionCheckbox( ) { return m_checkPerm; } + void OFileSelector::setCaseSensetive( bool caSe ) { m_case = caSe; reparse(); } + void OFileSelector::setShowFiles(bool files ){ m_files = files; reparse(); } + void OFileSelector::setPopupMenu(QPopupMenu *pop ) { //delete oldpopup; m_custom = pop; } + bool OFileSelector::setPermission( ) const { if( m_checkPerm == 0 ) return false; else return m_checkPerm->isChecked(); } + void OFileSelector::setPermissionChecked( bool check ) { if( m_checkPerm == 0 ) return; m_checkPerm->setChecked( check ); } + QString OFileSelector::selectedName( )const { QString string; if( m_selector == NORMAL ){ const DocLnk *lnk = m_select->selected(); string = lnk->file(); }else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { QListViewItem *item = m_View->currentItem(); if(item != 0 ){ string = m_currentDir + "/" + item->text( 1 ); } } return string; } + QStringList OFileSelector::selectedNames()const { QStringList list; return list; } + DocLnk OFileSelector::selectedDocument( )const { DocLnk lnk; return lnk; } void OFileSelector::updateLay() { /* if( m_shTool ) @@ -380,16 +396,17 @@ void OFileSelector::updateLay() delete m_stack; //delete m_list; init(); if( m_shLne ) m_edit->setText(text ); if( m_shPerm ) m_checkPerm->setChecked(check ); } + // let's update the mimetypes. Use the current mimefilter for the 2nd QDir retrieve // insert QListViewItems with the right options bool OFileSelector::compliesMime(const QString &path, const QString &mime ) { if( mime == "All" ) return true; MimeType type( path ); if( type.id() == mime ) @@ -427,16 +444,17 @@ void OFileSelector::reparse() ++it; } m_mimetypes.prepend("All" ); m_mimeCheck->insertStringList(m_mimetypes ); // set it to the current mimetype m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currMime ) ); }; + QDir dir( m_currentDir ); //dir.setFilter(-1 ); int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed; if( m_case ) sort = QDir::IgnoreCase; dir.setSorting( sort ); int filter; @@ -492,28 +510,33 @@ void OFileSelector::reparse() addDir(currMime, fi ); }else if( fi->isFile() ) { // file ? addFile(currMime, fi ); } ++it; } m_View->sort(); } + QString OFileSelector::directory()const { - return m_currentDir; + QDir d( m_currentDir); + return d.absPath(); } + int OFileSelector::fileCount() { return 0; } + void OFileSelector::slotOk( ) { emit ok(); } + void OFileSelector::slotCancel( ) { emit cancel(); } void OFileSelector::initializeName() { m_boxName = new QHBoxLayout(this ); @@ -521,31 +544,33 @@ void OFileSelector::initializeName() m_fnLabel = new QLabel(this ); m_fnLabel->setText(tr("Name:") ); m_boxName->addWidget(m_fnLabel ); m_boxName->insertSpacing(1, 8 ); m_boxName->addWidget(m_edit, 100 ); m_lay->addLayout(m_boxName); } + void OFileSelector::initializeYes() { m_ok = new QPushButton("&Save", this, "save" ); m_cancel = new QPushButton("C&ancel", this, "cancel" ); m_boxOk = new QHBoxLayout(this ); m_boxOk->addWidget( m_ok, Qt::AlignHCenter ); m_boxOk->insertSpacing(1, 8 ); m_boxOk->addWidget( m_cancel, Qt::AlignHCenter); m_lay->addLayout(m_boxOk ); connect(m_ok, SIGNAL(clicked() ), this, SLOT(slotOk() ) ); connect(m_cancel, SIGNAL(clicked() ), this, SLOT(slotCancel() ) ); } + void OFileSelector::initializeChooser() { m_boxView = new QHBoxLayout(this ); m_mimeCheck = new QComboBox(this, "mime check"); m_viewCheck = new QComboBox(this, "view check"); m_boxView->addWidget(m_viewCheck, 0 ); m_boxView->insertSpacing(2, 8 ); @@ -565,16 +590,17 @@ void OFileSelector::initializeChooser() // } 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::slotMimeCheck(const QString &view ){ if(m_selector == NORMAL ){ delete m_select; m_select = new FileSelector(view == "All" ? QString::null : view , m_stack, "fileselector", FALSE, FALSE ); m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); }else{ @@ -640,17 +666,17 @@ void OFileSelector::slotViewCheck(const QString &view ){ 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 ){ @@ -660,17 +686,18 @@ void OFileSelector::updateMimes() // lets check which mode is active for ( ; dit.current(); ++dit ) { if( !m_mimetypes.contains((*dit)->type() ) ) m_mimetypes.append( (*dit)->type() ); } }else{ // should be allreday updatet ; } -}; +} + void OFileSelector::initializeListView() { // 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; @@ -688,16 +715,17 @@ void OFileSelector::initializeListView() m_pseudoLayout = 0; // 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 ); + connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) ); 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 ) ); @@ -800,16 +828,17 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ) } } } 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( showDirs ) { bool locked=false; QString name; @@ -837,40 +866,44 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) } new OFileSelectorItem(m_View, pix, name, info->lastModified().toString(), QString::number(info->size() ),info->dirPath(true), locked, true ); } } + void OFileSelector::setShowDirs(bool dir ) { m_dir = dir; reparse(); } void OFileSelector::slotFileSelected(const QString &string ) { if(m_shLne ) m_edit->setText( string ); emit fileSelected( string ); // do AppLnk stuff } + void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) { slotFileSelected(lnk.name() ); emit fileSelected( lnk ); } + void OFileSelector::slotSelectionChanged() // get the current items // fixme { qWarning("selection changed" ); } + void OFileSelector::slotCurrentChanged(QListViewItem *item ) { qWarning("current changed" ); if( item == 0 ) return; if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ OFileSelectorItem *sel = (OFileSelectorItem*)item; @@ -880,55 +913,58 @@ void OFileSelector::slotCurrentChanged(QListViewItem *item ) m_edit->setText(sel->text(1) ); 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" ); if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ 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" ); - if(m_shLne ) - m_edit->setText(str[0] ); - emit fileSelected(str[0] ); - // emit DocLnk need to do it + cd( sel->directory() + "/" + str[0] ); + } else { + qWarning("file" ); + if(m_shLne ) + m_edit->setText(str[0] ); + emit fileSelected(str[0] ); + // emit DocLnk need to do it } - }else{ + } else { qWarning( "locked" ); } }; } + void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) { if (item == 0 ) return; if( button != Qt::RightButton ) return; qWarning("right button" ); slotContextMenu(item); } + void OFileSelector::slotContextMenu(QListViewItem *item) { qWarning("context menu" ); if( item ==0 || !m_showPopup ) return; if( m_custom !=0){ m_custom->exec(); @@ -970,88 +1006,133 @@ void OFileSelector::slotContextMenu(QListViewItem *item) delItem.setText( tr("Delete") ); delItem.addTo(&menu ); connect(&delItem, SIGNAL(activated() ), this, SLOT(slotDelete() ) ); menu.exec(QCursor::pos() ); } } + bool OFileSelector::cd(const QString &str ) { qWarning(" dir %s", str.latin1() ); QDir dir( str); if(dir.exists() ){ - m_currentDir = str; + m_currentDir = dir.absPath(); reparse(); if(m_shTool ){ - int count = m_location->count(); - m_location->insertItem(str ); + 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; + for(int i=0;i<count;i++) { + pathList << m_location->text(i); + } + if( pathList.grep( currentPath,TRUE).isEmpty() ) { + m_location->clear(); + if( currentPath.left(2)=="//") + pathList.append( currentPath.right(currentPath.length()-1) ); + else + pathList.append( currentPath ); + m_location->insertStringList( pathList,-1); + } +} + void OFileSelector::slotChangedDir() { OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); if(sel->isDir() ){ QStringList str = QStringList::split("->", sel->text(1) ); cd( sel->directory() + "/" + str[0] ); + } } + void OFileSelector::slotOpen() { OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); if(!sel->isDir() ){ QStringList str = QStringList::split("->", sel->text(1) ); slotFileSelected( str[0] ); } } + void OFileSelector::slotRescan() { reparse(); } + void OFileSelector::slotRename() { // rename inline } + void OFileSelector::slotDelete() { 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]; - ::system(str.utf8().data() ); - }else{ + 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() ); + break; + } + } else { QFile::remove( list[0] ); } m_View->takeItem( sel ); delete sel; } void OFileSelector::cdUP() { QDir dir( m_currentDir ); dir.cdUp(); if(dir.exists() ){ m_currentDir = dir.absPath(); reparse(); int count = m_location->count(); - m_location->insertItem(m_currentDir ); - m_location->setCurrentItem( count ); + insertLocationPath( m_currentDir,count ); + m_location->setCurrentItem( indexFromString(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" ); } + void OFileSelector::slotNavigate() { } + +void OFileSelector::locationComboActivated(const QString & file ) { + cd(file.left(file.find("<-",0,TRUE))); + reparse(); +} diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 5e98a1e..81a9e63 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -62,18 +62,18 @@ class QWidgetStack; class QHBoxLayout; class QVBoxLayout; class QPopupMenu; class QFileInfo; // class OFileSelectorItem : public QListViewItem { public: OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path, - const QString &date, const QString &size, const QString &mDir, - bool isLocked=false, bool isDir=false ): QListViewItem(view) { + const QString &date, const QString &size, const QString &mDir, + bool isLocked=false, bool isDir=false ): QListViewItem(view) { setPixmap(0, pixmap ); setText(1, path ); setText(2, size ); setText(3, date ); //setText(4, mDir ); m_dir = mDir; dir = isDir; mLocked = isLocked; @@ -89,21 +89,21 @@ class OFileSelectorItem : public QListViewItem { } QString path()const{ return text(1 ); } QString key(int id, bool )const { QString ke; if( id == 0 || id == 1 ){ // name if( dir ){ - ke.append("0" ); - ke.append( text(1) ); + ke.append("0" ); + ke.append( text(1) ); }else{ - ke.append("1" ); - ke.append( text(1) ); + ke.append("1" ); + ke.append( text(1) ); } }else if( id == 2 ){ // size return text(2); }else if( id == 3 ){ // date return text(3); } return ke; }; @@ -185,16 +185,19 @@ class OFileSelector : public QWidget { void ok(); void cancel(); 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 &); protected: void init(); void updateMimes(); protected: private: int m_mode, m_selector; |