Add Frame view interface
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
46
src/views/Frame.h
Normal 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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user