2021-07-02 Fred Gleason <fredg@paravelsystems.com>

* Added an 'AUDIO_INPUTS.LABEL' field to the database.
	* Added an 'AUDIO_OUTPUTS.LABEL' field to the database.
	* Incremented the database version to 350.
	* Added 'RDAudioPort::inputPortLabel()',
	'RDAudioPort::setInputPortLabel()' 'RDAudioPort::outputPortLabel()'
	and 'RDAudioPort::setOutputPortLabel()' methods.
	* Added 'Label' fields to the 'Input Port' and 'Output Port'
	sections of the 'Edit Audio Ports' dialog in rdadmin(1).
	* Added code to rdairplay(1) to use port labels on audio meters.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-07-02 20:00:39 -04:00
parent bff832664d
commit 21d35faa50
16 changed files with 280 additions and 70 deletions

View File

@ -21989,3 +21989,13 @@
rdadmin(1).
2021-07-02 Fred Gleason <fredg@paravelsystems.com>
* Cleaned up indentation in 'rdadmin/edit_audios.cpp'.
2021-07-02 Fred Gleason <fredg@paravelsystems.com>
* Added an 'AUDIO_INPUTS.LABEL' field to the database.
* Added an 'AUDIO_OUTPUTS.LABEL' field to the database.
* Incremented the database version to 350.
* Added 'RDAudioPort::inputPortLabel()',
'RDAudioPort::setInputPortLabel()' 'RDAudioPort::outputPortLabel()'
and 'RDAudioPort::setOutputPortLabel()' methods.
* Added 'Label' fields to the 'Input Port' and 'Output Port'
sections of the 'Edit Audio Ports' dialog in rdadmin(1).
* Added code to rdairplay(1) to use port labels on audio meters.

View File

@ -9,6 +9,7 @@ ID int(10) unsigned Primary key, auto increment
STATION_NAME varchar(64)
CARD_NUMBER int(11) signed
PORT_NUMBER int(11) signed
LABEL varchar(4)
TYPE int(11) signed 0 = Analog, 1 = AES/EBU,
2 = SP/DIFF
LEVEL int(11) signed Gain offset, in 1/100 dB

View File

@ -9,4 +9,5 @@ ID int(10) unsigned Primary key, auto increment
STATION_NAME varchar(64)
CARD_NUMBER int(11) signed
PORT_NUMBER int(11) signed
LABEL varchar(4)
LEVEL int(11) signed Gain offset, in 1/100 dB

View File

@ -24,7 +24,7 @@
/*
* Current Database Version
*/
#define RD_VERSION_DATABASE 349
#define RD_VERSION_DATABASE 350
#endif // DBVERSION_H

View File

