Git commit 0b2997addf31e4c68580445271c460c61c658342 by Christoph Cullmann, = on behalf of Markus Pister. Committed on 19/10/2016 at 12:53. Pushed by cullmann into branch 'master'. CHANGELOG: Implemented Feature Request: Expand/Collapse all actions for ite= ms in the documents list BUG: 360195 Patch by Markus Pister M +54 -0 addons/filetree/katefiletree.cpp M +4 -0 addons/filetree/katefiletree.h http://commits.kde.org/kate/0b2997addf31e4c68580445271c460c61c658342 diff --git a/addons/filetree/katefiletree.cpp b/addons/filetree/katefiletre= e.cpp index b4437c7..9729e9a 100644 --- a/addons/filetree/katefiletree.cpp +++ b/addons/filetree/katefiletree.cpp @@ -69,6 +69,14 @@ KateFileTree::KateFileTree(QWidget *parent): QTreeView(p= arent) connect(m_filelistCloseDocument, SIGNAL(triggered()), this, SLOT(slotD= ocumentClose())); m_filelistCloseDocument->setWhatsThis(i18n("Close the current document= .")); = + m_filelistExpandRecursive =3D new QAction(QIcon::fromTheme(QLatin1Stri= ng("view-list-tree")), i18nc("@action:inmenu", "Expand recursively"), this); + connect(m_filelistExpandRecursive, SIGNAL(triggered()), this, SLOT(slo= tExpandRecursive())); + m_filelistExpandRecursive->setWhatsThis(i18n("Expand the file list sub= tree recursively.")); + + m_filelistCollapseRecursive =3D new QAction(QIcon::fromTheme(QLatin1St= ring("view-list-tree")), i18nc("@action:inmenu", "Collapse recursively"), t= his); + connect(m_filelistCollapseRecursive, SIGNAL(triggered()), this, SLOT(s= lotCollapseRecursive())); + m_filelistCollapseRecursive->setWhatsThis(i18n("Collapse the file list= sub tree recursively.")); + m_filelistCloseOtherDocument =3D new QAction(QIcon::fromTheme(QLatin1S= tring("document-close")), i18nc("@action:inmenu", "Close Other"), this); connect(m_filelistCloseOtherDocument, SIGNAL(triggered()), this, SLOT(= slotDocumentCloseOther())); m_filelistCloseOtherDocument->setWhatsThis(i18n("Close other documents= in this folder.")); @@ -225,6 +233,8 @@ void KateFileTree::contextMenuEvent(QContextMenuEvent *= event) QMenu menu; menu.addAction(m_filelistReloadDocument); menu.addAction(m_filelistCloseDocument); + menu.addAction(m_filelistExpandRecursive); + menu.addAction(m_filelistCollapseRecursive); = if (isFile) { menu.addAction(m_filelistCloseOtherDocument); @@ -337,6 +347,50 @@ void KateFileTree::slotDocumentClose() KTextEditor::Editor::instance()->application()->closeDocuments(closing= Documents); } = +void KateFileTree::slotExpandRecursive() +{ + if (! m_indexContextMenu.isValid()) { + return; + } + + // Work list for DFS walk over sub tree + QList worklist =3D { m_indexContextMenu }; + + while (! worklist.isEmpty()) { + QPersistentModelIndex index =3D worklist.takeLast(); + + // Expand current item + expand(index); + + // Append all children of current item + for (int i=3D0 ; i < model()->rowCount(index) ; ++i) { + worklist.append(index.child(i,0)); + } + } +} + +void KateFileTree::slotCollapseRecursive() +{ + if (! m_indexContextMenu.isValid()) { + return; + } + + // Work list for DFS walk over sub tree + QList worklist =3D { m_indexContextMenu }; + + while (! worklist.isEmpty()) { + QPersistentModelIndex index =3D worklist.takeLast(); + + // Expand current item + collapse(index); + + // Prepend all children of current item + for (int i=3D0 ; i < model()->rowCount(index) ; ++i) { + worklist.append(index.child(i,0)); + } + } +} + void KateFileTree::slotDocumentCloseOther() { QVariant v =3D model()->data(m_indexContextMenu.parent(), KateFileTree= Model::DocumentTreeRole); diff --git a/addons/filetree/katefiletree.h b/addons/filetree/katefiletree.h index 497f998..7593a0e 100644 --- a/addons/filetree/katefiletree.h +++ b/addons/filetree/katefiletree.h @@ -44,6 +44,8 @@ public: = public Q_SLOTS: void slotDocumentClose(); + void slotExpandRecursive(); + void slotCollapseRecursive(); void slotDocumentCloseOther(); void slotDocumentReload(); void slotCopyFilename(); @@ -88,6 +90,8 @@ private: = private: QAction *m_filelistCloseDocument; + QAction *m_filelistExpandRecursive; + QAction *m_filelistCollapseRecursive; QAction *m_filelistCloseOtherDocument; QAction *m_filelistReloadDocument; QAction *m_filelistCopyFilename;