2023-10-04 Fred Gleason <fredg@paravelsystems.com>

* Got SoundPanel panel selection working for both Host and Station
	panels.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2023-10-04 13:54:59 -04:00
parent 0c00c6abdf
commit 26059935f2
8 changed files with 213 additions and 352 deletions

View File

@ -24408,3 +24408,6 @@
* Added a '--dump-panel-updates' switch to rdairplay(1). * Added a '--dump-panel-updates' switch to rdairplay(1).
2023-09-29 Fred Gleason <fredg@paravelsystems.com> 2023-09-29 Fred Gleason <fredg@paravelsystems.com>
* Fixed a typo in the rdpanel(1) man page. * Fixed a typo in the rdpanel(1) man page.
2023-10-04 Fred Gleason <fredg@paravelsystems.com>
* Got SoundPanel panel selection working for both Host and Station
panels.

View File

@ -310,6 +310,7 @@ nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\
moc_rdbusybar.cpp\ moc_rdbusybar.cpp\
moc_rdbusydialog.cpp\ moc_rdbusydialog.cpp\
moc_rdbutton_dialog.cpp\ moc_rdbutton_dialog.cpp\
moc_rdbutton_panel.cpp\
moc_rdcae.cpp\ moc_rdcae.cpp\
moc_rdcardselector.cpp\ moc_rdcardselector.cpp\
moc_rdcart_dialog.cpp\ moc_rdcart_dialog.cpp\

View File

@ -1,8 +1,8 @@
// rdbutton_panel.cpp // rdbutton_panel.cpp
// //
// The sound panel widget for RDAirPlay // Component class for sound panel widgets
// //
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -18,10 +18,10 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// //
#include <qcolor.h> #include <QColor>
#include <rdbutton_panel.h> #include "rdbutton_dialog.h"
#include <rdbutton_dialog.h> #include "rdbutton_panel.h"
RDButtonPanel::RDButtonPanel(RDAirPlayConf::PanelType type,int number, RDButtonPanel::RDButtonPanel(RDAirPlayConf::PanelType type,int number,
QWidget *parent) QWidget *parent)
@ -29,21 +29,25 @@ RDButtonPanel::RDButtonPanel(RDAirPlayConf::PanelType type,int number,
{ {
panel_number=number; panel_number=number;
panel_button_mapper=new QSignalMapper(this);
connect(panel_button_mapper,SIGNAL(mapped(int)),
this,SLOT(buttonClickedData(int)));
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) { for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) { for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
panel_button[i][j]= panel_button[i][j]=new RDPanelButton(i,j,rda->station(),
new RDPanelButton(i,j,rda->station(),rda->panelConf()->flashPanel(), rda->panelConf()->flashPanel(),this);
parent); 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()) { if(rda->station()->enableDragdrop()) {
panel_button[i][j]->setAllowDrags(true); panel_button[i][j]->setAllowDrags(true);
if(!rda->station()->enforcePanelSetup()) { if(!rda->station()->enforcePanelSetup()) {
panel_button[i][j]->setAcceptDrops(true); panel_button[i][j]->setAcceptDrops(true);
} }
} }
panel_button[i][j]->setGeometry((15+PANEL_BUTTON_SIZE_X)*j,
(15+PANEL_BUTTON_SIZE_Y)*i,
PANEL_BUTTON_SIZE_X,
PANEL_BUTTON_SIZE_Y);
panel_button[i][j]->hide(); panel_button[i][j]->hide();
parent->connect(parent,SIGNAL(buttonFlash(bool)), parent->connect(parent,SIGNAL(buttonFlash(bool)),
panel_button[i][j],SLOT(flashButton(bool))); panel_button[i][j],SLOT(flashButton(bool)));
@ -64,6 +68,7 @@ RDButtonPanel::~RDButtonPanel()
delete panel_button[i][j]; delete panel_button[i][j];
} }
} }
delete panel_button_mapper;
} }
@ -202,26 +207,6 @@ void RDButtonPanel::setAcceptDrops(bool state)
} }
void RDButtonPanel::hide()
{
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
panel_button[i][j]->hide();
}
}
}
void RDButtonPanel::show()
{
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
panel_button[i][j]->show();
}
}
}
void RDButtonPanel::clear() void RDButtonPanel::clear()
{ {
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) { for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
@ -268,3 +253,44 @@ QString RDButtonPanel::json(int padding,bool final) const
return ret; return ret;
} }
void RDButtonPanel::setVisible(bool state)
{
printf("Calling RDButtonPanel::setVisible(%d) @ %p\n",state,this);
RDWidget::setVisible(state);
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
panel_button[i][j]->setVisible(state);
}
}
}
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);
printf("emitting buttonClicked(%d,%d,%d)\n",
pnum,pos%PANEL_MAX_BUTTON_COLUMNS,pos/PANEL_MAX_BUTTON_COLUMNS);
emit buttonClicked(pnum,pos%PANEL_MAX_BUTTON_COLUMNS,pos/PANEL_MAX_BUTTON_COLUMNS);
}
void RDButtonPanel::resizeEvent(QResizeEvent *e)
{
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
panel_button[i][j]->setGeometry((15+PANEL_BUTTON_SIZE_X)*j,
(15+PANEL_BUTTON_SIZE_Y)*i,
PANEL_BUTTON_SIZE_X,
PANEL_BUTTON_SIZE_Y);
}
}
for(int i=0;i<PANEL_MAX_BUTTON_ROWS;i++) {
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) {
RDPanelButton *button=panel_button[i][j];
button->setVisible(geometry().contains(button->geometry()));
}
}
}

View File

