File indexing completed on 2024-04-28 03:47:19
0001 /* 0002 File : ProjectExplorer.cpp 0003 Project : LabPlot 0004 Description : A tree view for displaying and editing an AspectTreeModel. 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2007-2008 Tilman Benkert <thzs@gmx.net> 0007 SPDX-FileCopyrightText: 2011-2021 Alexander Semke <alexander.semke@web.de> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later 0010 */ 0011 #ifndef PROJECT_EXPLORER_H 0012 #define PROJECT_EXPLORER_H 0013 0014 #include <QWidget> 0015 0016 class AbstractAspect; 0017 class AspectTreeModel; 0018 class Project; 0019 class XmlStreamReader; 0020 0021 class QFrame; 0022 class QLabel; 0023 class QLineEdit; 0024 class QModelIndex; 0025 class QPushButton; 0026 class QSignalMapper; 0027 class QTreeView; 0028 class QXmlStreamWriter; 0029 class QItemSelection; 0030 class QMenu; 0031 0032 class KMessageWidget; 0033 0034 class ProjectExplorer : public QWidget { 0035 Q_OBJECT 0036 0037 public: 0038 explicit ProjectExplorer(QWidget* parent = nullptr); 0039 ~ProjectExplorer() override; 0040 0041 void setCurrentAspect(const AbstractAspect*); 0042 void setModel(AspectTreeModel*); 0043 void setProject(Project*); 0044 QModelIndex currentIndex() const; 0045 AbstractAspect* currentAspect() const; 0046 void search(); 0047 0048 private: 0049 void createActions(); 0050 void contextMenuEvent(QContextMenuEvent*) override; 0051 bool eventFilter(QObject*, QEvent*) override; 0052 void keyPressEvent(QKeyEvent*) override; 0053 void collapseParents(const QModelIndex&, const QList<QModelIndex>& expanded); 0054 bool filter(const QModelIndex&, const QString&); 0055 void showErrorMessage(const QString&); 0056 0057 int m_columnToHide{0}; 0058 QTreeView* m_treeView{nullptr}; 0059 Project* m_project{nullptr}; 0060 KMessageWidget* m_messageWidget{nullptr}; 0061 QPoint m_dragStartPos; 0062 bool m_dragStarted{false}; 0063 bool m_changeSelectionFromView{false}; 0064 0065 QAction* fuzzyMatchingAction{nullptr}; 0066 QAction* caseSensitiveAction{nullptr}; 0067 QAction* matchCompleteWordAction{nullptr}; 0068 QAction* expandTreeAction{nullptr}; 0069 QAction* expandSelectedTreeAction{nullptr}; 0070 QAction* collapseTreeAction{nullptr}; 0071 QAction* collapseSelectedTreeAction{nullptr}; 0072 QAction* deleteSelectedTreeAction{nullptr}; 0073 QAction* toggleFilterAction{nullptr}; 0074 QAction* showAllColumnsAction{nullptr}; 0075 QList<QAction*> list_showColumnActions; 0076 QSignalMapper* showColumnsSignalMapper{nullptr}; 0077 0078 QFrame* m_frameFilter{nullptr}; 0079 QLineEdit* m_leFilter{nullptr}; 0080 QPushButton* bFilterOptions{nullptr}; 0081 0082 private Q_SLOTS: 0083 void aspectAdded(const AbstractAspect*); 0084 void toggleColumn(int); 0085 void showAllColumns(); 0086 void filterTextChanged(const QString&); 0087 void toggleFilterOptionsMenu(bool); 0088 void resizeHeader(); 0089 void expandSelected(); 0090 void collapseSelected(); 0091 void deleteSelected(); 0092 void changeSelectedVisible(); 0093 0094 void navigateTo(const QString& path); 0095 void selectIndex(const QModelIndex&); 0096 void deselectIndex(const QModelIndex&); 0097 void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected); 0098 0099 void save(QXmlStreamWriter*) const; 0100 bool load(XmlStreamReader*); 0101 0102 Q_SIGNALS: 0103 void currentAspectChanged(AbstractAspect*); 0104 void activateView(AbstractAspect*); 0105 void selectedAspectsChanged(QList<AbstractAspect*>&); 0106 void hiddenAspectSelected(const AbstractAspect*); 0107 }; 0108 0109 #endif // ifndef PROJECT_EXPLORER_H