TabBar controller now stores the current dock widget
It's no longer stored in the view. This makes it easier for new frontends.
This commit is contained in:
@@ -223,21 +223,34 @@ QRect Controllers::TabBar::rectForTab(int index) const
|
||||
|
||||
DockWidget *TabBar::currentDockWidget() const
|
||||
{
|
||||
return dockWidgetAt(currentIndex());
|
||||
return m_currentDockWidget;
|
||||
}
|
||||
|
||||
void TabBar::setCurrentDockWidget(DockWidget *dw)
|
||||
{
|
||||
dynamic_cast<Views::TabBarViewInterface *>(view())->setCurrentDockWidget(dw);
|
||||
if (dw == m_currentDockWidget)
|
||||
return;
|
||||
|
||||
m_currentDockWidget = dw;
|
||||
setCurrentIndex(indexOfDockWidget(dw));
|
||||
Q_EMIT currentDockWidgetChanged(dw);
|
||||
}
|
||||
|
||||
int TabBar::currentIndex() const
|
||||
{
|
||||
return dynamic_cast<Views::TabBarViewInterface *>(view())->currentIndex();
|
||||
if (!m_currentDockWidget)
|
||||
return -1;
|
||||
|
||||
return indexOfDockWidget(m_currentDockWidget);
|
||||
}
|
||||
|
||||
void TabBar::setCurrentIndex(int index)
|
||||
{
|
||||
auto newCurrentDw = dockWidgetAt(index);
|
||||
if (newCurrentDw == m_currentDockWidget)
|
||||
return;
|
||||
|
||||
m_currentDockWidget = newCurrentDw;
|
||||
dynamic_cast<Views::TabBarViewInterface *>(view())->setCurrentIndex(index);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ public:
|
||||
|
||||
/// @brief Returns the tab index of the specified dock widget
|
||||
int indexOfDockWidget(const Controllers::DockWidget *dw) const;
|
||||
|
||||
void removeDockWidget(Controllers::DockWidget *dw);
|
||||
bool insertDockWidget(int index, Controllers::DockWidget *dw, const QIcon &icon,
|
||||
const QString &title);
|
||||
@@ -94,6 +93,7 @@ Q_SIGNALS:
|
||||
private:
|
||||
Controllers::Stack *const m_tabWidget;
|
||||
QPointer<DockWidget> m_lastPressedDockWidget = nullptr;
|
||||
DockWidget *m_currentDockWidget = nullptr;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -60,11 +60,6 @@ void TabBar_dummy::moveTabTo(int from, int to)
|
||||
// Not implemented yet
|
||||
}
|
||||
|
||||
Controllers::DockWidget *TabBar_dummy::currentDockWidget() const
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool TabBar_dummy::tabsAreMovable() const
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -46,7 +46,6 @@ public:
|
||||
QRect rectForTab(int index) const override;
|
||||
|
||||
void moveTabTo(int from, int to) override;
|
||||
Controllers::DockWidget *currentDockWidget() const override;
|
||||
bool tabsAreMovable() const override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -135,6 +135,7 @@ Controllers::DockWidget *DockWidgetModel::currentDockWidget() const
|
||||
void DockWidgetModel::setCurrentDockWidget(Controllers::DockWidget *dw)
|
||||
{
|
||||
m_currentDockWidget = dw;
|
||||
setCurrentIndex(indexOf(dw));
|
||||
}
|
||||
|
||||
QHash<int, QByteArray> DockWidgetModel::roleNames() const
|
||||
@@ -214,6 +215,7 @@ void DockWidgetModel::setCurrentIndex(int index)
|
||||
if (m_currentDockWidget != dw) {
|
||||
setCurrentDockWidget(dw);
|
||||
Q_ASSERT(m_tabBar);
|
||||
m_tabBar->setCurrentIndex(index);
|
||||
Q_EMIT m_tabBar->currentDockWidgetChanged(dw);
|
||||
Q_EMIT m_tabBar->currentTabChanged(index);
|
||||
}
|
||||
|
||||
@@ -134,11 +134,6 @@ void TabBar_qtquick::moveTabTo(int from, int to)
|
||||
// Not implemented yet
|
||||
}
|
||||
|
||||
Controllers::DockWidget *TabBar_qtquick::currentDockWidget() const
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool TabBar_qtquick::tabsAreMovable() const
|
||||
{
|
||||
return false;
|
||||
@@ -158,12 +153,6 @@ Stack_qtquick *TabBar_qtquick::stackView() const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int TabBar_qtquick::currentIndex() const
|
||||
{
|
||||
// TODOm4: Move stack's model to tabbar
|
||||
return stackView()->dockWidgetModel()->currentIndex();
|
||||
}
|
||||
|
||||
void TabBar_qtquick::setCurrentIndex(int index)
|
||||
{
|
||||
stackView()->dockWidgetModel()->setCurrentIndex(index);
|
||||
|
||||
@@ -56,8 +56,6 @@ public:
|
||||
QRect rectForTab(int index) const override;
|
||||
|
||||
void moveTabTo(int from, int to) override;
|
||||
Controllers::DockWidget *currentDockWidget() const override;
|
||||
int currentIndex() const override;
|
||||
Q_INVOKABLE void setCurrentIndex(int index) override;
|
||||
bool tabsAreMovable() const override;
|
||||
Stack_qtquick *stackView() const;
|
||||
|
||||
@@ -65,17 +65,16 @@ TabBar_qtwidgets::TabBar_qtwidgets(Controllers::TabBar *controller, QWidget *par
|
||||
{
|
||||
}
|
||||
|
||||
void TabBar_qtwidgets::init()
|
||||
{
|
||||
connect(this, &QTabBar::currentChanged, m_tabBar, &Controllers::TabBar::setCurrentIndex);
|
||||
}
|
||||
|
||||
int TabBar_qtwidgets::tabAt(QPoint localPos) const
|
||||
{
|
||||
return QTabBar::tabAt(localPos);
|
||||
}
|
||||
|
||||
Controllers::DockWidget *TabBar_qtwidgets::currentDockWidget() const
|
||||
{
|
||||
const int index = currentIndex();
|
||||
return index == -1 ? nullptr : m_controller->dockWidgetAt(index);
|
||||
}
|
||||
|
||||
void TabBar_qtwidgets::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
m_controller->onMousePress(e->pos());
|
||||
@@ -148,11 +147,6 @@ void TabBar_qtwidgets::tabRemoved(int index)
|
||||
Q_EMIT dockWidgetRemoved(index);
|
||||
}
|
||||
|
||||
int TabBar_qtwidgets::currentIndex() const
|
||||
{
|
||||
return QTabBar::currentIndex();
|
||||
}
|
||||
|
||||
void TabBar_qtwidgets::setCurrentIndex(int index)
|
||||
{
|
||||
QTabBar::setCurrentIndex(index);
|
||||
|
||||
@@ -36,8 +36,6 @@ public:
|
||||
|
||||
Controllers::TabBar *tabBar() const;
|
||||
|
||||
Controllers::DockWidget *currentDockWidget() const override;
|
||||
int currentIndex() const override;
|
||||
void setCurrentIndex(int index) override;
|
||||
|
||||
QString text(int index) const override;
|
||||
@@ -61,6 +59,7 @@ Q_SIGNALS:
|
||||
void dockWidgetRemoved(int index);
|
||||
|
||||
protected:
|
||||
void init() override;
|
||||
void mousePressEvent(QMouseEvent *) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
void mouseDoubleClickEvent(QMouseEvent *e) override;
|
||||
|
||||
@@ -22,9 +22,5 @@ TabBarViewInterface::TabBarViewInterface(Controllers::TabBar *controller)
|
||||
|
||||
TabBarViewInterface::~TabBarViewInterface() = default;
|
||||
|
||||
void TabBarViewInterface::setCurrentDockWidget(Controllers::DockWidget *dw)
|
||||
{
|
||||
setCurrentIndex(indexOfDockWidget(dw));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -39,9 +39,7 @@ public:
|
||||
virtual int tabAt(QPoint localPt) const = 0;
|
||||
virtual void moveTabTo(int from, int to) = 0;
|
||||
virtual QRect rectForTab(int index) const = 0;
|
||||
virtual Controllers::DockWidget *currentDockWidget() const = 0;
|
||||
virtual void setCurrentIndex(int index) = 0;
|
||||
virtual int currentIndex() const = 0;
|
||||
virtual int numDockWidgets() const = 0;
|
||||
virtual Controllers::DockWidget *dockWidgetAt(int index) const = 0;
|
||||
virtual int indexOfDockWidget(const Controllers::DockWidget *dw) const = 0;
|
||||
@@ -54,7 +52,6 @@ public:
|
||||
const QString &title) = 0;
|
||||
|
||||
virtual QString text(int index) const = 0;
|
||||
void setCurrentDockWidget(Controllers::DockWidget *dw);
|
||||
|
||||
protected:
|
||||
Controllers::TabBar *const m_tabBar;
|
||||
|
||||
Reference in New Issue
Block a user