-rw-r--r-- | noncore/apps/advancedfm/advancedfm.cpp | 267 | ||||
-rw-r--r-- | noncore/apps/advancedfm/advancedfm.h | 6 |
2 files changed, 230 insertions, 43 deletions
diff --git a/noncore/apps/advancedfm/advancedfm.cpp b/noncore/apps/advancedfm/advancedfm.cpp index 5f47b9b..bb932c5 100644 --- a/noncore/apps/advancedfm/advancedfm.cpp +++ b/noncore/apps/advancedfm/advancedfm.cpp @@ -150,8 +150,9 @@ AdvancedFm::AdvancedFm( ) Local_View->addColumn( tr("Date"),-1); Local_View->setColumnAlignment(2,QListView::AlignRight); Local_View->setAllColumnsShowFocus(TRUE); -// Local_View->setMultiSelection( TRUE ); -// Local_View->setSelectionMode(QListView::Extended); + Local_View->setMultiSelection( TRUE ); + Local_View->setSelectionMode(QListView::Extended); + QPEApplication::setStylusOperation( Local_View->viewport(),QPEApplication::RightOnHold); tabLayout->addWidget( Local_View, 0, 0 ); @@ -175,8 +176,9 @@ AdvancedFm::AdvancedFm( ) Remote_View->addColumn( tr("Date"),-1); Remote_View->setColumnAlignment(2,QListView::AlignRight); Remote_View->setAllColumnsShowFocus(TRUE); -// Remote_View->setMultiSelection( TRUE ); -// Remote_View->setSelectionMode(QListView::Extended); + Remote_View->setMultiSelection( TRUE ); + Remote_View->setSelectionMode(QListView::Extended); + QPEApplication::setStylusOperation( Remote_View->viewport(),QPEApplication::RightOnHold); connect( Remote_View, SIGNAL( clicked( QListViewItem*)), @@ -369,6 +371,7 @@ void AdvancedFm::populateLocalView() fillCombo( (const QString &) currentDir.canonicalPath()); } + void AdvancedFm::populateRemoteView() { // QList<QListViewItem> * getSelectedItems( QListView * Local_View ); @@ -564,17 +567,20 @@ void AdvancedFm::showHidden() { if (b) { currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); + fileMenu->setItemChecked( fileMenu->idAt(0),TRUE); // localMenu->setItemChecked(localMenu->idAt(0),TRUE); // currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); - b=TRUE; + b=FALSE; } else { currentDir.setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); + fileMenu->setItemChecked( fileMenu->idAt(0),FALSE); // localMenu->setItemChecked(localMenu->idAt(0),FALSE); // currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); - b=FALSE; + b=TRUE; } populateLocalView(); + } void AdvancedFm::showRemoteHidden() @@ -630,6 +636,8 @@ void AdvancedFm::showLocalMenu(QListViewItem * item) m.insertItem( tr( "Open" ), this, SLOT( runThis() )); m.insertItem( tr( "Open as Text" ), this, SLOT( runText() )); m.insertItem( tr( "Make Directory" ), this, SLOT( localMakDir() )); + m.insertItem( tr( "Make Symlink" ), this, SLOT( mkSym() )); + m.insertSeparator(); m.insertItem( tr( "Rename" ), this, SLOT( localRename() )); m.insertItem( tr( "Copy" ), this, SLOT( copy() )); m.insertItem( tr( "Copy As" ), this, SLOT( copyAs() )); @@ -663,6 +671,8 @@ void AdvancedFm::showRemoteMenu(QListViewItem * item) m.insertItem( tr( "Open" ), this, SLOT( runThis() )); m.insertItem( tr( "Open as Text" ), this, SLOT( runText() )); m.insertItem( tr( "Make Directory" ), this, SLOT( remoteMakDir() )); + m.insertItem( tr( "Make Symlink" ), this, SLOT( mkSym() )); + m.insertSeparator(); m.insertItem( tr( "Rename" ), this, SLOT( remoteRename() )); m.insertItem( tr( "Copy" ), this, SLOT( copy() )); m.insertItem( tr( "Copy As" ), this, SLOT( copyAs() )); @@ -752,13 +762,19 @@ void AdvancedFm::remoteMakDir() void AdvancedFm::localDelete() { - QString f = Local_View->currentItem()->text(0); - if(QDir(f).exists() ) { - switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f+ - tr(" ?\nIt must be empty"),tr("Yes"),tr("No"),0,0,1) ) { + QStringList curFileList = getPath(); + QString myFile; + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + myFile = (*it); + if( myFile.find(" -> ",0,TRUE) != -1) + myFile = myFile.left( myFile.find(" -> ",0,TRUE)); + + QString f = currentDir.canonicalPath()+"/"+myFile; + if(QDir(f).exists() && !QFileInfo(f).isSymLink() ) { + switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f+" ?" + ,tr("Yes"),tr("No"),0,0,1) ) { case 0: { - f=currentDir.canonicalPath()+"/"+f; - QString cmd="rmdir "+f; + QString cmd="rmdir -rf "+f; system( cmd.latin1()); populateLocalView(); } @@ -772,9 +788,10 @@ void AdvancedFm::localDelete() switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f +" ?",tr("Yes"),tr("No"),0,0,1) ) { case 0: { - f=currentDir.canonicalPath()+"/"+f; QString cmd="rm "+f; - system( cmd.latin1()); + QFile file(f); + file.remove(); +// system( cmd.latin1()); populateLocalView(); } break; @@ -783,17 +800,25 @@ void AdvancedFm::localDelete() break; }; } + + } } void AdvancedFm::remoteDelete() { - QString f = Remote_View->currentItem()->text(0); - if(QDir(f).exists() ) { - switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f+ - tr(" ?\nIt must be empty"),tr("Yes"),tr("No"),0,0,1) ) { + QStringList curFileList = getPath(); + QString myFile; + + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + myFile = (*it); + if(myFile.find(" -> ",0,TRUE) != -1) + myFile = myFile.left(myFile.find(" -> ",0,TRUE)); + QString f = currentRemoteDir.canonicalPath()+"/"+myFile; + if(QDir(f).exists() && !QFileInfo(f).isSymLink() ) { + switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f+" ?", + tr("Yes"),tr("No"),0,0,1) ) { case 0: { - f = currentRemoteDir.canonicalPath()+"/"+f; - QString cmd="rmdir "+f; + QString cmd="rmdir -rf "+f; system( cmd.latin1()); populateRemoteView(); } @@ -807,9 +832,10 @@ void AdvancedFm::remoteDelete() switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+f +" ?",tr("Yes"),tr("No"),0,0,1) ) { case 0: { - f = currentRemoteDir.canonicalPath()+"/"+f; QString cmd="rm "+f; - system( cmd.latin1()); + QFile file(f); + file.remove(); +// system( cmd.latin1()); populateRemoteView(); } break; @@ -819,6 +845,7 @@ void AdvancedFm::remoteDelete() }; } } +} void AdvancedFm::localRename() { @@ -855,11 +882,13 @@ void AdvancedFm::remoteRename() void AdvancedFm::switchToLocalTab() { TabWidget->setCurrentPage(0); + Local_View->setFocus(); } void AdvancedFm::switchToRemoteTab() { TabWidget->setCurrentPage(1); + Remote_View->setFocus(); } void AdvancedFm::readConfig() @@ -926,31 +955,66 @@ void AdvancedFm::currentPathComboActivated(const QString & currentPath) { } void AdvancedFm::filePerms() { - QString curFile = getPath(); + + QStringList curFileList = getPath(); + QString filePath; + + if (TabWidget->currentPageIndex() == 0) { + filePath = currentDir.canonicalPath()+"/"; + } else { + filePath= currentRemoteDir.canonicalPath()+"/"; + } + + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { filePermissions *filePerm; - filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)(curFile)); + filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)(filePath+*it)); filePerm->showMaximized(); filePerm->exec(); if( filePerm) delete filePerm; } +} void AdvancedFm::doProperties() { - - DocLnk lnk( getPath()); + QStringList curFileList = getPath(); + QString filePath; + if (TabWidget->currentPageIndex() == 0) { + filePath = currentDir.canonicalPath()+"/"; + } else { + filePath= currentRemoteDir.canonicalPath()+"/"; + } + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + DocLnk lnk( (filePath+*it)); LnkProperties prop( &lnk ); // connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *))); prop.showMaximized(); prop.exec(); } +} -QString AdvancedFm::getPath() { +QStringList AdvancedFm::getPath() { + QStringList strList; if (TabWidget->currentPageIndex() == 0) { - return currentDir.canonicalPath()+"/"+ Local_View->currentItem()->text(0); + QList<QListViewItem> * getSelectedItems( QListView * Local_View ); + QListViewItemIterator it( Local_View ); + for ( ; it.current(); ++it ) { + if ( it.current()->isSelected() ) { + strList << it.current()->text(0); + } + } + return strList; } else { - return currentRemoteDir.canonicalPath() + "/"+Remote_View->currentItem()->text(0); + QList<QListViewItem> * getSelectedItems( QListView * Remote_View ); + QListViewItemIterator it( Remote_View ); + for ( ; it.current(); ++it ) { + if ( it.current()->isSelected() ) { + strList << currentDir.canonicalPath()+"/"+ it.current()->text(0); } } + return strList; + } + return ""; +} void AdvancedFm::homeButtonPushed() { QString current = QDir::homeDirPath(); @@ -1032,23 +1096,33 @@ void AdvancedFm::upDir() void AdvancedFm::copy() { - QString curFile = getPath(); + QStringList curFileList = getPath(); + QString curFile; if (TabWidget->currentPageIndex() == 0) { - QString destFile = currentRemoteDir.canonicalPath()+"/"+Local_View->currentItem()->text(0); + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + + QString destFile = currentRemoteDir.canonicalPath()+"/"+(*it); + curFile = currentDir.canonicalPath()+"/"+(*it); QFile f(destFile); if( f.exists()) f.remove(); if(!copyFile(destFile, curFile) ) qWarning("nothin doing"); + } populateRemoteView(); TabWidget->setCurrentPage(1); + } else { - QString destFile = currentDir.canonicalPath()+"/"+Remote_View->currentItem()->text(0); + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + + QString destFile = currentDir.canonicalPath()+"/"+(*it); + curFile = currentRemoteDir.canonicalPath()+"/"+(*it); QFile f(destFile); if( f.exists()) f.remove(); if(!copyFile(destFile, curFile) ) qWarning("nothin doing"); + } populateLocalView(); TabWidget->setCurrentPage(0); } @@ -1056,11 +1130,17 @@ void AdvancedFm::copy() void AdvancedFm::copyAs() { - QString curFile = getPath(); - if (TabWidget->currentPageIndex() == 0) { - QString destFile = Local_View->currentItem()->text(0); + QStringList curFileList = getPath(); + QString curFile; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Copy As"),TRUE, 0); + + if (TabWidget->currentPageIndex() == 0) { + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + QString destFile = *it; + curFile = currentDir.canonicalPath()+"/"+(*it); +// InputDialog *fileDlg; +// fileDlg = new InputDialog(this,tr("Copy As"),TRUE, 0); fileDlg->setInputText((const QString &) destFile ); fileDlg->exec(); if( fileDlg->result() == 1 ) { @@ -1073,12 +1153,16 @@ void AdvancedFm::copyAs() if(!copyFile(destFile, curFile) ) qWarning("nothin doing"); } + } + populateRemoteView(); TabWidget->setCurrentPage(1); } else { - QString destFile = Remote_View->currentItem()->text(0); - InputDialog *fileDlg; - fileDlg = new InputDialog(this,tr("Copy As"),TRUE, 0); + if (TabWidget->currentPageIndex() == 0) { + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + + curFile = currentDir.canonicalPath()+"/"+(*it); + QString destFile = *it; fileDlg->setInputText((const QString &) destFile); fileDlg->exec(); if( fileDlg->result() == 1 ) { @@ -1091,17 +1175,24 @@ void AdvancedFm::copyAs() if(!copyFile(destFile, curFile) ) qWarning("nothin doing"); } + } populateLocalView(); TabWidget->setCurrentPage(0); } } +} void AdvancedFm::move() { - QString curFile = getPath(); + + QStringList curFileList = getPath(); + QString curFile; // qDebug(curFile); QString destFile; + if (TabWidget->currentPageIndex() == 0) { - QString destFile = currentRemoteDir.canonicalPath() + "/" + Local_View->currentItem()->text(0); + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + QString destFile = currentRemoteDir.canonicalPath() + "/" + *it; + curFile = currentDir.canonicalPath()+"/"+(*it); qDebug("Destination file is "+destFile); QFile f(destFile); @@ -1112,10 +1203,13 @@ void AdvancedFm::move() { return; } QFile::remove(curFile); + } TabWidget->setCurrentPage(1); } else { - QString destFile = currentDir.canonicalPath() + "/" + Remote_View->currentItem()->text(0); + for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { + QString destFile = currentRemoteDir.canonicalPath() + "/" + *it; qDebug("Destination file is "+destFile); + curFile = currentDir.canonicalPath()+"/"+(*it); QFile f(destFile); if( f.exists()) @@ -1127,6 +1221,7 @@ void AdvancedFm::move() { QFile::remove(curFile); TabWidget->setCurrentPage(0); } + } populateRemoteView(); populateLocalView(); } @@ -1293,3 +1388,93 @@ void AdvancedFm::doAbout() { "L.J.Potter<llornkcor@handhelds.org>\n" "and is licensed by the GPL"); } + +void AdvancedFm::keyReleaseEvent( QKeyEvent *e) +{ + switch ( e->key() ) { + case Key_Delete: + del(); + break; + case Key_H: + showHidden(); + break; + case Key_E: + runThis(); + break; + case Key_C: + copy(); + break; + case Key_A: + copyAs(); + break; + case Key_M: + move(); + break; + case Key_R: + rn(); + break; + case Key_I: + fileStatus(); + break; + case Key_U: + upDir(); + break; + case Key_P: + filePerms(); + break; + case Key_N: + mkDir(); + break; + case Key_1: + switchToLocalTab(); + break; + case Key_2: + switchToRemoteTab(); + break; + case Key_3: + CFButtonPushed(); + break; + case Key_4: + SDButtonPushed(); + break; + case Key_5: + homeButtonPushed(); + break; + case Key_6: + docButtonPushed(); + break; + case Key_7: + break; + case Key_8: + break; + case Key_9: + break; + case Key_0: + break; + + + + } + +} + +void AdvancedFm::mkSym() { + QString cmd; + if (TabWidget->currentPageIndex() == 0) { + QString curFile = Local_View->currentItem()->text(0); + if(curFile.right(1) == "/") curFile = curFile.left(curFile.length() - 1); + QString destName = currentRemoteDir.canonicalPath()+"/"+curFile; + curFile = currentDir.canonicalPath()+"/"+curFile; + cmd = "ln -s "+curFile+" "+destName; + system(cmd.latin1() ); + populateRemoteView(); + } else { + QString curFile = Remote_View->currentItem()->text(0); + if(curFile.right(1) == "/") curFile = curFile.left(curFile.length() - 1); + QString destName = currentDir.canonicalPath()+"/"+curFile; + curFile = currentRemoteDir.canonicalPath()+"/"+curFile; + cmd = "ln -s "+curFile+" "+destName; + system(cmd.latin1() ); + populateLocalView(); + } +} diff --git a/noncore/apps/advancedfm/advancedfm.h b/noncore/apps/advancedfm/advancedfm.h index a5f26a7..c00713f 100644 --- a/noncore/apps/advancedfm/advancedfm.h +++ b/noncore/apps/advancedfm/advancedfm.h @@ -18,6 +18,7 @@ #include <qdir.h> #include <qstring.h> #include <qpoint.h> +#include <qstringlist.h> class QVBoxLayout; class QHBoxLayout; @@ -93,14 +94,15 @@ protected slots: void doProperties(); void runCommand(); void runCommandStd(); - QString getPath(); + QStringList getPath(); + void mkSym(); void switchToLocalTab(); void switchToRemoteTab(); protected: QGridLayout *tabLayout, *tabLayout_2, *tabLayout_3; QStringList remoteDirPathStringList, localDirPathStringList; - + void keyReleaseEvent( QKeyEvent *); protected slots: void homeButtonPushed(); void docButtonPushed(); |