/* This file is part of KDDockWidgets. SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company Author: Sérgio Martins SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only Contact KDAB at for commercial licensing options. */ /** * @file * @brief The QQuickItem counter part of TabWidgetQuick. Handles GUI while TabWidget handles state. * * @author Sérgio Martins \ */ #ifndef KDTABWIDGETQUICK_P_H #define KDTABWIDGETQUICK_P_H #pragma once #include "View_qtquick.h" #include "views/StackViewInterface.h" #include #include namespace KDDockWidgets { namespace Controllers { class DockWidget; class Group; class TabBar; } namespace Views { class DockWidgetModel; class DOCKS_EXPORT Stack_qtquick : public View_qtquick, public StackViewInterface { Q_OBJECT Q_PROPERTY(DockWidgetModel *dockWidgetModel READ dockWidgetModel CONSTANT) Q_PROPERTY(QObject *tabBar READ tabBarViewObj NOTIFY tabBarChanged) public: explicit Stack_qtquick(Controllers::Stack *controller, QQuickItem *parent = nullptr); int numDockWidgets() const override; void removeDockWidget(Controllers::DockWidget *) override; int indexOfDockWidget(const Controllers::DockWidget *) const override; DockWidgetModel *dockWidgetModel() const; Controllers::DockWidget *dockwidgetAt(int index) const override; int currentIndex() const override; bool insertDockWidget(int index, Controllers::DockWidget *, const QIcon &, const QString &title) override; Q_INVOKABLE void setCurrentDockWidget(int index) override; void setDocumentMode(bool) override; Controllers::DockWidget *currentDockWidget() const; /// @brief Returns the tab bar as a QObject for QML. /// As the base class is not a QObject. QObject *tabBarViewObj() const; /// @brief Returns the stack controller associated with this view Controllers::Stack *stack() const; Q_SIGNALS: void tabBarChanged(); protected: bool isPositionDraggable(QPoint p) const override; void setTabBarAutoHide(bool) override; void renameTab(int index, const QString &) override; void changeTabIcon(int index, const QIcon &) override; void init() override; private: Q_DISABLE_COPY(Stack_qtquick) DockWidgetModel *const m_dockWidgetModel; Controllers::DockWidget *m_currentDockWidget = nullptr; }; class DockWidgetModel : public QAbstractListModel { Q_OBJECT public: enum Role { Role_Title = Qt::UserRole }; explicit DockWidgetModel(QObject *parent); int count() const; int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; Controllers::DockWidget *dockWidgetAt(int index) const; void remove(Controllers::DockWidget *); int indexOf(const Controllers::DockWidget *); bool insert(Controllers::DockWidget *dw, int index); bool contains(Controllers::DockWidget *dw) const; protected: QHash roleNames() const override; Q_SIGNALS: void countChanged(); private: void emitDataChangedFor(Controllers::DockWidget *); QVector m_dockWidgets; QHash> m_connections; // To make it easy to disconnect from lambdas bool m_removeGuard = false; }; } } #endif