@ -1,6 +1,6 @@
// rdbutton_panel.h // rdbutton_panel.h
// //
// The sound panel widget for RDAirPlay // Component class for sound panel widgets
// //
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// //
@ -23,6 +23,7 @@
#include <QDateTime> #include <QDateTime>
#include <QLabel> #include <QLabel>
#include <QSignalMapper>
#include <rdairplay_conf.h> #include <rdairplay_conf.h>
#include <rdstation.h> #include <rdstation.h>
@ -37,12 +38,10 @@
// //
#define PANEL_MAX_BUTTON_COLUMNS 40 #define PANEL_MAX_BUTTON_COLUMNS 40
#define PANEL_MAX_BUTTON_ROWS 23 #define PANEL_MAX_BUTTON_ROWS 23
#define PANEL_BUTTON_SIZE_X 88
#define PANEL_BUTTON_SIZE_Y 80
class RDButtonPanel : public RDWidget class RDButtonPanel : public RDWidget
{ {
Q_OBJECT;
public: public:
RDButtonPanel(RDAirPlayConf::PanelType type,int number,QWidget *parent); RDButtonPanel(RDAirPlayConf::PanelType type,int number,QWidget *parent);
~RDButtonPanel(); ~RDButtonPanel();
@ -55,15 +54,26 @@ class RDButtonPanel : public RDWidget
void setActionMode(RDAirPlayConf::ActionMode mode); void setActionMode(RDAirPlayConf::ActionMode mode);
void setAllowDrags(bool state); void setAllowDrags(bool state);
void setAcceptDrops(bool state); void setAcceptDrops(bool state);
void hide();
void show();
void clear(); void clear();
QString json(int padding=0,bool final=false) const; QString json(int padding=0,bool final=false) const;
public slots:
void setVisible(bool state);
signals:
void buttonClicked(int pnum,int col,int row);
private slots:
void buttonClickedData(int id);
protected:
void resizeEvent(QResizeEvent *e);
private: private:
int panel_number; int panel_number;
QString panel_title; QString panel_title;
QSignalMapper *panel_button_mapper;
RDPanelButton *panel_button[PANEL_MAX_BUTTON_ROWS][PANEL_MAX_BUTTON_COLUMNS]; RDPanelButton *panel_button[PANEL_MAX_BUTTON_ROWS][PANEL_MAX_BUTTON_COLUMNS];
}; };
#endif // RDPANEL_BUTTON_H #endif // RDBUTTON_PANEL_H

View File

