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 &current, 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 };