2026-04-06 00:20:51 -05:00

184 lines
3.0 KiB
C++

/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020 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 "Controller.h"
#include "Controller_p.h"
#include "Platform.h"
#include "DelayedCall_p.h"
#include "View.h"
#include "Config.h"
#include "View_p.h"
#include "Logging_p.h"
#include "DragController_p.h"
#include "core/Utils_p.h"
using namespace KDDockWidgets;
using namespace KDDockWidgets::Core;
Controller::Controller(ViewType type, View *view)
: d(new Private(type, view))
{
}
Controller::~Controller()
{
safeEmitSignal(d->aboutToBeDeleted);
m_inDtor = true;
if (d->m_view && !d->m_view->inDtor())
d->m_view->d->free();
delete d;
}
ViewType Controller::type() const
{
return d->m_type;
}
bool Controller::is(ViewType t) const
{
return int(d->m_type) & int(t);
}
bool Controller::inDtor() const
{
return m_inDtor;
}
View *Controller::view() const
{
return d->m_view;
}
bool Controller::isVisible() const
{
return d->m_view && d->m_view->isVisible();
}
void Controller::setVisible(bool is)
{
if (d->m_view)
d->m_view->setVisible(is);
}
Rect Controller::rect() const
{
if (d->m_view)
return d->m_view->rect();
return {};
}
Point Controller::mapToGlobal(Point localPt) const
{
return d->m_view->mapToGlobal(localPt);
}
int Controller::height() const
{
return d->m_view->height();
}
int Controller::width() const
{
return d->m_view->width();
}
Size Controller::size() const
{
return d->m_view->size();
}
Rect Controller::geometry() const
{
return d->m_view->geometry();
}
Point Controller::pos() const
{
return d->m_view->geometry().topLeft();
}
int Controller::x() const
{
return d->m_view->x();
}
int Controller::y() const
{
return d->m_view->y();
}
bool Controller::close()
{
return view() && view()->close();
}
std::shared_ptr<View> Controller::window() const
{
return view()->rootView();
}
void Controller::show() const
{
view()->show();
}
void Controller::setParentView(View *parent)
{
setParentView_impl(parent);
d->parentViewChanged.emit(parent);
}
void Controller::setParentView_impl(View *parent)
{
if (auto v = view()) {
v->setParent(parent);
} else {
KDDW_ERROR("No view()");
}
}
void Controller::destroyLater()
{
#ifdef KDDW_FRONTEND_QT
if (!usesQTBUG83030Workaround()) {
QObject::deleteLater();
return;
}
#endif
// Path for Flutter and QTBUG-83030:
Platform::instance()->runDelayed(0, new DelayedDelete(this));
}
Controller::Private *Controller::dptr() const
{
return d;
}
bool Controller::isFixedHeight() const
{
if (auto v = view())
return v->isFixedHeight();
return false;
}
bool Controller::isFixedWidth() const
{
if (auto v = view())
return v->isFixedWidth();
return false;
}