qt-material-widgets/components/qtmaterialdialog_internal.cpp

132 lines
2.4 KiB
C++
Raw Normal View History

2017-09-29 23:40:00 +00:00
#include "qtmaterialdialog_internal.h"
2017-09-29 23:15:08 +00:00
#include <QPainter>
#include <QPixmap>
#include <QEvent>
2017-09-29 23:40:00 +00:00
#include <QtWidgets/QStackedLayout>
#include "qtmaterialdialog.h"
2022-02-17 02:15:21 +00:00
namespace md
{
2017-09-29 23:15:08 +00:00
/*!
* \class QtMaterialDialogProxy
* \internal
*/
2022-02-17 02:15:21 +00:00
DialogProxy::DialogProxy(
DialogWindow *source,
2017-09-29 23:15:08 +00:00
QStackedLayout *layout,
2022-02-17 02:15:21 +00:00
Dialog *dialog,
2017-09-29 23:15:08 +00:00
QWidget *parent)
: QWidget(parent),
m_source(source),
m_layout(layout),
m_dialog(dialog),
m_opacity(0),
m_mode(Transparent)
{
}
2022-02-17 02:15:21 +00:00
DialogProxy::~DialogProxy()
2017-09-29 23:15:08 +00:00
{
}
2022-02-17 02:15:21 +00:00
void DialogProxy::setOpacity(qreal opacity)
2017-09-29 23:15:08 +00:00
{
m_opacity = opacity;
m_mode = SemiTransparent;
update();
m_dialog->update();
}
2022-02-17 02:15:21 +00:00
void DialogProxy::makeOpaque()
2017-09-29 23:15:08 +00:00
{
m_dialog->setAttribute(Qt::WA_TransparentForMouseEvents, false);
m_layout->setCurrentIndex(0);
m_opacity = 1.0;
m_mode = Opaque;
update();
}
2022-02-17 02:15:21 +00:00
void DialogProxy::makeTransparent()
2017-09-29 23:15:08 +00:00
{
m_opacity = 0.0;
m_mode = Transparent;
update();
}
2022-02-17 02:15:21 +00:00
QSize DialogProxy::sizeHint() const
2017-09-29 23:15:08 +00:00
{
return m_source->sizeHint();
}
2022-02-17 02:15:21 +00:00
bool DialogProxy::event(QEvent *event)
2017-09-29 23:15:08 +00:00
{
const QEvent::Type type = event->type();
if (QEvent::Move == type || QEvent::Resize == type) {
m_source->setGeometry(geometry());
}
return QWidget::event(event);
}
2022-02-17 02:15:21 +00:00
void DialogProxy::paintEvent(QPaintEvent *event)
2017-09-29 23:15:08 +00:00
{
Q_UNUSED(event)
QPainter painter(this);
if (Transparent == m_mode) {
return;
} else if (Opaque != m_mode) {
painter.setOpacity(m_opacity);
}
QPixmap pm = m_source->grab(m_source->rect());
painter.drawPixmap(0, 0, pm);
}
/*!
* \class QtMaterialDialogWindow
* \internal
*/
2022-02-17 02:15:21 +00:00
DialogWindow::DialogWindow(
Dialog *dialog,
2017-09-29 23:15:08 +00:00
QWidget *parent)
: QWidget(parent),
m_dialog(dialog)
{
}
2022-02-17 02:15:21 +00:00
DialogWindow::~DialogWindow()
2017-09-29 23:15:08 +00:00
{
}
2022-02-17 02:15:21 +00:00
void DialogWindow::setOffset(int offset)
2017-09-29 23:15:08 +00:00
{
QMargins margins = m_dialog->layout()->contentsMargins();
margins.setBottom(offset);
m_dialog->layout()->setContentsMargins(margins);
}
2022-02-17 02:15:21 +00:00
int DialogWindow::offset() const
2017-09-29 23:15:08 +00:00
{
return m_dialog->layout()->contentsMargins().bottom();
}
2022-02-17 02:15:21 +00:00
void DialogWindow::paintEvent(QPaintEvent *event)
2017-09-29 23:15:08 +00:00
{
Q_UNUSED(event)
QPainter painter(this);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
brush.setColor(Qt::white);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
painter.drawRect(rect());
}
2022-02-17 02:15:21 +00:00
}