Add Frame view interface

This commit is contained in:
Sergio Martins
2022-04-02 23:57:48 +01:00
parent 2f0cbf83e9
commit 3cdd33f42f
8 changed files with 86 additions and 101 deletions

View File

@@ -102,10 +102,6 @@ set(DOCKSLIBS_SRCS
ViewWrapper.h
Controller.cpp
Controller.h
views/FrameView.cpp
views/FrameView.h
views_qtwidgets/View_qtwidgets.cpp
views_qtwidgets/View_qtwidgets.h
views_qtwidgets/ViewWrapper_qtwidgets.cpp

View File

@@ -58,10 +58,10 @@ FrameworkWidgetFactory::~FrameworkWidgetFactory()
#ifdef KDDOCKWIDGETS_QTWIDGETS
View *DefaultWidgetFactory::createFrame(Controllers::Frame *controller, View *parent = nullptr,
FrameOptions options) const
FrameOptions) const
{
Q_UNUSED(options); // TODO
return new Views::Frame_qtwidgets(controller, parent->asQWidget());
// TODOv2: Remove options
return new Views::Frame_qtwidgets(controller, parent ? parent->asQWidget() : nullptr);
}
View *DefaultWidgetFactory::createTitleBar(Controllers::TitleBar *titleBar, Controllers::Frame *frame) const

View File

@@ -16,6 +16,7 @@
#include "Controller.h"
#include "View.h"
#include "views/Frame.h"
#include "controllers/TitleBar.h"
#include "controllers/Stack.h"
#include "controllers/FloatingWindow.h"
@@ -31,7 +32,6 @@
#include "private/DropAreaWithCentralFrame_p.h"
#include "private/multisplitter/Item_p.h"
#include "views_qtwidgets/Frame_qtwidgets.h"
#include "views_qtwidgets/DockWidget_qtwidgets.h"
#include <QCloseEvent>
@@ -68,7 +68,7 @@ static StackOptions tabWidgetOptions(FrameOptions options)
}
Frame::Frame(View *parent, FrameOptions options, int userType)
: Controller(Type::Frame, new Views::Frame_qtwidgets(this, parent ? parent->asQWidget() : nullptr))
: Controller(Type::Frame, Config::self().frameworkWidgetFactory()->createFrame(this, parent))
, FocusScope(static_cast<Views::View_qtwidgets<QWidget> *>(view()->asQWidget())) // TODO
, m_tabWidget(new Controllers::Stack(this, tabWidgetOptions(options)))
, m_titleBar(new Controllers::TitleBar(this))
@@ -152,63 +152,57 @@ void Frame::setLayoutWidget(LayoutWidget *dt)
void Frame::renameTab(int index, const QString &title)
{
// TODO
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->renameTab(index, title);
dynamic_cast<Views::Frame *>(view())->renameTab(index, title);
}
void Frame::changeTabIcon(int index, const QIcon &icon)
{
// TODO
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->changeTabIcon(index, icon);
dynamic_cast<Views::Frame *>(view())->changeTabIcon(index, icon);
}
void Frame::removeWidget_impl(DockWidget *dw)
{
// TODO
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->removeWidget_impl(dw);
dynamic_cast<Views::Frame *>(view())->removeWidget_impl(dw);
}
int Frame::indexOfDockWidget_impl(const DockWidget *dw)
{
// TODO
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->indexOfDockWidget_impl(dw);
return dynamic_cast<Views::Frame *>(view())->indexOfDockWidget_impl(dw);
}
int Frame::currentIndex_impl() const
{
// TODO
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->currentIndex_impl();
return dynamic_cast<Views::Frame *>(view())->currentIndex_impl();
}
void Frame::setCurrentTabIndex_impl(int index)
{
// TODO
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->setCurrentTabIndex_impl(index);
dynamic_cast<Views::Frame *>(view())->setCurrentTabIndex_impl(index);
}
void Frame::setCurrentDockWidget_impl(DockWidget *dw)
{
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->setCurrentDockWidget_impl(dw);
dynamic_cast<Views::Frame *>(view())->setCurrentDockWidget_impl(dw);
}
void Frame::insertDockWidget_impl(DockWidget *dw, int index)
{
qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->insertDockWidget_impl(dw, index);
dynamic_cast<Views::Frame *>(view())->insertDockWidget_impl(dw, index);
}
DockWidgetBase *Frame::dockWidgetAt_impl(int index) const
{
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->dockWidgetAt_impl(index);
return dynamic_cast<Views::Frame *>(view())->dockWidgetAt_impl(index);
}
DockWidgetBase *Frame::currentDockWidget_impl() const
{
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->currentDockWidget_impl();
return dynamic_cast<Views::Frame *>(view())->currentDockWidget_impl();
}
int Frame::nonContentsHeight() const
{
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->nonContentsHeight();
return dynamic_cast<Views::Frame *>(view())->nonContentsHeight();
}
Controllers::Stack *Frame::tabWidget() const
@@ -858,7 +852,7 @@ QRect Frame::dragRect() const
if (rect.isValid())
return rect;
return qobject_cast<Views::Frame_qtwidgets *>(view()->asQWidget())->dragRect();
return dynamic_cast<Views::Frame *>(view())->dragRect();
}
MainWindow *Frame::mainWindow() const

