173 lines
4.2 KiB
C++
173 lines
4.2 KiB
C++
/*
|
|
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_qtwidgets.h"
|
|
#include "../Window_qtwidgets.h"
|
|
#include "private/View_p.h"
|
|
#include "ViewWrapper_qtwidgets.h"
|
|
|
|
#include <QTabBar>
|
|
#include <QTabWidget>
|
|
#include <QMainWindow>
|
|
#include <QRubberBand>
|
|
#include <QLineEdit>
|
|
|
|
using namespace KDDockWidgets;
|
|
using namespace KDDockWidgets::Views;
|
|
|
|
template<>
|
|
View_qtwidgets<QWidget>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags windowFlags)
|
|
: QWidget(parent, windowFlags)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<>
|
|
View_qtwidgets<QTabBar>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags)
|
|
: QTabBar(parent)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<>
|
|
View_qtwidgets<QTabWidget>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags)
|
|
: QTabWidget(parent)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<>
|
|
View_qtwidgets<QMainWindow>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags)
|
|
: QMainWindow(parent)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<>
|
|
View_qtwidgets<QRubberBand>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags)
|
|
: QRubberBand(QRubberBand::Rectangle, parent)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<>
|
|
View_qtwidgets<QLineEdit>::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags)
|
|
: QLineEdit(parent)
|
|
, View(controller, type, this)
|
|
{
|
|
}
|
|
|
|
template<class T>
|
|
std::shared_ptr<Window> View_qtwidgets<T>::window() const
|
|
{
|
|
if (QWidget *root = QWidget::window()) {
|
|
if (root->window()) {
|
|
return std::shared_ptr<Window>(new Window_qtwidgets(root));
|
|
}
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
template<class T>
|
|
void View_qtwidgets<T>::setMaximumSize(QSize sz)
|
|
{
|
|
if (sz != QWidget::maximumSize()) {
|
|
T::setMaximumSize(sz);
|
|
d->layoutInvalidated.emit();
|
|
}
|
|
}
|
|
|
|
template<class T>
|
|
bool View_qtwidgets<T>::event(QEvent *e)
|
|
{
|
|
if (e->type() == QEvent::LayoutRequest)
|
|
d->layoutInvalidated.emit();
|
|
|
|
return T::event(e);
|
|
}
|
|
|
|
template<class T>
|
|
void View_qtwidgets<T>::closeEvent(QCloseEvent *ev)
|
|
{
|
|
d->closeRequested.emit(ev);
|
|
}
|
|
|
|
template<class T>
|
|
void View_qtwidgets<T>::setMinimumSize(QSize sz)
|
|
{
|
|
if (sz != QWidget::minimumSize()) {
|
|
QWidget::setMinimumSize(sz);
|
|
d->layoutInvalidated.emit();
|
|
}
|
|
}
|
|
|
|
|
|
template<class T>
|
|
std::shared_ptr<View> View_qtwidgets<T>::childViewAt(QPoint localPos) const
|
|
{
|
|
if (QWidget *child = QWidget::childAt(localPos))
|
|
return std::shared_ptr<View>(new ViewWrapper_qtwidgets(child));
|
|
|
|
return {};
|
|
}
|
|
|
|
template<class T>
|
|
std::shared_ptr<View> View_qtwidgets<T>::rootView() const
|
|
{
|
|
if (auto w = QWidget::window()) {
|
|
View *wrapper = new ViewWrapper_qtwidgets(w);
|
|
return std::shared_ptr<View>(wrapper);
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
template<class T>
|
|
std::shared_ptr<View> View_qtwidgets<T>::parentView() const
|
|
{
|
|
if (QWidget *p = QWidget::parentWidget()) {
|
|
View *wrapper = new ViewWrapper_qtwidgets(p);
|
|
return std::shared_ptr<View>(wrapper);
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
template<class T>
|
|
std::shared_ptr<View> View_qtwidgets<T>::asWrapper()
|
|
{
|
|
View *wrapper = new ViewWrapper_qtwidgets(this);
|
|
return std::shared_ptr<View>(wrapper);
|
|
}
|
|
|
|
/* static */
|
|
template<class T>
|
|
QVector<std::shared_ptr<View>> View_qtwidgets<T>::childViewsFor(const QWidget *parent)
|
|
{
|
|
QVector<std::shared_ptr<View>> result;
|
|
const QObjectList children = parent->children();
|
|
result.reserve(children.size());
|
|
for (QObject *child : children) {
|
|
if (auto widget = qobject_cast<QWidget *>(child)) {
|
|
View *wrapper = new ViewWrapper_qtwidgets(widget);
|
|
result.push_back(std::shared_ptr<View>(wrapper));
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
namespace KDDockWidgets::Views {
|
|
template class View_qtwidgets<QWidget>;
|
|
template class View_qtwidgets<QMainWindow>;
|
|
}
|