#ifndef RADIX_RADIXWIDGETS_NAVIGATIONWIDGET_HH_ #define RADIX_RADIXWIDGETS_NAVIGATIONWIDGET_HH_ #include #include #include #include #include "radixcore/visibility.hh" #include QT_BEGIN_NAMESPACE class QStandardItem; class QTreeView; QT_END_NAMESPACE namespace radix { // Forward declaration class NavigationItem; class NavigationModel; class NavigationActionManager; class RADIX_PUBLIC NavigationItemSortFilterProxyModel : public QSortFilterProxyModel { Q_OBJECT public: NavigationItemSortFilterProxyModel(QObject* parent = nullptr); public slots: void clearCache(); protected: bool filterAcceptsRow(int row, const QModelIndex& parent) const; private: bool accepts(const QModelIndex& index) const; class PImpl; std::unique_ptr p; static void deleter(PImpl* impl); }; class RADIX_PUBLIC NavigationWidget : public QWidget { Q_OBJECT public: NavigationWidget(QWidget* parent = nullptr); void collapse(QStandardItem* item); void expand(QStandardItem* item); NavigationModel* navigationModel(); NavigationActionManager* navigationActionManager(); QTreeView* navigationTree() const; private slots: void contextMenuRequested(QPoint); public slots: void filterModel(const QString& pattern); signals: void itemDoubleClicked(const QModelIndex& index); void itemClicked(const QModelIndex& index); void itemChecked(const QModelIndex& index); void itemUnchecked(const QModelIndex& index); private: void initLayout(); void initMembers(); class PImpl; std::unique_ptr p; static void deleter(PImpl* impl); }; } // namespace radix #endif /** RADIX_RADIXWIDGETS_NAVIGATIONWIDGET_HH_ */