// rdbutton_panel.cpp // // Component class for sound panel widgets // // (C) Copyright 2002-2023 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 "rdbutton_dialog.h" #include "rdbutton_panel.h" RDButtonPanel::RDButtonPanel(RDAirPlayConf::PanelType type,int number, QWidget *parent) : RDWidget(parent) { panel_number=number; panel_button_mapper=new QSignalMapper(this); connect(panel_button_mapper,SIGNAL(mapped(int)), this,SLOT(buttonClickedData(int))); for(int i=0;istation(), rda->panelConf()->flashPanel(),this); int id=(number*PANEL_MAX_BUTTON_COLUMNS*PANEL_MAX_BUTTON_ROWS)+ (i*PANEL_MAX_BUTTON_COLUMNS)+j; connect(panel_button[i][j],SIGNAL(clicked()), panel_button_mapper,SLOT(map())); panel_button_mapper->setMapping(panel_button[i][j],id); if(rda->station()->enableDragdrop()) { panel_button[i][j]->setAllowDrags(true); if(!rda->station()->enforcePanelSetup()) { panel_button[i][j]->setAcceptDrops(true); } } panel_button[i][j]->hide(); parent->connect(parent,SIGNAL(buttonFlash(bool)), panel_button[i][j],SLOT(flashButton(bool))); QObject::connect(panel_button[i][j], SIGNAL(cartDropped(int,int,unsigned,const QColor &,const QString &)), parent, SLOT(acceptCartDrop(int,int,unsigned,const QColor &,const QString &))); } } clear(); } RDButtonPanel::~RDButtonPanel() { for(int i=0;icart()!=0) { panel_button[i][j]->setColor(BUTTON_FROM_BACKGROUND_COLOR); } } } break; case RDAirPlayConf::CopyTo: for(int i=0;iplayDeck()!=NULL) { if(panel_button[i][j]->playDeck()->state()==RDPlayDeck::Paused) { panel_button[i][j]->setColor(RDPANEL_PAUSED_BACKGROUND_COLOR); } else { panel_button[i][j]->setColor(RDPANEL_PLAY_BACKGROUND_COLOR); } } else { panel_button[i][j]->setColor(BUTTON_TO_BACKGROUND_COLOR); } } } break; case RDAirPlayConf::AddTo: for(int i=0;iplayDeck()==NULL) { panel_button[i][j]->setColor(BUTTON_TO_BACKGROUND_COLOR); } } } break; case RDAirPlayConf::DeleteFrom: for(int i=0;iplayDeck()==NULL) { panel_button[i][j]->setColor(BUTTON_FROM_BACKGROUND_COLOR); } } } break; default: for(int i=0;icart()!=0) { if(panel_button[i][j]->playDeck()!=NULL) { if(panel_button[i][j]->playDeck()->state()==RDPlayDeck::Paused) { panel_button[i][j]->setColor(RDPANEL_PAUSED_BACKGROUND_COLOR); } else { panel_button[i][j]->setColor(RDPANEL_PLAY_BACKGROUND_COLOR); } } else { if(panel_button[i][j]->state()) { panel_button[i][j]->setColor(RDPANEL_PAUSED_BACKGROUND_COLOR); } else { panel_button[i][j]->reset(); } } // } } } break; } } void RDButtonPanel::setAllowDrags(bool state) { for(int i=0;isetAllowDrags(state); } } } void RDButtonPanel::setAcceptDrops(bool state) { for(int i=0;isetAcceptDrops(state); } } } void RDButtonPanel::clear() { for(int i=0;iclear(); } } } QString RDButtonPanel::json(int padding,bool final) const { QString ret; // // Get Button Count // int count=0; for(int i=0;iisEmpty()) { count++; } } } ret+=RDJsonPadding(padding)+"\"panel\": {\r\n"; ret+=RDJsonField("number",panel_number,4+padding); ret+=RDJsonField("title",panel_title,4+padding,count==0); for(int i=0;iisEmpty()) { count--; ret+=panel_button[i][j]->json(4+padding,count==0); } } } ret+=RDJsonPadding(padding)+"}"; if(!final) { ret+=","; } ret+="\r\n"; return ret; } void RDButtonPanel::setVisible(bool state) { RDWidget::setVisible(state); for(int i=0;isetVisible(state); } } if(state) { UpdateViewport(); } } void RDButtonPanel::buttonClickedData(int id) { int pnum=id/(PANEL_MAX_BUTTON_COLUMNS*PANEL_MAX_BUTTON_ROWS); int pos=id%(PANEL_MAX_BUTTON_COLUMNS*PANEL_MAX_BUTTON_ROWS); emit buttonClicked(pnum,pos%PANEL_MAX_BUTTON_COLUMNS, pos/PANEL_MAX_BUTTON_COLUMNS); } void RDButtonPanel::resizeEvent(QResizeEvent *e) { for(int i=0;isetGeometry((15+PANEL_BUTTON_SIZE_X)*j, (15+PANEL_BUTTON_SIZE_Y)*i, PANEL_BUTTON_SIZE_X, PANEL_BUTTON_SIZE_Y); } } UpdateViewport(); } void RDButtonPanel::UpdateViewport() { for(int i=0;isetVisible(geometry().contains(button->geometry())); } } }