@ -83,6 +83,30 @@ void RDAirPlayConf::setPort(RDAirPlayConf::Channel chan,int port) const
}
QString RDAirPlayConf::portLabel(RDAirPlayConf::Channel chan) const
{
QString ret="??";
QString sql;
RDSqlQuery *q=NULL;
sql=QString("select ")+
"`AUDIO_OUTPUTS`.`LABEL` "+ // 00
"from `RDAIRPLAY_CHANNELS` left join `AUDIO_OUTPUTS` "+
"on `RDAIRPLAY_CHANNELS`.`PORT`=`AUDIO_OUTPUTS`.`PORT_NUMBER` where "+
"`AUDIO_OUTPUTS`.`STATION_NAME`='"+RDEscapeString(air_station)+"' && "+
"`AUDIO_OUTPUTS`.`CARD_NUMBER`=`RDAIRPLAY_CHANNELS`.`CARD` && "+
"`AUDIO_OUTPUTS`.`PORT_NUMBER`=`RDAIRPLAY_CHANNELS`.`PORT` && "+
QString().sprintf("`RDAIRPLAY_CHANNELS`.`INSTANCE`=%u",chan);
q=new RDSqlQuery(sql);
if(q->first()) {
ret=q->value(0).toString();
}
delete q;
return ret;
}
QString RDAirPlayConf::startRml(RDAirPlayConf::Channel chan) const
{
return GetChannelValue("START_RML",chan).toString();

View File

@ -52,6 +52,7 @@ class RDAirPlayConf
void setCard(Channel chan,int card) const;
int port(Channel chan) const;
void setPort(Channel chan,int port) const;
QString portLabel(Channel chan) const;
QString startRml(Channel chan) const;
void setStartRml(Channel chan,QString str) const;
QString stopRml(Channel chan) const;

View File

@ -44,7 +44,8 @@ RDAudioPort::RDAudioPort(QString station,int card)
"`PORT_NUMBER`,"+ // 00
"`LEVEL`,"+ // 01
"`TYPE`,"+ // 02
"`MODE` "+ // 03
"`MODE`,"+ // 03
"`LABEL` "+ // 04
"from `AUDIO_INPUTS` where "+
"`STATION_NAME`='"+RDEscapeString(port_station)+"' && "+
QString().sprintf("`CARD_NUMBER`=%d",port_card);
@ -55,18 +56,21 @@ RDAudioPort::RDAudioPort(QString station,int card)
(RDAudioPort::PortType)q->value(2).toInt();
audio_input_port_mode[q->value(0).toInt()]=
(RDCae::ChannelMode)q->value(3).toInt();
audio_input_port_labels[q->value(0).toInt()]=q->value(4).toString();
}
delete q;
sql=QString("select ")+
"`PORT_NUMBER`,"+ // 00
"`LEVEL` "+ // 01
"`LEVEL`,"+ // 01
"`LABEL` "+ // 02
"from `AUDIO_OUTPUTS` where "+
"`STATION_NAME`='"+RDEscapeString(port_station)+"' && "+
QString().sprintf("`CARD_NUMBER`=%d",port_card);
q=new RDSqlQuery(sql);
while(q->next()) {
audio_output_port_level[q->value(0).toInt()]=q->value(1).toInt();
audio_output_port_labels[q->value(0).toInt()]=q->value(2).toString();
}
delete q;
}
@ -110,6 +114,31 @@ void RDAudioPort::setClockSource(RDCae::ClockSource src)
}
QString RDAudioPort::inputPortLabel(int port) const
{
if(port<0||port>RD_MAX_PORTS) {
return QObject::tr("ERR");
}
return audio_input_port_labels[port];
}
void RDAudioPort::setInputPortLabel(int port,const QString &str)
{
if(port<0||port>RD_MAX_PORTS) {
return;
}
audio_input_port_labels[port]=str;
QString sql=QString("update `AUDIO_INPUTS` set ")+
"`LABEL`='"+RDEscapeString(str)+"' where "+
"`STATION_NAME`='"+RDEscapeString(port_station)+"' && "+
QString().sprintf("`CARD_NUMBER`=%d && ",port_card)+
QString().sprintf("`PORT_NUMBER`=%d",port);
RDSqlQuery::apply(sql);
}
RDAudioPort::PortType RDAudioPort::inputPortType(int port)
{
if(port<0||port>RD_MAX_PORTS) {
@ -188,6 +217,31 @@ void RDAudioPort::setInputPortLevel(int port,int level)
}
QString RDAudioPort::outputPortLabel(int port) const
{
if(port<0||port>RD_MAX_PORTS) {
return QObject::tr("ERR");
}
return audio_output_port_labels[port];
}
void RDAudioPort::setOutputPortLabel(int port,const QString &str)
{
if(port<0||port>RD_MAX_PORTS) {
return;
}
audio_output_port_labels[port]=str;
QString sql=QString("update `AUDIO_OUTPUTS` set ")+
"`LABEL`='"+RDEscapeString(str)+"' where "+
"`STATION_NAME`='"+RDEscapeString(port_station)+"' && "+
QString().sprintf("`CARD_NUMBER`=%d && ",port_card)+
QString().sprintf("`PORT_NUMBER`=%d",port);
RDSqlQuery::apply(sql);
}
int RDAudioPort::outputPortLevel(int port)
{
if(port<0||port>RD_MAX_PORTS) {

View File

@ -26,30 +26,36 @@
class RDAudioPort
{
public:
enum PortType {Analog=0,AesEbu=1,SpDiff=2};
RDAudioPort(QString station,int card);
QString station() const;
int card() const;
RDCae::ClockSource clockSource();
void setClockSource(RDCae::ClockSource src);
RDAudioPort::PortType inputPortType(int port);
void setInputPortType(int port,RDAudioPort::PortType type);
RDCae::ChannelMode inputPortMode(int port);
void setInputPortMode(int port,RDCae::ChannelMode mode);
int inputPortLevel(int port);
void setInputPortLevel(int port,int level);
int outputPortLevel(int port);
void setOutputPortLevel(int port,int level);
public:
enum PortType {Analog=0,AesEbu=1,SpDiff=2};
RDAudioPort(QString station,int card);
QString station() const;
int card() const;
RDCae::ClockSource clockSource();
void setClockSource(RDCae::ClockSource src);
QString inputPortLabel(int port) const;
void setInputPortLabel(int port,const QString &str);
RDAudioPort::PortType inputPortType(int port);
void setInputPortType(int port,RDAudioPort::PortType type);
RDCae::ChannelMode inputPortMode(int port);
void setInputPortMode(int port,RDCae::ChannelMode mode);
int inputPortLevel(int port);
void setInputPortLevel(int port,int level);
QString outputPortLabel(int port) const;
void setOutputPortLabel(int port,const QString &str);
int outputPortLevel(int port);
void setOutputPortLevel(int port,int level);
private:
QString port_station;
int port_card;
int audio_input_port_level[RD_MAX_PORTS];
int audio_output_port_level[RD_MAX_PORTS];
RDAudioPort::PortType audio_input_port_type[RD_MAX_PORTS];
RDCae::ChannelMode audio_input_port_mode[RD_MAX_PORTS];
private:
QString port_station;
int port_card;
QString audio_input_port_labels[RD_MAX_PORTS];
int audio_input_port_level[RD_MAX_PORTS];
RDAudioPort::PortType audio_input_port_type[RD_MAX_PORTS];
RDCae::ChannelMode audio_input_port_mode[RD_MAX_PORTS];
int audio_output_port_level[RD_MAX_PORTS];
QString audio_output_port_labels[RD_MAX_PORTS];
};
#endif
#endif // RDAUDIO_PORT_H

View File

@ -23,7 +23,7 @@
#include "edit_audios.h"
EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
EditAudioPorts::EditAudioPorts(RDStation *station,QWidget *parent)
: RDDialog(parent)
{
QString str;
@ -34,9 +34,8 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
setMaximumSize(sizeHint());
setMinimumSize(sizeHint());
edit_station=station;
edit_card=NULL;
rdstation=NULL;
rdstation=station;
setWindowTitle("RDAdmin - "+tr("Edit Audio Ports"));
@ -74,7 +73,7 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
edit_clock_box=new QComboBox(this);
edit_clock_label=new QLabel(tr("Clock Source:"),this);
edit_clock_label->setFont(labelFont());
edit_clock_label->setAlignment(Qt::AlignRight);
edit_clock_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
for(int i=0;i<RD_MAX_PORTS;i++) {
//
@ -83,7 +82,14 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
str=QString(tr("Input Port"));
edit_inportnum_label[i]=new QLabel(str+QString().sprintf(" %d",i),this);
edit_inportnum_label[i]->setFont(labelFont());
edit_inportnum_label[i]->setAlignment(Qt::AlignHCenter);
edit_inportnum_label[i]->setAlignment(Qt::AlignCenter);
edit_input_label_label[i]=new QLabel(tr("Label")+":",this);
edit_input_label_label[i]->setFont(labelFont());
edit_input_label_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
edit_input_label_edit[i]=new QLineEdit(this);
edit_input_label_edit[i]->setMaxLength(4);
QSignalMapper *mapper=new QSignalMapper(this);
connect(mapper,SIGNAL(mapped(int)),this,SLOT(inputMapData(int)));
edit_type_box[i]=new QComboBox(this);
@ -97,7 +103,7 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
connect(edit_type_box[i],SIGNAL(activated(int)),mapper,SLOT(map()));
edit_type_label[i]=new QLabel(tr("Type:"),this);
edit_type_label[i]->setFont(labelFont());
edit_type_label[i]->setAlignment(Qt::AlignRight);
edit_type_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
edit_mode_box[i]=new QComboBox(this);
// NOTE: this drop down list box is populated to match RDCae::ChannelMode
edit_mode_box[i]->
@ -112,14 +118,14 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
connect(edit_mode_box[i],SIGNAL(activated(int)),mapper,SLOT(map()));
edit_mode_label[i]=new QLabel(tr("Mode:"),this);
edit_mode_label[i]->setFont(labelFont());
edit_mode_label[i]->setAlignment(Qt::AlignRight);
edit_mode_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
edit_input_box[i]=new QSpinBox(this);
edit_input_box[i]->setRange(-26,6);
edit_input_box[i]->setSuffix(tr(" dB"));
edit_input_label[i]=new QLabel(tr("Ref. Level:"),this);
edit_input_label[i]->setFont(labelFont());
edit_input_label[i]->setAlignment(Qt::AlignRight);
edit_input_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
//
// Output Port Controls
@ -127,14 +133,21 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
str=QString(tr("Output Port"));
edit_outportnum_label[i]=new QLabel(str+QString().sprintf(" %d",i),this);
edit_outportnum_label[i]->setFont(labelFont());
edit_outportnum_label[i]->setAlignment(Qt::AlignHCenter);
edit_outportnum_label[i]->setAlignment(Qt::AlignCenter);
edit_output_label_label[i]=new QLabel(tr("Label")+":",this);
edit_output_label_label[i]->setFont(labelFont());
edit_output_label_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
edit_output_label_edit[i]=new QLineEdit(this);
edit_output_label_edit[i]->setMaxLength(4);
edit_output_box[i]=new QSpinBox(this);
edit_output_box[i]->setRange(-26,6);
edit_output_box[i]->setSuffix(tr(" dB"));
edit_output_label[i]=new QLabel(tr("Ref. Level:"),this);
edit_output_label[i]->setFont(labelFont());
edit_output_label[i]->setAlignment(Qt::AlignRight);
edit_output_label[i]->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
}
//
@ -156,7 +169,8 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent)
//
// Populate Data
//
for(int i=0;i<RD_MAX_PORTS;i++) {
int cards=rdstation->cards();
for(int i=0;i<cards;i++) {
edit_card_box->insertItem(edit_card_box->count(),QString().sprintf("%d",i));
}
edit_clock_box->insertItem(edit_clock_box->count(),tr("Internal"));
@ -175,7 +189,7 @@ EditAudioPorts::~EditAudioPorts()
QSize EditAudioPorts::sizeHint() const
{
return QSize(1420,652);
return QSize(1404,889);
}
@ -195,9 +209,6 @@ void EditAudioPorts::cardSelectedData(int card)
void EditAudioPorts::inputMapData(int id)
{
if(rdstation==NULL) {
rdstation=new RDStation(edit_station);
}
if( (rdstation->cardDriver(edit_card_num)==RDStation::Hpi) &&
(edit_type_box[id]->currentIndex()==RDAudioPort::Analog) ) {
edit_input_label[id]->setEnabled(true);
@ -227,21 +238,20 @@ void EditAudioPorts::closeData()
void EditAudioPorts::resizeEvent(QResizeEvent *e)
{
printf("resizeEvent(%d,%d)\n",size().width(),size().height());
//
// Header
//
edit_card_label->setGeometry(10,16,60,22);
edit_card_box->setGeometry(75,10,60,26);
card_label_label->setGeometry(140,14,80,22);
card_label_edit->setGeometry(225,14,300,22);
card_label_label->setGeometry(140,16,80,22);
card_label_edit->setGeometry(225,16,300,22);
card_driver_label->setGeometry(550,14,80,22);
card_driver_edit->setGeometry(635,14,300,22);
card_driver_label->setGeometry(550,16,80,22);
card_driver_edit->setGeometry(635,16,300,22);
edit_clock_label->setGeometry(size().width()-265,16,100,22);
edit_clock_box->setGeometry(size().width()-160,10,150,26);
edit_clock_label->setGeometry(size().width()-265,16,100,26);
edit_clock_box->setGeometry(size().width()-160,16,150,26);
for(int i=0;i<RD_MAX_PORTS;i++) {
int row=i/8;
@ -250,20 +260,30 @@ void EditAudioPorts::resizeEvent(QResizeEvent *e)
//
// Input Section
//
edit_inportnum_label[i]->setGeometry(50+170*col,55+row*180,170,22);
edit_type_box[i]->setGeometry(95+170*col,75+row*180,110,26);
edit_type_label[i]->setGeometry(50+170*col,81+row*180,40,22);
edit_mode_box[i]->setGeometry(95+170*col,105+row*180,110,26);
edit_mode_label[i]->setGeometry(50+170*col,111+row*180,40,22);
edit_input_box[i]->setGeometry(95+170*col,135+row*180,60,24);
edit_input_label[i]->setGeometry(10+170*col,140+row*180,80,22);
edit_inportnum_label[i]->setGeometry(50+170*col,55+row*260,170,22);
edit_input_label_label[i]->setGeometry(50+170*col,76+row*260,40,24);
edit_input_label_edit[i]->setGeometry(95+170*col,76+row*260,60,24);
edit_type_label[i]->setGeometry(50+170*col,105+row*260,40,26);
edit_type_box[i]->setGeometry(95+170*col,105+row*260,110,26);
edit_mode_label[i]->setGeometry(50+170*col,135+row*260,40,26);
edit_mode_box[i]->setGeometry(95+170*col,135+row*260,110,26);
edit_input_label[i]->setGeometry(10+170*col,165+row*260,80,24);
edit_input_box[i]->setGeometry(95+170*col,165+row*260,60,24);
//
// Output Section
//
edit_outportnum_label[i]->setGeometry(50+170*col,170+row*180,170,22);
edit_output_box[i]->setGeometry(95+170*col,190+row*180,60,24);
edit_output_label[i]->setGeometry(10+170*col,195+row*180,80,22);
edit_outportnum_label[i]->setGeometry(50+170*col,200+row*260,170,22);
edit_output_label_label[i]->setGeometry(10+170*col,225+row*260,80,24);
edit_output_label_edit[i]->setGeometry(95+170*col,225+row*260,60,24);
edit_output_label[i]->setGeometry(10+170*col,255+row*260,80,24);
edit_output_box[i]->setGeometry(95+170*col,255+row*260,60,24);
}
//
@ -274,16 +294,18 @@ void EditAudioPorts::resizeEvent(QResizeEvent *e)
}
void EditAudioPorts::closeEvent(QCloseEvent *e)
{
closeData();
}
void EditAudioPorts::ReadRecord(int card)
{
if(edit_card!=NULL) {
delete edit_card;
}
edit_card=new RDAudioPort(edit_station,card);
if(rdstation!=NULL) {
delete rdstation;
}
rdstation=new RDStation(edit_station);
edit_card=new RDAudioPort(rdstation->name(),card);
card_label_edit->setText(rdstation->cardName(card));
//
@ -347,12 +369,16 @@ void EditAudioPorts::ReadRecord(int card)
edit_clock_box->setDisabled(true);
edit_clock_label->setDisabled(true);
for (int i=0;i<RD_MAX_PORTS;i++) {
edit_input_label_label[i]->setDisabled(true);
edit_input_label_edit[i]->setDisabled(true);
edit_type_label[i]->setDisabled(true);
edit_type_box[i]->setDisabled(true);
edit_mode_label[i]->setDisabled(true);
edit_mode_box[i]->setDisabled(true);
edit_input_label[i]->setDisabled(true);
edit_input_box[i]->setDisabled(true);
edit_output_label_label[i]->setDisabled(true);
edit_output_label_edit[i]->setDisabled(true);
edit_output_label[i]->setDisabled(true);
edit_output_box[i]->setDisabled(true);
}
@ -360,6 +386,7 @@ void EditAudioPorts::ReadRecord(int card)
}
edit_clock_box->setCurrentIndex(edit_card->clockSource());
for(int i=0;i<RD_MAX_PORTS;i++) {
edit_input_label_edit[i]->setText(edit_card->inputPortLabel(i));
edit_type_box[i]->setCurrentIndex((int)edit_card->inputPortType(i));
if( (rdstation->cardDriver(card)==RDStation::Hpi) &&
((RDAudioPort::PortType)edit_type_box[i]->currentIndex()==
@ -373,6 +400,7 @@ void EditAudioPorts::ReadRecord(int card)
}
edit_mode_box[i]->setCurrentIndex((int)edit_card->inputPortMode(i));
edit_input_box[i]->setValue(edit_card->inputPortLevel(i)/100);
edit_output_label_edit[i]->setText(edit_card->outputPortLabel(i));
edit_output_box[i]->setValue(edit_card->outputPortLevel(i)/100);
}
}
@ -383,11 +411,13 @@ void EditAudioPorts::WriteRecord()
edit_card->
setClockSource((RDCae::ClockSource)edit_clock_box->currentIndex());
for(int i=0;i<RD_MAX_PORTS;i++) {
edit_card->setInputPortLabel(i,edit_input_label_edit[i]->text());
edit_card->setInputPortType(i,
(RDAudioPort::PortType)edit_type_box[i]->currentIndex());
edit_card->setInputPortMode(i,
(RDCae::ChannelMode)edit_mode_box[i]->currentIndex());
edit_card->setInputPortLevel(i,edit_input_box[i]->value()*100);
edit_card->setOutputPortLabel(i,edit_output_label_edit[i]->text());
edit_card->setOutputPortLevel(i,edit_output_box[i]->value()*100);
}
}

View File

@ -38,7 +38,7 @@ class EditAudioPorts : public RDDialog
{
Q_OBJECT
public:
EditAudioPorts(QString station,QWidget *parent=0);
EditAudioPorts(RDStation *station,QWidget *parent=0);
~EditAudioPorts();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
@ -51,6 +51,7 @@ class EditAudioPorts : public RDDialog
protected:
void resizeEvent(QResizeEvent *e);
void closeEvent(QCloseEvent *e);
private:
void ReadRecord(int card);
@ -59,7 +60,6 @@ class EditAudioPorts : public RDDialog
int edit_card_num;
RDAudioPort *edit_card;
RDStation *rdstation;
QString edit_station;
QLabel *edit_card_label;
QComboBox *edit_card_box;
QLabel *card_driver_label;
@ -69,6 +69,8 @@ class EditAudioPorts : public RDDialog
QLabel *edit_clock_label;
QComboBox *edit_clock_box;
QLabel *edit_inportnum_label[RD_MAX_PORTS];
QLabel *edit_input_label_label[RD_MAX_PORTS];
QLineEdit *edit_input_label_edit[RD_MAX_PORTS];
QComboBox *edit_type_box[RD_MAX_PORTS];
QLabel *edit_type_label[RD_MAX_PORTS];
QComboBox *edit_mode_box[RD_MAX_PORTS];
@ -76,6 +78,8 @@ class EditAudioPorts : public RDDialog
QSpinBox *edit_input_box[RD_MAX_PORTS];
QLabel *edit_input_label[RD_MAX_PORTS];
QLabel *edit_outportnum_label[RD_MAX_PORTS];
QLabel *edit_output_label_label[RD_MAX_PORTS];
QLineEdit *edit_output_label_edit[RD_MAX_PORTS];
QSpinBox *edit_output_box[RD_MAX_PORTS];
QLabel *edit_output_label[RD_MAX_PORTS];
QPushButton *edit_help_button;

View File

@ -408,7 +408,8 @@ EditStation::EditStation(QString sname,QWidget *parent)
station_audioports_button->setText(tr("Audio\nPorts"));
connect(station_audioports_button,SIGNAL(clicked()),
this,SLOT(editAudioData()));
station_audioports_button->setDisabled(station_station->cards()==0);
//
// TTY Configuration Button
//
@ -791,7 +792,7 @@ void EditStation::viewAdaptersData()
void EditStation::editAudioData()
{
EditAudioPorts *edit_conf=new EditAudioPorts(station_station->name(),0);
EditAudioPorts *edit_conf=new EditAudioPorts(station_station,0);
edit_conf->exec();
delete edit_conf;
}

View File

@ -410,6 +410,10 @@
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Label</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditCartSlots</name>

View File

@ -193,6 +193,9 @@ MainWidget::MainWidget(RDConfig *config,QWidget *parent)
//
QList<int> strip_cards;
QList<int> strip_ports;
QStringList strip_labels;
QList<int> strip_index;
bool strip_changed=true;
for(unsigned i=0;i<RDAirPlayConf::LastChannel;i++) {
RDAirPlayConf::Channel chan=(RDAirPlayConf::Channel)i;
if(((rda->airplayConf()->card(chan)>=0)&&
@ -201,13 +204,28 @@ MainWidget::MainWidget(RDConfig *config,QWidget *parent)
(!strip_ports.contains(rda->airplayConf()->port(chan))))) {
strip_cards.push_back(rda->airplayConf()->card(chan));
strip_ports.push_back(rda->airplayConf()->port(chan));
strip_labels.push_back(rda->airplayConf()->portLabel(chan));
strip_index.push_back(strip_index.size());
}
}
while(strip_changed) {
strip_changed=false;
for(int i=0;i<(strip_index.size()-1);i++) {
if(strip_labels.at(strip_index.at(i))>
strip_labels.at(strip_index.at(i+1))) {
int index=strip_index.at(i);
strip_index[i]=strip_index.at(i+1);
strip_index[i+1]=index;
strip_changed=true;
}
}
}
air_meter_strip=new RDMeterStrip(this);
for(int i=0;i<strip_cards.size();i++) {
air_top_strip->meterWidget()->
addOutputMeter(strip_cards.at(i),strip_ports.at(i),
QString().sprintf("M%d",i+1));
addOutputMeter(strip_cards.at(strip_index.at(i)),
strip_ports.at(strip_index.at(i)),
strip_labels.at(strip_index.at(i)));
}
//

View File

@ -40,6 +40,16 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg)
// NEW SCHEMA REVERSIONS GO HERE...
//
// Revert 350
//
if((cur_schema==350)&&(set_schema<cur_schema)) {
DropColumn("AUDIO_INPUTS","LABEL");
DropColumn("AUDIO_OUTPUTS","LABEL");
WriteSchemaVersion(--cur_schema);
}
//
// Revert 349
//

View File

@ -160,7 +160,7 @@ void MainObject::InitializeSchemaMap() {
global_version_map["3.4"]=317;
global_version_map["3.5"]=346;
global_version_map["3.6"]=347;
global_version_map["4.0"]=349;
global_version_map["4.0"]=350;
}

View File

@ -10784,6 +10784,52 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg)
WriteSchemaVersion(++cur_schema);
}
if((cur_schema<350)&&(set_schema>cur_schema)) {
sql=QString("alter table `AUDIO_INPUTS` ")+
"add column `LABEL` varchar(4) after `PORT_NUMBER`";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql=QString("alter table `AUDIO_OUTPUTS` ")+
"add column `LABEL` varchar(4) after `PORT_NUMBER`";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
//
// Maintainer's Note:
//
// Use hard-coded maximum card/port quantities (24 four for each) here,
// in case the #define'd values change in future!
//
sql=QString("select `NAME` from `STATIONS`");
q=new RDSqlQuery(sql);
while(q->next()) {
for(int i=0;i<24;i++) {
for(int j=0;j<24;j++) {
sql=QString("update `AUDIO_INPUTS` set ")+
"`LABEL`='"+RDEscapeString(QString().sprintf("M%d",j+1))+"' where "+
"`STATION_NAME`='"+RDEscapeString(q->value(0).toString())+"' && "+
QString().sprintf("`CARD_NUMBER`=%d && ",i)+
QString().sprintf("`PORT_NUMBER`=%d",j);
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql=QString("update `AUDIO_OUTPUTS` set ")+
"`LABEL`='"+RDEscapeString(QString().sprintf("M%d",j+1))+"' where "+
"`STATION_NAME`='"+RDEscapeString(q->value(0).toString())+"' && "+
QString().sprintf("`CARD_NUMBER`=%d && ",i)+
QString().sprintf("`PORT_NUMBER`=%d",j);
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
}
}
WriteSchemaVersion(++cur_schema);
}
// NEW SCHEMA UPDATES GO HERE...