Added TabBar view interface
Removes some dependencies to QtWidget
This commit is contained in:
@@ -43,12 +43,6 @@ class DropArea;
|
||||
class TabBar;
|
||||
class TabWidgetQuick;
|
||||
|
||||
namespace Views {
|
||||
class Separator;
|
||||
class TitleBar;
|
||||
class TabBar;
|
||||
}
|
||||
|
||||
namespace Controllers {
|
||||
class Separator;
|
||||
class TabBar;
|
||||
|
||||
@@ -14,15 +14,18 @@
|
||||
#include "Controller.h"
|
||||
#include "controllers/Stack.h"
|
||||
#include "controllers/FloatingWindow.h"
|
||||
#include "views_qtwidgets/TabBar_qtwidgets.h"
|
||||
#include "views/TabBar.h"
|
||||
|
||||
#include "private/DragController_p.h"
|
||||
#include "private/Utils_p.h"
|
||||
#include "Config.h"
|
||||
#include "FrameworkWidgetFactory.h"
|
||||
|
||||
using namespace KDDockWidgets;
|
||||
using namespace KDDockWidgets::Controllers;
|
||||
|
||||
Controllers::TabBar::TabBar(Stack *tabWidget)
|
||||
: Controller(Type::TabBar, new Views::TabBar_qtwidgets(this, tabWidget->view()->asQWidget())) // TODO: Config::self().frameworkWidgetFactory()->createTabBar(this)
|
||||
: Controller(Type::TabBar, Config::self().frameworkWidgetFactory()->createTabBar(this, tabWidget->view()))
|
||||
, Draggable(view())
|
||||
, m_tabWidget(tabWidget)
|
||||
{
|
||||
@@ -32,22 +35,26 @@ Controllers::TabBar::~TabBar()
|
||||
{
|
||||
}
|
||||
|
||||
bool Controllers::TabBar::tabsAreMovable() const
|
||||
{
|
||||
return dynamic_cast<Views::TabBar *>(view())->tabsAreMovable();
|
||||
}
|
||||
|
||||
bool Controllers::TabBar::dragCanStart(QPoint pressPos, QPoint pos) const
|
||||
{
|
||||
// Here we allow the user to re-order tabs instead of dragging them off.
|
||||
// To do that we just return false here, and QTabBar will handle the mouse event, assuming QTabBar::isMovable.
|
||||
|
||||
const bool defaultResult = Draggable::dragCanStart(pressPos, pos);
|
||||
auto view = static_cast<Views::TabBar_qtwidgets *>(this->view()); // TODO
|
||||
|
||||
if (!defaultResult || !view->isMovable()) {
|
||||
if (!defaultResult || !tabsAreMovable()) {
|
||||
// Nothing more to do. If the drag wouldn't start anyway, return false.
|
||||
// And if the tabs aren't movable, just return the default result, which just considers
|
||||
// QApplication::startDragDistances
|
||||
return defaultResult;
|
||||
}
|
||||
|
||||
const int index = view->tabAt(view->mapFromGlobal(pos));
|
||||
const int index = dynamic_cast<Views::TabBar *>(view())->tabAt(view()->mapFromGlobal(pos));
|
||||
if (index == -1)
|
||||
return defaultResult;
|
||||
|
||||
@@ -76,7 +83,7 @@ DockWidgetBase *Controllers::TabBar::dockWidgetAt(int index) const
|
||||
|
||||
DockWidgetBase *Controllers::TabBar::dockWidgetAt(QPoint localPos) const
|
||||
{
|
||||
return dockWidgetAt(static_cast<Views::TabBar_qtwidgets *>(view())->tabAt(localPos));
|
||||
return dockWidgetAt(dynamic_cast<Views::TabBar *>(view())->tabAt(localPos));
|
||||
}
|
||||
|
||||
std::unique_ptr<WindowBeingDragged> Controllers::TabBar::makeWindow()
|
||||
@@ -169,27 +176,20 @@ Frame *Controllers::TabBar::frame() const
|
||||
|
||||
void Controllers::TabBar::moveTabTo(int from, int to)
|
||||
{
|
||||
auto view = static_cast<Views::TabBar_qtwidgets *>(this->view()); // TODO
|
||||
view->moveTabTo(from, to);
|
||||
dynamic_cast<Views::TabBar *>(view())->moveTabTo(from, to);
|
||||
}
|
||||
|
||||
QString Controllers::TabBar::text(int index) const
|
||||
{
|
||||
// TODO: We can store the text in the controller
|
||||
|
||||
auto view = static_cast<Views::TabBar_qtwidgets *>(this->view()); // TODO
|
||||
return view->text(index);
|
||||
return dynamic_cast<Views::TabBar *>(view())->text(index);
|
||||
}
|
||||
|
||||
QRect Controllers::TabBar::rectForTab(int index) const
|
||||
{
|
||||
auto view = static_cast<Views::TabBar_qtwidgets *>(this->view()); // TODO
|
||||
return view->rectForTab(index);
|
||||
return dynamic_cast<Views::TabBar *>(view())->rectForTab(index);
|
||||
}
|
||||
|
||||
|
||||
DockWidget *Controllers::TabBar::currentDockWidget() const
|
||||
{
|
||||
auto view = static_cast<Views::TabBar_qtwidgets *>(this->view()); // TODO
|
||||
return view->currentDockWidget();
|
||||
return dynamic_cast<Views::TabBar *>(view())->currentDockWidget();
|
||||
}
|
||||
|
||||
@@ -56,6 +56,8 @@ public:
|
||||
|
||||
int numDockWidgets() const;
|
||||
|
||||
bool tabsAreMovable() const;
|
||||
|
||||
/**
|
||||
* @brief Returns this class as a QWidget (if using QtWidgets) or QQuickItem
|
||||
*/
|
||||
|
||||
40
src/views/TabBar.h
Normal file
40
src/views/TabBar.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
This file is part of KDDockWidgets.
|
||||
|
||||
SPDX-FileCopyrightText: 2020-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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class QPoint;
|
||||
class QRect;
|
||||
class QString;
|
||||
|
||||
namespace KDDockWidgets {
|
||||
|
||||
namespace Controllers {
|
||||
class DockWidget;
|
||||
}
|
||||
|
||||
namespace Views {
|
||||
|
||||
/// @brief The interface that TabBar views should implement
|
||||
class TabBar
|
||||
{
|
||||
public:
|
||||
virtual bool tabsAreMovable() const = 0;
|
||||
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 QString text(int index) const = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -124,3 +124,8 @@ void TabBar_qtwidgets::moveTabTo(int from, int to)
|
||||
{
|
||||
moveTab(from, to);
|
||||
}
|
||||
|
||||
bool TabBar_qtwidgets::tabsAreMovable() const
|
||||
{
|
||||
return isMovable();
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "View_qtwidgets.h"
|
||||
#include "views/TabBar.h"
|
||||
|
||||
#include <QTabBar>
|
||||
|
||||
@@ -26,20 +27,22 @@ class DockWidget;
|
||||
|
||||
namespace KDDockWidgets::Views {
|
||||
|
||||
class DOCKS_EXPORT TabBar_qtwidgets : public View_qtwidgets<QTabBar>
|
||||
class DOCKS_EXPORT TabBar_qtwidgets : public View_qtwidgets<QTabBar>, public TabBar
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit TabBar_qtwidgets(Controllers::TabBar *controller, QWidget *parent = nullptr);
|
||||
|
||||
Controllers::TabBar *tabBar() const;
|
||||
int tabAt(QPoint localPos) const;
|
||||
|
||||
Controllers::DockWidget *currentDockWidget() const;
|
||||
Controllers::DockWidget *currentDockWidget() const override;
|
||||
|
||||
QString text(int index) const;
|
||||
QRect rectForTab(int index) const;
|
||||
void moveTabTo(int from, int to);
|
||||
QString text(int index) const override;
|
||||
QRect rectForTab(int index) const override;
|
||||
void moveTabTo(int from, int to) override;
|
||||
|
||||
bool tabsAreMovable() const override;
|
||||
int tabAt(QPoint localPos) const override;
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *) override;
|
||||
|
||||
Reference in New Issue
Block a user