Rivendellaudio/rdadmin/add_station.cpp
2014-08-12 15:13:02 -04:00

952 lines
34 KiB
C++

// add_station.cpp
//
// Add a Rivendell Workstation
//
// (C) Copyright 2002-2005 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: add_station.cpp,v 1.32.6.1 2013/03/09 00:21:11 cvs Exp $
//
// 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 <qdialog.h>
#include <qstring.h>
#include <qpushbutton.h>
#include <qlistbox.h>
#include <qtextedit.h>
#include <qlabel.h>
#include <qpainter.h>
#include <qevent.h>
#include <qmessagebox.h>
#include <qcheckbox.h>
#include <qbuttongroup.h>
#include <rddb.h>
#include <rdairplay_conf.h>
#include <rdescape_string.h>
#include <edit_station.h>
#include <add_station.h>
#include <rdpasswd.h>
#include <rdtextvalidator.h>
AddStation::AddStation(QString *stationname,QWidget *parent,const char *name)
: QDialog(parent,name,true)
{
add_name=stationname;
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
setCaption(tr("Add Host"));
//
// Create Fonts
//
QFont font=QFont("Helvetica",12,QFont::Bold);
font.setPixelSize(12);
//
// Text Validator
//
RDTextValidator *validator=new RDTextValidator(this,"validator");
//
// Station Name
//
add_name_edit=new QLineEdit(this,"add_name_edit");
add_name_edit->setGeometry(130,10,sizeHint().width()-140,19);
add_name_edit->setMaxLength(64);
add_name_edit->setValidator(validator);
QLabel *label=new QLabel(add_name_edit,tr("New &Host Name:"),this,"label");
label->setGeometry(10,10,115,19);
label->setFont(font);
label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Exemplar
//
add_exemplar_box=new QComboBox(this,"add_exemplar_box");
add_exemplar_box->setGeometry(130,35,sizeHint().width()-140,19);
label=new QLabel(add_exemplar_box,tr("Base Host On:"),this,"label");
label->setGeometry(10,35,115,19);
label->setFont(font);
label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Ok Button
//
QPushButton *ok_button=new QPushButton(this,"ok_button");
ok_button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,
80,50);
ok_button->setDefault(true);
ok_button->setFont(font);
ok_button->setText(tr("&OK"));
connect(ok_button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
QPushButton *cancel_button=new QPushButton(this,"cancel_button");
cancel_button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
cancel_button->setFont(font);
cancel_button->setText(tr("&Cancel"));
connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
//
// Fill Exemplar List
//
add_exemplar_box->insertItem(tr("Empty Host Config"));
QString sql="select NAME from STATIONS";
RDSqlQuery *q=new RDSqlQuery(sql);
while(q->next()) {
add_exemplar_box->insertItem(q->value(0).toString());
}
delete q;
}
AddStation::~AddStation()
{
delete add_name_edit;
}
QSize AddStation::sizeHint() const
{
return QSize(380,130);
}
QSizePolicy AddStation::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void AddStation::okData()
{
RDSqlQuery *q;
RDSqlQuery *q1;
QString sql;
if(add_name_edit->text().isEmpty()) {
QMessageBox::warning(this,tr("Invalid Name"),
tr("You must give the host a name!"));
return;
}
if(add_exemplar_box->currentItem()==0) { // Create Blank Host Config
sql=QString().sprintf("insert into STATIONS set NAME=\"%s\",\
DESCRIPTION=\"Workstation %s\",USER_NAME=\"user\",\
DEFAULT_NAME=\"user\"",
(const char *)add_name_edit->text(),
(const char *)add_name_edit->text());
q=new RDSqlQuery(sql);
if(!q->isActive()) {
QMessageBox::warning(this,tr("Host Exists"),tr("Host Already Exists!"),
1,0,0);
delete q;
return;
}
delete q;
//
// Create Service Perms
//
sql="select NAME from SERVICES";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into SERVICE_PERMS set\
SERVICE_NAME=\"%s\",STATION_NAME=\"%s\"",
(const char *)q->value(0).toString(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// RDAirPlay/RDPanel Channel Data
//
for(unsigned i=0;i<10;i++) {
sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
"STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+
QString().sprintf("INSTANCE=%u",i);
q=new RDSqlQuery(sql);
delete q;
sql=QString("insert into RDPANEL_CHANNELS set ")+
"STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+
QString().sprintf("INSTANCE=%u",i);
q=new RDSqlQuery(sql);
delete q;
}
}
else { // Use Specified Config
sql=QString().sprintf("select DEFAULT_NAME,STARTUP_CART,TIME_OFFSET,\
BROADCAST_SECURITY,HEARTBEAT_CART,\
HEARTBEAT_INTERVAL,EDITOR_PATH,FILTER_MODE,\
SYSTEM_MAINT,HTTP_STATION,CAE_STATION from STATIONS\
where NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into STATIONS set NAME=\"%s\",\
DESCRIPTION=\"Workstation %s\",\
USER_NAME=\"%s\",\
DEFAULT_NAME=\"%s\",\
STARTUP_CART=%u,\
TIME_OFFSET=%d,\
BROADCAST_SECURITY=%u,\
HEARTBEAT_CART=%u,\
HEARTBEAT_INTERVAL=%u,\
EDITOR_PATH=\"%s\",\
FILTER_MODE=%d,\
SYSTEM_MAINT=\"%s\",\
HTTP_STATION=\"%s\",\
CAE_STATION=\"%s\"",
(const char *)RDEscapeString(add_name_edit->text()),
(const char *)RDEscapeString(add_name_edit->text()),
(const char *)RDEscapeString(q->value(0).
toString()),
(const char *)RDEscapeString(q->value(0).
toString()),
q->value(1).toUInt(),
q->value(2).toInt(),
q->value(3).toUInt(),
q->value(4).toUInt(),
q->value(5).toUInt(),
(const char *)RDEscapeString(q->value(6).
toString()),
q->value(7).toInt(),
(const char *)q->value(8).toString(),
(const char *)RDEscapeString(q->value(9).
toString()),
(const char *)RDEscapeString(q->value(10).
toString()));
q1=new RDSqlQuery(sql);
if(!q1->isActive()) {
QMessageBox::warning(this,tr("Host Exists"),tr("Host Already Exists!"),
1,0,0);
delete q1;
delete q;
return;
}
delete q1;
}
delete q;
//
// Clone Service Perms
//
sql=QString().sprintf("select SERVICE_NAME from SERVICE_PERMS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into SERVICE_PERMS set\
STATION_NAME=\"%s\",SERVICE_NAME=\"%s\"",
(const char *)add_name_edit->text(),
(const char *)q->value(0).toString());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone RDLibrary Config
//
sql=QString().sprintf("select INPUT_CARD,INPUT_PORT,INPUT_TYPE,\
OUTPUT_CARD,OUTPUT_PORT,VOX_THRESHOLD,\
TRIM_THRESHOLD,DEFAULT_FORMAT,DEFAULT_CHANNELS,\
DEFAULT_SAMPRATE,DEFAULT_LAYER,DEFAULT_BITRATE,\
DEFAULT_RECORD_MODE,DEFAULT_TRIM_STATE,MAXLENGTH,\
TAIL_PREROLL,RIPPER_DEVICE,PARANOIA_LEVEL,\
RIPPER_LEVEL,CDDB_SERVER from RDLIBRARY\
where (STATION=\"%s\")&&(INSTANCE=0)",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into RDLIBRARY set\
INPUT_CARD=%d,INPUT_PORT=%d,INPUT_TYPE=%d,\
OUTPUT_CARD=%d,OUTPUT_PORT=%d,VOX_THRESHOLD=%d,\
TRIM_THRESHOLD=%d,DEFAULT_FORMAT=%u,\
DEFAULT_CHANNELS=%u,DEFAULT_SAMPRATE=%u,\
DEFAULT_LAYER=%u,DEFAULT_BITRATE=%u,\
DEFAULT_RECORD_MODE=%u,DEFAULT_TRIM_STATE=\"%s\",\
MAXLENGTH=%d,TAIL_PREROLL=%u,\
RIPPER_DEVICE=\"%s\",PARANOIA_LEVEL=%d,\
RIPPER_LEVEL=%d,CDDB_SERVER=\"%s\",\
STATION=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
q->value(4).toInt(),
q->value(5).toInt(),
q->value(6).toInt(),
q->value(7).toUInt(),
q->value(8).toUInt(),
q->value(9).toUInt(),
q->value(10).toUInt(),
q->value(11).toUInt(),
q->value(12).toUInt(),
(const char *)q->value(13).toString(),
q->value(14).toInt(),
q->value(15).toUInt(),
(const char *)q->value(16).toString(),
q->value(17).toInt(),
q->value(18).toInt(),
(const char *)q->value(19).toString(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone RDLogEdit Config
//
sql=QString().sprintf("select INPUT_CARD,INPUT_PORT,\
OUTPUT_CARD,OUTPUT_PORT,\
FORMAT,DEFAULT_CHANNELS,\
SAMPRATE,LAYER,BITRATE,MAXLENGTH,\
TAIL_PREROLL,START_CART,END_CART,\
REC_START_CART,REC_END_CART,TRIM_THRESHOLD,\
RIPPER_LEVEL,DEFAULT_TRANS_TYPE from RDLOGEDIT\
where (STATION=\"%s\")",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into RDLOGEDIT set\
INPUT_CARD=%d,INPUT_PORT=%d,\
OUTPUT_CARD=%d,OUTPUT_PORT=%d,\
FORMAT=%u,\
DEFAULT_CHANNELS=%u,SAMPRATE=%u,\
LAYER=%u,BITRATE=%u,\
MAXLENGTH=%d,TAIL_PREROLL=%u,\
STATION=\"%s\",\
START_CART=%u,\
END_CART=%d,\
REC_START_CART=%u,\
REC_END_CART=%u,\
TRIM_THRESHOLD=%d,\
RIPPER_LEVEL=%d,\
DEFAULT_TRANS_TYPE=%d",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
q->value(4).toUInt(),
q->value(5).toUInt(),
q->value(6).toUInt(),
q->value(7).toUInt(),
q->value(8).toUInt(),
q->value(9).toInt(),
q->value(10).toUInt(),
(const char *)add_name_edit->text(),
q->value(11).toUInt(),
q->value(12).toUInt(),
q->value(13).toUInt(),
q->value(14).toUInt(),
q->value(15).toInt(),
q->value(16).toInt(),
q->value(17).toInt());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone RDCatch Config
//
sql=QString().sprintf("select CHANNEL,CARD_NUMBER,PORT_NUMBER,\
MON_PORT_NUMBER,PORT_TYPE,DEFAULT_FORMAT,\
DEFAULT_CHANNELS,DEFAULT_SAMPRATE,DEFAULT_BITRATE,\
DEFAULT_THRESHOLD,DEFAULT_MONITOR_ON from DECKS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into DECKS set\
CHANNEL=%u,CARD_NUMBER=%d,PORT_NUMBER=%d,\
MON_PORT_NUMBER=%d,PORT_TYPE=\"%s\",\
DEFAULT_FORMAT=%d,DEFAULT_CHANNELS=%d,\
DEFAULT_SAMPRATE=%d,DEFAULT_BITRATE=%d,\
DEFAULT_THRESHOLD=%d,STATION_NAME=\"%s\",\
DEFAULT_MONITOR_ON=\"%s\"",
q->value(0).toUInt(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
(const char *)q->value(4).toString(),
q->value(5).toInt(),
q->value(6).toInt(),
q->value(7).toInt(),
q->value(8).toInt(),
q->value(9).toInt(),
(const char *)add_name_edit->text(),
(const char *)q->value(10).toString());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone RDAirPlay Config
//
sql=QString().sprintf("select SEGUE_LENGTH,\
TRANS_LENGTH,OP_MODE,START_MODE,PIE_COUNT_LENGTH,\
PIE_COUNT_ENDPOINT,CHECK_TIMESYNC,STATION_PANELS,\
USER_PANELS,SHOW_AUX_1,SHOW_AUX_2,CLEAR_FILTER,\
DEFAULT_TRANS_TYPE,BAR_ACTION,FLASH_PANEL,\
PAUSE_ENABLED,UDP_ADDR0,UDP_PORT0,UDP_STRING0,\
UDP_ADDR1,UDP_PORT1,UDP_STRING1,UDP_ADDR2,\
UDP_PORT2,UDP_STRING2,DEFAULT_SERVICE,\
LOG_RML0,LOG_RML1,LOG_RML2,\
BUTTON_LABEL_TEMPLATE,EXIT_PASSWORD from RDAIRPLAY \
where (STATION=\"%s\")",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into RDAIRPLAY set\
SEGUE_LENGTH=%d,TRANS_LENGTH=%d,OP_MODE=%d,\
START_MODE=%d,PIE_COUNT_LENGTH=%d,\
PIE_COUNT_ENDPOINT=%d,CHECK_TIMESYNC=\"%s\",\
STATION_PANELS=%d,USER_PANELS=%d,\
SHOW_AUX_1=\"%s\",SHOW_AUX_2=\"%s\",\
CLEAR_FILTER=\"%s\",DEFAULT_TRANS_TYPE=%u,\
BAR_ACTION=%u,FLASH_PANEL=\"%s\",\
PAUSE_ENABLED=\"%s\",\
UDP_ADDR0=\"%s\",UDP_PORT0=%u,UDP_STRING0=\"%s\",\
UDP_ADDR1=\"%s\",UDP_PORT1=%u,UDP_STRING1=\"%s\",\
UDP_ADDR2=\"%s\",UDP_PORT2=%u,UDP_STRING2=\"%s\",\
STATION=\"%s\",DEFAULT_SERVICE=\"%s\",\
LOG_RML0=\"%s\",\
LOG_RML1=\"%s\",\
LOG_RML2=\"%s\",\
BUTTON_LABEL_TEMPLATE=\"%s\",\
EXIT_PASSWORD=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
q->value(4).toInt(),
q->value(5).toInt(),
(const char *)q->value(6).toString(),
q->value(7).toInt(),
q->value(8).toInt(),
(const char *)q->value(9).toString(),
(const char *)q->value(10).toString(),
(const char *)q->value(11).toString(),
q->value(12).toUInt(),
q->value(13).toUInt(),
(const char *)q->value(14).toString(),
(const char *)q->value(15).toString(),
(const char *)q->value(16).toString(),
q->value(17).toUInt(),
(const char *)q->value(18).toString(),
(const char *)q->value(19).toString(),
q->value(20).toUInt(),
(const char *)q->value(21).toString(),
(const char *)q->value(22).toString(),
q->value(23).toUInt(),
(const char *)q->value(24).toString(),
(const char *)add_name_edit->text(),
(const char *)q->value(25).toString(),
(const char *)q->value(26).toString(),
(const char *)q->value(27).toString(),
(const char *)q->value(28).toString(),
(const char *)q->value(29).toString(),
(const char *)q->value(30).toString());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
sql=QString("select INSTANCE,CARD,PORT,START_RML,STOP_RML,")+
"START_GPI_MATRIX,"+
"START_GPI_LINE,START_GPO_MATRIX,START_GPO_LINE,STOP_GPI_MATRIX,"+
"STOP_GPI_LINE,STOP_GPO_MATRIX,STOP_GPO_LINE from RDAIRPLAY_CHANNELS "+
"where STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+
"\"";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into RDAIRPLAY_CHANNELS set ")+
"STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+
QString().sprintf("INSTANCE=%u,",q->value(0).toUInt())+
QString().sprintf("CARD=%d,",q->value(1).toInt())+
QString().sprintf("PORT=%d,",q->value(2).toInt())+
"START_RML=\""+RDEscapeString(q->value(3).toString())+"\","+
"STOP_RML=\""+RDEscapeString(q->value(4).toString())+"\","+
QString().sprintf("START_GPI_MATRIX=%d,",q->value(5).toInt())+
QString().sprintf("START_GPI_LINE=%d,",q->value(6).toInt())+
QString().sprintf("START_GPO_MATRIX=%d,",q->value(7).toInt())+
QString().sprintf("START_GPO_LINE=%d,",q->value(8).toInt())+
QString().sprintf("STOP_GPI_MATRIX=%d,",q->value(9).toInt())+
QString().sprintf("STOP_GPI_LINE=%d,",q->value(10).toInt())+
QString().sprintf("STOP_GPO_MATRIX=%d,",q->value(11).toInt())+
QString().sprintf("STOP_GPO_LINE=%d",q->value(12).toInt());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone RDPanel Config
//
sql=QString().sprintf("select STATION_PANELS,\
USER_PANELS,CLEAR_FILTER,\
FLASH_PANEL,\
DEFAULT_SERVICE,\
BUTTON_LABEL_TEMPLATE from RDPANEL \
where (STATION=\"%s\")",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString().sprintf("insert into RDPANEL set\
STATION_PANELS=%d,\
USER_PANELS=%d,\
CLEAR_FILTER=\"%s\",\
FLASH_PANEL=\"%s\",\
STATION=\"%s\",\
DEFAULT_SERVICE=\"%s\",\
BUTTON_LABEL_TEMPLATE=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
(const char *)q->value(2).toString(),
(const char *)q->value(3).toString(),
(const char *)add_name_edit->text(),
(const char *)q->value(4).toString(),
(const char *)q->value(5).toString());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
sql=QString("select INSTANCE,CARD,PORT,START_RML,STOP_RML,")+
"START_GPI_MATRIX,"+
"START_GPI_LINE,START_GPO_MATRIX,START_GPO_LINE,STOP_GPI_MATRIX,"+
"STOP_GPI_LINE,STOP_GPO_MATRIX,STOP_GPO_LINE from RDPANEL_CHANNELS "+
"where STATION_NAME=\""+RDEscapeString(add_exemplar_box->currentText())+
"\"";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString("insert into RDPANEL_CHANNELS set ")+
"STATION_NAME=\""+RDEscapeString(add_name_edit->text())+"\","+
QString().sprintf("INSTANCE=%u,",q->value(0).toUInt())+
QString().sprintf("CARD=%d,",q->value(1).toInt())+
QString().sprintf("PORT=%d,",q->value(2).toInt())+
"START_RML=\""+RDEscapeString(q->value(3).toString())+"\","+
"STOP_RML=\""+RDEscapeString(q->value(4).toString())+"\","+
QString().sprintf("START_GPI_MATRIX=%d,",q->value(5).toInt())+
QString().sprintf("START_GPI_LINE=%d,",q->value(6).toInt())+
QString().sprintf("START_GPO_MATRIX=%d,",q->value(7).toInt())+
QString().sprintf("START_GPO_LINE=%d,",q->value(8).toInt())+
QString().sprintf("STOP_GPI_MATRIX=%d,",q->value(9).toInt())+
QString().sprintf("STOP_GPI_LINE=%d,",q->value(10).toInt())+
QString().sprintf("STOP_GPO_MATRIX=%d,",q->value(11).toInt())+
QString().sprintf("STOP_GPO_LINE=%d",q->value(12).toInt());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Audio Port Settings
//
sql="select CARD_NUMBER,CLOCK_SOURCE,";
for(int i=0;i<RD_MAX_PORTS;i++) {
sql+=QString().sprintf("INPUT_%d_LEVEL,INPUT_%d_MODE,INPUT_%d_TYPE,\
OUTPUT_%d_LEVEL,",
i,i,i,i);
}
sql=sql.left(sql.length()-1);
sql+=QString().sprintf(" from AUDIO_PORTS where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into AUDIO_PORTS set\
CARD_NUMBER=%u,CLOCK_SOURCE=%d,\
STATION_NAME=\"%s\",",
q->value(0).toUInt(),
q->value(1).toInt(),
(const char *)add_name_edit->text());
for(int i=0;i<RD_MAX_PORTS;i++) {
sql+=QString().sprintf("INPUT_%d_LEVEL=%d,INPUT_%d_MODE=%d,\
INPUT_%d_TYPE=%d,OUTPUT_%d_LEVEL=%d,",
i,q->value(2+3*i).toInt(),
i,q->value(3+3*i).toInt(),
i,q->value(4+3*i).toInt(),
i,q->value(5+3*i).toInt());
}
sql=sql.left(sql.length()-1);
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone the Serial Setups
//
sql=QString().sprintf("select PORT_ID,ACTIVE,PORT,BAUD_RATE,DATA_BITS,\
STOP_BITS,PARITY,TERMINATION from TTYS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into TTYS set\
PORT_ID=%u,ACTIVE=\"%s\",PORT=\"%s\",\
BAUD_RATE=%d,DATA_BITS=%d,STOP_BITS=%d,\
PARITY=%d,TERMINATION=%d,STATION_NAME=\"%s\"",
q->value(0).toUInt(),
(const char *)q->value(1).toString(),
(const char *)q->value(2).toString(),
q->value(3).toInt(),
q->value(4).toInt(),
q->value(5).toInt(),
q->value(6).toInt(),
q->value(7).toInt(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Matrices
//
sql=QString().sprintf("select NAME,MATRIX,TYPE,PORT_TYPE,CARD,PORT,\
IP_ADDRESS,IP_PORT,USERNAME,PASSWORD,GPIO_DEVICE,\
INPUTS,OUTPUTS,GPIS,GPOS,DISPLAYS,FADERS,\
PORT_TYPE_2,PORT_2,IP_ADDRESS_2,IP_PORT_2,\
USERNAME_2,PASSWORD_2 \
from MATRICES where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into MATRICES set\
NAME=\"%s\",MATRIX=%d,TYPE=%d,PORT_TYPE=%d,\
CARD=%d,PORT=%d,IP_ADDRESS=\"%s\",IP_PORT=%d,\
USERNAME=\"%s\",PASSWORD=\"%s\",\
GPIO_DEVICE=\"%s\",INPUTS=%d,OUTPUTS=%d,GPIS=%d,\
GPOS=%d,DISPLAYS=%d,STATION_NAME=\"%s\",\
FADERS=%d,PORT_TYPE_2=%d,PORT_2=%d,\
IP_ADDRESS_2=\"%s\",IP_PORT_2=%d,\
USERNAME_2=\"%s\",PASSWORD_2=\"%s\"",
(const char *)q->value(0).toString(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
q->value(4).toInt(),
q->value(5).toInt(),
(const char *)q->value(6).toString(),
q->value(7).toInt(),
(const char *)q->value(8).toString(),
(const char *)q->value(9).toString(),
(const char *)q->value(10).toString(),
q->value(11).toInt(),
q->value(12).toInt(),
q->value(13).toInt(),
q->value(14).toInt(),
q->value(15).toInt(),
(const char *)add_name_edit->text(),
q->value(16).toInt(),
q->value(17).toInt(),
q->value(18).toInt(),
(const char *)q->value(19).toString(),
q->value(20).toInt(),
(const char *)q->value(21).toString(),
(const char *)q->value(22).toString());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Matrix Inputs
//
sql=QString().sprintf("select MATRIX,NUMBER,NAME,FEED_NAME,CHANNEL_MODE,\
ENGINE_NUM,DEVICE_NUM from INPUTS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into INPUTS set\
MATRIX=%d,NUMBER=%d,NAME=\"%s\",FEED_NAME=\"%s\",\
CHANNEL_MODE=%d,ENGINE_NUM=%d,DEVICE_NUM=%d,\
STATION_NAME=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
(const char *)q->value(2).toString(),
(const char *)q->value(3).toString(),
q->value(4).toInt(),
q->value(5).toInt(),
q->value(6).toInt(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Matrix Outputs
//
sql=QString().sprintf("select MATRIX,NUMBER,NAME,\
ENGINE_NUM,DEVICE_NUM from OUTPUTS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into OUTPUTS set\
MATRIX=%d,NUMBER=%d,NAME=\"%s\",\
ENGINE_NUM=%d,DEVICE_NUM=%d,\
STATION_NAME=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
(const char *)q->value(2).toString(),
q->value(3).toInt(),
q->value(4).toInt(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone GPIs
//
sql=QString().sprintf("select MATRIX,NUMBER,MACRO_CART from GPIS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into GPIS set\
MATRIX=%d,NUMBER=%d,MACRO_CART=%d,\
STATION_NAME=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Close vGuest Settings
//
sql=QString().sprintf("select MATRIX_NUM,VGUEST_TYPE,NUMBER,ENGINE_NUM,\
DEVICE_NUM,SURFACE_NUM,RELAY_NUM,BUSS_NUM\
from VGUEST_RESOURCES where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into VGUEST_RESOURCES set\
MATRIX_NUM=%d,VGUEST_TYPE=%d,NUMBER=%d,\
ENGINE_NUM=%d,DEVICE_NUM=%d,SURFACE_NUM=%d,\
RELAY_NUM=%d,BUSS_NUM=%d,STATION_NAME=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
q->value(3).toInt(),
q->value(4).toInt(),
q->value(5).toInt(),
q->value(6).toInt(),
q->value(7).toInt(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Host Variables
//
sql=QString().sprintf("select NAME,VARVALUE,REMARK from HOSTVARS\
where STATION_NAME=\"%s\"",
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into HOSTVARS set\
NAME=\"%s\",VARVALUE=\"%s\",REMARK=\"%s\",\
STATION_NAME=\"%s\"",
(const char *)q->value(0).toString(),
(const char *)q->value(1).toString(),
(const char *)q->value(2).toString(),
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone System Panels
//
sql=QString().sprintf("select PANEL_NO,ROW_NO,COLUMN_NO,LABEL,CART,\
DEFAULT_COLOR from PANELS where \
(TYPE=%d && OWNER=\"%s\")",
RDAirPlayConf::StationPanel,
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into PANELS set PANEL_NO=%d,ROW_NO=%d,\
COLUMN_NO=%d,LABEL=\"%s\",CART=%u,\
DEFAULT_COLOR=\"%s\",TYPE=%d,OWNER=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
(const char *)q->value(3).toString(),
q->value(4).toUInt(),
(const char *)q->value(5).toString(),
RDAirPlayConf::StationPanel,
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
sql=QString().sprintf("select PANEL_NO,ROW_NO,COLUMN_NO,LABEL,CART,\
DEFAULT_COLOR from EXTENDED_PANELS where \
(TYPE=%d && OWNER=\"%s\")",
RDAirPlayConf::StationPanel,
(const char *)add_exemplar_box->currentText());
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into EXTENDED_PANELS set PANEL_NO=%d,\
ROW_NO=%d,COLUMN_NO=%d,LABEL=\"%s\",CART=%u,\
DEFAULT_COLOR=\"%s\",TYPE=%d,OWNER=\"%s\"",
q->value(0).toInt(),
q->value(1).toInt(),
q->value(2).toInt(),
(const char *)q->value(3).toString(),
q->value(4).toUInt(),
(const char *)q->value(5).toString(),
RDAirPlayConf::StationPanel,
(const char *)add_name_edit->text());
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
//
// Clone Encoders
//
sql=QString().sprintf("select ID,NAME,COMMAND_LINE from ENCODERS \
where STATION_NAME=\"%s\"",
(const char *)RDEscapeString(add_exemplar_box->
currentText()));
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().
sprintf("insert into ENCODERS set NAME=\"%s\",\
COMMAND_LINE=\"%s\",STATION_NAME=\"%s\"",
(const char *)RDEscapeString(q->value(1).toString()),
(const char *)RDEscapeString(q->value(2).toString()),
(const char *)RDEscapeString(add_name_edit->text()));
q1=new RDSqlQuery(sql);
delete q1;
sql=QString().
sprintf("select ID from ENCODERS \
where (NAME=\"%s\")&&(STATION_NAME=\"%s\")",
(const char *)RDEscapeString(q->value(1).toString()),
(const char *)RDEscapeString(add_name_edit->text()));
q1=new RDSqlQuery(sql);
if(q1->first()) {
CloneEncoderValues("CHANNELS",q->value(0).toInt(),q1->value(0).toInt());
CloneEncoderValues("SAMPLERATES",q->value(0).toInt(),
q1->value(0).toInt());
CloneEncoderValues("BITRATES",q->value(0).toInt(),q1->value(0).toInt());
}
delete q1;
}
delete q;
//
// Clone Hotkeys
//
sql=QString().sprintf("select MODULE_NAME,KEY_ID,KEY_VALUE,KEY_LABEL\
from RDHOTKEYS where STATION_NAME=\"%s\"",
(const char *)RDEscapeString(add_exemplar_box->currentText()));
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into RDHOTKEYS set \
MODULE_NAME=\"%s\",\
KEY_ID=%d,\
KEY_VALUE=\"%s\",\
KEY_LABEL=\"%s\",\
STATION_NAME=\"%s\"",
(const char *)RDEscapeString(q->value(0).
toString()),
q->value(1).toInt(),
(const char *)RDEscapeString(q->value(2).
toString()),
(const char *)RDEscapeString(q->value(3).
toString()),
(const char *)RDEscapeString(add_name_edit->
text()));
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
}
*add_name=add_name_edit->text();
EditStation *station=new EditStation(add_name_edit->text(),this,"station");
int res=station->exec();
delete station;
done(res);
}
void AddStation::cancelData()
{
done(-1);
}
void AddStation::CloneEncoderValues(const QString &paramname,
int src_id,int dest_id)
{
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
sql=QString().sprintf("select %s from ENCODER_%s where ENCODER_ID=%d",
(const char *)RDEscapeString(paramname),
(const char *)RDEscapeString(paramname),
src_id);
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("insert into ENCODER_%s set %s=%d,ENCODER_ID=%d",
(const char *)RDEscapeString(paramname),
(const char *)RDEscapeString(paramname),
q->value(0).toInt(),
dest_id);
q1=new RDSqlQuery(sql);
delete q1;
}
delete q;
}