/* * Title: ConfigureWin.cpp * Author: M.Thomas BEAM Ltd * Date: 2007-02-13 * * Contents: Configuration Data entry and control window * * Mod Rec: * */ #include <ConfigureWin.h> #include <qlayout.h> #include <qlabel.h> #include <qpushbutton.h> #include <qvgroupbox.h> #include <TmsD.h> #include <BFile.h> #include <qlayout.h> #include <qmessagebox.h> #include <Globals.h> const int virtualChannels = 50; const int moduleNumCol = 1; const int pupeNumCol = 2; const int pupeChanCol = 3; ConfigureWin::ConfigureWin(QWidget* w,Control& c) : ocontrol(c) { BString s; QPushButton* reconfigButton; QPushButton* addButton; QPushButton* delButton; QLabel* label; QGridLayout* gridLayout; QString title0("Virtual Channel"); QString title1("Module Number"); QString title2("Pupe Number"); QString title3("Pupe Channel"); gridLayout = new QGridLayout(this,3,5); label = new QLabel(this,"explanation"); opuParams = new QTable(this,"table"); //Qt3.3 Bug ? // QHBox* h = new QHBox(this,""); // reconfigButton = new QPushButton("Reconfigure",this,"reconfigure"); // addButton = new QPushButton("Add Channel",this,"add"); reconfigButton = new QPushButton("Reconfigure",this,"reconfigure"); addButton = new QPushButton("Add Channel",this,"add"); delButton = new QPushButton("Delete Last Channel",this,"addl"); reconfigButton->setMaximumWidth(200); addButton->setMaximumWidth(200); gridLayout->addItem(new QSpacerItem(50,10),0,0); gridLayout->addWidget(label,0,1); gridLayout->addItem(new QSpacerItem(60,10),1,0); gridLayout->addWidget(opuParams,1,1); gridLayout->addItem(new QSpacerItem(60,10),1,2); //Qt3.3 Bug ? // gridLayout->addMultiCellWidget(h,2,2,0,5); // gridLayout->addMultiCellWidget(reconfigButton,2,2,0,1); // gridLayout->addMultiCellWidget(addButton,2,2,2,3); // gridLayout->addMultiCellWidget(delButton,2,2,4,5); gridLayout->addWidget(reconfigButton,2,0); gridLayout->addWidget(addButton,2,1); gridLayout->addWidget(delButton,2,2); gridLayout->setSpacing(20); gridLayout->setMargin(20); opuParams->setNumCols(4); opuParams->horizontalHeader()->setLabel( 0,title0); opuParams->horizontalHeader()->setLabel( 1,title1); opuParams->horizontalHeader()->setLabel( 2,title2); opuParams->horizontalHeader()->setLabel( 3,title3); opuParams->setColumnReadOnly(0,true); opuParams->verticalHeader()->hide(); opuParams->setLeftMargin(0); opuParams->setColumnWidth(0,this->fontMetrics().width(title0) + 30); opuParams->setColumnWidth(1,this->fontMetrics().width(title1) + 30); opuParams->setColumnWidth(2,this->fontMetrics().width(title2) + 30); opuParams->setColumnWidth(3,this->fontMetrics().width(title3) + 30); opuParams->setFixedWidth(500); opuParams->setColumnStretchable(2,true); s = "<p><b>Mapping of Virtual Channel to Pickups<b></p>"; s += "<p>Enter the module number, pickup number and pickup channel to be associated with a virtual channel</p>"; label->setText(s.retStr()); readConfig(); connect(reconfigButton,SIGNAL(clicked()),this,SLOT(reconfigure())); connect(addButton,SIGNAL(clicked()),this,SLOT(addChannel())); connect(delButton,SIGNAL(clicked()),this,SLOT(delChannel())); connect(&ocontrol,SIGNAL(newConnection()),this,SLOT(update())); } ConfigureWin::~ConfigureWin() {} void ConfigureWin::update() { if (! isVisible()) return; readConfig(); } void ConfigureWin::show() { update(); QWidget::show(); } void ConfigureWin::readConfig() { BError err; unsigned int n; Tms::ConfigInfo info; QString s; if (err = ocontrol.getConfiguration(info)) { //Expected if no connection return; } opuParams->setNumRows(info.puReferences.size()); for (n = 0;n < info.puReferences.size();n++) { Tms::PuChannel c; BString moduleNum = info.puReferences[n].moduleNum; BString pupeNum = info.puReferences[n].pupeNum; BString pupeChan = info.puReferences[n].pupeChan; s.setNum(n + 1); opuParams->setText(n,0,s); opuParams->setText(n,1,moduleNum.retStr()); opuParams->setText(n,2,pupeNum.retStr()); opuParams->setText(n,3,pupeChan.retStr()); } } void ConfigureWin::reconfigure() { BError err; int n; Tms::ConfigInfo config; for (n = 0;n < opuParams->numRows();n++) { Tms::PuChannel c; c.moduleNum = opuParams->text(n,1).toUInt(); c.pupeNum = opuParams->text(n,2).toUInt(); c.pupeChan = opuParams->text(n,3).toUInt(); config.puReferences.push_back(c); } if (err = ocontrol.reconfigure(config)) { warningDialog("Channel Configuation",err); return; } gstatusbar->message("Channels Reconfigured",2000); } void ConfigureWin::addChannel(){ QString s; int index; opuParams->insertRows(opuParams->numRows(),1); s.setNum(opuParams->numRows()); index = opuParams->numRows() - 1; opuParams->setText(index,0,s); opuParams->setText(index,1,"0"); opuParams->setText(index,2,"0"); opuParams->setText(index,3,"0"); opuParams->setCurrentCell(index,1); } void ConfigureWin::delChannel(){ opuParams->removeRow(opuParams->numRows() - 1); } void ConfigureWin::warningDialog(BString title, BError err){ BString m; m = BString("<h5>") + title + "</h5><p>" + err.getString() + "</p>"; QMessageBox::warning(this, "Warning", m.retStr()); }