diff --git a/ChangeLog b/ChangeLog index 3b9d6326..66af9941 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21989,3 +21989,13 @@ rdadmin(1). 2021-07-02 Fred Gleason * Cleaned up indentation in 'rdadmin/edit_audios.cpp'. +2021-07-02 Fred Gleason + * 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. diff --git a/docs/tables/audio_inputs.txt b/docs/tables/audio_inputs.txt index 1433ec57..ee177cbf 100644 --- a/docs/tables/audio_inputs.txt +++ b/docs/tables/audio_inputs.txt @@ -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 diff --git a/docs/tables/audio_outputs.txt b/docs/tables/audio_outputs.txt index 96f2e02e..7fcaf23e 100644 --- a/docs/tables/audio_outputs.txt +++ b/docs/tables/audio_outputs.txt @@ -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 diff --git a/lib/dbversion.h b/lib/dbversion.h index 329d18ad..c36292c1 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 349 +#define RD_VERSION_DATABASE 350 #endif // DBVERSION_H diff --git a/lib/rdairplay_conf.cpp b/lib/rdairplay_conf.cpp index 39bbc647..921e2938 100644 --- a/lib/rdairplay_conf.cpp +++ b/lib/rdairplay_conf.cpp @@ -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(); diff --git a/lib/rdairplay_conf.h b/lib/rdairplay_conf.h index 51fbf1ea..d88f04c4 100644 --- a/lib/rdairplay_conf.h +++ b/lib/rdairplay_conf.h @@ -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; diff --git a/lib/rdaudio_port.cpp b/lib/rdaudio_port.cpp index d27e201a..aba7e665 100644 --- a/lib/rdaudio_port.cpp +++ b/lib/rdaudio_port.cpp @@ -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) { diff --git a/lib/rdaudio_port.h b/lib/rdaudio_port.h index 62b4fd97..cec6b8e9 100644 --- a/lib/rdaudio_port.h +++ b/lib/rdaudio_port.h @@ -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 diff --git a/rdadmin/edit_audios.cpp b/rdadmin/edit_audios.cpp index 231d6d47..30bd62a7 100644 --- a/rdadmin/edit_audios.cpp +++ b/rdadmin/edit_audios.cpp @@ -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;isetFont(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;icards(); + for(int i=0;iinsertItem(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;isetGeometry(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;isetDisabled(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;isetText(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;isetInputPortLabel(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); } } diff --git a/rdadmin/edit_audios.h b/rdadmin/edit_audios.h index 573a308b..5f632ee1 100644 --- a/rdadmin/edit_audios.h +++ b/rdadmin/edit_audios.h @@ -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; diff --git a/rdadmin/edit_station.cpp b/rdadmin/edit_station.cpp index ea233816..c31e371d 100644 --- a/rdadmin/edit_station.cpp +++ b/rdadmin/edit_station.cpp @@ -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; } diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index aaea119a..ddfec98b 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -410,6 +410,10 @@ [none] + + Label + + EditCartSlots diff --git a/rdairplay/rdairplay.cpp b/rdairplay/rdairplay.cpp index 36f5b7a8..5670ace6 100644 --- a/rdairplay/rdairplay.cpp +++ b/rdairplay/rdairplay.cpp @@ -193,6 +193,9 @@ MainWidget::MainWidget(RDConfig *config,QWidget *parent) // QList strip_cards; QList strip_ports; + QStringList strip_labels; + QList strip_index; + bool strip_changed=true; for(unsigned i=0;iairplayConf()->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;imeterWidget()-> - 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))); } // diff --git a/utils/rddbmgr/revertschema.cpp b/utils/rddbmgr/revertschema.cpp index 766e67a0..7b816fe9 100644 --- a/utils/rddbmgr/revertschema.cpp +++ b/utils/rddbmgr/revertschema.cpp @@ -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_schemacur_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...