summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/advancedfm/advancedfm.h13
-rw-r--r--noncore/apps/advancedfm/advancedfmMenu.cpp152
2 files changed, 124 insertions, 41 deletions
diff --git a/noncore/apps/advancedfm/advancedfm.h b/noncore/apps/advancedfm/advancedfm.h
index 7ced056..42775ee 100644
--- a/noncore/apps/advancedfm/advancedfm.h
+++ b/noncore/apps/advancedfm/advancedfm.h
@@ -44,6 +44,7 @@ class QPopupMenu;
class QFile;
class QListViewItem;
class QLineEdit;
+
//class QPushButton;
class QToolButton;
class Ir;
@@ -116,7 +117,8 @@ protected:
bool zaurusDevice;
QGridLayout *tabLayout, *tabLayout_2, *tabLayout_3;
QStringList remoteDirPathStringList, localDirPathStringList;
-
+ QLineEdit *renameBox;
+
void init();
void initConnections();
void keyReleaseEvent( QKeyEvent *);
@@ -149,8 +151,13 @@ protected slots:
void fileBeamFinished( Ir *);
private:
- QTimer menuTimer;
- void startProcess(const QString &);
+ QString oldName;
+ QTimer menuTimer;
+ void startProcess(const QString &);
+ bool eventFilter( QObject * , QEvent * );
+ void cancelRename();
+ void doRename(QListView *);
+ void okRename();
private slots:
void processEnded();
};
diff --git a/noncore/apps/advancedfm/advancedfmMenu.cpp b/noncore/apps/advancedfm/advancedfmMenu.cpp
index 98d024d..f067013 100644
--- a/noncore/apps/advancedfm/advancedfmMenu.cpp
+++ b/noncore/apps/advancedfm/advancedfmMenu.cpp
@@ -339,44 +339,6 @@ void AdvancedFm::remoteDelete() {
populateRemoteView();
}
-void AdvancedFm::localRename() {
- QString curFile = Local_View->currentItem()->text(0);
- qDebug("currentItem "+curFile);
- if( curFile !="../") {
- InputDialog *fileDlg;
- fileDlg = new InputDialog(this,tr("Rename"),TRUE, 0);
- fileDlg->setInputText((const QString &)curFile);
- fileDlg->exec();
- if( fileDlg->result() == 1 ) {
- QString oldname = currentDir.canonicalPath() + "/" + curFile;
- QString newName = currentDir.canonicalPath() + "/" + fileDlg->LineEdit1->text();
-//+".playlist";
- if( rename(oldname.latin1(), newName.latin1())== -1)
- QMessageBox::message(tr("Note"),tr("Could not rename"));
- }
- populateLocalView();
- }
-}
-
-void AdvancedFm::remoteRename()
-{
- QString curFile = Remote_View->currentItem()->text(0);
- if( curFile !="../") {
- InputDialog *fileDlg;
- fileDlg = new InputDialog(this,tr("Rename"),TRUE, 0);
- fileDlg->setInputText((const QString &)curFile);
- fileDlg->exec();
- if( fileDlg->result() == 1 ) {
- QString oldname = currentRemoteDir.canonicalPath() + "/" + curFile;
- QString newName = currentRemoteDir.canonicalPath() + "/" + fileDlg->LineEdit1->text();
-//+".playlist";
- if( rename(oldname.latin1(), newName.latin1())== -1)
- QMessageBox::message(tr("Note"),tr("Could not rename"));
- }
- populateRemoteView();
- }
-}
-
void AdvancedFm::filePerms() {
@@ -1047,3 +1009,117 @@ void AdvancedFm::processEnded() {
populateLocalView();
populateRemoteView();
}
+
+bool AdvancedFm::eventFilter( QObject * o, QEvent * e ) {
+ if ( o->inherits( "QLineEdit" ) ) {
+ if ( e->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent*)e;
+ if ( ke->key() == Key_Return ||
+ ke->key() == Key_Enter ) {
+ okRename();
+ return true;
+ } else if ( ke->key() == Key_Escape ) {
+ cancelRename();
+ return true;
+ }
+ } else if ( e->type() == QEvent::FocusOut ) {
+ cancelRename();
+ return true;
+ }
+ }
+ return QWidget::eventFilter( o, e );
+}
+
+
+void AdvancedFm::cancelRename() {
+ qDebug("cancel rename");
+ QListView * view;
+ if (TabWidget->getCurrentTab() == 0) {
+ view = Local_View;
+ }
+ else
+ {
+ view = Remote_View;
+ }
+
+ bool resetFocus = view->viewport()->focusProxy() == renameBox;
+ delete renameBox;
+ renameBox = 0;
+ if ( resetFocus ) {
+ view->viewport()->setFocusProxy( view);
+ view->setFocus();
+ }
+}
+
+void AdvancedFm::doRename(QListView * view) {
+
+ QRect r = view->itemRect( view->currentItem( ));
+ r = QRect( view->viewportToContents( r.topLeft() ), r.size() );
+ r.setX( view->contentsX() );
+ if ( r.width() > view->visibleWidth() )
+ r.setWidth( view->visibleWidth() );
+
+ renameBox = new QLineEdit( view->viewport(), "qt_renamebox" );
+ renameBox->setFrame(true);
+
+ renameBox->setText( view->currentItem()->text(0) );
+
+ renameBox->selectAll();
+ renameBox->installEventFilter( this );
+ view->addChild( renameBox, r.x(), r.y() );
+ renameBox->resize( r.size() );
+ view->viewport()->setFocusProxy( renameBox );
+ renameBox->setFocus();
+ renameBox->show();
+
+}
+
+
+void AdvancedFm::localRename() {
+ oldName = Local_View->currentItem()->text(0);
+ doRename(Local_View );
+ populateLocalView();
+}
+
+void AdvancedFm::remoteRename()
+{
+ oldName = Remote_View->currentItem()->text(0);
+ doRename(Local_View );
+ populateRemoteView();
+}
+
+void AdvancedFm::okRename() {
+ QString newName = renameBox->text();
+ cancelRename();
+ int tabs=0;
+ QListView * view;
+ tabs = TabWidget->getCurrentTab();
+ if ( tabs == 0)
+ {
+ view = Local_View;
+ QString path = currentDir.canonicalPath() + "/";
+ oldName = path + oldName;
+ newName = path + newName;
+ }
+ else
+ {
+ view = Remote_View;
+ QString path = currentRemoteDir.canonicalPath() + "/";
+ oldName = path + oldName;
+ newName = path + newName;
+ }
+
+ if( view->currentItem() == NULL)
+ return;
+ if( rename(oldName.latin1(), newName.latin1())== -1)
+ QMessageBox::message(tr("Note"),tr("Could not rename"));
+ else
+ oldName = "";
+
+ view->takeItem( view->currentItem() );
+ delete view->currentItem();
+ if ( tabs == 0)
+ populateLocalView();
+ else
+ populateRemoteView();
+}