258 lines
6.9 KiB
C++
258 lines
6.9 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2013 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Widget graphique Bouton qui consiste en une image sur laquelle l'on peut
|
|
cliquer.
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### 20130204 JFM
|
|
Verision d'origine.
|
|
|
|
### YYYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
|
|
#include "PushButton.h"
|
|
#include <QPixmap>
|
|
#include <QPainter>
|
|
#include <QDebug>
|
|
#include <QTimer>
|
|
#include <QBitmap>
|
|
#include <QColor>
|
|
#include <QGraphicsPixmapItem>
|
|
|
|
CPushButton::CPushButton(QGraphicsItem *Parent,QString NormalFileName, bool UseTextOverlay,int ButtonData)
|
|
{
|
|
Q_UNUSED(ButtonData)
|
|
setParentItem(Parent);
|
|
|
|
setAcceptHoverEvents(true);
|
|
|
|
m_Normal = new QGraphicsPixmapItem(QPixmap(NormalFileName));
|
|
|
|
ClickTransparency = 1;
|
|
|
|
//Inform QGraphicsItem of the geometry
|
|
setGeometry(m_Normal->boundingRect());
|
|
|
|
ispressed = false;
|
|
isFlashingValid = false;
|
|
mDisplayFlashIcon = false;
|
|
isreleasing = false;
|
|
UseOverlay = UseTextOverlay;
|
|
ButtonTextOverlay = "";
|
|
|
|
|
|
timeLine = new QTimeLine(PRESS_EFFECT_FADE_TIMEOUT);
|
|
timeLine->setCurveShape(QTimeLine::EaseInCurve);
|
|
connect(timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(TimeLine(qreal)));
|
|
|
|
}
|
|
|
|
CPushButton::~CPushButton()
|
|
{
|
|
delete m_Normal;
|
|
delete timeLine;
|
|
}
|
|
|
|
void CPushButton::paint(QPainter *Painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
|
{
|
|
|
|
// Painter->setCompositionMode(QPainter::CompositionMode_DestinationOver);
|
|
/*if(isDown() || isChecked())
|
|
{
|
|
m_Normal->paint(Painter,option,widget);
|
|
qDebug("Paint Called, button down");
|
|
}
|
|
else if(underMouse())
|
|
{
|
|
m_Hovered->paint(Painter,option,widget);
|
|
qDebug("Paint Called, hovered");
|
|
}
|
|
else
|
|
{
|
|
m_Pressed->paint(Painter,option,widget);
|
|
qDebug("Paint Called, normal");
|
|
}*/
|
|
|
|
|
|
if(ispressed)
|
|
{
|
|
|
|
//QRadialGradient gradient(50, 50, 50, 50, 50);
|
|
QRadialGradient gradient(m_Normal->boundingRect().center(),m_Normal->boundingRect().width()/2);
|
|
gradient.setColorAt(0, QColor::fromRgbF(1, 1, 1,1));
|
|
gradient.setColorAt(1, QColor::fromRgbF(1, 1, 1,0));
|
|
|
|
QBrush brush(gradient);
|
|
// m_Pressed->paint(Painter,option,widget);
|
|
m_Normal->paint(Painter,option,widget);
|
|
Painter->setBrush(brush);
|
|
Painter->setPen(Qt::NoPen);
|
|
//Painter->drawEllipse(m_Normal->boundingRect());
|
|
Painter->drawEllipse(m_Normal->boundingRect());
|
|
|
|
//qDebug("Paint Called, pressed");
|
|
}
|
|
/* else if(ishovered)
|
|
{
|
|
m_Hovered->paint(Painter,option,widget);
|
|
// qDebug("Paint Called, hovered");
|
|
}*/
|
|
else
|
|
{
|
|
if(mDisplayFlashIcon)
|
|
{
|
|
m_Flashing->paint(Painter,option,widget);
|
|
}
|
|
else
|
|
{
|
|
|
|
//draw button icon
|
|
m_Normal->paint(Painter,option,widget);
|
|
|
|
//draw text overlay
|
|
QRectF textRect = m_Normal->boundingRect();//.adjusted(15, 10, -10, -15);
|
|
int flags = Qt::AlignHCenter | Qt::AlignVCenter;
|
|
|
|
QFont font;
|
|
font.setPixelSize(16);
|
|
font.setBold(true);
|
|
Painter->setPen(Qt::red);
|
|
Painter->setFont(font);
|
|
Painter->drawText(textRect, flags, ButtonTextOverlay);
|
|
|
|
//if necessary, draw halo animation
|
|
if(isreleasing)
|
|
{
|
|
//QRadialGradient gradient(50, 50, 50, 50, 50);
|
|
QRadialGradient gradient(m_Normal->boundingRect().center(),m_Normal->boundingRect().width()/2);
|
|
gradient.setColorAt(0, QColor::fromRgbF(1, 1, 1,ClickTransparency));
|
|
gradient.setColorAt(1, QColor::fromRgbF(1, 1, 1, 0));
|
|
|
|
QBrush brush(gradient);
|
|
// m_Pressed->paint(Painter,option,widget);
|
|
m_Normal->paint(Painter,option,widget);
|
|
Painter->setBrush(brush);
|
|
Painter->setPen(Qt::NoPen);
|
|
//Painter->drawEllipse(m_Normal->boundingRect());
|
|
Painter->drawEllipse(m_Normal->boundingRect());
|
|
}
|
|
|
|
}
|
|
// qDebug("Paint Called, normal");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CPushButton::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
|
|
{
|
|
event->accept();
|
|
update();
|
|
// qDebug("Hover Enter Called");
|
|
}
|
|
void CPushButton::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
|
|
{
|
|
event->accept();
|
|
update();
|
|
// qDebug("Hover Leave Called");
|
|
}
|
|
void CPushButton::mousePressEvent ( QGraphicsSceneMouseEvent * event )
|
|
{
|
|
Q_UNUSED(event)
|
|
//
|
|
ispressed = true;
|
|
update();
|
|
emit pressed(this);
|
|
|
|
|
|
// qDebug("Mouse Press Event");
|
|
//event->ignore();
|
|
|
|
}
|
|
void CPushButton::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
|
|
{
|
|
Q_UNUSED(event)
|
|
ispressed = false;
|
|
|
|
emit released(this);
|
|
isreleasing = true;
|
|
|
|
timeLine->start();
|
|
// qDebug("Button Mouse Release Event");
|
|
|
|
}
|
|
|
|
void CPushButton::StartFlashing()
|
|
{
|
|
mFlashTimer->start(mFlashTimeout);
|
|
}
|
|
void CPushButton::StopFlashing()
|
|
{
|
|
mFlashTimer->stop();
|
|
mDisplayFlashIcon = false;
|
|
}
|
|
void CPushButton::setFlashingData(QString FlashFileName,int FlashDelay)
|
|
{
|
|
QPixmap temp(FlashFileName);
|
|
QBitmap temp2 = temp.createMaskFromColor(QColor(255,255,255),Qt::MaskOutColor);
|
|
// temp.setMask(temp2);
|
|
m_Flashing = new QGraphicsPixmapItem(temp);
|
|
if(!m_Flashing)
|
|
{
|
|
isFlashingValid = false;
|
|
return;
|
|
}
|
|
isFlashingValid = true;
|
|
mFlashTimeout = FlashDelay;
|
|
mFlashTimer = new QTimer(this);
|
|
connect(mFlashTimer,SIGNAL(timeout()),this,SLOT(FlashButton()));
|
|
|
|
}
|
|
void CPushButton::FlashButton()
|
|
{
|
|
mDisplayFlashIcon = !mDisplayFlashIcon;
|
|
update();
|
|
}
|
|
|
|
void CPushButton::TimeLine(qreal value)
|
|
{
|
|
ClickTransparency = 1-value;
|
|
|
|
update();
|
|
|
|
if(value == 1)
|
|
{
|
|
isreleasing = false;
|
|
emit clicked(this);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CPushButton::SetTextOverlay(QString Text)
|
|
{
|
|
ButtonTextOverlay = Text.left(MAX_OVERLAY_TEXT_LENGTH);
|
|
update();
|
|
}
|
|
|
|
void CPushButton::resizeEvent(QGraphicsSceneResizeEvent *event)
|
|
{
|
|
m_Normal->setPixmap(m_Normal->pixmap().scaled(event->newSize().width(),event->newSize().height()));
|
|
}
|