202 lines
4.9 KiB
C++
Executable File
202 lines
4.9 KiB
C++
Executable File
#include "lts_screen_normal.h"
|
|
#include "lts_dummy_widget.h"
|
|
#include "lts_screen_container.h"
|
|
#include "lts_magic_corner.h"
|
|
|
|
#include <LtsWidgets/lts_base_layout_widget.h>
|
|
|
|
#include <QDebug>
|
|
#include <QSplitter>
|
|
#include <QHBoxLayout>
|
|
//#include <QTimer>
|
|
|
|
#ifdef Q_OS_WIN
|
|
#include <QtPlatformHeaders/qwindowswindowfunctions.h>
|
|
#endif
|
|
|
|
|
|
namespace LtsMultiMonitor
|
|
{
|
|
|
|
LtsScreenNormal::LtsScreenNormal(QRect screenGeo, int screenId, bool debugMargins, const QString &serial)
|
|
: LtsScreenBase(screenGeo, screenId, debugMargins, serial)
|
|
, m_childContainer(new LtsScreenContainer(screenGeo))
|
|
, m_corner(new LtsMagicCorner(screenGeo))
|
|
{
|
|
// force check if widget in container was deleted:
|
|
connect(m_childContainer, &LtsScreenContainer::check,
|
|
this, &LtsScreenNormal::check);
|
|
|
|
auto *theLayout = new QHBoxLayout;
|
|
|
|
theLayout->setContentsMargins(0, 0, 0, 0);
|
|
theLayout->setMargin(0);
|
|
theLayout->setSpacing(0);
|
|
theLayout->setStretch(0, 999); // ?????
|
|
theLayout->addWidget(m_childContainer);
|
|
|
|
m_screenDialog->setLayout(theLayout);
|
|
|
|
m_corner->hide();
|
|
connect(m_corner, &LtsMagicCorner::toggle,
|
|
this, [this]()
|
|
{
|
|
m_childContainer->toggle();
|
|
m_corner->setActiveWidgetType(m_childContainer->activeWidgetType());
|
|
setCornerIcons();
|
|
});
|
|
|
|
connect(m_corner, &LtsMagicCorner::signalMakeAllSwole,
|
|
this, &LtsScreenNormal::signalMakeAllSwole); // =>
|
|
connect(this, &LtsScreenNormal::signalMakeSwole,
|
|
m_corner, &LtsMagicCorner::makeSwole); // <=
|
|
|
|
connect(m_childContainer, &LtsScreenContainer::signalSetCornerIcons,
|
|
this, &LtsScreenNormal::setCornerIcons);
|
|
}
|
|
|
|
|
|
LtsScreenNormal::~LtsScreenNormal()
|
|
{
|
|
m_corner->deleteLater();
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::setCornerIcons()
|
|
{
|
|
m_corner->setActiveWidgetType(m_childContainer->activeWidgetType());
|
|
m_corner->setIcon(m_childContainer->mainWindowIcon(), LtsScreenBase::WidgetType::MainWidget);
|
|
m_corner->setIcon(m_childContainer->secondaryWindowIcon(), LtsScreenBase::WidgetType::SecondaryWidget);
|
|
//qWarning() << "setCornerIcons done";
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::check()
|
|
{
|
|
m_childContainer->mainAndSecondaryOccupied() ? m_corner->show() : m_corner->hide();
|
|
}
|
|
|
|
|
|
LtsScreenContainer *LtsScreenNormal::containerOfWidget(QWidget *widget)
|
|
{
|
|
if (m_childContainer->hasWidget(widget))
|
|
return m_childContainer;
|
|
throw "widget is not present on this container";
|
|
}
|
|
|
|
void LtsScreenNormal::hideMagicCorner(bool hide)
|
|
{
|
|
m_corner->setFreezed(hide);
|
|
}
|
|
|
|
|
|
bool LtsScreenNormal::isIrreplaceable() const
|
|
{
|
|
return m_childContainer->isIrreplaceable();
|
|
}
|
|
|
|
|
|
int LtsScreenNormal::containerIdOfWidget(QWidget *widget) const noexcept(false)
|
|
{
|
|
if (m_childContainer->hasWidget(widget))
|
|
return 0;
|
|
throw "widget not on this screen";
|
|
}
|
|
|
|
|
|
LtsScreenContainer *LtsScreenNormal::putWidget(QWidget *widget, int /*screenPart normal screen has no parts*/) noexcept(false)
|
|
{
|
|
if (!isEmpty())
|
|
throw "cannot put widget as container is non-empty"; // can't put something on this screen as the container is already occupied
|
|
putWidgetUnmanaged(widget);
|
|
return m_childContainer;
|
|
}
|
|
|
|
|
|
bool LtsScreenNormal::hasWidget(QWidget *widget) const
|
|
{
|
|
return (m_childContainer->hasWidget(widget));
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::putWidgetUnmanaged(QWidget *widget)
|
|
{
|
|
//qWarning() << "putWidgetUnmanaged" << /*(quintptr)*/widget;
|
|
|
|
// QTimer *t = new QTimer;
|
|
// t->setInterval(0);
|
|
// QPointer<QWidget> wptr(widget);
|
|
// connect(t, &QTimer::timeout,
|
|
// this, [t, widget, wptr]()
|
|
// {
|
|
// if (wptr)
|
|
// qWarning() << widget << "parent" << wptr->parent();
|
|
// else
|
|
// {
|
|
// qWarning() << (quintptr)widget << "ded!!!!!!";
|
|
// t->stop();
|
|
// t->deleteLater();
|
|
// }
|
|
// });
|
|
// t->start();
|
|
|
|
|
|
|
|
// the problem: if switched from main to secondary, there is no widget for setCornerIcon to take
|
|
|
|
|
|
|
|
// bool setCornerIconLater = m_corner->hasIcon();//m_childContainer->isEmpty();
|
|
|
|
// if (!setCornerIconLater)
|
|
// {
|
|
// qWarning() << "setCornerIcon FIRST";
|
|
// setCornerIcon(widget); // get ACTIVE widget before toggeling, as we need to show the app that we get AFTER clicking the corner
|
|
// }
|
|
|
|
m_childContainer->setWidget(widget);
|
|
|
|
// if (setCornerIconLater)
|
|
// {
|
|
// qWarning() << "setCornerIcon LAST";
|
|
setCornerIcons(); // get ACTIVE widget AFTER toggeling, as there was no widget before
|
|
// }
|
|
|
|
|
|
|
|
// setCornerIcon(); // get ACTIVE widget before toggeling, as we need to show the app that we get AFTER clicking the corner
|
|
// m_childContainer->setWidget(widget);
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::slotOverlayDestroyed()
|
|
{
|
|
m_screenDialog->show();
|
|
}
|
|
|
|
|
|
bool LtsScreenNormal::isEmpty() const
|
|
{
|
|
return m_childContainer->isEmpty();
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::switchToTemp(LtsScreenBase::WidgetType widgetType)
|
|
{
|
|
m_childContainer->switchToTemp(widgetType);
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::finalizeSwitch()
|
|
{
|
|
m_childContainer->finalizeSwitch();
|
|
}
|
|
|
|
|
|
void LtsScreenNormal::revertSwitch()
|
|
{
|
|
m_childContainer->revertSwitch();
|
|
}
|
|
|
|
} // namespace LtsMultiMonitor
|