Snackbar moved to md.

This commit is contained in:
Achraf k 2022-02-17 03:57:43 +01:00
parent 098267afee
commit 80f7bbdb47
5 changed files with 105 additions and 93 deletions

View File

@ -6,26 +6,28 @@
#include "lib/qtmaterialstyle.h" #include "lib/qtmaterialstyle.h"
#include "lib/qtmaterialstatetransition.h" #include "lib/qtmaterialstatetransition.h"
#include <QDebug> #include <QDebug>
namespace md
{
/*! /*!
* \class QtMaterialSnackbarPrivate * \class QtMaterialSnackbarPrivate
* \internal * \internal
*/ */
QtMaterialSnackbarPrivate::QtMaterialSnackbarPrivate(QtMaterialSnackbar *q) SnackBarPrivate::SnackBarPrivate(SnackBar *q)
: q_ptr(q) : q_ptr(q)
{ {
} }
QtMaterialSnackbarPrivate::~QtMaterialSnackbarPrivate() SnackBarPrivate::~SnackBarPrivate()
{ {
} }
void QtMaterialSnackbarPrivate::init() void SnackBarPrivate::init()
{ {
Q_Q(QtMaterialSnackbar); Q_Q(SnackBar);
stateMachine = new QtMaterialSnackbarStateMachine(q); stateMachine = new SnackBarStateMachine(q);
bgOpacity = 0.9; bgOpacity = 0.9;
duration = 3000; duration = 3000;
boxWidth = 300; boxWidth = 300;
@ -46,34 +48,34 @@ void QtMaterialSnackbarPrivate::init()
* \class QtMaterialSnackbar * \class QtMaterialSnackbar
*/ */
QtMaterialSnackbar::QtMaterialSnackbar(QWidget *parent) SnackBar::SnackBar(QWidget *parent)
: QtMaterialOverlayWidget(parent), : OverlayWidget(parent),
d_ptr(new QtMaterialSnackbarPrivate(this)) d_ptr(new SnackBarPrivate(this))
{ {
d_func()->init(); d_func()->init();
} }
QtMaterialSnackbar::~QtMaterialSnackbar() SnackBar::~SnackBar()
{ {
} }
void QtMaterialSnackbar::setAutoHideDuration(int duration) void SnackBar::setAutoHideDuration(int duration)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->duration = duration; d->duration = duration;
} }
int QtMaterialSnackbar::autoHideDuration() const int SnackBar::autoHideDuration() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
return d->duration; return d->duration;
} }
void QtMaterialSnackbar::setUseThemeColors(bool value) void SnackBar::setUseThemeColors(bool value)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
if (d->useThemeColors == value) { if (d->useThemeColors == value) {
return; return;
@ -83,16 +85,16 @@ void QtMaterialSnackbar::setUseThemeColors(bool value)
update(); update();
} }
bool QtMaterialSnackbar::useThemeColors() const bool SnackBar::useThemeColors() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
return d->useThemeColors; return d->useThemeColors;
} }
void QtMaterialSnackbar::setBackgroundColor(const QColor &color) void SnackBar::setBackgroundColor(const QColor &color)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->backgroundColor = color; d->backgroundColor = color;
@ -100,35 +102,35 @@ void QtMaterialSnackbar::setBackgroundColor(const QColor &color)
update(); update();
} }
QColor QtMaterialSnackbar::backgroundColor() const QColor SnackBar::backgroundColor() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
if (d->useThemeColors || !d->backgroundColor.isValid()) { if (d->useThemeColors || !d->backgroundColor.isValid()) {
return QtMaterialStyle::instance().themeColor("text"); return Style::instance().themeColor("text");
} else { } else {
return d->backgroundColor; return d->backgroundColor;
} }
} }
void QtMaterialSnackbar::setBackgroundOpacity(qreal opacity) void SnackBar::setBackgroundOpacity(qreal opacity)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->bgOpacity = opacity; d->bgOpacity = opacity;
update(); update();
} }
qreal QtMaterialSnackbar::backgroundOpacity() const qreal SnackBar::backgroundOpacity() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
return d->bgOpacity; return d->bgOpacity;
} }
void QtMaterialSnackbar::setTextColor(const QColor &color) void SnackBar::setTextColor(const QColor &color)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->textColor = color; d->textColor = color;
@ -136,18 +138,18 @@ void QtMaterialSnackbar::setTextColor(const QColor &color)
update(); update();
} }
QColor QtMaterialSnackbar::textColor() const QColor SnackBar::textColor() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
if (d->useThemeColors || !d->textColor.isValid()) { if (d->useThemeColors || !d->textColor.isValid()) {
return QtMaterialStyle::instance().themeColor("canvas"); return Style::instance().themeColor("canvas");
} else { } else {
return d->textColor; return d->textColor;
} }
} }
void QtMaterialSnackbar::setFontSize(qreal size) void SnackBar::setFontSize(qreal size)
{ {
QFont f(font()); QFont f(font());
f.setPointSizeF(size); f.setPointSizeF(size);
@ -156,52 +158,52 @@ void QtMaterialSnackbar::setFontSize(qreal size)
update(); update();
} }
qreal QtMaterialSnackbar::fontSize() const qreal SnackBar::fontSize() const
{ {
return font().pointSizeF(); return font().pointSizeF();
} }
void QtMaterialSnackbar::setBoxWidth(int width) void SnackBar::setBoxWidth(int width)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->boxWidth = width; d->boxWidth = width;
update(); update();
} }
int QtMaterialSnackbar::boxWidth() const int SnackBar::boxWidth() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
return d->boxWidth; return d->boxWidth;
} }
void QtMaterialSnackbar::setClickToDismissMode(bool value) void SnackBar::setClickToDismissMode(bool value)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->clickDismiss = value; d->clickDismiss = value;
} }
bool QtMaterialSnackbar::clickToDismissMode() const bool SnackBar::clickToDismissMode() const
{ {
Q_D(const QtMaterialSnackbar); Q_D(const SnackBar);
return d->clickDismiss; return d->clickDismiss;
} }
void QtMaterialSnackbar::addMessage(const QString &message) void SnackBar::addMessage(const QString &message)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
d->messages.push_back(message); d->messages.push_back(message);
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(SnackbarShowTransition)); d->stateMachine->postEvent(new StateTransitionEvent(SnackbarShowTransition));
raise(); raise();
} }
void QtMaterialSnackbar::addInstantMessage(const QString &message) void SnackBar::addInstantMessage(const QString &message)
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
if (d->messages.isEmpty()) { if (d->messages.isEmpty()) {
d->messages.push_back(message); d->messages.push_back(message);
@ -212,9 +214,9 @@ void QtMaterialSnackbar::addInstantMessage(const QString &message)
d->stateMachine->progress(); d->stateMachine->progress();
} }
void QtMaterialSnackbar::dequeue() void SnackBar::dequeue()
{ {
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
if (d->messages.isEmpty()) { if (d->messages.isEmpty()) {
return; return;
@ -223,17 +225,17 @@ void QtMaterialSnackbar::dequeue()
d->messages.removeFirst(); d->messages.removeFirst();
if (!d->messages.isEmpty()) { if (!d->messages.isEmpty()) {
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(SnackbarNextTransition)); d->stateMachine->postEvent(new StateTransitionEvent(SnackbarNextTransition));
} else { } else {
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(SnackbarWaitTransition)); d->stateMachine->postEvent(new StateTransitionEvent(SnackbarWaitTransition));
} }
} }
void QtMaterialSnackbar::paintEvent(QPaintEvent *event) void SnackBar::paintEvent(QPaintEvent *event)
{ {
Q_UNUSED(event) Q_UNUSED(event)
Q_D(QtMaterialSnackbar); Q_D(SnackBar);
if (d->messages.isEmpty()) { if (d->messages.isEmpty()) {
return; return;
@ -268,3 +270,4 @@ void QtMaterialSnackbar::paintEvent(QPaintEvent *event)
painter.setPen(textColor()); painter.setPen(textColor());
painter.drawText(br, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message); painter.drawText(br, Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, message);
} }
}

View File

@ -2,16 +2,18 @@
#define QTMATERIALSNACKBAR_H #define QTMATERIALSNACKBAR_H
#include "lib/qtmaterialoverlaywidget.h" #include "lib/qtmaterialoverlaywidget.h"
namespace md
{
class QtMaterialSnackbarPrivate; class SnackBarPrivate;
class QtMaterialSnackbar : public QtMaterialOverlayWidget class SnackBar : public OverlayWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit QtMaterialSnackbar(QWidget *parent = 0); explicit SnackBar(QWidget *parent = 0);
~QtMaterialSnackbar(); ~SnackBar();
void setAutoHideDuration(int duration); void setAutoHideDuration(int duration);
int autoHideDuration() const; int autoHideDuration() const;
@ -47,11 +49,11 @@ protected slots:
protected: protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
const QScopedPointer<QtMaterialSnackbarPrivate> d_ptr; const QScopedPointer<SnackBarPrivate> d_ptr;
private: private:
Q_DISABLE_COPY(QtMaterialSnackbar) Q_DISABLE_COPY(SnackBar)
Q_DECLARE_PRIVATE(QtMaterialSnackbar) Q_DECLARE_PRIVATE(SnackBar)
}; };
}
#endif // QTMATERIALSNACKBAR_H #endif // QTMATERIALSNACKBAR_H

