fix pimpl inheritance for Raised Button class

This commit is contained in:
FarmRadio Hangar 2016-05-17 15:26:50 +03:00
parent c2b1b33f35
commit 0f4020d193
9 changed files with 194 additions and 125 deletions

View File

@ -10,16 +10,57 @@
#include "flatbutton_p.h"
void FlatButtonPrivate::init()
{
Q_Q(FlatButton);
ripple = new RippleOverlay(q);
delegate = new FlatButtonDelegate(q);
Style &style = Style::instance();
q->setStyle(&style);
q->setAttribute(Qt::WA_Hover);
q->setMouseTracking(true);
QFont font(q->font());
font.setCapitalization(QFont::AllUppercase);
font.setPointSizeF(10.5);
font.setStyleName("Medium");
q->setFont(font);
QPalette palette;
palette.setColor(QPalette::Disabled, QPalette::ButtonText,
style.themeColor("disabled"));
q->setPalette(palette);
}
void FlatButtonPrivate::setTextColor(const QString &themeColor)
{
Q_Q(FlatButton);
QPalette palette(q->palette());
Style &style = Style::instance();
palette.setColor(QPalette::Active, QPalette::ButtonText,
style.themeColor(themeColor));
q->setPalette(palette);
}
FlatButton::FlatButton(QWidget *parent)
: QPushButton(parent),
d_ptr(new FlatButtonPrivate(this))
{
d_func()->init();
}
FlatButton::FlatButton(const QString &text, QWidget *parent)
: QPushButton(parent),
d_ptr(new FlatButtonPrivate(this))
{
d_func()->init();
setText(text);
}
@ -51,6 +92,13 @@ void FlatButton::setRole(Material::Role role)
update();
}
FlatButton::FlatButton(FlatButtonPrivate &d, QWidget *parent)
: QPushButton(parent),
d_ptr(&d)
{
d_func()->init();
}
void FlatButton::resizeEvent(QResizeEvent *event)
{
Q_D(FlatButton);
@ -115,3 +163,4 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
QPushButton::mousePressEvent(event);
}

View File

@ -19,6 +19,8 @@ public:
void setRole(Material::Role role);
protected:
FlatButton(FlatButtonPrivate &d, QWidget *parent = 0);
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

View File

@ -13,51 +13,19 @@ class FlatButtonPrivate
Q_DECLARE_PUBLIC(FlatButton)
public:
FlatButtonPrivate(FlatButton *parent);
FlatButtonPrivate(FlatButton *q)
: q_ptr(q),
role(Material::Default)
{
}
void init();
void setTextColor(const QString &themeColor);
FlatButton *const q_ptr;
RippleOverlay *const ripple;
FlatButtonDelegate *const delegate;
FlatButton *const q_ptr;
RippleOverlay *ripple;
FlatButtonDelegate *delegate;
Material::Role role;
};
FlatButtonPrivate::FlatButtonPrivate(FlatButton *parent)
: q_ptr(parent),
ripple(new RippleOverlay(parent)),
delegate(new FlatButtonDelegate(parent)),
role(Material::Default)
{
Style &style = Style::instance();
parent->setStyle(&style);
parent->setAttribute(Qt::WA_Hover);
parent->setMouseTracking(true);
QFont font(parent->font());
font.setCapitalization(QFont::AllUppercase);
font.setPointSizeF(10.5);
font.setStyleName("Medium");
parent->setFont(font);
QPalette palette;
palette.setColor(QPalette::Disabled, QPalette::ButtonText,
style.themeColor("disabled"));
parent->setPalette(palette);
}
void FlatButtonPrivate::setTextColor(const QString &themeColor)
{
Q_Q(FlatButton);
QPalette palette(q->palette());
Style &style = Style::instance();
palette.setColor(QPalette::Active, QPalette::ButtonText,
style.themeColor(themeColor));
q->setPalette(palette);
}
#endif // FLATBUTTON_P_H

View File

