File indexing completed on 2024-05-12 09:54:31
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2010 Thomas Fjellstrom <thomas@fjellstrom.ca> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QIcon> 0010 #include <QTreeView> 0011 #include <QUrl> 0012 0013 namespace KTextEditor 0014 { 0015 class Document; 0016 class MainWindow; 0017 } 0018 0019 class QActionGroup; 0020 0021 class KateFileTreeModel; 0022 class KateFileTreeProxyModel; 0023 0024 class KateFileTree : public QTreeView 0025 { 0026 Q_OBJECT 0027 0028 public: 0029 KateFileTree(KTextEditor::MainWindow *mainWindow, QWidget *parent); 0030 ~KateFileTree() override; 0031 0032 void setModel(QAbstractItemModel *model) override; 0033 void setShowCloseButton(bool show); 0034 0035 public Q_SLOTS: 0036 void slotDocumentClose(); 0037 void slotExpandRecursive(); 0038 void slotCollapseRecursive(); 0039 void slotDocumentCloseOther(); 0040 void slotDocumentReload(); 0041 void slotOpenContainingFolder(); 0042 void slotCopyFilename(); 0043 void slotCurrentChanged(const QModelIndex ¤t, const QModelIndex &previous); 0044 void slotDocumentFirst(); 0045 void slotDocumentLast(); 0046 void slotDocumentNext(); 0047 void slotDocumentPrev(); 0048 void slotPrintDocument(); 0049 void slotPrintDocumentPreview(); 0050 void slotResetHistory(); 0051 void slotDocumentDelete(); 0052 0053 protected: 0054 void contextMenuEvent(QContextMenuEvent *event) override; 0055 0056 Q_SIGNALS: 0057 void closeDocument(KTextEditor::Document *); 0058 void activateDocument(KTextEditor::Document *); 0059 0060 void openDocument(const QUrl &); 0061 0062 void viewModeChanged(bool treeMode); 0063 void sortRoleChanged(int); 0064 0065 void closeWidget(QWidget *); 0066 void activateWidget(QWidget *); 0067 0068 private Q_SLOTS: 0069 void mouseClicked(const QModelIndex &index); 0070 0071 void slotTreeMode(); 0072 void slotListMode(); 0073 0074 void slotSortName(); 0075 void slotSortPath(); 0076 void slotSortOpeningOrder(); 0077 void slotFixOpenWithMenu(QMenu *menu); 0078 void slotOpenWithMenuAction(QAction *a); 0079 0080 void slotRenameFile(); 0081 0082 void onRowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); 0083 0084 private: 0085 void closeClicked(const QModelIndex &index); 0086 void setupContextMenuActionGroups(); 0087 using Func = void (KateFileTree::*)(); 0088 QAction *setupOption(QActionGroup *group, 0089 const QIcon &icon, 0090 const QString &text, 0091 const QString &whatisThis, 0092 const Func &slot, 0093 Qt::CheckState checked = Qt::Unchecked); 0094 0095 void addChildrenTolist(const QModelIndex &index, QList<QPersistentModelIndex> *worklist); 0096 0097 QAction *m_filelistCloseDocument; 0098 QAction *m_filelistExpandRecursive; 0099 QAction *m_filelistCollapseRecursive; 0100 QAction *m_filelistCloseOtherDocument; 0101 QAction *m_filelistReloadDocument; 0102 QAction *m_filelistOpenContainingFolder; 0103 QAction *m_filelistCopyFilename; 0104 QAction *m_filelistRenameFile; 0105 QAction *m_filelistPrintDocument; 0106 QAction *m_filelistPrintDocumentPreview; 0107 QAction *m_filelistDeleteDocument; 0108 0109 QAction *m_treeModeAction; 0110 QAction *m_listModeAction; 0111 0112 QAction *m_sortByFile; 0113 QAction *m_sortByPath; 0114 QAction *m_sortByOpeningOrder; 0115 QAction *m_customSorting; 0116 QAction *m_resetHistory; 0117 0118 KateFileTreeProxyModel *m_proxyModel = nullptr; 0119 KateFileTreeModel *m_sourceModel = nullptr; 0120 QPersistentModelIndex m_previouslySelected; 0121 QPersistentModelIndex m_indexContextMenu; 0122 0123 bool m_hasCloseButton = false; 0124 0125 KTextEditor::MainWindow *m_mainWindow; 0126 };