@ -1,6 +1,6 @@
// rdpanel_button.cpp // rdpanel_button.cpp
// //
// The SoundPanel Button for RDAirPlay. // Component class for sound panel widgets.
// //
// (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// //
@ -329,6 +329,12 @@ bool RDPanelButton::isEmpty() const
} }
bool RDPanelButton::isActive() const
{
return button_play_deck!=NULL;
}
QString RDPanelButton::json(int padding,bool final) QString RDPanelButton::json(int padding,bool final)
{ {
QString ret; QString ret;
@ -362,6 +368,16 @@ QString RDPanelButton::json(int padding,bool final)
} }
void RDPanelButton::setVisible(bool state)
{
RDPushButton::setVisible(state);
}
void RDPanelButton::tickClock() void RDPanelButton::tickClock()
{ {
int msecs; int msecs;
@ -470,26 +486,26 @@ void RDPanelButton::dropEvent(QDropEvent *e)
void RDPanelButton::WriteKeycap(int msecs) void RDPanelButton::WriteKeycap(int msecs)
{ {
QString text=button_text; QString text=button_text;
QPixmap *pix=new QPixmap(size().width()-2,size().height()-2); QPixmap *pix=new QPixmap(PANEL_BUTTON_SIZE_X-2,PANEL_BUTTON_SIZE_Y-2);
QPainter *p=new QPainter(pix); QPainter *p=new QPainter(pix);
if(button_state) { if(button_state) {
if(button_flash) { if(button_flash) {
if(button_flash_state) { if(button_flash_state) {
p->fillRect(0,0,size().width()-2,size().height()-2,button_color); p->fillRect(0,0,pix->width(),pix->height(),button_color);
p->setPen(RDGetTextColor(button_color)); p->setPen(RDGetTextColor(button_color));
} }
else { else {
p->fillRect(0,0,size().width()-2,size().height()-2,button_default_color); p->fillRect(0,0,pix->width(),pix->height(),button_default_color);
p->setPen(RDGetTextColor(button_default_color)); p->setPen(RDGetTextColor(button_default_color));
} }
} }
else { else {
p->fillRect(0,0,size().width()-2,size().height()-2,button_color); p->fillRect(0,0,pix->width(),pix->height(),button_color);
p->setPen(RDGetTextColor(button_color)); p->setPen(RDGetTextColor(button_color));
} }
} }
else { else {
p->fillRect(0,0,size().width()-2,size().height()-2,button_color); p->fillRect(0,0,pix->width(),pix->height(),button_color);
p->setPen(RDGetTextColor(button_color)); p->setPen(RDGetTextColor(button_color));
} }
@ -498,12 +514,13 @@ void RDPanelButton::WriteKeycap(int msecs)
// //
QFontMetrics m(buttonFont()); QFontMetrics m(buttonFont());
p->setFont(buttonFont()); p->setFont(buttonFont());
p->drawText(RDPANEL_BUTTON_MARGIN,m.lineSpacing(), p->drawText(RDPANEL_BUTTON_MARGIN,m.lineSpacing(),
GetNextLine(&text,m,size().width()-2-3*RDPANEL_BUTTON_MARGIN)); GetNextLine(&text,m,pix->width()-2-3*RDPANEL_BUTTON_MARGIN));
p->drawText(RDPANEL_BUTTON_MARGIN,2*m.lineSpacing(), p->drawText(RDPANEL_BUTTON_MARGIN,2*m.lineSpacing(),
GetNextLine(&text,m,size().width()-2-3*RDPANEL_BUTTON_MARGIN)); GetNextLine(&text,m,pix->width()-2-3*RDPANEL_BUTTON_MARGIN));
p->drawText(RDPANEL_BUTTON_MARGIN,3*m.lineSpacing(), p->drawText(RDPANEL_BUTTON_MARGIN,3*m.lineSpacing(),
GetNextLine(&text,m,size().width()-2-3*RDPANEL_BUTTON_MARGIN)); GetNextLine(&text,m,pix->width()-2-3*RDPANEL_BUTTON_MARGIN));
// //
// Time Field & Output Text // Time Field & Output Text
@ -512,31 +529,31 @@ void RDPanelButton::WriteKeycap(int msecs)
if(msecs<0) { if(msecs<0) {
p->setFont(smallTimerFont()); p->setFont(smallTimerFont());
if(button_pause_when_finished) { if(button_pause_when_finished) {
p->drawText(RDPANEL_BUTTON_MARGIN,size().height()-2-RDPANEL_BUTTON_MARGIN,"Finished"); p->drawText(RDPANEL_BUTTON_MARGIN,pix->height()-2-RDPANEL_BUTTON_MARGIN,"Finished");
} }
else { else {
if(button_active_length>=0) { if(button_active_length>=0) {
QString lenstr=RDGetTimeLength(button_active_length+1000,true,false); QString lenstr=RDGetTimeLength(button_active_length+1000,true,false);
p->drawText(size().width()-p->fontMetrics().width(lenstr)- p->drawText(pix->width()-p->fontMetrics().width(lenstr)-
RDPANEL_BUTTON_MARGIN-2, RDPANEL_BUTTON_MARGIN-2,
size().height()-2-RDPANEL_BUTTON_MARGIN, pix->height()-2-RDPANEL_BUTTON_MARGIN,
lenstr); lenstr);
} }
else { else {
p->drawText(RDPANEL_BUTTON_MARGIN,size().height()-2- p->drawText(RDPANEL_BUTTON_MARGIN,pix->height()-2-
RDPANEL_BUTTON_MARGIN,tr("No Audio")); RDPANEL_BUTTON_MARGIN,tr("No Audio"));
} }
} }
} }
else { else {
QString lenstr=RDGetTimeLength(1000+msecs,true,false); QString lenstr=RDGetTimeLength(1000+msecs,true,false);
p->drawText(size().width()-p->fontMetrics().width(lenstr)- p->drawText(pix->width()-p->fontMetrics().width(lenstr)-
RDPANEL_BUTTON_MARGIN-2, RDPANEL_BUTTON_MARGIN-2,
size().height()-2-RDPANEL_BUTTON_MARGIN, pix->height()-2-RDPANEL_BUTTON_MARGIN,
lenstr); lenstr);
p->setFont(bigLabelFont()); p->setFont(bigLabelFont());
p->drawText((size().width()-p->fontMetrics().width(button_output_text))/2, p->drawText((pix->width()-p->fontMetrics().width(button_output_text))/2,
74*size().height()/100, 74*pix->height()/100,
button_output_text); button_output_text);
} }
} }

View File

@ -1,8 +1,8 @@
// rdpanel_button.h // rdpanel_button.h
// //
// The SoundPanel Button for RDAirPlay. // Component class for sound panel widgets.
// //
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2023 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -25,14 +25,18 @@
#include <rdpushbutton.h> #include <rdpushbutton.h>
#include <rdweb.h> #include <rdweb.h>
//
// Widget Settings
//
#define PANEL_BUTTON_SIZE_X 88
#define PANEL_BUTTON_SIZE_Y 80
#define RDPANEL_BUTTON_MARGIN 5 #define RDPANEL_BUTTON_MARGIN 5
class RDPanelButton : public RDPushButton class RDPanelButton : public RDPushButton
{ {
Q_OBJECT Q_OBJECT
public: public:
RDPanelButton(int row,int col,RDStation *station,bool flash, RDPanelButton(int row,int col,RDStation *station,bool flash,QWidget *parent);
QWidget *parent=0);
void clear(); void clear();
int row() const; int row() const;
int column() const; int column() const;
@ -72,7 +76,9 @@ class RDPanelButton : public RDPushButton
void setAllowDrags(bool state); void setAllowDrags(bool state);
void resetCounter(); void resetCounter();
bool isEmpty() const; bool isEmpty() const;
bool isActive() const;
QString json(int padding=0,bool final=false); QString json(int padding=0,bool final=false);
void setVisible(bool state);
signals: signals:
void cartDropped(int row,int col,unsigned cartnum,const QColor &color, void cartDropped(int row,int col,unsigned cartnum,const QColor &color,
@ -128,4 +134,6 @@ class RDPanelButton : public RDPushButton
int button_move_count; int button_move_count;
bool button_allow_drags; bool button_allow_drags;
}; };
#endif // RDPANEL_BUTTON_H #endif // RDPANEL_BUTTON_H

View File

@ -36,6 +36,8 @@ RDSoundPanel::RDSoundPanel(int station_panels,int user_panels,bool flash,
RDCartDialog *cart_dialog,QWidget *parent) RDCartDialog *cart_dialog,QWidget *parent)
: RDWidget(parent) : RDWidget(parent)
{ {
panel_started=false;
panel_current_panel=NULL;
panel_dump_panel_updates=false; panel_dump_panel_updates=false;
panel_playmode_box=NULL; panel_playmode_box=NULL;
panel_button_columns=PANEL_MAX_BUTTON_COLUMNS; panel_button_columns=PANEL_MAX_BUTTON_COLUMNS;
@ -82,9 +84,6 @@ RDSoundPanel::RDSoundPanel(int station_panels,int user_panels,bool flash,
// //
// Load Buttons // Load Buttons
// //
panel_mapper=new QSignalMapper(this);
connect(panel_mapper,SIGNAL(mapped(int)),this,SLOT(buttonMapperData(int)));
UpdatePanels(""); // Load Host (Station) Panels UpdatePanels(""); // Load Host (Station) Panels
// //
@ -98,22 +97,6 @@ RDSoundPanel::RDSoundPanel(int station_panels,int user_panels,bool flash,
connect(panel_selector_box,SIGNAL(setupClicked()), connect(panel_selector_box,SIGNAL(setupClicked()),
this,SLOT(panelSetupData())); this,SLOT(panelSetupData()));
if(panel_station_panels>0) {
panel_number=0;
panel_type=RDAirPlayConf::StationPanel;
panel_panels.value("").at(0)->show();
}
else {
if(panel_user_panels>0) {
panel_number=0;
panel_type=RDAirPlayConf::UserPanel;
panel_panels.value(rda->user()->name()).at(0)->show();
}
else {
setDisabled(true);
}
}
// //
// Play Mode Box // Play Mode Box
// //
@ -178,7 +161,6 @@ RDSoundPanel::RDSoundPanel(int station_panels,int user_panels,bool flash,
// //
// Load Panel Names // Load Panel Names
// //
QString sql; QString sql;
sql=QString("select ")+ sql=QString("select ")+
"`PANEL_NO`,"+ "`PANEL_NO`,"+
@ -206,21 +188,18 @@ RDSoundPanel::RDSoundPanel(int station_panels,int user_panels,bool flash,
i+1,i+1)); i+1,i+1));
} }
panel_selector_box->setFocus(); panel_selector_box->setFocus();
setDisabled((panel_station_panels==0)&&(panel_user_panels==0));
panel_scan_timer=new QTimer(this);
connect(panel_scan_timer,SIGNAL(timeout()),this,SLOT(scanPanelData()));
panel_scan_timer->start(PANEL_SCAN_INTERVAL);
} }
RDSoundPanel::~RDSoundPanel() RDSoundPanel::~RDSoundPanel()
{ {
for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_panels.begin();it!=panel_panels.end();it++) { for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_arrays.begin();it!=panel_arrays.end();it++) {
for(int i=0;i<it.value().size();i++) { for(int i=0;i<it.value().size();i++) {
delete it.value().at(i); delete it.value().at(i);
} }
} }
panel_panels.clear(); panel_arrays.clear();
} }
@ -355,7 +334,7 @@ void RDSoundPanel::setText(RDAirPlayConf::PanelType type,int panel,int row,
username=rda->user()->name(); username=rda->user()->name();
} }
RDPanelButton *button= RDPanelButton *button=
panel_panels.value(username).at(panel)->panelButton(row,col); panel_arrays.value(username).at(panel)->panelButton(row,col);
button->setText(str); button->setText(str);
SaveButton(type,panel,row,col); SaveButton(type,panel,row,col);
} }
@ -369,7 +348,7 @@ void RDSoundPanel::setColor(RDAirPlayConf::PanelType type,int panel,int row,
username=rda->user()->name(); username=rda->user()->name();
} }
RDPanelButton *button= RDPanelButton *button=
panel_panels.value(username).at(panel)->panelButton(row,col); panel_arrays.value(username).at(panel)->panelButton(row,col);
button->setDefaultColor(color); button->setDefaultColor(color);
SaveButton(type,panel,row,col); SaveButton(type,panel,row,col);
} }
@ -389,16 +368,16 @@ void RDSoundPanel::duckVolume(RDAirPlayConf::PanelType type,int panel,int row,
for(int i=0;i<panel_button_columns;i++) { for(int i=0;i<panel_button_columns;i++) {
for(int j=0;j<panel_button_rows;j++) { for(int j=0;j<panel_button_rows;j++) {
RDPlayDeck *deck= RDPlayDeck *deck=
panel_panels.value(username).at(panel)->panelButton(j,i)->playDeck(); panel_arrays.value(username).at(panel)->panelButton(j,i)->playDeck();
if((row==j || row==-1) && (col==i || col==-1)) { if((row==j || row==-1) && (col==i || col==-1)) {
if(mport==-1) { if(mport==-1) {
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setDuckVolume(level); panelButton(j,i)->setDuckVolume(level);
} }
if(deck!=NULL) { if(deck!=NULL) {
if(edit_mport==-1 || if(edit_mport==-1 ||
edit_mport== edit_mport==
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->outputText().toInt()) { panelButton(j,i)->outputText().toInt()) {
deck->duckVolume(level,fade); deck->duckVolume(level,fade);
} }
@ -444,7 +423,7 @@ void RDSoundPanel::setActionMode(RDAirPlayConf::ActionMode mode)
if(mode!=panel_action_mode) { if(mode!=panel_action_mode) {
panel_action_mode=mode; panel_action_mode=mode;
panel_setup_button->setEnabled(panel_action_mode==RDAirPlayConf::Normal); panel_setup_button->setEnabled(panel_action_mode==RDAirPlayConf::Normal);
for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_panels.begin();it!=panel_panels.end();it++) { for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_arrays.begin();it!=panel_arrays.end();it++) {
for(int i=0;i<it.value().size();i++) { for(int i=0;i<it.value().size();i++) {
if(i<panel_station_panels && if(i<panel_station_panels &&
(!panel_config_panels) && (!panel_config_panels) &&
@ -493,7 +472,7 @@ RDAirPlayConf::PanelType RDSoundPanel::currentType() const
QString RDSoundPanel::json(const QString &owner,int padding,bool final) const QString RDSoundPanel::json(const QString &owner,int padding,bool final) const
{ {
QString ret; QString ret;
QList<RDButtonPanel *> panels=panel_panels.value(owner); QList<RDButtonPanel *> panels=panel_arrays.value(owner);
ret+=RDJsonPadding(padding)+"\"array\": {\r\n"; ret+=RDJsonPadding(padding)+"\"array\": {\r\n";
ret+=RDJsonField("owner",owner,4+padding); ret+=RDJsonField("owner",owner,4+padding);
@ -520,9 +499,9 @@ QString RDSoundPanel::json(int padding) const
QString ret; QString ret;
int count=0; int count=0;
for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_panels. for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_arrays.
begin();it!=panel_panels.end();it++) { begin();it!=panel_arrays.end();it++) {
ret+=json(it.key(),4,++count==panel_panels.size()); ret+=json(it.key(),4,++count==panel_arrays.size());
} }
return ret; return ret;
@ -540,8 +519,8 @@ void RDSoundPanel::setButton(RDAirPlayConf::PanelType type,int panel,
username=rda->user()->name(); username=rda->user()->name();
} }
RDPanelButton *button= RDPanelButton *button=
panel_panels.value(username).at(panel)->panelButton(row,col); panel_arrays.value(username).at(panel)->panelButton(row,col);
if(button->playDeck()!=NULL) { if(button->isActive()) {
return; return;
} }
button->clear(); button->clear();
@ -643,14 +622,17 @@ void RDSoundPanel::changeUser()
q->next(); q->next();
} }
else { else {
panel_selector_box->insertItem(QString::asprintf("[U:%d] Panel U:%d", panel_selector_box->
i+1,i+1)); insertItem(QString::asprintf("[U:%d] Panel U:%d",i+1,i+1));
} }
} }
delete q; delete q;
panel_selector_box->setCurrentIndex(current_item); panel_selector_box->setCurrentIndex(current_item);
UpdateButtonViewport(); if(!panel_started) {
panelActivatedData(panel_selector_box->currentIndex());
panel_started=true;
}
} }
@ -691,11 +673,11 @@ void RDSoundPanel::panelDown()
void RDSoundPanel::panelActivatedData(int n) void RDSoundPanel::panelActivatedData(int n)
{ {
printf("panelActivatedData(%d)\n",n);
QString username; QString username;
if(panel_type==RDAirPlayConf::UserPanel) { if(panel_type==RDAirPlayConf::UserPanel) {
username=rda->user()->name(); username=rda->user()->name();
} }
panel_panels.value(username).at(panel_number)->hide();
if(n<panel_station_panels) { if(n<panel_station_panels) {
panel_type=RDAirPlayConf::StationPanel; panel_type=RDAirPlayConf::StationPanel;
panel_number=n; panel_number=n;
@ -706,9 +688,8 @@ void RDSoundPanel::panelActivatedData(int n)
panel_number=n-panel_station_panels; panel_number=n-panel_station_panels;
username=rda->user()->name(); username=rda->user()->name();
} }
panel_panels.value(username).at(panel_number)->show();
UpdateButtonViewport(); ShowPanel(panel_type,panel_number);
} }
@ -761,7 +742,7 @@ void RDSoundPanel::setupClickedData()
} }
if(rda->station()->enableDragdrop()&&(rda->station()->enforcePanelSetup())) { if(rda->station()->enableDragdrop()&&(rda->station()->enforcePanelSetup())) {
for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it= for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=
panel_panels.begin();it!=panel_panels.end();it++) { panel_arrays.begin();it!=panel_arrays.end();it++) {
for(int i=0;i<it.value().size();i++) { for(int i=0;i<it.value().size();i++) {
it.value().at(i)->setAcceptDrops(panel_setup_mode); it.value().at(i)->setAcceptDrops(panel_setup_mode);
} }
@ -771,11 +752,15 @@ void RDSoundPanel::setupClickedData()
} }
void RDSoundPanel::buttonMapperData(int grid_pos) void RDSoundPanel::buttonClickedData(int pnum,int col,int row)
{ {
RDPanelButton *button=GetCurrentPanel()-> // printf("buttonMapperData(pnum: %d,col: %d row: %d)\n",pnum,col,row);
panelButton(grid_pos/PANEL_MAX_BUTTON_COLUMNS,
grid_pos%PANEL_MAX_BUTTON_COLUMNS); if(panel_current_panel==NULL) {
printf("NO CURRENT PANEL!\n");
return;
}
RDPanelButton *button=panel_current_panel->panelButton(row,col);
unsigned cartnum; unsigned cartnum;
switch(panel_action_mode) { switch(panel_action_mode) {
@ -951,21 +936,16 @@ void RDSoundPanel::onairFlagChangedData(bool state)
} }
void RDSoundPanel::scanPanelData()
{
if(panel_action_mode==RDAirPlayConf::Normal) {
ShowPanel(panel_type,panel_number);
}
}
void RDSoundPanel::resizeEvent(QResizeEvent *e) void RDSoundPanel::resizeEvent(QResizeEvent *e)
{ {
// int w=size().width(); // int w=size().width();
int h=size().height(); int h=size().height();
UpdateButtonViewport(); for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it=panel_arrays.begin();it!=panel_arrays.end();it++) {
for(int i=0;i<it.value().size();i++) {
it.value().at(i)->setGeometry(0,0,size().width()-5,size().height()-60);
}
}
panel_selector_box->setGeometry(0,h-50,2*PANEL_BUTTON_SIZE_X+10,50); panel_selector_box->setGeometry(0,h-50,2*PANEL_BUTTON_SIZE_X+10,50);
panel_playmode_box->setGeometry(2*PANEL_BUTTON_SIZE_X+15,h-50, panel_playmode_box->setGeometry(2*PANEL_BUTTON_SIZE_X+15,h-50,
PANEL_BUTTON_SIZE_X+10,50); PANEL_BUTTON_SIZE_X+10,50);
@ -992,23 +972,6 @@ void RDSoundPanel::wheelEvent(QWheelEvent *e)
} }
void RDSoundPanel::UpdateButtonViewport()
{
QString username;
if(panel_type==RDAirPlayConf::UserPanel) {
username=rda->user()->name();
}
QRect viewport(0,0,size().width()-5,size().height()-60);
RDButtonPanel *panel=panel_panels.value(username).at(panel_number);
for(int i=0;i<panel_button_rows;i++) {
for(int j=0;j<panel_button_columns;j++) {
RDPanelButton *button=panel->panelButton(i,j);
button->setVisible(viewport.contains(button->geometry()));
}
}
}
void RDSoundPanel::PlayButton(RDAirPlayConf::PanelType type,int panel, void RDSoundPanel::PlayButton(RDAirPlayConf::PanelType type,int panel,
int row,int col,RDLogLine::StartSource src,bool hookmode, int row,int col,RDLogLine::StartSource src,bool hookmode,
int mport,bool pause_when_finished) int mport,bool pause_when_finished)
@ -1022,8 +985,8 @@ void RDSoundPanel::PlayButton(RDAirPlayConf::PanelType type,int panel,
for(int i=0;i<panel_button_columns;i++) { for(int i=0;i<panel_button_columns;i++) {
for(int j=0;j<panel_button_rows;j++) { for(int j=0;j<panel_button_rows;j++) {
if(panel_panels.value(username).at(panel)->panelButton(j,i)->cart()>0 && if(panel_arrays.value(username).at(panel)->panelButton(j,i)->cart()>0 &&
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->state()==false) { panelButton(j,i)->state()==false) {
if(edit_col==-1 || col==i) { if(edit_col==-1 || col==i) {
edit_col=i; edit_col=i;
@ -1039,7 +1002,7 @@ void RDSoundPanel::PlayButton(RDAirPlayConf::PanelType type,int panel,
} }
RDPanelButton *button= RDPanelButton *button=
panel_panels.value(username).at(panel)->panelButton(edit_row,edit_col); panel_arrays.value(username).at(panel)->panelButton(edit_row,edit_col);
RDPlayDeck *deck=button->playDeck(); RDPlayDeck *deck=button->playDeck();
if(deck!=NULL) { if(deck!=NULL) {
deck->play(deck->currentPosition()); deck->play(deck->currentPosition());
@ -1210,14 +1173,14 @@ void RDSoundPanel::PauseButton(RDAirPlayConf::PanelType type,int panel,
for(int i=0;i<panel_button_columns;i++) { for(int i=0;i<panel_button_columns;i++) {
for(int j=0;j<panel_button_rows;j++) { for(int j=0;j<panel_button_rows;j++) {
RDPlayDeck *deck= RDPlayDeck *deck=
panel_panels.value(username).at(panel)->panelButton(j,i)->playDeck(); panel_arrays.value(username).at(panel)->panelButton(j,i)->playDeck();
if(deck!=NULL && (row==j || row==-1) && (col==i || col==-1)) { if(deck!=NULL && (row==j || row==-1) && (col==i || col==-1)) {
if(mport==-1 || if(mport==-1 ||
mport==panel_panels.value(username).at(panel)-> mport==panel_arrays.value(username).at(panel)->
panelButton(j,i)->outputText().toInt()) { panelButton(j,i)->outputText().toInt()) {
deck->pause(); deck->pause();
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setStartTime(QTime()); panelButton(j,i)->setStartTime(QTime());
} }
} }
@ -1240,19 +1203,19 @@ void RDSoundPanel::StopButton(RDAirPlayConf::PanelType type,int panel,
} }
for(int i=0;i<panel_button_columns;i++) { for(int i=0;i<panel_button_columns;i++) {
for(int j=0;j<panel_button_rows;j++) { for(int j=0;j<panel_button_rows;j++) {
RDPlayDeck *deck=panel_panels.value(username).at(panel)-> RDPlayDeck *deck=panel_arrays.value(username).at(panel)->
panelButton(j,i)->playDeck(); panelButton(j,i)->playDeck();
if((row==j || row==-1) && (col==i || col==-1)) { if((row==j || row==-1) && (col==i || col==-1)) {
if(deck!=NULL) { if(deck!=NULL) {
if(edit_mport==-1 || if(edit_mport==-1 ||
edit_mport==panel_panels.value(username). edit_mport==panel_arrays.value(username).
at(panel)->panelButton(j,i)->outputText().toInt()) { at(panel)->panelButton(j,i)->outputText().toInt()) {
if(panel_pause_enabled) { if(panel_pause_enabled) {
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setPauseWhenFinished(pause_when_finished); panelButton(j,i)->setPauseWhenFinished(pause_when_finished);
} }
else { else {
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setPauseWhenFinished(false); panelButton(j,i)->setPauseWhenFinished(false);
} }
switch(deck->state()) { switch(deck->state()) {
@ -1272,11 +1235,11 @@ void RDSoundPanel::StopButton(RDAirPlayConf::PanelType type,int panel,
} }
else { else {
if(!pause_when_finished && panel_pause_enabled) { if(!pause_when_finished && panel_pause_enabled) {
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setState(false); panelButton(j,i)->setState(false);
panel_panels.value(username).at(panel)-> panel_arrays.value(username).at(panel)->
panelButton(j,i)->setPauseWhenFinished(false); panelButton(j,i)->setPauseWhenFinished(false);
panel_panels.value(username).at(panel)->panelButton(j,i)->reset(); panel_arrays.value(username).at(panel)->panelButton(j,i)->reset();
} }
} }
} }
@ -1314,182 +1277,43 @@ void RDSoundPanel::StopButton(RDPlayDeck *deck)
} }
} }
/*
void RDSoundPanel::LoadPanels()
{
for(unsigned i=0;i<panel_panels.size();i++) {
delete panel_panels[i];
}
panel_panels.clear();
//
// Load Buttons
//
for(int i=0;i<panel_station_panels;i++) {
panel_panels.push_back(new RDButtonPanel(panel_type,i,panel_button_columns,
panel_button_rows,
rda->station(),panel_flash,this));
for(int j=0;j<panel_button_rows;j++) {
for(int k=0;k<panel_button_columns;k++) {
connect(panel_panels.back()->panelButton(j,k),SIGNAL(clicked()),
panel_mapper,SLOT(map()));
panel_mapper->setMapping(panel_panels.back()->panelButton(j,k),
j*panel_button_columns+k);
}
}
LoadPanel(RDAirPlayConf::StationPanel,i);
panel_panels.back()->setAllowDrags(rda->station()->enableDragdrop());
}
for(int i=0;i<panel_user_panels;i++) {
panel_panels.push_back(new RDButtonPanel(panel_type,i,panel_button_columns,
panel_button_rows,
rda->station(),panel_flash,this));
for(int j=0;j<panel_button_rows;j++) {
for(int k=0;k<panel_button_columns;k++) {
connect(panel_panels.back()->panelButton(j,k),SIGNAL(clicked()),
panel_mapper,SLOT(map()));
panel_mapper->setMapping(panel_panels.back()->panelButton(j,k),
j*panel_button_columns+k);
}
}
panel_panels.back()->setAllowDrags(rda->station()->enableDragdrop());
LoadPanel(RDAirPlayConf::UserPanel,i);
}
}
void RDSoundPanel::LoadPanel(RDAirPlayConf::PanelType type,int panel)
{
QString owner;
int offset=0;
switch(type) {
case RDAirPlayConf::UserPanel:
owner=rda->user()->name();
offset=panel_station_panels+panel;
break;
case RDAirPlayConf::StationPanel:
owner=rda->station()->name();
offset=panel;
break;
}
QString sql=QString("select ")+
panel_tablename+".`ROW_NO`,"+ // 00
panel_tablename+".`COLUMN_NO`,"+ // 01
panel_tablename+".`LABEL`,"+ // 02
panel_tablename+".`CART`,"+ // 03
panel_tablename+".`DEFAULT_COLOR`,"+ // 04
"`CART`.`FORCED_LENGTH`,"+ // 05
"`CART`.`AVERAGE_HOOK_LENGTH`,"+ // 06
"`CART`.`TYPE` "+ // 07
"from "+panel_tablename+" "+ // 08
"left join `CART` on "+panel_tablename+".`CART`=`CART`.`NUMBER` "+
"where "+panel_tablename+QString::asprintf(".`TYPE`=%d && ",type)+
panel_tablename+".`OWNER`='"+RDEscapeString(owner)+"' && "+
panel_tablename+QString::asprintf(".`PANEL_NO`=%d ",panel)+
"order by "+panel_tablename+".`COLUMN_NO`,"+panel_tablename+".`ROW_NO`";
RDSqlQuery *q=new RDSqlQuery(sql);
while(q->next()) {
if(panel_panels[offset]->panelButton(q->value(0).toInt(),
q->value(1).toInt())->playDeck()==NULL) {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setText(q->value(2).toString());
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setCart(q->value(3).toInt());
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setLength(false,q->value(5).toInt());
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setLength(true,q->value(6).toInt());
if((panel_playmode_box!=NULL)&&(panel_playmode_box->currentIndex()==1)&&
(q->value(6).toUInt()>0)) {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setActiveLength(q->value(6).toInt());
}
else {
if(q->value(7).toInt()==RDCart::Macro) {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setActiveLength(q->value(5).toInt());
}
else {
if(q->value(5).toInt()>0) {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setActiveLength(q->value(5).toInt());
}
else {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setActiveLength(-1);
}
}
}
if(q->value(4).toString().isEmpty()) {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setColor(palette().color(QPalette::Background));
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setDefaultColor(palette().color(QPalette::Background));
}
else {
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setColor(QColor(q->value(4).toString()));
panel_panels[offset]->
panelButton(q->value(0).toInt(),q->value(1).toInt())->
setDefaultColor(QColor(q->value(4).toString()));
}
}
}
delete q;
UpdateButtonViewport();
}
*/
void RDSoundPanel::UpdatePanels(const QString &username) void RDSoundPanel::UpdatePanels(const QString &username)
{ {
QString owner=username; QString owner=username;
RDAirPlayConf::PanelType type=RDAirPlayConf::UserPanel; RDAirPlayConf::PanelType type=RDAirPlayConf::UserPanel;
int size=panel_user_panels; int max_panels=panel_user_panels;
if(username.isEmpty()) { if(username.isEmpty()) {
owner=rda->station()->name(); owner=rda->station()->name();
type=RDAirPlayConf::StationPanel; type=RDAirPlayConf::StationPanel;
size=panel_station_panels; max_panels=panel_station_panels;
} }
// //
// Create the panel // Load the array if it isn't already loaded
// //
if(size>0) { if(max_panels>0) {
QList<RDButtonPanel *> list; QList<RDButtonPanel *> list;
if(panel_panels.value(username).size()>0) { if(panel_arrays.value(username).size()>0) {
list=panel_panels.value(username); list=panel_arrays.value(username);
} }
for(int i=panel_panels.value(username).size();i<size;i++) { for(int i=panel_arrays.value(username).size();i<max_panels;i++) {
RDButtonPanel *panel=new RDButtonPanel(type,i,this); RDButtonPanel *panel=new RDButtonPanel(type,i,this);
for(int j=0;j<PANEL_MAX_BUTTON_COLUMNS;j++) { printf("new panel type: %d number: %d ptr: %p\n",
for(int k=0;k<PANEL_MAX_BUTTON_ROWS;k++) { type,i,panel);
RDPanelButton *button=panel->panelButton(k,j);
connect(button,SIGNAL(clicked()),panel_mapper,SLOT(map())); connect(panel,SIGNAL(buttonClicked(int,int,int)),
panel_mapper->setMapping(button,k*PANEL_MAX_BUTTON_COLUMNS+j); this,SLOT(buttonClickedData(int,int,int)));
} panel->hide();
}
list.push_back(panel); list.push_back(panel);
} }
panel_panels[username]=list; panel_arrays[username]=list;
} }
//
// Update button attributes
//
QString sql=QString("select ")+ QString sql=QString("select ")+
panel_tablename+".`PANEL_NO`,"+ // 00 panel_tablename+".`PANEL_NO`,"+ // 00
panel_tablename+".`ROW_NO`,"+ // 01 panel_tablename+".`ROW_NO`,"+ // 01
@ -1503,16 +1327,17 @@ void RDSoundPanel::UpdatePanels(const QString &username)
"from "+panel_tablename+" "+ // 09 "from "+panel_tablename+" "+ // 09
"left join `CART` on "+panel_tablename+".`CART`=`CART`.`NUMBER` "+ "left join `CART` on "+panel_tablename+".`CART`=`CART`.`NUMBER` "+
"where "+panel_tablename+QString::asprintf(".`TYPE`=%d && ",type)+ "where "+panel_tablename+QString::asprintf(".`TYPE`=%d && ",type)+
panel_tablename+".`OWNER`='"+RDEscapeString(owner)+"' "+ panel_tablename+".`OWNER`='"+RDEscapeString(owner)+"' && "+
panel_tablename+QString::asprintf(".`PANEL_NO`<%d ",max_panels)+
"order by "+ "order by "+
panel_tablename+".`PANEL_NO`,"+ panel_tablename+".`PANEL_NO`,"+
panel_tablename+".`COLUMN_NO`,"+ panel_tablename+".`COLUMN_NO`,"+
panel_tablename+".`ROW_NO`"; panel_tablename+".`ROW_NO`";
RDSqlQuery *q=new RDSqlQuery(sql); RDSqlQuery *q=new RDSqlQuery(sql);
while(q->next()) { while(q->next()) {
RDPanelButton *button=panel_panels.value(username).at(q->value(0).toInt())-> RDPanelButton *button=panel_arrays.value(username).at(q->value(0).toInt())->
panelButton(q->value(1).toInt(),q->value(2).toInt()); panelButton(q->value(1).toInt(),q->value(2).toInt());
if(button->playDeck()==NULL) { if(!button->isActive()) {
button->setText(q->value(3).toString()); button->setText(q->value(3).toString());
button->setCart(q->value(4).toInt()); button->setCart(q->value(4).toInt());
button->setLength(false,q->value(6).toInt()); button->setLength(false,q->value(6).toInt());
@ -1554,26 +1379,15 @@ void RDSoundPanel::ShowPanel(RDAirPlayConf::PanelType type,int offset)
if(type==RDAirPlayConf::UserPanel) { if(type==RDAirPlayConf::UserPanel) {
username=rda->user()->name(); username=rda->user()->name();
} }
for(QMap<QString,QList<RDButtonPanel *> >::const_iterator it= printf("username: %s\n",username.toUtf8().constData());
panel_panels.begin();it!=panel_panels.end();it++) { if(panel_arrays.value(username).size()>offset) {
if(it.key()==username) { if(panel_current_panel!=NULL) {
for(int i=0;i<it.value().size();i++) { panel_current_panel->hide();
if(offset==i) {
it.value().at(i)->show();
} }
else { panel_arrays.value(username).at(offset)->show();
it.value().at(i)->hide(); panel_current_panel=panel_arrays.value(username).at(offset);
} }
} }
}
else {
for(int i=0;i<it.value().size();i++) {
it.value().at(i)->hide();
}
}
}
UpdateButtonViewport();
}
void RDSoundPanel::SaveButton(RDAirPlayConf::PanelType type, void RDSoundPanel::SaveButton(RDAirPlayConf::PanelType type,
@ -1599,7 +1413,7 @@ void RDSoundPanel::SaveButton(RDAirPlayConf::PanelType type,
} }
RDPanelButton *button= RDPanelButton *button=
panel_panels.value(username).at(panel)->panelButton(row,col); panel_arrays.value(username).at(panel)->panelButton(row,col);
// //
// Determine if the button exists // Determine if the button exists
@ -1937,17 +1751,6 @@ QString RDSoundPanel::PanelOwner(RDAirPlayConf::PanelType type)
} }
RDButtonPanel *RDSoundPanel::GetCurrentPanel() const
{
QString username;
if(panel_type==RDAirPlayConf::UserPanel) {
username=rda->user()->name();
}
return panel_panels.value(username).at(panel_number);
}
RDPanelButton *RDSoundPanel::GetVisibleButton(int row,int col) const RDPanelButton *RDSoundPanel::GetVisibleButton(int row,int col) const
{ {
return NULL; return NULL;

View File

@ -112,21 +112,18 @@ class RDSoundPanel : public RDWidget
void resetClickedData(); void resetClickedData();
void allClickedData(); void allClickedData();
void setupClickedData(); void setupClickedData();
void buttonMapperData(int grid_pos); void buttonClickedData(int pnum,int col,int row);
// void buttonMapperData(QWidget *w);
void stateChangedData(int id,RDPlayDeck::State state); void stateChangedData(int id,RDPlayDeck::State state);
void hookEndData(int id); void hookEndData(int id);
void timescalingSupportedData(int card,bool state); void timescalingSupportedData(int card,bool state);
void panelSetupData(); void panelSetupData();
void onairFlagChangedData(bool state); void onairFlagChangedData(bool state);
void scanPanelData();
protected: protected:
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
void wheelEvent(QWheelEvent *e); void wheelEvent(QWheelEvent *e);
private: private:
void UpdateButtonViewport();
void PlayButton(RDAirPlayConf::PanelType type,int panel,int row,int col, void PlayButton(RDAirPlayConf::PanelType type,int panel,int row,int col,
RDLogLine::StartSource src,bool hookmode,int mport=-1, RDLogLine::StartSource src,bool hookmode,int mport=-1,
bool pause_when_finished=false); bool pause_when_finished=false);
@ -138,12 +135,9 @@ class RDSoundPanel : public RDWidget
int mport=-1,bool pause_when_finished=false,int fade_out=0); int mport=-1,bool pause_when_finished=false,int fade_out=0);
void StopButton(int id); void StopButton(int id);
void StopButton(RDPlayDeck *deck); void StopButton(RDPlayDeck *deck);
// void LoadPanels();
// void LoadPanel(RDAirPlayConf::PanelType type,int panel);
void UpdatePanels(const QString &username); void UpdatePanels(const QString &username);
void ShowPanel(RDAirPlayConf::PanelType type,int offset); void ShowPanel(RDAirPlayConf::PanelType type,int offset);
void SaveButton(RDAirPlayConf::PanelType type,int panel,int row,int col); void SaveButton(RDAirPlayConf::PanelType type,int panel,int row,int col);
// int PanelOffset(RDAirPlayConf::PanelType type,int panel);
int GetFreeButtonDeck(); int GetFreeButtonDeck();
int GetFreeOutput(); int GetFreeOutput();
void LogPlayEvent(unsigned cartnum,int cutnum); void LogPlayEvent(unsigned cartnum,int cutnum);
@ -157,9 +151,9 @@ class RDSoundPanel : public RDWidget
void ClearReset(); void ClearReset();
QString PanelTag(int index); QString PanelTag(int index);
QString PanelOwner(RDAirPlayConf::PanelType type); QString PanelOwner(RDAirPlayConf::PanelType type);
RDButtonPanel *GetCurrentPanel() const;
RDPanelButton *GetVisibleButton(int row,int col) const; RDPanelButton *GetVisibleButton(int row,int col) const;
QMap<QString,QList<RDButtonPanel *> > panel_panels; QMap<QString,QList<RDButtonPanel *> > panel_arrays;
RDButtonPanel *panel_current_panel;
RDComboBox *panel_selector_box; RDComboBox *panel_selector_box;
QComboBox *panel_playmode_box; QComboBox *panel_playmode_box;
RDPushButton *panel_setup_button; RDPushButton *panel_setup_button;
@ -167,7 +161,6 @@ class RDSoundPanel : public RDWidget
RDPushButton *panel_all_button; RDPushButton *panel_all_button;
RDAirPlayConf::PanelType panel_type; RDAirPlayConf::PanelType panel_type;
RDButtonDialog *panel_button_dialog; RDButtonDialog *panel_button_dialog;
QSignalMapper *panel_mapper;
QString panel_tablename; QString panel_tablename;
QString panel_name_tablename; QString panel_name_tablename;
int panel_number; int panel_number;
@ -199,9 +192,9 @@ class RDSoundPanel : public RDWidget
int panel_button_rows; int panel_button_rows;
RDCartDialog *panel_cart_dialog; RDCartDialog *panel_cart_dialog;
bool panel_onair_flag; bool panel_onair_flag;
QTimer *panel_scan_timer;
QString panel_caption; QString panel_caption;
bool panel_dump_panel_updates; bool panel_dump_panel_updates;
bool panel_started;
}; };
#endif // RDSOUND_PANEL_H #endif // RDSOUND_PANEL_H