Files
KDDockWidgets/src/qtquick/views/Stack_qtquick.h
Sergio Martins 5386d44fdb qtquick: Move the "tabbar autohide" property to TabBar
It's a better location than in Stack
2022-07-07 14:36:48 +01:00

128 lines
3.7 KiB
C++

/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
/**
* @file
* @brief The QQuickItem counter part of TabWidgetQuick. Handles GUI while TabWidget handles state.
*
* @author Sérgio Martins \<sergio.martins@kdab.com\>
*/
#ifndef KDTABWIDGETQUICK_P_H
#define KDTABWIDGETQUICK_P_H
#pragma once
#include "View_qtquick.h"
#include "views/StackViewInterface.h"
#include <QAbstractListModel>
#include <QVector>
#include "kdbindings/signal.h"
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;
/// Returns whether the tab bar should hide when there's only 1 tab visible
/// Default true, unless Flag_HideTitleBarWhenTabsVisible
bool tabBarAutoHide() const;
Q_SIGNALS:
void tabBarChanged();
void tabBarAutoHideChanged();
protected:
bool isPositionDraggable(QPoint p) const 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;
KDBindings::ScopedConnection m_tabBarAutoHideChanged;
};
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<int, QByteArray> roleNames() const override;
Q_SIGNALS:
void countChanged();
private:
void emitDataChangedFor(Controllers::DockWidget *);
QVector<Controllers::DockWidget *> m_dockWidgets;
QHash<Controllers::DockWidget *, QVector<QMetaObject::Connection>> m_connections; // To make it easy to disconnect from lambdas
bool m_removeGuard = false;
};
}
}
#endif