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

View File

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

View File

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

View File

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

View File

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