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:
Sergio Martins
2022-08-14 17:34:01 +01:00
parent 4627571f3f
commit 8834f7d75b
11 changed files with 25 additions and 43 deletions

View File

@@ -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);
}

View File

@@ -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;
};
}

View File

@@ -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;

View File

@@ -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:

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -22,9 +22,5 @@ TabBarViewInterface::TabBarViewInterface(Controllers::TabBar *controller)
TabBarViewInterface::~TabBarViewInterface() = default;
void TabBarViewInterface::setCurrentDockWidget(Controllers::DockWidget *dw)
{
setCurrentIndex(indexOfDockWidget(dw));
}
} // namespace

View File

@@ -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;