/*******************************************************************************
* Gui.cc TapeSigGen Gui
* T.Barnaby, BEAM Ltd, 2006-1-30
*******************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <Gui.h>
#include <qpopupmenu.h>
#include <qaction.h>
#include <qmenubar.h>
#include <qfiledialog.h>
#include <qvbox.h>
#include <qframe.h>
#include <qgrid.h>
#include <qlineedit.h>
#include <qgroupbox.h>
#include <qmessagebox.h>
Gui::Gui() : otests(testsInit()){
otest = 0;
}
Gui::~Gui(){
}
void Gui::initMenubar(){
QPopupMenu* m;
QAction* a;
m = new QPopupMenu();
a = addAction(m, tr("Quit"), tr("&Quit"), tr("Ctrl+Q"), SLOT(slotQuit()), tr("Quits the application"));
menuBar()->insertItem(tr("&File"), m);
menuBar( )->insertSeparator(-1);
m = new QPopupMenu();
a = addAction(m, tr("Manual"), tr("&Manual"), tr("Ctrl+M"), SLOT(manual()), tr("Online Manual"));
a = addAction(m, tr("About"), tr("&About"), tr("Ctrl+A"), SLOT(about()), tr("About the program"));
menuBar()->insertItem(tr("&Help"), m);
// setMinimumSize(QSize(1024,850));
}
void Gui::initMain(){
BError err;
QFont font;
QVBox* vbox;
QGroupBox* g;
QWidget* w;
BIter i;
font = qApp->font();
font.setPointSize(10);
qApp->setFont(font, true);
vbox = new QVBox(this);
// Settings
g = new QGroupBox(4, Horizontal, "Settings", vbox);
g->setFrameStyle(QFrame::Panel | QFrame::Sunken);
g->setLineWidth(2);
w = new QLabel("Type", g);
owtype = new QComboBox(g);
connect(owtype, SIGNAL(activated(const QString&)), this, SLOT(update()));
for(otests.start(i); !otests.isEnd(i); otests.next(i)){
owtype->insertItem(otests[i]->name().retStr());
}
w = new QLabel("Sample Frequency", g);
owsampleFreq = new QLineEdit("150000000.0", g);
owsampleFreq->setReadOnly(1);
w = new QLabel("Signal Amplitude", g);
owsignalAmplitude = new QLineEdit("1.0", g);
// Info box
g = new QGroupBox(1, Horizontal, "Info", vbox);
g->setFrameStyle(QFrame::Panel | QFrame::Sunken);
g->setLineWidth(2);
owinfo = new QTextEdit(g);
owinfo->setReadOnly(1);
owinfo->setMinimumHeight(50);
// Control buttons
g = new QGroupBox(2, Horizontal, "Controls", vbox);
g->setFrameStyle(QFrame::Panel | QFrame::Sunken);
g->setLineWidth(2);
owstartButton = new QPushButton("Start", g);
connect(owstartButton, SIGNAL(clicked()), this, SLOT(startTest()));
owstopButton = new QPushButton("Stop", g);
connect(owstopButton, SIGNAL(clicked()), this, SLOT(stopTest()));
setCentralWidget(vbox);
update();
owstartButton->setEnabled(true);
owstopButton->setEnabled(false);
}
void Gui::initToolbar(){
}
void Gui::manual(){
system("firefox /usr/tms/doc/index.html&");
}
void Gui::about(){
BString title = "<h3>TmsSigGenGui</h3>";
BString msg;
msg = title + "<p>© BEAM Ltd 2007</p><p>TMS Signal Generator Version: " + VERSION + "</p>";
QMessageBox::information(this, "About", msg.retStr());
}
void* Gui::function(){
BError err;
if(err = otest->run()){
BString msg = BString("Test init error: ") + err.getString();
fprintf(stderr, "%s\n", msg.retStr());
QMessageBox::warning(this, "Error", msg.retStr());
}
return 0;
}
void Gui::startTest(){
BError err;
TestParams params;
// printf("Start\n");
params.setValue("samplerate", owsampleFreq->text().ascii());
params.setValue("amplitude", owsignalAmplitude->text().ascii());
params.setValue("fref", "437000");
params.setValue("cycleStartPhase", "45");
if(err = otest->init(params)){
BString msg = BString("Test init error: ") + err.getString();
fprintf(stderr, "%s\n", msg.retStr());
QMessageBox::warning(this, "Error", msg.retStr());
return;
}
owstartButton->setEnabled(false);
owstopButton->setEnabled(true);
start();
}
void Gui::stopTest(){
// printf("Stop\n");
cancel();
waitForCompletion();
otest->close();
owstartButton->setEnabled(true);
owstopButton->setEnabled(false);
}
void Gui::update(){
BError err;
BIter i;
BString s;
// printf("Update\n");
for(otests.start(i); !otests.isEnd(i); otests.next(i)){
s = owtype->currentText().ascii();
if(s.toLower() == otests[i]->name().toLower()){
otest = otests[i];
break;
}
}
if(otest == 0){
QMessageBox::warning(this, "Error", "Test not found");
return;
}
else {
owinfo->setText(otest->info().retStr());
}
}