6#include <QtCore/qmetaobject.h>
7#include <QtGui/QMouseEvent>
8#include <QtGui/QShowEvent>
9#include <QtWidgets/QDialog>
11#if QT_VERSION > QT_VERSION_CHECK(5, 15, 0)
12 #include <QtGui/QScreen>
14 #include <QtGui/QDesktopWidget>
23class TDesignerGuiDialogBase:
public QDialog,
public UI
26 typedef QDialog BaseClass;
28 TDesignerGuiDialogBase();
30 void SetDialogGeometry(
double screenFactorX,
double screenFactorY,
const QPoint& position = QPoint());
31 void SetTitlePanel(QWidget* titlePanelPtr);
35 virtual void showEvent(QShowEvent* eventPtr)
override;
38 virtual bool eventFilter(QObject* watched, QEvent* event)
override;
44 QWidget* m_titlePanelPtr;
46 double m_screenFactorX;
47 double m_screenFactorY;
48 QPoint m_screenPosition;
58inline TDesignerGuiDialogBase<UI>::TDesignerGuiDialogBase()
61 m_cursorLocked(false),
62 m_titlePanelPtr(nullptr)
69void TDesignerGuiDialogBase<UI>::SetDialogGeometry(
double screenFactorX,
double screenFactorY,
const QPoint& position)
71 m_screenFactorX = screenFactorX;
72 m_screenFactorY = screenFactorY;
73 m_screenPosition = position;
80void TDesignerGuiDialogBase<UI>::SetTitlePanel(QWidget* titlePanelPtr)
82 if (m_titlePanelPtr !=
nullptr){
83 m_titlePanelPtr->removeEventFilter(
this);
86 m_titlePanelPtr = titlePanelPtr;
87 if (m_titlePanelPtr !=
nullptr){
88 m_titlePanelPtr->installEventFilter(
this);
98void TDesignerGuiDialogBase<UI>::showEvent(QShowEvent* eventPtr)
100 BaseClass::showEvent(eventPtr);
102 if (!eventPtr->spontaneous()){
111bool TDesignerGuiDialogBase<UI>::eventFilter(QObject* watched, QEvent* event)
113 if (watched == m_titlePanelPtr){
114 QMouseEvent* eventPtr =
dynamic_cast<QMouseEvent*
>(event);
115 if (eventPtr !=
nullptr){
116 switch (event->type()){
117 case QEvent::MouseButtonPress:
118 m_cursorLocked =
true;
119 m_pos = eventPtr->globalPos();
121 case QEvent::MouseButtonRelease:
122 m_cursorLocked =
false;
124 case QEvent::MouseMove:
126 move(pos() + (eventPtr->globalPos() - m_pos));
127 m_pos = eventPtr->globalPos();
131 m_cursorLocked =
false;
137 return BaseClass::eventFilter(watched, event);
144void TDesignerGuiDialogBase<UI>::ApplyGeometry()
146 BaseClass::adjustSize();
149#if QT_VERSION > QT_VERSION_CHECK(5, 15, 0)
150 screenRect = screen()->geometry();
152 const QDesktopWidget* desktopPtr = QApplication::desktop();
153 Q_ASSERT(desktopPtr != NULL);
155 screenRect = desktopPtr->screenGeometry();
158 if (m_screenFactorX > 0 && m_screenFactorY > 0){
159 double screenFactorX = qMin(0.99, m_screenFactorX);
160 double screenFactorY = qMin(0.99, m_screenFactorY);
162 BaseClass::resize(
int(screenRect.width() * screenFactorX),
int(screenRect.height() * screenFactorY));
165 BaseClass::resize(sizeHint());
168 if (m_screenPosition.isNull()){
169 QSize dialogHalfSize = size() / 2;
171 BaseClass::move(screenRect.center() - QPoint(dialogHalfSize.width(), dialogHalfSize.height()));
174 BaseClass::move(m_screenPosition);