#include "asmpage.h" ASMPage::ASMPage(QWidget *parent, unsigned int bufferSize, unsigned int xMAX, unsigned int yMAX) : QMainWindow(parent) { unsigned int i; localBufferSize = bufferSize; // memory allocation of the data buffer dataBuffer = (QByteArray**) malloc( localBufferSize * sizeof(QByteArray*) ); for (i=0; icustomPlot->setTitle("b1b1"); wfPlot_asm_b2b2->customPlot->setTitle("b2b2"); wfPlot_asm_b3b3->customPlot->setTitle("b3b3"); wfPlot_asm_e1e1->customPlot->setTitle("e1e1"); wfPlot_asm_e2e2->customPlot->setTitle("e2e2"); dockB1B1 = NULL; dockB2B2 = NULL; dockB3B3 = NULL; dockE1E1 = NULL; dockE2E2 = NULL; titleWidgetB1B1 = new QWidget(); titleWidgetB2B2 = new QWidget(); titleWidgetB3B3 = new QWidget(); titleWidgetE1E1 = new QWidget(); titleWidgetE2E2 = new QWidget(); logFileName = new QLabel(); logFile = new QFile(); logFileEn = false; storageEnabled = false; allowDataStorage = false; createToolBar(); } ASMPage::~ASMPage() { unsigned int i; // deallocation of the data buffer for (i=0; isetAutoExclusive(false); radio_b2b2->setAutoExclusive(false); radio_b3b3->setAutoExclusive(false); radio_e1e1->setAutoExclusive(false); radio_e2e2->setAutoExclusive(false); radio_tabify->setAutoExclusive(false); button_selectAll = new QPushButton(tr("select all")); label_storeWfrm = new QLabel("-"); myToolBar = new QToolBar("select"); myToolBar->addWidget(radio_b1b1); myToolBar->addWidget(radio_b2b2); myToolBar->addWidget(radio_b3b3); myToolBar->addWidget(radio_e1e1); myToolBar->addWidget(radio_e2e2); myToolBar->addSeparator(); myToolBar->addWidget(button_selectAll); myToolBar->addWidget(radio_tabify); myToolBar->addSeparator(); myToolBar->addWidget(label_storeWfrm); addToolBar(Qt::LeftToolBarArea, myToolBar); radio_tabify->setChecked(true); connect(this->radio_b1b1, SIGNAL(clicked(bool)), this, SLOT(actionRadioB1B1(bool))); connect(this->radio_b2b2, SIGNAL(clicked(bool)), this, SLOT(actionRadioB2B2(bool))); connect(this->radio_b3b3, SIGNAL(clicked(bool)), this, SLOT(actionRadioB3B3(bool))); connect(this->radio_e1e1, SIGNAL(clicked(bool)), this, SLOT(actionRadioE1E1(bool))); connect(this->radio_e2e2, SIGNAL(clicked(bool)), this, SLOT(actionRadioE2E2(bool))); connect(this->button_selectAll, SIGNAL(clicked()), this, SLOT(selectAll())); connect(this->radio_tabify, SIGNAL(clicked(bool)), this, SLOT(organizeDocks())); } void ASMPage::actionRadioB1B1(bool state) { if (state == true) { if (dockB1B1 == NULL) { dockB1B1 = new QDockWidget("B1B1", this); dockB1B1->setWidget(wfPlot_asm_b1b1); dockB1B1->setTitleBarWidget(titleWidgetB1B1); } } else { this->removeDockWidget(dockB1B1); } organizeDocks(); } void ASMPage::actionRadioB2B2(bool state) { if (state == true) { if (dockB2B2 == NULL) { dockB2B2 = new QDockWidget("B2B2", this); dockB2B2->setWidget(wfPlot_asm_b2b2); dockB2B2->setTitleBarWidget(titleWidgetB2B2); } } else { this->removeDockWidget(dockB2B2); } organizeDocks(); } void ASMPage::actionRadioB3B3(bool state) { if (state == true) { if (dockB3B3 == NULL) { dockB3B3 = new QDockWidget("B3B3", this); dockB3B3->setWidget(wfPlot_asm_b3b3); dockB3B3->setTitleBarWidget(titleWidgetB3B3); } } else { this->removeDockWidget(dockB3B3); } organizeDocks(); } void ASMPage::actionRadioE1E1(bool state) { if (state == true) { if (dockE1E1 == NULL) { dockE1E1 = new QDockWidget("E1E1", this); dockE1E1->setWidget(wfPlot_asm_e1e1); dockE1E1->setTitleBarWidget(titleWidgetE1E1); } } else { this->removeDockWidget(dockE1E1); } organizeDocks(); } void ASMPage::actionRadioE2E2(bool state) { if (state == true) { if (dockE2E2 == NULL) { dockE2E2 = new QDockWidget("E2E2", this); dockE2E2->setWidget(wfPlot_asm_e2e2); dockE2E2->setTitleBarWidget(titleWidgetE2E2); } } else { this->removeDockWidget(dockE2E2); } organizeDocks(); } void ASMPage::buildDockList() { dockList.clear(); if (radio_b1b1->isChecked()) { dockList.append(dockB1B1); removeDockWidget(dockB1B1); } if (radio_b2b2->isChecked()) { dockList.append(dockB2B2); removeDockWidget(dockB2B2); } if (radio_b3b3->isChecked()) { dockList.append(dockB3B3); removeDockWidget(dockB3B3); } if (radio_e1e1->isChecked()) { dockList.append(dockE1E1); removeDockWidget(dockE1E1); } if (radio_e2e2->isChecked()) { dockList.append(dockE2E2); removeDockWidget(dockE2E2); } } void ASMPage::organizeDocks() { if (radio_tabify->isChecked()) { tabify(); } else { unTabify(); } wfPlot_asm_b1b1->resize(wfPlot_asm_b1b1->minimumSizeHint()); wfPlot_asm_b2b2->resize(wfPlot_asm_b2b2->minimumSizeHint()); wfPlot_asm_b3b3->resize(wfPlot_asm_b3b3->minimumSizeHint()); wfPlot_asm_e1e1->resize(wfPlot_asm_e1e1->minimumSizeHint()); wfPlot_asm_e2e2->resize(wfPlot_asm_e2e2->minimumSizeHint()); this->resize(this->minimumSizeHint()); } void ASMPage::unTabify() { buildDockList(); switch(dockList.size()) { case 0: break; case 1: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); dockList.at(0)->show(); break; case 2: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); addDockWidget(Qt::TopDockWidgetArea, dockList.at(1)); dockList.at(0)->show(); dockList.at(1)->show(); break; case 3: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); addDockWidget(Qt::TopDockWidgetArea, dockList.at(1)); addDockWidget(Qt::BottomDockWidgetArea, dockList.at(2)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); break; case 4: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); addDockWidget(Qt::TopDockWidgetArea, dockList.at(1)); addDockWidget(Qt::BottomDockWidgetArea, dockList.at(2)); addDockWidget(Qt::BottomDockWidgetArea, dockList.at(3)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); dockList.at(3)->show(); break; case 5: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); addDockWidget(Qt::TopDockWidgetArea, dockList.at(1)); addDockWidget(Qt::TopDockWidgetArea, dockList.at(2)); addDockWidget(Qt::BottomDockWidgetArea, dockList.at(3)); addDockWidget(Qt::BottomDockWidgetArea, dockList.at(4)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); dockList.at(3)->show(); dockList.at(4)->show(); break; default: break; } } void ASMPage::tabify() { buildDockList(); switch(dockList.size()) { case 0: break; case 1: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); dockList.at(0)->show(); break; case 2: addDockWidget(Qt::TopDockWidgetArea, dockList.at(0)); tabifyDockWidget(dockList.at(0), dockList.at(1)); dockList.at(0)->show(); dockList.at(1)->show(); break; case 3: addDockWidget(Qt::BottomDockWidgetArea, dockList.at(0)); tabifyDockWidget(dockList.at(0), dockList.at(1)); tabifyDockWidget(dockList.at(1), dockList.at(2)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); break; case 4: addDockWidget(Qt::BottomDockWidgetArea, dockList.at(0)); tabifyDockWidget(dockList.at(0), dockList.at(1)); tabifyDockWidget(dockList.at(1), dockList.at(2)); tabifyDockWidget(dockList.at(2), dockList.at(3)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); dockList.at(3)->show(); break; case 5: addDockWidget(Qt::BottomDockWidgetArea, dockList.at(0)); tabifyDockWidget(dockList.at(0), dockList.at(1)); tabifyDockWidget(dockList.at(1), dockList.at(2)); tabifyDockWidget(dockList.at(2), dockList.at(3)); tabifyDockWidget(dockList.at(3), dockList.at(4)); dockList.at(0)->show(); dockList.at(1)->show(); dockList.at(2)->show(); dockList.at(3)->show(); dockList.at(4)->show(); break; default: break; } } void ASMPage::selectAll() { radio_b1b1->click(); radio_b2b2->click(); radio_b3b3->click(); radio_e1e1->click(); radio_e2e2->click(); } void ASMPage::storeWfrm() { if (logFileEn == false) { buildFileName(); label_storeWfrm->setText("Recording..."); logFileEn = true; } else { // disable storage storageEnabled = false; label_storeWfrm->setText("-"); logFileEn = false; } } void ASMPage::buildFileName() { QTime time; QDate date; QString dateTime; QString prefix; date = QDate::currentDate(); time = QTime::currentTime(); dateTime = QString::number( date.year() ) + "_" + QString::number( date.month() ) + "_" + QString::number( date.day() ) + "-" + QString::number( time.hour() ) + "_" + QString::number( time.minute() ) + "_" + QString::number( time.second() ); prefix = defaultStorageDirectory + "/" + dateTime + "_" + pageTitle ; if(this->logFile->isOpen()) this->logFile->close(); this->logFile->setFileName( prefix + ".data"); if(this->logFile->open(QIODevice::WriteOnly)) this->logFileStrm = new QTextStream(this->logFile); *(this->logFileStrm) << "time V E1 E2 B1 B2 B3" << endl; storageEnabled = true; } void ASMPage::displayOnPlot(float *data, unsigned char num, unsigned char asm_indice_start, double deltaF, unsigned int nbData) { fillDataBuffer( data, num, asm_indice_start, deltaF, nbData ); switch(num){ case 0: wfPlot_asm_b1b1->displayOnPlotFloat(data, nbData); break; case 1: wfPlot_asm_b2b2->displayOnPlotFloat(data, nbData); break; case 2: wfPlot_asm_b3b3->displayOnPlotFloat(data, nbData); break; case 3: wfPlot_asm_e1e1->displayOnPlotFloat(data, nbData); break; case 4: wfPlot_asm_e2e2->displayOnPlotFloat(data, nbData); break; default: break; } } void ASMPage::initDataBuffer() { for (unsigned int i = 0; i < localBufferSize; i++) { dataBuffer[i]->clear(); } } void ASMPage::fillDataBuffer(float *data, unsigned char num, unsigned char asm_indice_start, double deltaF, unsigned int nbData) { double frequencyBin; QByteArray frequencyBinQByteArray; if ( (storageEnabled == true) | (allowDataStorage == true) ) // store data in buffers { switch(num) { case 0 : initDataBuffer(); frequencyBin = 0; for (unsigned int i=0; iappend( frequencyBinQByteArray + ' ' + QByteArray::number(data[i]) ); } allowDataStorage = true; break; case 1 : case 2 : case 3 : if (allowDataStorage==true) { for (unsigned int i=0; iappend( ' ' + QByteArray::number(data[i]) ); } } break; case 4 : if (allowDataStorage==true) { for (unsigned int i=0; iappend( ' ' + QByteArray::number(data[i]) ); } storeDataBuffer( nbData ); allowDataStorage = false; } break; default: break; } } } void ASMPage::storeDataBuffer(unsigned int nbData) { for (unsigned int i = 0; i < nbData; i++ ) { *(this->logFileStrm) << *dataBuffer[i] << endl; } if (storageEnabled == false){ this->logFileStrm->flush(); this->logFile->waitForBytesWritten(3000); this->logFile->close(); } } void ASMPage::setDefaultStorageDirectory(QString nameOfTheDirectory) { defaultStorageDirectory = nameOfTheDirectory; }