// start_button.cpp // // The Start Button for RDAirPlay Rivendell // // (C) Copyright 2002-2019 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU 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 "colors.h" #include "start_button.h" StartButton::StartButton(bool allow_pause,QWidget *parent) : RDPushButton(parent) { start_time_mode=RDAirPlayConf::TwentyFourHour; start_time=QTime(); start_allow_pause=allow_pause; setFocusPolicy(Qt::NoFocus); // // Create Font // start_port_font=QFont(font().family(),20,QFont::Bold); start_port_font.setPixelSize(20); // // Create Palettes // start_stop_color= QPalette(QColor(BUTTON_STOPPED_BACKGROUND_COLOR),backgroundColor()); start_play_color= QPalette(QColor(BUTTON_PLAY_BACKGROUND_COLOR),backgroundColor()); start_play_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_PLAY_TEXT_COLOR)); start_pause_color= QPalette(QColor(BUTTON_PAUSE_BACKGROUND_COLOR),backgroundColor()); start_pause_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_PAUSE_TEXT_COLOR)); start_from_color= QPalette(QColor(BUTTON_FROM_BACKGROUND_COLOR),backgroundColor()); start_from_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_FROM_TEXT_COLOR)); start_to_color= QPalette(QColor(BUTTON_TO_BACKGROUND_COLOR),backgroundColor()); start_to_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_TO_TEXT_COLOR)); start_disabled_color= QPalette(QColor(BUTTON_DISABLED_BACKGROUND_COLOR),backgroundColor()); start_disabled_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_DISABLED_TEXT_COLOR)); start_error_color= QPalette(QColor(BUTTON_ERROR_BACKGROUND_COLOR),backgroundColor()); start_error_color. setColor(QColorGroup::ButtonText,QColor(BUTTON_ERROR_TEXT_COLOR)); start_mode=StartButton::Stop; setMode(StartButton::Disabled,RDCart::All); } void StartButton::setTime(QString str) { start_time=QTime(); Resize(geometry().x(),geometry().y(),geometry().width(),geometry().height()); } void StartButton::setTime(QTime time) { start_time=time; Resize(geometry().x(),geometry().y(),geometry().width(),geometry().height()); } void StartButton::setPort(QString port) { start_port=port; Resize(geometry().x(),geometry().y(),geometry().width(),geometry().height()); } StartButton::Mode StartButton::mode() const { return start_mode; } void StartButton::setMode(Mode mode,RDCart::Type cart_type) { if(mode==start_mode) { return; } start_mode=mode; switch(mode) { case StartButton::Stop: setPalette(start_stop_color); start_title=STOP_MODE_TITLE; break; case StartButton::Play: setPalette(start_play_color); if(start_allow_pause&&(cart_type!=RDCart::Macro)) { start_title=PLAY1_MODE_TITLE; } else { start_title=PLAY0_MODE_TITLE; } break; case StartButton::Pause: setPalette(start_pause_color); start_title=PAUSE_MODE_TITLE; break; case StartButton::MoveFrom: setPalette(start_from_color); start_title=MOVE_FROM_MODE_TITLE; break; case StartButton::DeleteFrom: setPalette(start_from_color); start_title=DELETE_FROM_MODE_TITLE; break; case StartButton::AddFrom: break; case StartButton::AddTo: setPalette(start_to_color); start_title=ADD_TO_MODE_TITLE; break; case StartButton::MoveTo: setPalette(start_to_color); start_title=MOVE_TO_MODE_TITLE; break; case StartButton::CopyTo: setPalette(start_to_color); start_title=COPY_TO_MODE_TITLE; break; case StartButton::CopyFrom: setPalette(start_from_color); start_title=COPY_FROM_MODE_TITLE; break; case StartButton::Disabled: setPalette(start_disabled_color); start_title=DISABLED_MODE_TITLE; break; case StartButton::Error: setPalette(start_error_color); start_title=ERROR_MODE_TITLE; break; } Resize(geometry().x(),geometry().y(),geometry().width(),geometry().height()); } void StartButton::setTimeMode(RDAirPlayConf::TimeMode mode) { if(mode==start_time_mode) { return; } start_time_mode=mode; Resize(geometry().x(),geometry().y(),geometry().width(),geometry().height()); } void StartButton::setGeometry(int x,int y,int w,int h) { Resize(x,y,w,h); QPushButton::setGeometry(x,y,w,h); } void StartButton::setGeometry(QRect rect) { setGeometry(rect.x(),rect.y(),rect.width(),rect.height()); } void StartButton::Resize(int x,int y,int w,int h) { w-=2; h-=2; QPixmap *pix=new QPixmap(w,h); QPainter *p=new QPainter(); p->begin(pix); p->fillRect(0,0,w,h,palette().color(QPalette::Active,QColorGroup::Button)); if(start_mode!=StartButton::Disabled) { p->setPen(QColor(Qt::color1)); p->setFont(labelFont()); p->drawText((geometry().width()-p->fontMetrics().width(start_title))/2, 22,start_title); p->drawLine(10,24,70,24); if(!start_time.isNull()) { if(start_time_mode==RDAirPlayConf::TwentyFourHour) { p->drawText((geometry().width()-p-> fontMetrics().width(start_time.toString("hh:mm:ss")))/2, 40,start_time.toString("hh:mm:ss")); } else { p->drawText((geometry().width()-p-> fontMetrics().width(start_time.toString("h:mm:ss ap")))/2, 40,start_time.toString("h:mm:ss ap")); } } else { p->drawText((geometry().width()-p->fontMetrics().width("--:--:--"))/2, 40,"--:--:--"); } p->setFont(start_port_font); p->drawText(15,70,start_port); } p->end(); setPixmap(*pix); delete p; delete pix; }