// rdpushbutton.cpp // // An flashing button widget. // // (C) Copyright 2002-2003,2016 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU Library General Public License // version 2 as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // #include #include #include #include #include #include //Added by qt3to4: #include #include RDPushButton::RDPushButton(QWidget *parent=0) : QPushButton(parent) { Init(); } RDPushButton::RDPushButton(const QString &text,QWidget *parent) : QPushButton(text,parent) { Init(); } RDPushButton::RDPushButton(const QIcon &icon,const QString &text, QWidget *parent) : QPushButton(text,parent) { Init(); } QColor RDPushButton::flashColor() const { return flash_color; } void RDPushButton::setFlashColor(QColor color) { int h=0; int s=0; int v=0; flash_color=color; flash_palette=QPalette(QColor(flash_color),backgroundColor()); color.getHsv(&h,&s,&v); if((h>180)&&(h<300)) { v=255; } else { if(v<168) { v=255; } else { v=0; } } s=0; color.setHsv(h,s,v); flash_palette.setColor(QPalette::Active,QColorGroup::ButtonText,color); flash_palette.setColor(QPalette::Inactive,QColorGroup::ButtonText,color); } bool RDPushButton::flashingEnabled() const { return flashing_enabled; } void RDPushButton::setFlashingEnabled(bool state) { flashing_enabled=state; if(flashing_enabled) { flashOn(); } else { flashOff(); } } int RDPushButton::id() const { return button_id; } void RDPushButton::setId(int id) { button_id=id; } void RDPushButton::setPalette(const QPalette &pal) { off_palette=pal; QPushButton::setPalette(pal); } void RDPushButton::mousePressEvent(QMouseEvent *e) { switch(e->button()) { case Qt::LeftButton: QPushButton::mousePressEvent(e); break; case Qt::MidButton: emit centerPressed(); break; case Qt::RightButton: emit rightPressed(); break; default: break; } } void RDPushButton::mouseReleaseEvent(QMouseEvent *e) { switch(e->button()) { case Qt::LeftButton: QPushButton::mouseReleaseEvent(e); break; case Qt::MidButton: e->accept(); emit centerReleased(); if((e->x()>=0)&&(e->x()y()>=0)&&(e->y()x(),e->y())); } break; case Qt::RightButton: e->accept(); emit rightReleased(); if((e->x()>=0)&&(e->x()y()>=0)&&(e->y()x(),e->y())); } break; default: break; } } int RDPushButton::flashPeriod() const { return flash_period; } void RDPushButton::setFlashPeriod(int period) { flash_period=period; if(flash_timer->isActive()) { flash_timer->changeInterval(flash_period); } } RDPushButton::ClockSource RDPushButton::clockSource() const { return flash_clock_source; } void RDPushButton::setClockSource(ClockSource src) { if(src==flash_clock_source) { return; } flash_clock_source=src; if((src==RDPushButton::ExternalClock)&&(flash_timer->isActive())) { flash_timer->stop(); } if((src==RDPushButton::InternalClock)&&flashing_enabled) { flashOn(); } } void RDPushButton::tickClock() { if(!flashing_enabled) { return; } QKeySequence a=accel(); if(flash_state) { flash_state=false; QPushButton::setPalette(flash_palette); } else { flash_state=true; QPushButton::setPalette(off_palette); } setAccel(a); } void RDPushButton::tickClock(bool state) { if(!flashing_enabled) { return; } QKeySequence a=accel(); if(state) { flash_state=false; QPushButton::setPalette(flash_palette); } else { flash_state=true; QPushButton::setPalette(off_palette); } setAccel(a); } void RDPushButton::flashOn() { if((!flash_timer->isActive())&& (flash_clock_source==RDPushButton::InternalClock)) { flash_timer->start(flash_period); } } void RDPushButton::flashOff() { if(flash_timer->isActive()&& (flash_clock_source==RDPushButton::InternalClock)) { flash_timer->stop(); } setPalette(off_palette); } void RDPushButton::Init() { flash_timer=new QTimer(); connect(flash_timer,SIGNAL(timeout()),this,SLOT(tickClock())); flash_state=true; flashing_enabled=false; off_palette=palette(); flash_clock_source=RDPushButton::InternalClock; flash_period=RDPUSHBUTTON_DEFAULT_FLASH_PERIOD; setFlashColor(RDPUSHBUTTON_DEFAULT_FLASH_COLOR); button_id=-1; }