View File

@@ -337,15 +337,15 @@ public:
*/
QSize biggestDockWidgetMaxSize() const;
virtual void removeWidget_impl(DockWidget *);
virtual int indexOfDockWidget_impl(const DockWidget *);
virtual int currentIndex_impl() const;
virtual void setCurrentTabIndex_impl(int index);
virtual void setCurrentDockWidget_impl(DockWidget *);
virtual void insertDockWidget_impl(DockWidget *, int index);
virtual DockWidget *dockWidgetAt_impl(int index) const;
virtual DockWidget *currentDockWidget_impl() const;
virtual int nonContentsHeight() const;
void removeWidget_impl(DockWidget *);
int indexOfDockWidget_impl(const DockWidget *);
int currentIndex_impl() const;
void setCurrentTabIndex_impl(int index);
void setCurrentDockWidget_impl(DockWidget *);
void insertDockWidget_impl(DockWidget *, int index);
DockWidget *dockWidgetAt_impl(int index) const;
DockWidget *currentDockWidget_impl() const;
int nonContentsHeight() const;
private:
bool m_inCtor = true; // Needs to be initialized early, as pointed out by UBSAN

46
src/views/Frame.h Normal file
View File

@@ -0,0 +1,46 @@
/*
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 QString;
class QIcon;
class QRect;
namespace KDDockWidgets {
namespace Controllers {
class DockWidget;
}
namespace Views {
/// @brief The interface that Frame views should implement
class Frame
{
public:
virtual void renameTab(int index, const QString &) = 0;
virtual void changeTabIcon(int index, const QIcon &) = 0;
virtual void removeWidget_impl(Controllers::DockWidget *) = 0;
virtual int indexOfDockWidget_impl(const Controllers::DockWidget *) = 0;
virtual int currentIndex_impl() const = 0;
virtual void setCurrentTabIndex_impl(int index) = 0;
virtual void setCurrentDockWidget_impl(Controllers::DockWidget *) = 0;
virtual void insertDockWidget_impl(Controllers::DockWidget *, int index) = 0;
virtual Controllers::DockWidget *dockWidgetAt_impl(int index) const = 0;
virtual Controllers::DockWidget *currentDockWidget_impl() const = 0;
virtual int nonContentsHeight() const = 0;
virtual QRect dragRect() const = 0;
};
}
}

View File

@@ -1,22 +0,0 @@
/*
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.
*/
#include "FrameView.h"
#include "controllers/Frame.h"
using namespace KDDockWidgets;
using namespace KDDockWidgets::Views;
FrameView::FrameView(Controllers::Frame *controller, QObject *thisObj)
: View(controller, Type::Frame, thisObj)
{
}

View File

@@ -1,30 +0,0 @@
/*
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.
*/
#include "../View.h"
namespace KDDockWidgets {
namespace Controllers {
class Frame;
}
namespace Views {
class DOCKS_EXPORT FrameView : public View
{
public:
explicit FrameView(Controllers::Frame *, QObject *thisObj);
};
}
}

View File

@@ -12,6 +12,7 @@
#pragma once
#include "View_qtwidgets.h"
#include "views/Frame.h"
namespace KDDockWidgets::Controllers {
class Frame;
@@ -19,7 +20,7 @@ class Frame;
namespace KDDockWidgets::Views {
class DOCKS_EXPORT Frame_qtwidgets : public View_qtwidgets<QWidget>
class DOCKS_EXPORT Frame_qtwidgets : public View_qtwidgets<QWidget>, public Frame
{
Q_OBJECT
public:
@@ -28,20 +29,20 @@ public:
void setLayoutItem(Layouting::Item *item) override;
void renameTab(int index, const QString &);
void changeTabIcon(int index, const QIcon &);
void removeWidget_impl(Controllers::DockWidget *);
int indexOfDockWidget_impl(const Controllers::DockWidget *);
int currentIndex_impl() const;
void setCurrentTabIndex_impl(int index);
void setCurrentDockWidget_impl(Controllers::DockWidget *);
void insertDockWidget_impl(Controllers::DockWidget *, int index);
Controllers::DockWidget *dockWidgetAt_impl(int index) const;
Controllers::DockWidget *currentDockWidget_impl() const;
int nonContentsHeight() const;
void renameTab(int index, const QString &) override;
void changeTabIcon(int index, const QIcon &) override;
void removeWidget_impl(Controllers::DockWidget *) override;
int indexOfDockWidget_impl(const Controllers::DockWidget *) override;
int currentIndex_impl() const override;
void setCurrentTabIndex_impl(int index) override;
void setCurrentDockWidget_impl(Controllers::DockWidget *) override;
void insertDockWidget_impl(Controllers::DockWidget *, int index) override;
Controllers::DockWidget *dockWidgetAt_impl(int index) const override;
Controllers::DockWidget *currentDockWidget_impl() const override;
int nonContentsHeight() const override;
Controllers::Frame *frame() const;
QRect dragRect() const;
QRect dragRect() const override;
Q_SIGNALS:
void layoutInvalidated();