mirror of
				https://github.com/ElvishArtisan/rivendell.git
				synced 2025-10-31 06:03:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			248 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // start_button.cpp
 | |
| //
 | |
| // The Start Button for RDAirPlay Rivendell
 | |
| //
 | |
| //   (C) Copyright 2002-2018 Fred Gleason <fredg@paravelsystems.com>
 | |
| //
 | |
| //   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 <qpixmap.h>
 | |
| #include <qpainter.h>
 | |
| 
 | |
| #include <rd.h>
 | |
| 
 | |
| #include <start_button.h>
 | |
| #include <colors.h>
 | |
| 
 | |
| StartButton::StartButton(bool allow_pause,QWidget *parent)
 | |
|   : QPushButton(parent)
 | |
| {
 | |
|   start_time_mode=RDAirPlayConf::TwentyFourHour;
 | |
|   start_time=QTime();
 | |
|   start_allow_pause=allow_pause;
 | |
| 
 | |
|   //
 | |
|   // Create Fonts
 | |
|   //
 | |
|   start_label_font=QFont("Helvetica",12,QFont::Bold);
 | |
|   start_label_font.setPixelSize(12);
 | |
|   start_counter_font=QFont("Helvetica",10,QFont::Normal);
 | |
|   start_counter_font.setPixelSize(10);
 | |
|   start_port_font=QFont("Helvetica",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(start_label_font);
 | |
|     p->drawText((geometry().width()-p->fontMetrics().width(start_title))/2,
 | |
| 		22,start_title);
 | |
|     p->drawLine(10,24,70,24);
 | |
|     p->setFont(start_counter_font);
 | |
|     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;
 | |
| }
 |