@ -1,67 +1,81 @@
#include <QDebug>
#include <QPropertyAnimation>
#include <QGraphicsDropShadowEffect>
#include <QStylePainter>
#include <QPaintEvent>
#include "raisedbutton.h"
#include "raisedbutton_p.h"
RaisedButton::RaisedButton(QWidget *parent)
: FlatButton(parent)
: FlatButton(*new RaisedButtonPrivate(this), parent)
{
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
effect->setBlurRadius(7);
effect->setOffset(QPoint(0, 0));
effect->setColor(QColor(0, 0, 0, 100));
setGraphicsEffect(effect);
setAutoFillBackground(true);
QPropertyAnimation *animation;
animation = new QPropertyAnimation;
animation->setTargetObject(effect);
animation->setPropertyName("offset");
animation->setStartValue(QPoint(0, 6));
animation->setEndValue(QPoint(0, 0));
animation->setDuration(100);
_group.addAnimation(animation);
animation = new QPropertyAnimation;
animation->setTargetObject(effect);
animation->setPropertyName("blurRadius");
animation->setStartValue(20);
animation->setEndValue(7);
animation->setDuration(100);
_group.addAnimation(animation);
connect(animation, SIGNAL(valueChanged(QVariant)), this, SLOT(update()));
}
RaisedButton::~RaisedButton()
{
}
void RaisedButton::mousePressEvent(QMouseEvent *event)
{
_group.setDirection(QAbstractAnimation::Backward);
_group.start();
FlatButton::mousePressEvent(event);
}
void RaisedButton::mouseReleaseEvent(QMouseEvent *event)
{
_group.setDirection(QAbstractAnimation::Forward);
_group.start();
FlatButton::mouseReleaseEvent(event);
}
void RaisedButton::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QStylePainter painter(this);
// painter.drawControl(QStyle::CE_PushButton, getStyleOption());
}
//#include <QDebug>
//#include <QPropertyAnimation>
//#include <QGraphicsDropShadowEffect>
//#include <QStylePainter>
//#include <QPaintEvent>
//#include "raisedbutton.h"
//
//RaisedButton::RaisedButton(QWidget *parent)
// : FlatButton(parent)
//{
// QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
// effect->setBlurRadius(7);
// effect->setOffset(QPoint(0, 0));
// effect->setColor(QColor(0, 0, 0, 100));
// setGraphicsEffect(effect);
//
// setAutoFillBackground(true);
//
// QPropertyAnimation *animation;
//
// animation = new QPropertyAnimation;
// animation->setTargetObject(effect);
// animation->setPropertyName("offset");
// animation->setStartValue(QPoint(0, 6));
// animation->setEndValue(QPoint(0, 0));
// animation->setDuration(100);
// _group.addAnimation(animation);
//
// animation = new QPropertyAnimation;
// animation->setTargetObject(effect);
// animation->setPropertyName("blurRadius");
// animation->setStartValue(20);
// animation->setEndValue(7);
// animation->setDuration(100);
// _group.addAnimation(animation);
//
// connect(animation, SIGNAL(valueChanged(QVariant)), this, SLOT(update()));
//}
//
//RaisedButton::~RaisedButton()
//{
//}
//
//void RaisedButton::mousePressEvent(QMouseEvent *event)
//{
// _group.setDirection(QAbstractAnimation::Backward);
// _group.start();
//
// FlatButton::mousePressEvent(event);
//}
//
//void RaisedButton::mouseReleaseEvent(QMouseEvent *event)
//{
// _group.setDirection(QAbstractAnimation::Forward);
// _group.start();
//
// FlatButton::mouseReleaseEvent(event);
//}
//
//void RaisedButton::paintEvent(QPaintEvent *event)
//{
// Q_UNUSED(event)
//
// QStylePainter painter(this);
//
//// painter.drawControl(QStyle::CE_PushButton, getStyleOption());
//}
//

View File

@ -1,11 +1,8 @@
#ifndef RAISEDBUTTON_H
#define RAISEDBUTTON_H
#include <QParallelAnimationGroup>
#include "flatbutton.h"
class QPropertyAnimation;
class RaisedButton : public FlatButton
{
Q_OBJECT
@ -13,14 +10,34 @@ class RaisedButton : public FlatButton
public:
explicit RaisedButton(QWidget *parent = 0);
~RaisedButton();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
QParallelAnimationGroup _group;
};
#endif // RAISEDBUTTON_H
//#ifndef RAISEDBUTTON_H
//#define RAISEDBUTTON_H
//
//#include <QParallelAnimationGroup>
//#include "flatbutton.h"
//
//class QPropertyAnimation;
//
//class RaisedButton : public FlatButton
//{
// Q_OBJECT
//
//public:
// explicit RaisedButton(QWidget *parent = 0);
// ~RaisedButton();
//
//protected:
// void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
// void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
// void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
//
//private:
// QParallelAnimationGroup _group;
//};
//
//#endif // RAISEDBUTTON_H
//

View File

@ -0,0 +1,18 @@
#ifndef RAISEDBUTTON_P_H
#define RAISEDBUTTON_P_H
#include "flatbutton_p.h"
class RaisedButtonPrivate : public FlatButtonPrivate
{
Q_DISABLE_COPY(RaisedButtonPrivate)
Q_DECLARE_PUBLIC(RaisedButton)
public:
RaisedButtonPrivate(RaisedButton *q)
: FlatButtonPrivate(q)
{
}
};
#endif // RAISEDBUTTON_P_H

View File

@ -38,29 +38,29 @@ public:
int trackWidth;
};
SliderPrivate::SliderPrivate(Slider *parent)
: q_ptr(parent),
thumb(new SliderThumb(parent)),
track(new SliderTrack(parent)),
machine(new SliderStateMachine(parent, thumb, track)),
SliderPrivate::SliderPrivate(Slider *q)
: q_ptr(q),
thumb(new SliderThumb(q)),
track(new SliderTrack(q)),
machine(new SliderStateMachine(q, thumb, track)),
hoverTrack(false),
hoverThumb(false),
hover(false),
step(false),
pageStepMode(true),
stepTo(0),
oldValue(parent->value()),
oldValue(q->value()),
trackWidth(2)
{
parent->setMouseTracking(true);
parent->setFocusPolicy(Qt::StrongFocus);
parent->setPageStep(1);
q->setMouseTracking(true);
q->setFocusPolicy(Qt::StrongFocus);
q->setPageStep(1);
QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Fixed);
if (parent->orientation() == Qt::Vertical)
if (q->orientation() == Qt::Vertical)
sp.transpose();
parent->setSizePolicy(sp);
parent->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
q->setSizePolicy(sp);
q->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
machine->start();

View File

@ -9,7 +9,7 @@ class ThemePrivate
Q_DECLARE_PUBLIC(Theme)
public:
ThemePrivate(Theme *parent);
ThemePrivate(Theme *q);
QColor rgba(int r, int g, int b, qreal a) const;
@ -18,8 +18,8 @@ public:
QHash<QString, QColor> colors;
};
ThemePrivate::ThemePrivate(Theme *parent)
: q_ptr(parent)
ThemePrivate::ThemePrivate(Theme *q)
: q_ptr(q)
{
}

View File

@ -105,7 +105,8 @@ HEADERS += mainwindow.h \
lib/theme_p.h \
components/flatbutton_p.h \
components/slider_internal.h \
components/flatbutton_internal.h
components/flatbutton_internal.h \
components/raisedbutton_p.h
RESOURCES += \
resources.qrc