View File

@ -3,8 +3,10 @@
#include "qtmaterialsnackbar.h" #include "qtmaterialsnackbar.h"
#include "lib/qtmaterialstatetransition.h" #include "lib/qtmaterialstatetransition.h"
#include <QDebug> #include <QDebug>
namespace md
{
QtMaterialSnackbarStateMachine::QtMaterialSnackbarStateMachine(QtMaterialSnackbar *parent) SnackBarStateMachine::SnackBarStateMachine(SnackBar *parent)
: QStateMachine(parent), : QStateMachine(parent),
m_snackbar(parent) m_snackbar(parent)
{ {
@ -20,25 +22,25 @@ QtMaterialSnackbarStateMachine::QtMaterialSnackbarStateMachine(QtMaterialSnackba
setInitialState(hiddenState); setInitialState(hiddenState);
QtMaterialStateTransition *transition; StateTransition *transition;
transition = new QtMaterialStateTransition(SnackbarShowTransition); transition = new StateTransition(SnackbarShowTransition);
transition->setTargetState(visibleState); transition->setTargetState(visibleState);
hiddenState->addTransition(transition); hiddenState->addTransition(transition);
transition = new QtMaterialStateTransition(SnackbarHideTransition); transition = new StateTransition(SnackbarHideTransition);
transition->setTargetState(visibleState); transition->setTargetState(visibleState);
hiddenState->addTransition(transition); hiddenState->addTransition(transition);
transition = new QtMaterialStateTransition(SnackbarHideTransition); transition = new StateTransition(SnackbarHideTransition);
transition->setTargetState(finalState); transition->setTargetState(finalState);
visibleState->addTransition(transition); visibleState->addTransition(transition);
transition = new QtMaterialStateTransition(SnackbarWaitTransition); transition = new StateTransition(SnackbarWaitTransition);
transition->setTargetState(hiddenState); transition->setTargetState(hiddenState);
finalState->addTransition(transition); finalState->addTransition(transition);
transition = new QtMaterialStateTransition(SnackbarNextTransition); transition = new StateTransition(SnackbarNextTransition);
transition->setTargetState(visibleState); transition->setTargetState(visibleState);
finalState->addTransition(transition); finalState->addTransition(transition);
@ -63,11 +65,11 @@ QtMaterialSnackbarStateMachine::QtMaterialSnackbarStateMachine(QtMaterialSnackba
m_snackbar->installEventFilter(this); m_snackbar->installEventFilter(this);
} }
QtMaterialSnackbarStateMachine::~QtMaterialSnackbarStateMachine() SnackBarStateMachine::~SnackBarStateMachine()
{ {
} }
bool QtMaterialSnackbarStateMachine::eventFilter(QObject *watched, QEvent *event) bool SnackBarStateMachine::eventFilter(QObject *watched, QEvent *event)
{ {
if (QEvent::MouseButtonPress == event->type() && m_snackbar->clickToDismissMode()) { if (QEvent::MouseButtonPress == event->type() && m_snackbar->clickToDismissMode()) {
progress(); progress();
@ -75,25 +77,26 @@ bool QtMaterialSnackbarStateMachine::eventFilter(QObject *watched, QEvent *event
return QStateMachine::eventFilter(watched, event); return QStateMachine::eventFilter(watched, event);
} }
void QtMaterialSnackbarStateMachine::setOffset(qreal offset) void SnackBarStateMachine::setOffset(qreal offset)
{ {
m_offset = offset; m_offset = offset;
m_snackbar->update(); m_snackbar->update();
} }
void QtMaterialSnackbarStateMachine::progress() void SnackBarStateMachine::progress()
{ {
m_timer.stop(); m_timer.stop();
postEvent(new QtMaterialStateTransitionEvent(SnackbarHideTransition)); postEvent(new StateTransitionEvent(SnackbarHideTransition));
if (m_snackbar->clickToDismissMode()) { if (m_snackbar->clickToDismissMode()) {
m_snackbar->setAttribute(Qt::WA_TransparentForMouseEvents, true); m_snackbar->setAttribute(Qt::WA_TransparentForMouseEvents, true);
} }
} }
void QtMaterialSnackbarStateMachine::snackbarShown() void SnackBarStateMachine::snackbarShown()
{ {
m_timer.start(m_snackbar->autoHideDuration()); m_timer.start(m_snackbar->autoHideDuration());
if (m_snackbar->clickToDismissMode()) { if (m_snackbar->clickToDismissMode()) {
m_snackbar->setAttribute(Qt::WA_TransparentForMouseEvents, false); m_snackbar->setAttribute(Qt::WA_TransparentForMouseEvents, false);
} }
} }
}

View File

@ -3,18 +3,20 @@
#include <QStateMachine> #include <QStateMachine>
#include <QTimer> #include <QTimer>
namespace md
{
class QtMaterialSnackbar; class SnackBar;
class QtMaterialSnackbarStateMachine : public QStateMachine class SnackBarStateMachine : public QStateMachine
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(qreal offset WRITE setOffset READ offset) Q_PROPERTY(qreal offset WRITE setOffset READ offset)
public: public:
QtMaterialSnackbarStateMachine(QtMaterialSnackbar *parent); SnackBarStateMachine(SnackBar *parent);
~QtMaterialSnackbarStateMachine(); ~SnackBarStateMachine();
void setOffset(qreal offset); void setOffset(qreal offset);
inline qreal offset() const; inline qreal offset() const;
@ -29,16 +31,16 @@ protected:
bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE; bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
private: private:
Q_DISABLE_COPY(QtMaterialSnackbarStateMachine) Q_DISABLE_COPY(SnackBarStateMachine)
QtMaterialSnackbar *const m_snackbar; SnackBar *const m_snackbar;
QTimer m_timer; QTimer m_timer;
qreal m_offset; qreal m_offset;
}; };
inline qreal QtMaterialSnackbarStateMachine::offset() const inline qreal SnackBarStateMachine::offset() const
{ {
return m_offset; return m_offset;
} }
}
#endif // QTMATERIALSNACKBAR_INTERNAL_H #endif // QTMATERIALSNACKBAR_INTERNAL_H

View File

@ -3,23 +3,25 @@
#include <QObject> #include <QObject>
#include <QColor> #include <QColor>
namespace md
class QtMaterialSnackbar;
class QtMaterialSnackbarStateMachine;
class QtMaterialSnackbarPrivate
{ {
Q_DISABLE_COPY(QtMaterialSnackbarPrivate)
Q_DECLARE_PUBLIC(QtMaterialSnackbar) class SnackBar;
class SnackBarStateMachine;
class SnackBarPrivate
{
Q_DISABLE_COPY(SnackBarPrivate)
Q_DECLARE_PUBLIC(Snackbar)
public: public:
QtMaterialSnackbarPrivate(QtMaterialSnackbar *q); SnackBarPrivate(SnackBar *q);
~QtMaterialSnackbarPrivate(); ~SnackBarPrivate();
void init(); void init();
QtMaterialSnackbar *const q_ptr; SnackBar *const q_ptr;
QtMaterialSnackbarStateMachine *stateMachine; SnackBarStateMachine *stateMachine;
QColor backgroundColor; QColor backgroundColor;
QColor textColor; QColor textColor;
qreal bgOpacity; qreal bgOpacity;
@ -29,5 +31,5 @@ public:
bool clickDismiss; bool clickDismiss;
bool useThemeColors; bool useThemeColors;
}; };
}
#endif // QTMATERIALSNACKBAR_P_H #endif // QTMATERIALSNACKBAR_P_H