flutter: Add ViewWrapper
so we can implement View::parentView(), which returns a shared ptr
This commit is contained in:
@@ -239,6 +239,7 @@ set(KDDW_FRONTEND_FLUTTER_SRCS
|
||||
flutter/Window_flutter.cpp
|
||||
flutter/Platform_flutter.cpp
|
||||
flutter/views/View_flutter.cpp
|
||||
flutter/views/ViewWrapper.cpp
|
||||
flutter/TestHelpers_flutter.cpp
|
||||
flutter/views/Stack_flutter.cpp
|
||||
flutter/views/DockWidget_flutter.cpp
|
||||
|
||||
392
src/flutter/views/ViewWrapper.cpp
Normal file
392
src/flutter/views/ViewWrapper.cpp
Normal file
@@ -0,0 +1,392 @@
|
||||
/*
|
||||
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 "ViewWrapper.h"
|
||||
#include "private/View_p.h"
|
||||
#include "private/multisplitter/Item_p.h"
|
||||
#include "../Window_flutter.h"
|
||||
#include "View_flutter.h"
|
||||
|
||||
|
||||
// TODOm4: Make this class available for other frontends ?
|
||||
|
||||
using namespace KDDockWidgets;
|
||||
using namespace KDDockWidgets::Views;
|
||||
|
||||
|
||||
ViewWrapper::ViewWrapper(View_flutter *wrapped)
|
||||
: View(wrapped->controller(), Type::ViewWrapper)
|
||||
, m_wrappedView(wrapped)
|
||||
{
|
||||
}
|
||||
|
||||
ViewWrapper::~ViewWrapper()
|
||||
{
|
||||
}
|
||||
|
||||
void ViewWrapper::setGeometry(QRect geo)
|
||||
{
|
||||
m_wrappedView->setGeometry(geo);
|
||||
}
|
||||
|
||||
void ViewWrapper::move(int x, int y)
|
||||
{
|
||||
m_wrappedView->move(x, y);
|
||||
}
|
||||
|
||||
bool ViewWrapper::close()
|
||||
{
|
||||
return m_wrappedView->close();
|
||||
}
|
||||
|
||||
bool ViewWrapper::isVisible() const
|
||||
{
|
||||
return m_wrappedView->isVisible();
|
||||
}
|
||||
|
||||
void ViewWrapper::setVisible(bool is)
|
||||
{
|
||||
m_wrappedView->setVisible(is);
|
||||
}
|
||||
|
||||
void ViewWrapper::setSize(int w, int h)
|
||||
{
|
||||
m_wrappedView->setSize(w, h);
|
||||
}
|
||||
|
||||
std::shared_ptr<View> ViewWrapper::rootView() const
|
||||
{
|
||||
return m_wrappedView->rootView();
|
||||
}
|
||||
|
||||
void ViewWrapper::setAttribute(Qt::WidgetAttribute attr, bool enabled)
|
||||
{
|
||||
m_wrappedView->setAttribute(attr, enabled);
|
||||
}
|
||||
|
||||
bool ViewWrapper::testAttribute(Qt::WidgetAttribute attr) const
|
||||
{
|
||||
return m_wrappedView->testAttribute(attr);
|
||||
}
|
||||
|
||||
void ViewWrapper::setFlag(Qt::WindowType flag, bool enabled)
|
||||
{
|
||||
m_wrappedView->setFlag(flag, enabled);
|
||||
}
|
||||
|
||||
Qt::WindowFlags ViewWrapper::flags() const
|
||||
{
|
||||
return m_wrappedView->flags();
|
||||
}
|
||||
|
||||
void ViewWrapper::free_impl()
|
||||
{
|
||||
}
|
||||
|
||||
QSize ViewWrapper::sizeHint() const
|
||||
{
|
||||
return m_wrappedView->sizeHint();
|
||||
}
|
||||
|
||||
QSize ViewWrapper::minSize() const
|
||||
{
|
||||
return m_wrappedView->minSize();
|
||||
}
|
||||
|
||||
QSize ViewWrapper::maxSizeHint() const
|
||||
{
|
||||
return m_wrappedView->maxSizeHint();
|
||||
}
|
||||
|
||||
QRect ViewWrapper::geometry() const
|
||||
{
|
||||
return m_wrappedView->geometry();
|
||||
}
|
||||
|
||||
QRect ViewWrapper::normalGeometry() const
|
||||
{
|
||||
return m_wrappedView->normalGeometry();
|
||||
}
|
||||
|
||||
void ViewWrapper::setNormalGeometry(QRect geo)
|
||||
{
|
||||
m_wrappedView->setNormalGeometry(geo);
|
||||
}
|
||||
|
||||
void ViewWrapper::setMaximumSize(QSize size)
|
||||
{
|
||||
m_wrappedView->setMaximumSize(size);
|
||||
}
|
||||
|
||||
void ViewWrapper::setWidth(int w)
|
||||
{
|
||||
m_wrappedView->setWidth(w);
|
||||
}
|
||||
|
||||
void ViewWrapper::setHeight(int h)
|
||||
{
|
||||
m_wrappedView->setHeight(h);
|
||||
}
|
||||
|
||||
void ViewWrapper::setFixedWidth(int w)
|
||||
{
|
||||
m_wrappedView->setFixedWidth(w);
|
||||
}
|
||||
|
||||
void ViewWrapper::setFixedHeight(int h)
|
||||
{
|
||||
m_wrappedView->setFixedHeight(h);
|
||||
}
|
||||
|
||||
void ViewWrapper::show()
|
||||
{
|
||||
m_wrappedView->show();
|
||||
}
|
||||
|
||||
void ViewWrapper::hide()
|
||||
{
|
||||
m_wrappedView->hide();
|
||||
}
|
||||
|
||||
void ViewWrapper::updateGeometry()
|
||||
{
|
||||
m_wrappedView->updateGeometry();
|
||||
}
|
||||
|
||||
void ViewWrapper::update()
|
||||
{
|
||||
m_wrappedView->update();
|
||||
}
|
||||
|
||||
void ViewWrapper::setParent(View *parent)
|
||||
{
|
||||
m_wrappedView->setParent(parent);
|
||||
}
|
||||
|
||||
void ViewWrapper::raiseAndActivate()
|
||||
{
|
||||
m_wrappedView->raiseAndActivate();
|
||||
}
|
||||
|
||||
void ViewWrapper::activateWindow()
|
||||
{
|
||||
m_wrappedView->activateWindow();
|
||||
}
|
||||
|
||||
void ViewWrapper::raise()
|
||||
{
|
||||
m_wrappedView->raise();
|
||||
}
|
||||
|
||||
QVariant ViewWrapper::property(const char *name) const
|
||||
{
|
||||
return m_wrappedView->property(name);
|
||||
}
|
||||
|
||||
bool ViewWrapper::isRootView() const
|
||||
{
|
||||
return m_wrappedView->isRootView();
|
||||
}
|
||||
|
||||
QPoint ViewWrapper::mapToGlobal(QPoint local) const
|
||||
{
|
||||
return m_wrappedView->mapToGlobal(local);
|
||||
}
|
||||
|
||||
QPoint ViewWrapper::mapFromGlobal(QPoint global) const
|
||||
{
|
||||
return m_wrappedView->mapFromGlobal(global);
|
||||
}
|
||||
|
||||
QPoint ViewWrapper::mapTo(View *view, QPoint pos) const
|
||||
{
|
||||
return m_wrappedView->mapTo(view, pos);
|
||||
}
|
||||
|
||||
void ViewWrapper::setWindowOpacity(double opacity)
|
||||
{
|
||||
m_wrappedView->setWindowOpacity(opacity);
|
||||
}
|
||||
|
||||
void ViewWrapper::setSizePolicy(SizePolicy hp, SizePolicy vp)
|
||||
{
|
||||
m_wrappedView->setSizePolicy(hp, vp);
|
||||
}
|
||||
|
||||
SizePolicy ViewWrapper::verticalSizePolicy() const
|
||||
{
|
||||
return m_wrappedView->verticalSizePolicy();
|
||||
}
|
||||
|
||||
SizePolicy ViewWrapper::horizontalSizePolicy() const
|
||||
{
|
||||
return m_wrappedView->horizontalSizePolicy();
|
||||
}
|
||||
|
||||
void ViewWrapper::setWindowTitle(const QString &title)
|
||||
{
|
||||
m_wrappedView->setWindowTitle(title);
|
||||
}
|
||||
|
||||
void ViewWrapper::setWindowIcon(const QIcon &icon)
|
||||
{
|
||||
m_wrappedView->setWindowIcon(icon);
|
||||
}
|
||||
|
||||
bool ViewWrapper::isActiveWindow() const
|
||||
{
|
||||
return m_wrappedView->isActiveWindow();
|
||||
}
|
||||
|
||||
void ViewWrapper::showNormal()
|
||||
{
|
||||
m_wrappedView->showNormal();
|
||||
}
|
||||
|
||||
void ViewWrapper::showMinimized()
|
||||
{
|
||||
m_wrappedView->showMinimized();
|
||||
}
|
||||
|
||||
void ViewWrapper::showMaximized()
|
||||
{
|
||||
m_wrappedView->showMaximized();
|
||||
}
|
||||
|
||||
bool ViewWrapper::isMinimized() const
|
||||
{
|
||||
return m_wrappedView->isMinimized();
|
||||
}
|
||||
|
||||
bool ViewWrapper::isMaximized() const
|
||||
{
|
||||
return m_wrappedView->isMaximized();
|
||||
}
|
||||
|
||||
std::shared_ptr<Window> ViewWrapper::window() const
|
||||
{
|
||||
return m_wrappedView->window();
|
||||
}
|
||||
|
||||
std::shared_ptr<View> ViewWrapper::childViewAt(QPoint pos) const
|
||||
{
|
||||
return m_wrappedView->childViewAt(pos);
|
||||
}
|
||||
|
||||
std::shared_ptr<View> ViewWrapper::parentView() const
|
||||
{
|
||||
return m_wrappedView->parentView();
|
||||
}
|
||||
|
||||
std::shared_ptr<View> ViewWrapper::asWrapper()
|
||||
{
|
||||
return m_thisWeakPtr.lock();
|
||||
}
|
||||
|
||||
void ViewWrapper::setObjectName(const QString &name)
|
||||
{
|
||||
m_wrappedView->setObjectName(name);
|
||||
}
|
||||
|
||||
void ViewWrapper::grabMouse()
|
||||
{
|
||||
m_wrappedView->grabMouse();
|
||||
}
|
||||
|
||||
void ViewWrapper::releaseMouse()
|
||||
{
|
||||
m_wrappedView->releaseMouse();
|
||||
}
|
||||
|
||||
void ViewWrapper::releaseKeyboard()
|
||||
{
|
||||
m_wrappedView->releaseKeyboard();
|
||||
}
|
||||
|
||||
void ViewWrapper::setFocus(Qt::FocusReason reason)
|
||||
{
|
||||
m_wrappedView->setFocus(reason);
|
||||
}
|
||||
|
||||
bool ViewWrapper::hasFocus() const
|
||||
{
|
||||
return m_wrappedView->hasFocus();
|
||||
}
|
||||
|
||||
Qt::FocusPolicy ViewWrapper::focusPolicy() const
|
||||
{
|
||||
return m_wrappedView->focusPolicy();
|
||||
}
|
||||
|
||||
void ViewWrapper::setFocusPolicy(Qt::FocusPolicy policy)
|
||||
{
|
||||
m_wrappedView->setFocusPolicy(policy);
|
||||
}
|
||||
|
||||
QString ViewWrapper::objectName() const
|
||||
{
|
||||
return m_wrappedView->objectName();
|
||||
}
|
||||
|
||||
void ViewWrapper::setMinimumSize(QSize size)
|
||||
{
|
||||
m_wrappedView->setMinimumSize(size);
|
||||
}
|
||||
|
||||
void ViewWrapper::render(QPainter *render)
|
||||
{
|
||||
m_wrappedView->render(render);
|
||||
}
|
||||
|
||||
void ViewWrapper::setCursor(Qt::CursorShape shape)
|
||||
{
|
||||
m_wrappedView->setCursor(shape);
|
||||
}
|
||||
|
||||
void ViewWrapper::setMouseTracking(bool tracking)
|
||||
{
|
||||
m_wrappedView->setMouseTracking(tracking);
|
||||
}
|
||||
|
||||
QVector<std::shared_ptr<View>> ViewWrapper::childViews() const
|
||||
{
|
||||
return m_wrappedView->childViews();
|
||||
}
|
||||
|
||||
void ViewWrapper::setZOrder(int z)
|
||||
{
|
||||
m_wrappedView->setZOrder(z);
|
||||
}
|
||||
|
||||
HANDLE ViewWrapper::handle() const
|
||||
{
|
||||
return m_wrappedView->handle();
|
||||
}
|
||||
|
||||
bool ViewWrapper::onResize(int w, int h)
|
||||
{
|
||||
// Indirection so Dartagnan generates it, while we don't do bindings for View.cpp
|
||||
return View::onResize(w, h);
|
||||
}
|
||||
|
||||
/*static*/ std::shared_ptr<View> ViewWrapper::create(View_flutter *wrapped)
|
||||
{
|
||||
auto wrapper = new ViewWrapper(wrapped);
|
||||
auto ptr = std::shared_ptr<ViewWrapper>(wrapper);
|
||||
wrapper->setWeakPtr(ptr);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void ViewWrapper::setWeakPtr(std::weak_ptr<ViewWrapper> thisPtr)
|
||||
{
|
||||
m_thisWeakPtr = thisPtr;
|
||||
}
|
||||
130
src/flutter/views/ViewWrapper.h
Normal file
130
src/flutter/views/ViewWrapper.h
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
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
|
||||
|
||||
#include "kddockwidgets/Controller.h"
|
||||
#include "kddockwidgets/View.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QEvent>
|
||||
#include <QResizeEvent>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace KDDockWidgets::Views {
|
||||
|
||||
class View_flutter;
|
||||
|
||||
class DOCKS_EXPORT ViewWrapper : public View
|
||||
{
|
||||
public:
|
||||
using View::close;
|
||||
using View::height;
|
||||
using View::minimumHeight;
|
||||
|
||||
using View::minimumWidth;
|
||||
using View::rect;
|
||||
using View::resize;
|
||||
using View::width;
|
||||
|
||||
static std::shared_ptr<View> create(View_flutter *wrapped);
|
||||
~ViewWrapper() override;
|
||||
|
||||
void free_impl() override;
|
||||
QSize sizeHint() const override;
|
||||
QSize minSize() const override;
|
||||
QSize maxSizeHint() const override;
|
||||
QRect geometry() const override;
|
||||
QRect normalGeometry() const override;
|
||||
void setNormalGeometry(QRect geo);
|
||||
void setGeometry(QRect geometry) override;
|
||||
void setMaximumSize(QSize sz) override;
|
||||
|
||||
bool isVisible() const override;
|
||||
void setVisible(bool visible) override;
|
||||
|
||||
void move(int x, int y) override;
|
||||
void setSize(int w, int h) override;
|
||||
|
||||
void setWidth(int w) override;
|
||||
void setHeight(int h) override;
|
||||
void setFixedWidth(int w) override;
|
||||
void setFixedHeight(int h) override;
|
||||
void show() override;
|
||||
void hide() override;
|
||||
void updateGeometry();
|
||||
void update() override;
|
||||
void setParent(View *parent) override;
|
||||
void raiseAndActivate() override;
|
||||
void activateWindow() override;
|
||||
void raise() override;
|
||||
QVariant property(const char *name) const override;
|
||||
bool isRootView() const override;
|
||||
QPoint mapToGlobal(QPoint localPt) const override;
|
||||
QPoint mapFromGlobal(QPoint globalPt) const override;
|
||||
QPoint mapTo(View *parent, QPoint pos) const override;
|
||||
void setWindowOpacity(double v) override;
|
||||
void setSizePolicy(SizePolicy hPolicy, SizePolicy vPolicy) override;
|
||||
SizePolicy verticalSizePolicy() const override;
|
||||
SizePolicy horizontalSizePolicy() const override;
|
||||
|
||||
bool onResize(int w, int h) override;
|
||||
|
||||
bool close() override;
|
||||
void setFlag(Qt::WindowType f, bool on = true) override;
|
||||
void setAttribute(Qt::WidgetAttribute attr, bool enable = true) override;
|
||||
bool testAttribute(Qt::WidgetAttribute attr) const override;
|
||||
Qt::WindowFlags flags() const override;
|
||||
|
||||
void setWindowTitle(const QString &title) override;
|
||||
void setWindowIcon(const QIcon &icon) override;
|
||||
bool isActiveWindow() const override;
|
||||
|
||||
void showNormal() override;
|
||||
void showMinimized() override;
|
||||
void showMaximized() override;
|
||||
|
||||
bool isMinimized() const override;
|
||||
bool isMaximized() const override;
|
||||
|
||||
std::shared_ptr<Window> window() const override;
|
||||
std::shared_ptr<View> childViewAt(QPoint p) const override;
|
||||
std::shared_ptr<View> rootView() const override;
|
||||
std::shared_ptr<View> parentView() const override;
|
||||
std::shared_ptr<View> asWrapper() override;
|
||||
|
||||
void setObjectName(const QString &name) override;
|
||||
void grabMouse() override;
|
||||
void releaseMouse() override;
|
||||
void releaseKeyboard() override;
|
||||
void setFocus(Qt::FocusReason reason) override;
|
||||
Qt::FocusPolicy focusPolicy() const override;
|
||||
bool hasFocus() const override;
|
||||
void setFocusPolicy(Qt::FocusPolicy policy) override;
|
||||
QString objectName() const override;
|
||||
void setMinimumSize(QSize sz) override;
|
||||
void render(QPainter *) override;
|
||||
void setCursor(Qt::CursorShape shape) override;
|
||||
void setMouseTracking(bool enable) override;
|
||||
QVector<std::shared_ptr<View>> childViews() const override;
|
||||
void setZOrder(int z) override;
|
||||
HANDLE handle() const override;
|
||||
|
||||
private:
|
||||
explicit ViewWrapper(View_flutter *wrapped);
|
||||
void setWeakPtr(std::weak_ptr<ViewWrapper> thisPtr);
|
||||
View_flutter *const m_wrappedView = nullptr;
|
||||
std::weak_ptr<ViewWrapper> m_thisWeakPtr;
|
||||
Q_DISABLE_COPY(ViewWrapper)
|
||||
};
|
||||
|
||||
} // namespace KDDockWidgets::Views
|
||||
Reference in New Issue
Block a user