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