From b42f6dbb134e3e1769b5483eaff511bb9103ad84 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sat, 9 Nov 2013 01:32:09 +0100 Subject: Enhance renaming in Konqueror listview This resolves Bug 1677 --- konqueror/listview/konq_listview.cc | 26 +++++++++++++++++- konqueror/listview/konq_listview.h | 7 +++++ konqueror/listview/konq_listviewwidget.cc | 45 +++++++++++++++++++++++++++---- konqueror/listview/konq_listviewwidget.h | 2 ++ 4 files changed, 74 insertions(+), 6 deletions(-) diff --git a/konqueror/listview/konq_listview.cc b/konqueror/listview/konq_listview.cc index 7d0a8d628..0e329f7e7 100644 --- a/konqueror/listview/konq_listview.cc +++ b/konqueror/listview/konq_listview.cc @@ -138,7 +138,7 @@ void ListViewBrowserExtension::updateActions() emit enableAction( "del", canDel > 0 ); emit enableAction( "properties", lstItems.count() > 0 && KPropertiesDialog::canDisplay( lstItems ) ); emit enableAction( "editMimeType", ( lstItems.count() == 1 ) ); - emit enableAction( "rename", ( m_listView->listViewWidget()->currentItem() != 0 )&& !bInTrash ); + emit enableAction( "rename", ( m_listView->listViewWidget()->currentItem() != 0 ) && !bInTrash ); } void ListViewBrowserExtension::copySelection( bool move ) @@ -161,6 +161,14 @@ void ListViewBrowserExtension::rename() { TQListViewItem* item = m_listView->listViewWidget()->currentItem(); Q_ASSERT ( item ); + + // Update shurtcuts for the 'rename and move' actions. Must be done every time since the + // shortcuts may have been changed by the user in the meanwhile + const TDEShortcut moveNextSC=m_listView->m_paRenameMoveNext->shortcut(); + const TDEShortcut movePrevSC=m_listView->m_paRenameMovePrev->shortcut(); + m_listView->listViewWidget()->setRenameSettings(TDEListViewRenameSettings( + !(moveNextSC.isNull() && movePrevSC.isNull()), moveNextSC, movePrevSC)); + m_listView->listViewWidget()->rename( item, 0 ); // Enhanced rename: Don't highlight the file extension. @@ -671,6 +679,22 @@ void KonqListView::setupActions() m_paUnselectAll = new TDEAction( i18n( "Unselect All" ), CTRL+Key_U, this, TQT_SLOT( slotUnselectAll() ), actionCollection(), "unselectall" ); m_paInvertSelection = new TDEAction( i18n( "&Invert Selection" ), CTRL+Key_Asterisk, this, TQT_SLOT( slotInvertSelection() ), actionCollection(), "invertselection" ); + // These 2 actions are 'fake' actions. They are defined so that the keyboard shortcuts + // can be set from the 'Configure Shortcuts..." dialog. + // The real actions are performed in the TDEListViewLineEdit::keyPressEvent() in tdeui + m_paRenameMoveNext = new TDEAction(i18n( "&Rename and move to next item" ), Key_Tab, + NULL, NULL, actionCollection(), "renameMoveNext" ); + m_paRenameMoveNext->setWhatsThis(i18n("Pressing this button completes the current rename operation," + "moves to the next item and starts a new rename operation.")); + m_paRenameMoveNext->setToolTip( i18n("Complete rename operation and move the next item")); + m_paRenameMoveNext->setEnabled(false); + m_paRenameMovePrev = new TDEAction( i18n( "&Rename and move to previous item" ), SHIFT+Key_BackTab, + NULL, NULL, actionCollection(), "renameMovePrev" ); + m_paRenameMovePrev->setWhatsThis(i18n("Pressing this button completes the current rename operation," + "moves to the previous item and starts a new rename operation.")); + m_paRenameMovePrev->setToolTip( i18n("Complete rename operation and move the previous item")); + m_paRenameMovePrev->setEnabled(false); + m_paShowDot = new TDEToggleAction( i18n( "Show &Hidden Files" ), 0, this, TQT_SLOT( slotShowDot() ), actionCollection(), "show_dot" ); // m_paShowDot->setCheckedState(i18n("Hide &Hidden Files")); m_paCaseInsensitive = new TDEToggleAction(i18n("Case Insensitive Sort"), 0, this, TQT_SLOT(slotCaseInsensitive()),actionCollection(), "sort_caseinsensitive" ); diff --git a/konqueror/listview/konq_listview.h b/konqueror/listview/konq_listview.h index f7592d73f..4c3719bd0 100644 --- a/konqueror/listview/konq_listview.h +++ b/konqueror/listview/konq_listview.h @@ -62,6 +62,7 @@ private: class KonqListView : public KonqDirPart { friend class KonqBaseListViewWidget; + friend class ListViewBrowserExtension; Q_OBJECT TQ_PROPERTY( bool supportsUndo READ supportsUndo ) public: @@ -153,6 +154,12 @@ private: TDEAction *m_paUnselectAll; TDEAction *m_paInvertSelection; + // These 2 actions are 'fake' actions. They are defined so that the keyboard shortcuts + // can be set from the 'Configure Shortcuts..." dialog. + // The real actions are performed in the TDEListViewLineEdit::keyPressEvent() in tdeui + TDEAction *m_paRenameMoveNext; + TDEAction *m_paRenameMovePrev; + TDEToggleAction *m_paCaseInsensitive; TDEToggleAction *m_paShowDot; diff --git a/konqueror/listview/konq_listviewwidget.cc b/konqueror/listview/konq_listviewwidget.cc index d07edcbd6..352552f2e 100644 --- a/konqueror/listview/konq_listviewwidget.cc +++ b/konqueror/listview/konq_listviewwidget.cc @@ -125,17 +125,20 @@ KonqBaseListViewWidget::KonqBaseListViewWidget( KonqListView *parent, TQWidget * #endif connect( this, TQT_SIGNAL(returnPressed( TQListViewItem * )), this, TQT_SLOT(slotReturnPressed( TQListViewItem * )) ); - connect( this, TQT_SIGNAL( mouseButtonClicked( int, TQListViewItem *, const TQPoint&, int )), - this, TQT_SLOT( slotMouseButtonClicked2( int, TQListViewItem *, const TQPoint&, int )) ); + connect( this, TQT_SIGNAL(mouseButtonClicked( int, TQListViewItem *, const TQPoint&, int )), + this, TQT_SLOT(slotMouseButtonClicked2( int, TQListViewItem *, const TQPoint&, int )) ); connect( this, TQT_SIGNAL(executed( TQListViewItem * )), this, TQT_SLOT(slotExecuted( TQListViewItem * )) ); - connect( this, TQT_SIGNAL(currentChanged( TQListViewItem * )), this, TQT_SLOT(slotCurrentChanged( TQListViewItem * )) ); connect( this, TQT_SIGNAL(itemRenamed( TQListViewItem *, const TQString &, int )), this, TQT_SLOT(slotItemRenamed( TQListViewItem *, const TQString &, int )) ); connect( this, TQT_SIGNAL(contextMenuRequested( TQListViewItem *, const TQPoint&, int )), this, TQT_SLOT(slotPopupMenu( TQListViewItem *, const TQPoint&, int )) ); + connect( this, TQT_SIGNAL(renameNext( TQListViewItem *, int )), + this, TQT_SLOT(slotRenameNextItem( TQListViewItem*, int)) ); + connect( this, TQT_SIGNAL(renamePrev( TQListViewItem *, int )), + this, TQT_SLOT(slotRenamePrevItem( TQListViewItem*, int)) ); connect( this, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotSelectionChanged()) ); connect( horizontalScrollBar(), TQT_SIGNAL(valueChanged( int )), @@ -878,6 +881,38 @@ void KonqBaseListViewWidget::slotItemRenamed( TQListViewItem *item, const TQStri setFocus(); } +void KonqBaseListViewWidget::slotRenameNextItem(TQListViewItem *item, int) +{ + TQListViewItem *nextItem = item->itemBelow(); + if (!nextItem) + { + nextItem=this->firstChild(); + if (!nextItem) + return; + } + + setCurrentItem(nextItem); + ListViewBrowserExtension *lvbe = dynamic_cast(m_pBrowserView->m_extension); + if (lvbe) + lvbe->rename(); +} + +void KonqBaseListViewWidget::slotRenamePrevItem(TQListViewItem *item, int) +{ + TQListViewItem *prevItem = item->itemAbove(); + if (!prevItem) + { + prevItem=this->lastItem(); + if (!prevItem) + return; + } + + setCurrentItem(prevItem); + ListViewBrowserExtension *lvbe = dynamic_cast(m_pBrowserView->m_extension); + if (lvbe) + lvbe->rename(); +} + void KonqBaseListViewWidget::reportItemCounts() { KFileItemList lst = selectedFileItems(); @@ -1025,8 +1060,8 @@ void KonqBaseListViewWidget::slotReturnPressed( TQListViewItem *_item ) void KonqBaseListViewWidget::slotPopupMenu( TQListViewItem *i, const TQPoint &point, int c ) { - kdDebug(1202) << "KonqBaseListViewWidget::slotPopupMenu" << endl; - popupMenu( point, ( i != 0 && c == -1 ) ); // i != 0 && c == -1 when activated by keyboard + kdDebug(1202) << "KonqBaseListViewWidget::slotPopupMenu" << endl; + popupMenu( point, ( i != 0 && c == -1 ) ); // i != 0 && c == -1 when activated by keyboard } void KonqBaseListViewWidget::popupMenu( const TQPoint& _global, bool alwaysForSelectedFiles ) diff --git a/konqueror/listview/konq_listviewwidget.h b/konqueror/listview/konq_listviewwidget.h index 2157b6643..ae79e5c03 100644 --- a/konqueror/listview/konq_listviewwidget.h +++ b/konqueror/listview/konq_listviewwidget.h @@ -158,6 +158,8 @@ public slots: void slotMouseButtonClicked2( int _button, TQListViewItem *_item, const TQPoint& pos, int ); virtual void slotExecuted( TQListViewItem *_item ); void slotItemRenamed( TQListViewItem *, const TQString &, int ); + void slotRenameNextItem(TQListViewItem *item, int col); + void slotRenamePrevItem(TQListViewItem *item, int col); protected slots: void slotAutoScroll(); -- cgit v1.2.1