Index: trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.cc
===================================================================
--- trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.cc	(revision 12184)
+++ trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.cc	(revision 12185)
@@ -1156,44 +1156,63 @@
 UIConnector::UIConnector(QWidget*)
 {
+    setupUi(this);
+    initHistograms();
+
+    currentFile = "none";
+    currentCalibFile = "none";
+
     updateSpinnerDisplay = true;
+    updating = false;
 
     timer.setInterval(10.0);
     QObject::connect(&timer, SIGNAL(timeout()),
-                      this, SLOT(nextSlicePlease()));
-    hwID = 393;
-    swID = 0;
-    crateID = 9;
-    boardID = 8;
-    patchID = 1;
-    rescaleWholeCamera = true;
-    currentFile = "none";
-    currentCalibFile = "none";
-
-}
+                     this, SLOT(nextSlicePlease()));
+
+    QButtonGroup &scaleGroup = *new QButtonGroup(GLWindow);// = new QButtonGroup(canvas);
+    QButtonGroup &animateGroup = *new QButtonGroup(GLWindow);// = new QButtonGroup(canvas);
+
+    scaleGroup.addButton(Ui::MainWindow::currentPixelScale);
+    scaleGroup.addButton(Ui::MainWindow::entireCameraScale);
+
+    animateGroup.addButton(Ui::MainWindow::playEventsRadio);
+    animateGroup.addButton(Ui::MainWindow::playSlicesRadio);
+
+    QObject::connect(GLWindow, SIGNAL(colorPaletteHasChanged()),
+                     this, SLOT(on_autoScaleColor_clicked()));
+    QObject::connect(GLWindow, SIGNAL(signalCurrentSlice(int)),
+                     this, SLOT(currentSliceHasChanged(int)));
+    QObject::connect(GLWindow, SIGNAL(signalCurrentEvent(int)),
+                     this, SLOT(currentEventHasChanged(int)));
+    QObject::connect(GLWindow, SIGNAL(signalCurrentPixel(int)),
+                     this, SLOT(pixelChanged(int)));
+    QObject::connect(GLWindow, SIGNAL(newFileLoaded()),
+                     this, SLOT(newFileLoaded()));
+
+    show();
+}
+
 void UIConnector::slicesPlusPlus()
 {
-    viewer->nextSlice();
+    GLWindow->nextSlice();
 }
 void UIConnector::slicesMinusMinus()
 {
-    viewer->previousSlice();
-}
-void UIConnector::drawCalibratedDataChanged(int state)
-{
-    cout << "=== drawCalibratedDataChanged " << state << endl;
-
-    for (int i=0;i<(1440+160)*viewer->nRoi;i++)
-        viewer->eventData[i] = (float)viewer->rawEventData[i];
-
-//    if (viewer->calibratedCheckBox->isChecked())
+    GLWindow->previousSlice();
+}
+void UIConnector::on_calibratedCheckBox_stateChanged(int state)
+{
+    for (int i=0;i<(1440+160)*GLWindow->nRoi;i++)
+        GLWindow->eventData[i] = (float)GLWindow->rawEventData[i];
+
+//    if (GLWindow->calibratedCheckBox->isChecked())
     if (state)
-        DataCalib::Apply(viewer->eventData, viewer->rawEventData, viewer->startPix, viewer->nRoi);
-
-    viewer->updateGL();
+        DataCalib::Apply(GLWindow->eventData, GLWindow->rawEventData, GLWindow->startPix, GLWindow->nRoi);
+
+    GLWindow->updateGL();
 
     //drawCalibrationCheckBox->setChecked(false);
 
-    autoScalePressed();
-    pixelChanged(viewer->selectedPixel);
+    on_autoScaleColor_clicked();
+    pixelChanged(GLWindow->selectedPixel);
 
 }
@@ -1201,29 +1220,30 @@
  * DRAW PATCHES CHECK CHANGE. checkbox handler
  ************************************************************/
-void UIConnector::drawPatchesCheckChange(int state)
-{
-    viewer->drawPatch = state;
-    viewer->updateGL();
+void UIConnector::on_drawPatchCheckBox_stateChanged(int state)
+{
+    GLWindow->drawPatch = state;
+    GLWindow->updateGL();
 }
 /************************************************************
  * DRAW IMPULSE CHECK CHANGE. checkbox handler
  ************************************************************/
-void UIConnector::drawImpulseCheckChange(int state)
-{
-    viewer->drawImpulse = state;
-    viewer->updateGL();
+void UIConnector::on_drawImpulseCheckBox_stateChanged(int state)
+{
+    GLWindow->drawImpulse = state;
+    GLWindow->updateGL();
 }
 /************************************************************
  * DRAW BLUR CHECK CHANGE. checkbox handler
  ************************************************************/
-void UIConnector::drawBlurCheckChange(int state)
-{
-    viewer->drawBlur = state;
-    viewer->updateGL();
-}
-void UIConnector::loopEventCheckChange(int state)
-{
-    viewer->loopCurrentEvent = state;
-}
+void UIConnector::on_drawBlurCheckBox_stateChanged(int state)
+{
+    GLWindow->drawBlur = state;
+    GLWindow->updateGL();
+}
+void UIConnector::on_loopOverCurrentEventBox_stateChanged(int state)
+{
+    GLWindow->loopCurrentEvent = state;
+}
+
 /************************************************************
  * NEXT SLICE PLEASE
@@ -1232,15 +1252,16 @@
 {
     if (playEventsRadio->isChecked ())
-        viewer->eventStepping(true);
+        GLWindow->eventStepping(true);
     else
-        viewer->nextSlice();
-}
+        GLWindow->nextSlice();
+}
+
 /************************************************************
  * SET VIEWER.
  ************************************************************/
-void UIConnector::setViewer(RawDataViewer* v)
-{
-    viewer = v;
-}
+//void UIConnector::setViewer(RawDataViewer* v)
+//{
+//    viewer = v;
+//}
 /************************************************************
  * SLICES PER SECOND CHANGED. timing ui handler
@@ -1250,168 +1271,33 @@
     timer.setInterval(1000.0/value);
 }
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::rangeChanged0(double value)
-{
-    viewer->ss[0] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::rangeChanged1(double value)
-{
-    viewer->ss[1] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::rangeChanged2(double value)
-{
-    viewer->ss[2] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::rangeChanged3(double value)
-{
-    viewer->ss[3] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::rangeChanged4(double value)
-{
-    viewer->ss[4] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RANGE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::redChanged0(double value)
-{
-    viewer->rr[0] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RED CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::redChanged1(double value)
-{
-    viewer->rr[1] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RED CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::redChanged2(double value)
-{
-    viewer->rr[2] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RED CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::redChanged3(double value)
-{
-    viewer->rr[3] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * RED CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::redChanged4(double value)
-{
-    viewer->rr[4] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * GREEN CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::greenChanged0(double value)
-{
-    viewer->gg[0] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * GREEN CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::greenChanged1(double value)
-{
-    viewer->gg[1] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * GREEN CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::greenChanged2(double value)
-{
-    viewer->gg[2] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * GREEN CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::greenChanged3(double value)
-{
-    viewer->gg[3] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * GREEN CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::greenChanged4(double value)
-{
-    viewer->gg[4] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * BLUE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::blueChanged0(double value)
-{
-    viewer->bb[0] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * BLUE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::blueChanged1(double value)
-{
-    viewer->bb[1] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * BLUE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::blueChanged2(double value)
-{
-    viewer->bb[2] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * BLUE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::blueChanged3(double value)
-{
-    viewer->bb[3] = (float)value;
-    viewer->updateGL();
-}
-/************************************************************
- * BLUE CHANGED . colors tweaking handler
- ************************************************************/
-void UIConnector::blueChanged4(double value)
-{
-    viewer->bb[4] = (float)value;
-    viewer->updateGL();
-}
+
+void UIConnector::on_colorRange0_valueChanged(double value) { GLWindow->ss[0] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_colorRange1_valueChanged(double value) { GLWindow->ss[1] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_colorRange2_valueChanged(double value) { GLWindow->ss[2] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_colorRange3_valueChanged(double value) { GLWindow->ss[3] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_colorRange4_valueChanged(double value) { GLWindow->ss[4] = (float)value; GLWindow->updateGL(); }
+
+void UIConnector::on_redValue0_valueChanged(double value) { GLWindow->rr[0] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_redValue1_valueChanged(double value) { GLWindow->rr[1] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_redValue2_valueChanged(double value) { GLWindow->rr[2] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_redValue3_valueChanged(double value) { GLWindow->rr[3] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_redValue4_valueChanged(double value) { GLWindow->rr[4] = (float)value; GLWindow->updateGL(); }
+
+void UIConnector::on_greenValue0_valueChanged(double value) { GLWindow->gg[0] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_greenValue1_valueChanged(double value) { GLWindow->gg[1] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_greenValue2_valueChanged(double value) { GLWindow->gg[2] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_greenValue3_valueChanged(double value) { GLWindow->gg[3] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_greenValue4_valueChanged(double value) { GLWindow->gg[4] = (float)value; GLWindow->updateGL(); }
+
+void UIConnector::on_blueValue0_valueChanged(double value) { GLWindow->bb[0] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_blueValue1_valueChanged(double value) { GLWindow->bb[1] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_blueValue2_valueChanged(double value) { GLWindow->bb[2] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_blueValue3_valueChanged(double value) { GLWindow->bb[3] = (float)value; GLWindow->updateGL(); }
+void UIConnector::on_blueValue4_valueChanged(double value) { GLWindow->bb[4] = (float)value; GLWindow->updateGL(); }
+
 /************************************************************
  * LOAD NEW FILE CLICKED. button handler
  ************************************************************/
-void UIConnector::loadNewFileClicked()
+void UIConnector::on_loadNewFileButton_clicked()
 {
     QFileDialog dialog;
@@ -1421,5 +1307,5 @@
     dialog.exec();
 }
-void UIConnector::loadNewCalibFileClicked()
+void UIConnector::on_loadDRSCalibButton_clicked()
 {
     QFileDialog dialog;
@@ -1436,5 +1322,5 @@
     currentFile = file.toStdString();
     if (currentFile != "")
-        viewer->openFile(currentFile);
+        GLWindow->openFile(currentFile);
 }
 void UIConnector::calibFileSelected(QString file)
@@ -1442,5 +1328,5 @@
     currentCalibFile = file.toStdString();
     if (currentCalibFile != "")
-        viewer->openCalibFile(currentCalibFile);
+        GLWindow->openCalibFile(currentCalibFile);
 }
 /************************************************************
@@ -1456,44 +1342,44 @@
 //    fileLoadedLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "Run number: " << viewer->runNumber << "\n";
+    str << "Run number: " << GLWindow->runNumber << "\n";
 //    runNumberLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "Number of Events: " << viewer->nRows << "\n";
-
-    eventNumberBox->setMaximum(viewer->nRows-1);
-
-    str << "Number of Slices: " << viewer->nRoi << "\n";// << "/1024";
+    str << "Number of Events: " << GLWindow->nRows << "\n";
+
+    displayingEventBox->setMaximum(GLWindow->nRows-1);
+
+    str << "Number of Slices: " << GLWindow->nRoi << "\n";// << "/1024";
 //    numberOfSlicesLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "Number of Time Marks: " << viewer->nTM << "\n";
+    str << "Number of Time Marks: " << GLWindow->nTM << "\n";
 //    numberOfTimeMarksLabel->setText(QString(str.str().c_str()));
 
 //    str.str("");
-    str << "Run Type: " << viewer->runType << "\n";
+    str << "Run Type: " << GLWindow->runType << "\n";
 //    runTypeLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "Time of 1st data: " << viewer->firstDataTime << "\n";
+    str << "Time of 1st data: " << GLWindow->firstDataTime << "\n";
 //    firstTimeLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "Time of last data: " << viewer->lastDataTime << "\n";
+    str << "Time of last data: " << GLWindow->lastDataTime << "\n";
 //    lastTimeLabel->setText(QString(str.str().c_str()));
 //    str.str("");
-    str << "SVN revision: " << viewer->revision << '\n';
-    str << "Number of boards: " << viewer->nBoards << '\n';
-    str << "Number of pixels: " << viewer->nPixels << '\n';
-    str << "Number of Slices TM: " << viewer->nRoiTM << '\n';
-    str << "Time system: " << viewer->timeSystem << '\n';
-    str << "Date: " << viewer->creationDate << '\n';
-    str << "Night: " << viewer->nightInt << '\n';
-    str << "Camera: " << viewer->camera << '\n';
-    str << "DAQ: " << viewer->daq << '\n';
-    str << "ADC Count: " << viewer->adcCount << '\n';
-    str << "NB Evts OK:" << viewer->nbOk << '\n';
-    str << "NB Evts Rejected: " << viewer->nbRej << '\n';
-    str << "NB Evts Bad: " << viewer->nbBad << '\n';
+    str << "SVN revision: " << GLWindow->revision << '\n';
+    str << "Number of boards: " << GLWindow->nBoards << '\n';
+    str << "Number of pixels: " << GLWindow->nPixels << '\n';
+    str << "Number of Slices TM: " << GLWindow->nRoiTM << '\n';
+    str << "Time system: " << GLWindow->timeSystem << '\n';
+    str << "Date: " << GLWindow->creationDate << '\n';
+    str << "Night: " << GLWindow->nightInt << '\n';
+    str << "Camera: " << GLWindow->camera << '\n';
+    str << "DAQ: " << GLWindow->daq << '\n';
+    str << "ADC Count: " << GLWindow->adcCount << '\n';
+    str << "NB Evts OK:" << GLWindow->nbOk << '\n';
+    str << "NB Evts Rejected: " << GLWindow->nbRej << '\n';
+    str << "NB Evts Bad: " << GLWindow->nbBad << '\n';
     extraInfoLabel->setText(QString(str.str().c_str()));
 
     /*
-    if (viewer->calibrationLoaded)
+    if (GLWindow->calibrationLoaded)
     {
         drawCalibrationCheckBox->setEnabled(true);
@@ -1517,16 +1403,14 @@
 void UIConnector::currentSliceHasChanged(int slice)
 {
-    if (!viewer->nRoi)
+    if (!GLWindow->nRoi)
         return;
-    ostringstream str;
 //    str << "Displaying Slice " << slice;
 //    QString qstr(str.str().c_str());
     if (updateSpinnerDisplay)
-        emit updateCurrentSliceDisplay(slice);
-
-    str.str("");
-    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
-    QString qstr = qstr.fromStdString(str.str());
-    emit updateCurrentPixelSliceValue(qstr);
+        displayingSliceBox->setValue(slice);
+
+    ostringstream str;
+    str << "Current Pixel val.: " << GLWindow->eventData[GLWindow->nRoi*GLWindow->selectedPixel + GLWindow->whichSlice];
+    currentPixelValue->setText(QString(str.str().c_str()));
 
 }
@@ -1536,5 +1420,5 @@
 double xval[50000];
 double yval[50000];
-void UIConnector::eventChangedFromSpinner(int cEvent)
+void UIConnector::on_displayingEventBox_valueChanged(int cEvent)
 {
 //    cout << "Here " << updateSpinnerDisplay << endl;
@@ -1543,17 +1427,17 @@
     updateSpinnerDisplay = false;
 //    currentEventHasChanged(cEvent);
-    viewer->rowNum = cEvent - viewer->eventStep;
-    viewer->eventStepping(true);
+    GLWindow->rowNum = cEvent - GLWindow->eventStep;
+    GLWindow->eventStepping(true);
     updateSpinnerDisplay = true;
 
-//    viewer->updateGL();
-}
-void UIConnector::sliceChangedFromSpinner(int cSlice)
+//    GLWindow->updateGL();
+}
+void UIConnector::on_displayingSliceBox_valueChanged(int cSlice)
 {
     updateSpinnerDisplay = false;
     currentSliceHasChanged(cSlice);
     updateSpinnerDisplay = true;
-    viewer->whichSlice = cSlice;
-    viewer->updateGL();
+    GLWindow->whichSlice = cSlice;
+    GLWindow->updateGL();
 }
 void UIConnector::currentEventHasChanged(int )
@@ -1566,38 +1450,32 @@
     {
         updateSpinnerDisplay = false;
-        emit updateCurrentEventDisplay(viewer->rowNum);
+        displayingEventBox->setValue(GLWindow->rowNum);
         updateSpinnerDisplay = true;
     }
 
- //   viewer->doWaveLetOnCurrentEventPlease();
+ //   GLWindow->doWaveLetOnCurrentEventPlease();
 
         //retrieve the data that we want to display
+    boost::posix_time::ptime hrTime( boost::gregorian::date(1970, boost::gregorian::Jan, 1),
+            boost::posix_time::seconds(GLWindow->pcTime[0]) +  boost::posix_time::microsec(GLWindow->pcTime[1]));
+
     str.str("");
-    boost::posix_time::ptime hrTime( boost::gregorian::date(1970, boost::gregorian::Jan, 1),
-            boost::posix_time::seconds(viewer->pcTime[0]) +  boost::posix_time::microsec(viewer->pcTime[1]));
-//    cout <<  boost::posix_time::to_iso_extended_string(hrTime) << endl;
     str << "PC Time: " << boost::posix_time::to_iso_extended_string(hrTime);
- //   str << "PC Time: " << viewer->pcTime[0];
- //   str << " " << viewer->pcTime[1];
-    QString qstr = qstr.fromStdString(str.str());
-    emit updateCurrentPCTime(qstr);
+    PCTimeLabel->setText(QString(str.str().c_str()));
 
     str.str("");
-    str << "Software Trigger: " << viewer->softTrig;
-    qstr = qstr.fromStdString(str.str());
-    emit updateCurrentSoftTrigger(qstr);
+    str << "Software Trigger: " << GLWindow->softTrig;
+    softwareTriggerLabel->setText(QString(str.str().c_str()));
 
     str.str("");
-    str << "Trigger Type: " << viewer->triggerType;
-    qstr = qstr.fromStdString(str.str());
-    emit updateCurrentTriggerType(qstr);
+    str << "Trigger Type: " << GLWindow->triggerType;
+    triggerTypeLabel->setText(QString(str.str().c_str()));
 
     str.str("");
-    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
-    qstr = qstr.fromStdString(str.str());
-    emit updateCurrentPixelSliceValue(qstr);
+    str << "Current Pixel val.: " << GLWindow->eventData[GLWindow->nRoi*GLWindow->selectedPixel + GLWindow->whichSlice];
+    currentPixelValue->setText(QString(str.str().c_str()));
 
     if (autoScaleColor->isChecked())
-        emit viewer->colorPaletteHasChanged();//autoScalePressed();
+        emit GLWindow->colorPaletteHasChanged();//autoScalePressed();
 
     boardsTimeList->clear();
@@ -1613,10 +1491,10 @@
         if (i<100) str << " ";
         if (i<1000) str << " ";
-        str << ": " << viewer->boardTime[i];
+        str << ": " << GLWindow->boardTime[i];
         boardsTimeList->addItem(QString(str.str().c_str()));
-        if (boardsHistoMap.find(viewer->boardTime[i]) != boardsHistoMap.end())
-            boardsHistoMap[viewer->boardTime[i]]++;
+        if (boardsHistoMap.find(GLWindow->boardTime[i]) != boardsHistoMap.end())
+            boardsHistoMap[GLWindow->boardTime[i]]++;
         else
-            boardsHistoMap[viewer->boardTime[i]] = 1;
+            boardsHistoMap[GLWindow->boardTime[i]] = 1;
     }
     std::map<int, int> pixelHistoMap;
@@ -1628,10 +1506,10 @@
         if (i<100) str << " ";
         if (i<1000) str << " ";
-        str << ": " << viewer->startPix[i];
+        str << ": " << GLWindow->startPix[i];
         startPixelsList->addItem(QString(str.str().c_str()));
-        if (pixelHistoMap.find(viewer->startPix[i]) != pixelHistoMap.end())
-            pixelHistoMap[viewer->startPix[i]]++;
+        if (pixelHistoMap.find(GLWindow->startPix[i]) != pixelHistoMap.end())
+            pixelHistoMap[GLWindow->startPix[i]]++;
         else
-            pixelHistoMap[viewer->startPix[i]] = 1;
+            pixelHistoMap[GLWindow->startPix[i]] = 1;
     }
 
@@ -1644,10 +1522,10 @@
         if (i<100) str << " ";
         if (i<1000) str << " ";
-        str << ": " << viewer->startTM[i];
+        str << ": " << GLWindow->startTM[i];
         startTimeMarksList->addItem(QString(str.str().c_str()));
-        if (timeMarksMap.find(viewer->startTM[i]) != timeMarksMap.end())
-            timeMarksMap[viewer->startTM[i]]++;
+        if (timeMarksMap.find(GLWindow->startTM[i]) != timeMarksMap.end())
+            timeMarksMap[GLWindow->startTM[i]]++;
         else
-            timeMarksMap[viewer->startTM[i]] = 1;
+            timeMarksMap[GLWindow->startTM[i]] = 1;
     }
     std::map<int,int> delayMap;
@@ -1657,7 +1535,7 @@
         str.str("");
         str << i << " | ";
-        for (int j=0;j<viewer->nRoi;j++)
-        {
-            int value = viewer->eventData[1440*viewer->nRoi + i*viewer->nRoi + j];
+        for (int j=0;j<GLWindow->nRoi;j++)
+        {
+            int value = GLWindow->eventData[1440*GLWindow->nRoi + i*GLWindow->nRoi + j];
             if (delayMap.find(value) != delayMap.end())
                  delayMap[value]++;
@@ -1825,12 +1703,12 @@
        for (int i=0;i<1024*1440;i++)
        {
-           if (valuesHistoMap.find(viewer->rawEventData[i]) != valuesHistoMap.end())
-               valuesHistoMap[viewer->rawEventData[i]]++;
+           if (valuesHistoMap.find(GLWindow->rawEventData[i]) != valuesHistoMap.end())
+               valuesHistoMap[GLWindow->rawEventData[i]]++;
            else
-               valuesHistoMap[viewer->rawEventData[i]] = 1;
-           if (waveletHistoMap.find(viewer->waveLetArray[i]) != waveletHistoMap.end())
-               waveletHistoMap[viewer->waveLetArray[i]]++;
+               valuesHistoMap[GLWindow->rawEventData[i]] = 1;
+           if (waveletHistoMap.find(GLWindow->waveLetArray[i]) != waveletHistoMap.end())
+               waveletHistoMap[GLWindow->waveLetArray[i]]++;
            else
-               waveletHistoMap[viewer->waveLetArray[i]] = 1;
+               waveletHistoMap[GLWindow->waveLetArray[i]] = 1;
        }
 
@@ -1929,5 +1807,5 @@
     triggerDelayHistoZoom->setZoomStack(stack);
     stack.pop();
-    pixelChanged(viewer->selectedPixel);
+    pixelChanged(GLWindow->selectedPixel);
 }
 //can't use a ref to rectangle, as the type must be converted first
@@ -1958,5 +1836,5 @@
     grid->enableYMin(false);
     grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
-    grid->attach(startCellHisto);
+    grid->attach(startCellsHisto);
 
     grid = new QwtPlotGrid;
@@ -1984,12 +1862,11 @@
     grid->attach(triggerDelayHisto);
 
-
     boardsTimeHisto->setAutoReplot(true);
-    startCellHisto->setAutoReplot(true);
+    startCellsHisto->setAutoReplot(true);
     startTimeMarkHisto->setAutoReplot(true);
     pixelValueCurve->setAutoReplot(true);
     triggerDelayHisto->setAutoReplot(true);
     boardsTimeHisto->setTitle("Boards time values");
-    startCellHisto->setTitle("Start Cell values");
+    startCellsHisto->setTitle("Start Cell values");
     startTimeMarkHisto->setTitle("Start Time Marks values");
     pixelValueCurve->setTitle("Current pixel values");
@@ -2012,5 +1889,5 @@
 
     boardsTimeHistoItem.attach(boardsTimeHisto);
-    startCellHistoItem.attach(startCellHisto);
+    startCellHistoItem.attach(startCellsHisto);
     startTimeMarkHistoItem.attach(startTimeMarkHisto);
     triggerDelayHistoItem.attach(triggerDelayHisto);
@@ -2037,13 +1914,17 @@
     curveZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     curveZoom->setTrackerPen(QPen(Qt::gray));
+
     boardsTimeHistoZoom = new QwtPlotZoomer(boardsTimeHisto->canvas());
     boardsTimeHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     boardsTimeHistoZoom->setTrackerPen(QPen(Qt::gray));
-    startCellHistoZoom = new QwtPlotZoomer(startCellHisto->canvas());
+
+    startCellHistoZoom = new QwtPlotZoomer(startCellsHisto->canvas());
     startCellHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     startCellHistoZoom->setTrackerPen(QPen(Qt::gray));
+
     startTimeMarkHistoZoom = new QwtPlotZoomer(startTimeMarkHisto->canvas());
     startTimeMarkHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     startTimeMarkHistoZoom->setTrackerPen(QPen(Qt::gray));
+
     triggerDelayHistoZoom = new QwtPlotZoomer(triggerDelayHisto->canvas());
     triggerDelayHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
@@ -2054,10 +1935,11 @@
 void UIConnector::pixelChanged(int pixel)
 {
-    if (!viewer->nRoi)
+    pixel = GLWindow->hardwareMapping[pixel];
+    HwIDBox->setValue(pixel);
+
+    if (!GLWindow->nRoi)
         return;
 
- //   if (hwID == pixel)
- //       return;
-    for (int i=0;i<viewer->nRoi;i++)
+    for (int i=0;i<GLWindow->nRoi;i++)
     {
         xval[i] = i;
@@ -2065,19 +1947,19 @@
         yval[i] = eventsData[0][pixel][i];
 #else
-        yval[i] = viewer->eventData[viewer->nRoi*pixel + i];
+        yval[i] = GLWindow->eventData[GLWindow->nRoi*pixel + i];
 #endif
     }
 
-  //  viewer->computePulsesStatistics();
+  //  GLWindow->computePulsesStatistics();
 #if QWT_VERSION < 0x060000
-    pixelValueCurveItem.setData(xval, yval, viewer->nRoi);
-////    aMeanCurveItem.setData(xval, viewer->aMeas, viewer->nRoi);
- //   meanCurveItem.setData(xval, viewer->n1mean, viewer->nRoi);
- //   vCorrCurveItem.setData(xval, viewer->vCorr, viewer->nRoi-3);
+    pixelValueCurveItem.setData(xval, yval, GLWindow->nRoi);
+////    aMeanCurveItem.setData(xval, GLWindow->aMeas, GLWindow->nRoi);
+ //   meanCurveItem.setData(xval, GLWindow->n1mean, GLWindow->nRoi);
+ //   vCorrCurveItem.setData(xval, GLWindow->vCorr, GLWindow->nRoi-3);
 #else
-       pixelValueCurveItem.setSamples(xval, yval, viewer->nRoi);
-//       aMeanCurveItem.setSamples(xval, viewer->aMeas, viewer->nRoi);
- //      meanCurveItem.setSamples(xval, viewer->n1mean, viewer->nRoi);
- //      vCorrCurveItem.setSamples(xval, viewer->vCorr, viewer->nRoi-3);
+       pixelValueCurveItem.setSamples(xval, yval, GLWindow->nRoi);
+//       aMeanCurveItem.setSamples(xval, GLWindow->aMeas, GLWindow->nRoi);
+ //      meanCurveItem.setSamples(xval, GLWindow->n1mean, GLWindow->nRoi);
+ //      vCorrCurveItem.setSamples(xval, GLWindow->vCorr, GLWindow->nRoi-3);
 #endif
 
@@ -2088,132 +1970,76 @@
     stack.pop();
 
-    hwID = pixel;
-    swID = viewer->softwareMapping[pixel];
-    crateID = pixel/360;
-    boardID = (pixel - crateID*360)/36;
-    patchID = (pixel - crateID*360 - boardID*36)/9;
-
-    if (HwIDBox->value() != hwID)
-        HwIDBox->setValue(hwID);
-    if (SwIDBox->value() != swID)
-        SwIDBox->setValue(swID);
-    if (crateIDBox->value() != crateID)
-        crateIDBox->setValue(crateID);
-    if (boardIDBox->value() != boardID)
-        boardIDBox->setValue(boardID);
-    if (patchIDBox->value() != patchID)
-        patchIDBox->setValue(patchID);
-
     ostringstream str;
     QString qstr;
-    str.str("");
-    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
-    qstr = qstr.fromStdString(str.str());
-    emit updateCurrentPixelSliceValue(qstr);
-    autoScalePressed();
-
-}
-
-void UIConnector::hwIDChanged(int hwid)
-{
-    hwID = hwid;
-    swID = viewer->softwareMapping[hwid];
-    crateID = hwID/360;
-    boardID = (hwID - crateID*360)/36;
-    patchID = (hwID - crateID*360 - boardID*36)/9;
-
-//    crateID = (hwid/4)/10;
-//    boardID = (hwid/4)%10;
-//    patchID = hwid%4;
-    HwIDBox->setValue(hwID);
-    SwIDBox->setValue(swID);
+    str << "Current Pixel val.: " << GLWindow->eventData[GLWindow->nRoi*GLWindow->selectedPixel + GLWindow->whichSlice];
+    currentPixelValue->setText(qstr.fromStdString(str.str()));
+    on_autoScaleColor_clicked();
+}
+
+void UIConnector::on_HwIDBox_valueChanged(int)
+{
+    updating = true;
+
+    const int hwID = HwIDBox->value();
+
+    const int crateID =  hwID/360;
+    const int boardID = (hwID%360)/36;
+    const int patchID = (hwID%36 )/9;
+    const int pixelID =  hwID%9;
+
+    SwIDBox->setValue(GLWindow->softwareMapping[hwID]);
+
     crateIDBox->setValue(crateID);
     boardIDBox->setValue(boardID);
     patchIDBox->setValue(patchID);
-
-    viewer->selectedPixel = hwid;
-    pixelChanged(hwid);
-    viewer->updateGL();
-
-}
-void UIConnector::swIDChanged(int swid)
-{
-    swID = swid;
-    hwID = viewer->hardwareMapping[swid];
-    crateID = hwID/360;
-    boardID = (hwID - crateID*360)/36;
-    patchID = (hwID - crateID*360 - boardID*36)/9;
-
-//    crateID = (hwID/4)/10;
-//    boardID = (hwID/4)%10;
-//    patchID = hwID%4;
-    HwIDBox->setValue(hwID);
-    SwIDBox->setValue(swID);
-    crateIDBox->setValue(crateID);
-    boardIDBox->setValue(boardID);
-    patchIDBox->setValue(patchID);
-
-    viewer->selectedPixel = hwID;
-    pixelChanged(hwID);
-    viewer->updateGL();
-}
-void UIConnector::crateIDChanged(int cid)
-{
-    hwID -= 360*crateID;
-    crateID = cid;
-    hwID += 360*crateID;
-    swID = viewer->softwareMapping[hwID];
-    HwIDBox->setValue(hwID);
-    SwIDBox->setValue(swID);
-    viewer->selectedPixel = hwID;
-    pixelChanged(hwID);
-    viewer->updateGL();
-}
-void UIConnector::boardIDChanged(int bid)
-{
-    hwID -= 36*boardID;
-    boardID = bid;
-    hwID += 36*boardID;
-    swID = viewer->softwareMapping[hwID];
-    HwIDBox->setValue(hwID);
-    SwIDBox->setValue(swID);
-    viewer->selectedPixel = hwID;
-    pixelChanged(hwID);
-   viewer->updateGL();
-}
-void UIConnector::patchIDChanged(int pid)
-{
-    hwID -= 9*patchID;
-    patchID = pid;
-    hwID += 9*patchID;
-    swID = viewer->softwareMapping[hwID];
-    HwIDBox->setValue(hwID);
-    SwIDBox->setValue(swID);
-    viewer->selectedPixel = hwID;
-    pixelChanged(hwID);
-    viewer->updateGL();
-}
-void UIConnector::autoScalePressed()
+    pixelIDBox->setValue(pixelID);
+
+    updating = false;
+
+    pixelChanged(GLWindow->softwareMapping[hwID]);
+
+    GLWindow->selectedPixel = GLWindow->softwareMapping[hwID];
+    GLWindow->updateGL();
+}
+
+void UIConnector::cbpxChanged()
+{
+    if (updating)
+        return;
+
+    const int hwid = crateIDBox->value()*360 + boardIDBox->value()*36 + patchIDBox->value()*9 + pixelIDBox->value();
+    HwIDBox->setValue(hwid);
+}
+
+void UIConnector::on_SwIDBox_valueChanged(int swid)
+{
+    if (updating)
+        return;
+
+    HwIDBox->setValue(GLWindow->hardwareMapping[swid]);
+}
+
+void UIConnector::on_autoScaleColor_clicked()
 {
     if (!autoScaleColor->isChecked())
     {
         /*
-        viewer->ss[0] = 0;
-        viewer->ss[1] = 0.25;
-        viewer->ss[2] = 0.5;
-        viewer->ss[3] = 0.75;
-        viewer->ss[4] = 1;
-        range0->setValue(viewer->ss[0]);
-        range1->setValue(viewer->ss[1]);
-        range2->setValue(viewer->ss[2]);
-        range3->setValue(viewer->ss[3]);
-        range4->setValue(viewer->ss[4]);
+        GLWindow->ss[0] = 0;
+        GLWindow->ss[1] = 0.25;
+        GLWindow->ss[2] = 0.5;
+        GLWindow->ss[3] = 0.75;
+        GLWindow->ss[4] = 1;
+        range0->setValue(GLWindow->ss[0]);
+        range1->setValue(GLWindow->ss[1]);
+        range2->setValue(GLWindow->ss[2]);
+        range3->setValue(GLWindow->ss[3]);
+        range4->setValue(GLWindow->ss[4]);
         */
         return;
     }
-    if (!viewer->nRoi)
+    if (!GLWindow->nRoi)
         return;
     int start, end;
-    if (rescaleWholeCamera)
+    if (entireCameraScale->isChecked())
     {
         start = 0;
@@ -2222,6 +2048,6 @@
     else
     {
-        start = viewer->selectedPixel;
-        end = viewer->selectedPixel+1;
+        start = GLWindow->selectedPixel;
+        end = GLWindow->selectedPixel+1;
     }
 
@@ -2233,7 +2059,7 @@
     for (int i=start;i<end;i++)
     {
-        for (int j=0;j<viewer->nRoi;j++)
-        {
-            int cValue = viewer->eventData[i*viewer->nRoi+j];
+        for (int j=0;j<GLWindow->nRoi;j++)
+        {
+            int cValue = GLWindow->eventData[i*GLWindow->nRoi+j];
             if (cValue > max && cValue < 32767)
                 max = cValue;
@@ -2261,5 +2087,5 @@
     double maxRange = (double)(max+(VALUES_SPAN/2))/(double)VALUES_SPAN;
     double midRange = (double)(average+(VALUES_SPAN/2))/(double)VALUES_SPAN;
-    if (viewer->logScale)
+    if (GLWindow->logScale)
     {
         minRange *= 9;
@@ -2274,57 +2100,25 @@
         midRange = log10(midRange);
     }
-    viewer->ss[0] = minRange;
-    range0->setValue(viewer->ss[0]);
-    viewer->ss[4] = maxRange;
-    range4->setValue(viewer->ss[4]);
-//    viewer->ss[2] = midRange;
-//    range2->setValue(viewer->ss[2]);
-//    viewer->ss[1] = (minRange+midRange)/2;
-//    range1->setValue(viewer->ss[1]);
-//    viewer->ss[3] = (maxRange+midRange)/2;
-//    range3->setValue(viewer->ss[3]);
-
-    viewer->ss[2] = (maxRange+minRange)/2;
-    range2->setValue(viewer->ss[2]);
-
-    viewer->ss[1] = minRange+(maxRange-minRange)/4;
-    range1->setValue(viewer->ss[1]);
-
-    viewer->ss[3] = minRange+3*(maxRange-minRange)/4;
-    range3->setValue(viewer->ss[3]);
-
-
-}
-void UIConnector::entireCameraChanged(bool state)
-{
-    if (state)
-    {
-        rescaleWholeCamera = true;
-        currentPixelScale->setChecked(false);
-    }
-    else
-    {
-        rescaleWholeCamera = false;
-        currentPixelScale->setChecked(true);
-    }
-    autoScalePressed();
-}
-void UIConnector::currentPixelChanged(bool state)
-{
-
-    if (state)
-    {
-        rescaleWholeCamera = false;
-        entireCameraScale->setChecked(false);
-    }
-    else
-    {
-        rescaleWholeCamera = true;
-        entireCameraScale->setChecked(true);
-    }
-    autoScalePressed();
-}
-
-
+
+    GLWindow->ss[0] = minRange;
+    colorRange0->setValue(GLWindow->ss[0]);
+    GLWindow->ss[4] = maxRange;
+    colorRange4->setValue(GLWindow->ss[4]);
+//    GLWindow->ss[2] = midRange;
+//    range2->setValue(GLWindow->ss[2]);
+//    GLWindow->ss[1] = (minRange+midRange)/2;
+//    range1->setValue(GLWindow->ss[1]);
+//    GLWindow->ss[3] = (maxRange+midRange)/2;
+//    range3->setValue(GLWindow->ss[3]);
+
+    GLWindow->ss[2] = (maxRange+minRange)/2;
+    colorRange2->setValue(GLWindow->ss[2]);
+
+    GLWindow->ss[1] = minRange+(maxRange-minRange)/4;
+    colorRange1->setValue(GLWindow->ss[1]);
+
+    GLWindow->ss[3] = minRange+3*(maxRange-minRange)/4;
+    colorRange3->setValue(GLWindow->ss[3]);
+}
 
 void PrintUsage()
@@ -2345,4 +2139,93 @@
          << endl;
 }
+
+int UIConnector::SetupConfiguration(Configuration &conf)
+{
+    RawDataViewer *canvas = GLWindow;
+
+    if (conf.Has("color.range"))
+    {
+        vector<double> value = conf.Vec<double>("color.range");
+        if (value.size() != 5)
+        {
+            cout << "Error, colorRange option should have exactly 5 double values" << endl;
+            return -1;
+        }
+        for (int i=0;i<5;i++)
+            canvas->ss[i] = value[i];
+    }
+
+    if (conf.Has("color.red"))
+    {
+        vector<double> value = conf.Vec<double>("color.red");
+        if (value.size() != 5)
+        {
+            cout << "Error, colorRed option should have exactly 5 double values" << endl;
+            return -1;
+        }
+        for (int i=0;i<5;i++)
+            canvas->rr[i] = value[i];
+    }
+
+    if (conf.Has("color.green"))
+    {
+        vector<double> value = conf.Vec<double>("color.green");
+        if (value.size() != 5)
+        {
+            cout << "Error, colorGreen option should have exactly 5 double values" << endl;
+            return -1;
+        }
+        for (int i=0;i<5;i++)
+            canvas->gg[i] = value[i];
+    }
+
+    if (conf.Has("color.blue"))
+    {
+        vector<double> value = conf.Vec<double>("color.blue");
+        if (value.size() != 5)
+        {
+            cout << "Error, colorBlue option should have exactly 5 double values" << endl;
+            return -1;
+        }
+        for (int i=0;i<5;i++)
+            canvas->bb[i] = value[i];
+    }
+
+    colorRange0->setValue(canvas->ss[0]);
+    colorRange1->setValue(canvas->ss[1]);
+    colorRange2->setValue(canvas->ss[2]);
+    colorRange3->setValue(canvas->ss[3]);
+    colorRange4->setValue(canvas->ss[4]);
+    redValue0->setValue(canvas->rr[0]);
+    redValue1->setValue(canvas->rr[1]);
+    redValue2->setValue(canvas->rr[2]);
+    redValue3->setValue(canvas->rr[3]);
+    redValue4->setValue(canvas->rr[4]);
+    greenValue0->setValue(canvas->gg[0]);
+    greenValue1->setValue(canvas->gg[1]);
+    greenValue2->setValue(canvas->gg[2]);
+    greenValue3->setValue(canvas->gg[3]);
+    greenValue4->setValue(canvas->gg[4]);
+    blueValue0->setValue(canvas->bb[0]);
+    blueValue1->setValue(canvas->bb[1]);
+    blueValue2->setValue(canvas->bb[2]);
+    blueValue3->setValue(canvas->bb[3]);
+    blueValue4->setValue(canvas->bb[4]);
+
+    if (conf.Has("file"))
+    {
+        const QString qstr(conf.Get<string>("file").c_str());
+        fileSelected(qstr);
+    }
+
+    if (conf.Has("drs"))
+    {
+        const QString qstr(conf.Get<string>("drs").c_str());
+        calibFileSelected(qstr);
+    }
+
+    return 0;
+}
+
 void SetupConfiguration(Configuration& conf)
 {
@@ -2365,94 +2248,4 @@
 }
 
-/*
-class MainWindow : public QMainWindow, protected Ui::MainWindow
-{
-    Q_OBJECT;
-
-public:
-    MainWindow(QWidget *p=0) : QMainWindow(p)
-    {
-        setupUi(this);
-    }
-
-    int SetupConfiguration(Configuration &conf)
-    {
-        RawDataViewer *canvas = GLWindow;
-
-        if (conf.Has("color.range"))
-        {
-            vector<double> value = conf.Vec<double>("color.range");
-            if (value.size() != 5)
-            {
-                cout << "Error, colorRange option should have exactly 5 double values" << endl;
-                return -1;
-            }
-            for (int i=0;i<5;i++)
-                canvas->ss[i] = value[i];
-        }
-
-        if (conf.Has("color.red"))
-        {
-            vector<double> value = conf.Vec<double>("color.red");
-            if (value.size() != 5)
-            {
-                cout << "Error, colorRed option should have exactly 5 double values" << endl;
-                return -1;
-            }
-            for (int i=0;i<5;i++)
-                canvas->rr[i] = value[i];
-        }
-
-        if (conf.Has("color.green"))
-        {
-            vector<double> value = conf.Vec<double>("color.green");
-            if (value.size() != 5)
-            {
-                cout << "Error, colorGreen option should have exactly 5 double values" << endl;
-                return -1;
-            }
-            for (int i=0;i<5;i++)
-                canvas->gg[i] = value[i];
-        }
-
-        if (conf.Has("color.blue"))
-        {
-            vector<double> value = conf.Vec<double>("color.blue");
-            if (value.size() != 5)
-            {
-                cout << "Error, colorBlue option should have exactly 5 double values" << endl;
-                return -1;
-            }
-            for (int i=0;i<5;i++)
-                canvas->bb[i] = value[i];
-        }
-
-        colorRange0->setValue(canvas->ss[0]);
-        colorRange1->setValue(canvas->ss[1]);
-        colorRange2->setValue(canvas->ss[2]);
-        colorRange3->setValue(canvas->ss[3]);
-        colorRange4->setValue(canvas->ss[4]);
-        redValue0->setValue(canvas->rr[0]);
-        redValue1->setValue(canvas->rr[1]);
-        redValue2->setValue(canvas->rr[2]);
-        redValue3->setValue(canvas->rr[3]);
-        redValue4->setValue(canvas->rr[4]);
-        greenValue0->setValue(canvas->gg[0]);
-        greenValue1->setValue(canvas->gg[1]);
-        greenValue2->setValue(canvas->gg[2]);
-        greenValue3->setValue(canvas->gg[3]);
-        greenValue4->setValue(canvas->gg[4]);
-        blueValue0->setValue(canvas->bb[0]);
-        blueValue1->setValue(canvas->bb[1]);
-        blueValue2->setValue(canvas->bb[2]);
-        blueValue3->setValue(canvas->bb[3]);
-        blueValue4->setValue(canvas->bb[4]);
-
-        return 0;
-    }
-
-};
-*/
-
 /************************************************************
  * MAIN PROGRAM FUNCTION.
@@ -2460,312 +2253,20 @@
 int main(int argc, const char *argv[])
 {
+    QApplication app(argc, const_cast<char**>(argv));
+
+    if (!QGLFormat::hasOpenGL()) {
+        std::cerr << "This system has no OpenGL support" << std::endl;
+        return 1;
+    }
+
     Configuration conf(argv[0]);
     conf.SetPrintUsage(PrintUsage);
     SetupConfiguration(conf);
     if (!conf.DoParse(argc, argv, PrintHelp))
-        return -1;
-
-    QApplication app(argc, const_cast<char**>(argv));
-
-    if (!QGLFormat::hasOpenGL()) {
-        std::cerr << "This system has no OpenGL support" << std::endl;
-        return 1;
-    }
-
-    /*
-    MainWindow myUi;
+        return 2;
+
+    UIConnector myUi;
     if (myUi.SetupConfiguration(conf)<0)
-        return -1;
-     */
-
-   QMainWindow mainWindow;
-
-    Ui_MainWindow myUi;
-    myUi.setupUi(&mainWindow);
-
-    UIConnector connector;
-
-    RawDataViewer *canvas = myUi.GLWindow;
-
-    if (conf.Has("color.range"))
-    {
-        vector<double> value = conf.Vec<double>("color.range");
-        if (value.size() != 5)
-        {
-            cout << "Error, colorRange option should have exactly 5 double values" << endl;
-            return -1;
-        }
-        for (int i=0;i<5;i++)
-            canvas->ss[i] = value[i];
-    }
-
-    if (conf.Has("color.red"))
-    {
-        vector<double> value = conf.Vec<double>("color.red");
-        if (value.size() != 5)
-        {
-            cout << "Error, colorRed option should have exactly 5 double values" << endl;
-            return -1;
-        }
-        for (int i=0;i<5;i++)
-            canvas->rr[i] = value[i];
-    }
-
-    if (conf.Has("color.green"))
-    {
-        vector<double> value = conf.Vec<double>("color.green");
-        if (value.size() != 5)
-        {
-            cout << "Error, colorGreen option should have exactly 5 double values" << endl;
-            return -1;
-        }
-        for (int i=0;i<5;i++)
-            canvas->gg[i] = value[i];
-    }
-
-    if (conf.Has("color.blue"))
-    {
-        vector<double> value = conf.Vec<double>("color.blue");
-        if (value.size() != 5)
-        {
-            cout << "Error, colorBlue option should have exactly 5 double values" << endl;
-            return -1;
-        }
-        for (int i=0;i<5;i++)
-            canvas->bb[i] = value[i];
-    }
-
-
-//    QObject::connect(myUi.eventsMinusButton, SIGNAL(clicked()),
-//                     canvas, SLOT(minusEvent()));
-//    QObject::connect(myUi.eventsPlusButton, SIGNAL(clicked()),
-//                     canvas, SLOT(plusEvent()));
-//    QObject::connect(myUi.eventsStepBox, SIGNAL(valueChanged(int)),
-//                     canvas, SLOT(setEventStep(int)));
-    myUi.colorRange0->setValue(canvas->ss[0]);
-    myUi.colorRange1->setValue(canvas->ss[1]);
-    myUi.colorRange2->setValue(canvas->ss[2]);
-    myUi.colorRange3->setValue(canvas->ss[3]);
-    myUi.colorRange4->setValue(canvas->ss[4]);
-    myUi.redValue0->setValue(canvas->rr[0]);
-    myUi.redValue1->setValue(canvas->rr[1]);
-    myUi.redValue2->setValue(canvas->rr[2]);
-    myUi.redValue3->setValue(canvas->rr[3]);
-    myUi.redValue4->setValue(canvas->rr[4]);
-    myUi.greenValue0->setValue(canvas->gg[0]);
-    myUi.greenValue1->setValue(canvas->gg[1]);
-    myUi.greenValue2->setValue(canvas->gg[2]);
-    myUi.greenValue3->setValue(canvas->gg[3]);
-    myUi.greenValue4->setValue(canvas->gg[4]);
-    myUi.blueValue0->setValue(canvas->bb[0]);
-    myUi.blueValue1->setValue(canvas->bb[1]);
-    myUi.blueValue2->setValue(canvas->bb[2]);
-    myUi.blueValue3->setValue(canvas->bb[3]);
-    myUi.blueValue4->setValue(canvas->bb[4]);
-
-    connector.setViewer(canvas);
-    connector.boardsTimeList = myUi.boardsTimeList;
-    connector.boardsTimeHisto = myUi.boardsTimeHisto;
-    connector.startPixelsList = myUi.startPixelsList;
-    connector.startCellHisto = myUi.startCellsHisto;
-    connector.startTimeMarkHisto = myUi.startTimeMarkHisto;
-    connector.pixelValueCurve = myUi.pixelValueCurve;
-    connector.triggerDelayHisto = myUi.triggerDelayHisto;
-    connector.triggerDelayList = myUi.triggerDelayList;
-    connector.autoScaleColor = myUi.autoScaleColor;
-
-    connector.startTimeMarksList = myUi.startTimeMarksList;
-//    connector.fileLoadedLabel = myUi.fileLoadedLabel;
-//    connector.runNumberLabel = myUi.runNumberLabel;
-//    connector.numberOfSlicesLabel = myUi.numberOfSlicesLabel;
-//    connector.numberOfTimeMarksLabel = myUi.numberOfTimeMarksLabel;
-//    connector.runTypeLabel = myUi.runTypeLabel;
-//    connector.firstTimeLabel = myUi.timeOfFirstDataLabel;
-//    connector.lastTimeLabel = myUi.timeOfLastDataLabel;
-    connector.currentPixelValue = myUi.currentPixelValue;
-
-    connector.currentPixelScale = myUi.currentPixelScale;
-    connector.entireCameraScale = myUi.entireCameraScale;
-    connector.playEventsRadio = myUi.playEventsRadio;
-
-    connector.extraInfoLabel = myUi.extraInfoLabel;
-
-    connector.HwIDBox = myUi.HwIDBox;
-    connector.SwIDBox = myUi.SwIDBox;
-    connector.crateIDBox = myUi.crateIDBox;
-    connector.boardIDBox = myUi.boardIDBox;
-    connector.patchIDBox = myUi.patchIDBox;
-
-    connector.eventNumberBox = myUi.displayingEventBox;
-
-    connector.range0 = myUi.colorRange0;
-    connector.range1 = myUi.colorRange1;
-    connector.range2 = myUi.colorRange2;
-    connector.range3 = myUi.colorRange3;
-    connector.range4 = myUi.colorRange4;
-    connector.drawCalibrationCheckBox = myUi.calibratedCheckBox;
-//    connector.drawCalibrationCheckBox->setEnabled(false);
-
-    connector.initHistograms();
-
-    QButtonGroup scaleGroup(canvas);// = new QButtonGroup(canvas);
-    QButtonGroup animateGroup(canvas);// = new QButtonGroup(canvas);
-    scaleGroup.addButton(myUi.currentPixelScale);
-    scaleGroup.addButton(myUi.entireCameraScale);
-    animateGroup.addButton(myUi.playEventsRadio);
-    animateGroup.addButton(myUi.playSlicesRadio);
-    myUi.entireCameraScale->setChecked(true);
-//    QObject::connect(myUi.slicesPlusPlusButton, SIGNAL(clicked()),
-//                    &connector, SLOT(slicesPlusPlus()));
-//    QObject::connect(myUi.slicesMinusMinusButton, SIGNAL(clicked()),
-//                     &connector, SLOT(slicesMinusMinus()));
-
-    QObject::connect(myUi.autoScaleColor, SIGNAL(clicked()),
-                     &connector, SLOT(autoScalePressed()));
-    QObject::connect(canvas, SIGNAL(colorPaletteHasChanged()),
-                     &connector, SLOT(autoScalePressed()));
-
-    QObject::connect(myUi.currentPixelScale, SIGNAL(toggled(bool)),
-                     &connector, SLOT(currentPixelChanged(bool)));
-    QObject::connect(myUi.entireCameraScale, SIGNAL(toggled(bool)),
-                     &connector, SLOT(entireCameraChanged(bool)));
-
-    QObject::connect(myUi.HwIDBox, SIGNAL(valueChanged(int)),
-                         &connector, SLOT(hwIDChanged(int)));
-    QObject::connect(myUi.SwIDBox, SIGNAL(valueChanged(int)),
-                         &connector, SLOT(swIDChanged(int)));
-    QObject::connect(myUi.crateIDBox, SIGNAL(valueChanged(int)),
-                         &connector, SLOT(crateIDChanged(int)));
-    QObject::connect(myUi.boardIDBox, SIGNAL(valueChanged(int)),
-                         &connector, SLOT(boardIDChanged(int)));
-    QObject::connect(myUi.patchIDBox, SIGNAL(valueChanged(int)),
-                         &connector, SLOT(patchIDChanged(int)));
-
- //   connector.pixelChanged(0);
-    QObject::connect(canvas, SIGNAL(signalCurrentPixel(int)),
-                     &connector, SLOT(pixelChanged(int)));
-    QObject::connect(myUi.drawPatchCheckBox, SIGNAL(stateChanged(int)),
-                     &connector, SLOT(drawPatchesCheckChange(int)));
-    QObject::connect(myUi.drawImpulseCheckBox, SIGNAL(stateChanged(int)),
-                     &connector, SLOT(drawImpulseCheckChange(int)));
-    QObject::connect(myUi.drawBlurCheckBox, SIGNAL(stateChanged(int)),
-                     &connector, SLOT(drawBlurCheckChange(int)));
-    QObject::connect(myUi.loopOverCurrentEventBox, SIGNAL(stateChanged(int)),
-                     &connector, SLOT(loopEventCheckChange(int)));
-    QObject::connect(canvas, SIGNAL(newFileLoaded()),
-                     &connector, SLOT(newFileLoaded()));
-
-    QObject::connect(myUi.calibratedCheckBox, SIGNAL(stateChanged(int)),
-                     &connector, SLOT(drawCalibratedDataChanged(int)));
-    QObject::connect(myUi.loadNewFileButton, SIGNAL(clicked()),
-                     &connector, SLOT(loadNewFileClicked()));
-    QObject::connect(myUi.loadDRSCalibButton, SIGNAL(clicked()),
-                     &connector, SLOT(loadNewCalibFileClicked()));
-
-    QObject::connect(myUi.colorRange0, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(rangeChanged0(double)));
-
-    QObject::connect(myUi.colorRange1, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(rangeChanged1(double)));
-
-    QObject::connect(myUi.colorRange2, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(rangeChanged2(double)));
-
-    QObject::connect(myUi.colorRange3, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(rangeChanged3(double)));
-
-    QObject::connect(myUi.colorRange4, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(rangeChanged4(double)));
-
-    QObject::connect(myUi.redValue0, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(redChanged0(double)));
-
-    QObject::connect(myUi.redValue1, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(redChanged1(double)));
-
-    QObject::connect(myUi.redValue2, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(redChanged2(double)));
-
-    QObject::connect(myUi.redValue3, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(redChanged3(double)));
-
-    QObject::connect(myUi.redValue4, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(redChanged4(double)));
-
-    QObject::connect(myUi.greenValue0, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(greenChanged0(double)));
-
-    QObject::connect(myUi.greenValue1, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(greenChanged1(double)));
-
-    QObject::connect(myUi.greenValue2, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(greenChanged2(double)));
-
-    QObject::connect(myUi.greenValue3, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(greenChanged3(double)));
-
-    QObject::connect(myUi.greenValue4, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(greenChanged4(double)));
-
-    QObject::connect(myUi.blueValue0, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(blueChanged0(double)));
-
-    QObject::connect(myUi.blueValue1, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(blueChanged1(double)));
-
-    QObject::connect(myUi.blueValue2, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(blueChanged2(double)));
-
-    QObject::connect(myUi.blueValue3, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(blueChanged3(double)));
-
-    QObject::connect(myUi.blueValue4, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(blueChanged4(double)));
-
-    QObject::connect(myUi.slicesPerSecValue, SIGNAL(valueChanged(double)),
-                      &connector, SLOT(slicesPerSecondChanged(double)));
-    QObject::connect(myUi.playPauseButton, SIGNAL(clicked()),
-                     &connector, SLOT(playPauseClicked()));
-
-    QObject::connect(canvas, SIGNAL(signalCurrentSlice(int)),
-                     &connector, SLOT(currentSliceHasChanged(int)));
-    QObject::connect(canvas, SIGNAL(signalCurrentEvent(int)),
-                     &connector, SLOT(currentEventHasChanged(int)));
-
-    QObject::connect(&connector, SIGNAL(updateCurrentSliceDisplay(int)),
-                     myUi.displayingSliceBox, SLOT(setValue(int)));
-
-    QObject::connect(myUi.displayingSliceBox, SIGNAL(valueChanged(int)),
-                    &connector, SLOT(sliceChangedFromSpinner(int)));
-    QObject::connect(myUi.displayingEventBox, SIGNAL(valueChanged(int)),
-                    &connector, SLOT(eventChangedFromSpinner(int)));
-
-//    QObject::connect(&connector, SIGNAL(updateCurrentEventDisplay(QString)),
-//                     myUi.displayingEventLabel, SLOT(setText(const QString)));
-    QObject::connect(&connector, SIGNAL(updateCurrentEventDisplay(int)),
-                     myUi.displayingEventBox, SLOT(setValue(int)));
-
-    QObject::connect(&connector, SIGNAL(updateCurrentPCTime(QString)),
-                     myUi.PCTimeLabel, SLOT(setText(const QString)));
-    QObject::connect(&connector, SIGNAL(updateCurrentSoftTrigger(QString)),
-                     myUi.softwareTriggerLabel, SLOT(setText(const QString)));
-    QObject::connect(&connector, SIGNAL(updateCurrentTriggerType(QString)),
-                     myUi.triggerTypeLabel, SLOT(setText(const QString)));
-    QObject::connect(&connector, SIGNAL(updateCurrentPixelSliceValue(const QString)),
-                     myUi.currentPixelValue, SLOT(setText(const QString)));
-
-    if (conf.Has("file"))
-    {
-        const QString qstr(conf.Get<string>("file").c_str());
-        connector.fileSelected(qstr);
-    }
-
-    if (conf.Has("drs"))
-    {
-        const QString qstr(conf.Get<string>("drs").c_str());
-        connector.calibFileSelected(qstr);
-    }
-
-    mainWindow.show();
+        return 3;
 
     return app.exec();
Index: trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h
===================================================================
--- trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h	(revision 12184)
+++ trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h	(revision 12185)
@@ -107,5 +107,5 @@
     void eventStepping(bool plus);
 //    void buildVerticesList();
-    void buildPatchesIndices();
+//    void buildPatchesIndices();
     void calcBlurColor(int pixel, int vertex);
     void drawBlurryHexagon(int index);
@@ -186,20 +186,30 @@
  * Class UIConnector. used to connect the interface to the raw data displayer
  *************************************************/
-class UIConnector : public QObject
+#include "viewer.h"
+
+class Configuration;
+
+class UIConnector : public QMainWindow, protected Ui::MainWindow
 {
     Q_OBJECT
+private:
+    QTimer timer;
+    std::string currentFile;
+    std::string currentCalibFile;
+
+    QRectF scaleBoundingRectangle(QRectF rectangle, float scale);
+
+    bool updateSpinnerDisplay;
+    bool updating;
+
+    void initHistograms();
+
 public:
     UIConnector(QWidget *parent = 0);
-    void setViewer(RawDataViewer* v);
 
 public Q_SLOTS:
-    void loadNewFileClicked();
-    void loadNewCalibFileClicked();
     void fileSelected(QString file);
     void calibFileSelected(QString file);
-    void drawPatchesCheckChange(int state);
-    void drawImpulseCheckChange(int state);
-    void drawBlurCheckChange(int state);
-    void loopEventCheckChange(int state);
+
     void newFileLoaded();
     void playPauseClicked();
@@ -208,122 +218,73 @@
     void currentSliceHasChanged(int slice);
     void currentEventHasChanged(int event);
-    void rangeChanged0(double value);
-    void rangeChanged1(double value);
-    void rangeChanged2(double value);
-    void rangeChanged3(double value);
-    void rangeChanged4(double value);
-    void redChanged0(double value);
-    void redChanged1(double value);
-    void redChanged2(double value);
-    void redChanged3(double value);
-    void redChanged4(double value);
-    void greenChanged0(double value);
-    void greenChanged1(double value);
-    void greenChanged2(double value);
-    void greenChanged3(double value);
-    void greenChanged4(double value);
-    void blueChanged0(double value);
-    void blueChanged1(double value);
-    void blueChanged2(double value);
-    void blueChanged3(double value);
-    void blueChanged4(double value);
+
+    void on_loadNewFileButton_clicked();
+    void on_loadDRSCalibButton_clicked();
+
+    void on_drawPatchCheckBox_stateChanged(int);
+    void on_drawImpulseCheckBox_stateChanged(int);
+    void on_drawBlurCheckBox_stateChanged(int);
+    void on_loopOverCurrentEventBox_stateChanged(int);
+
+    void on_colorRange0_valueChanged(double);
+    void on_colorRange1_valueChanged(double);
+    void on_colorRange2_valueChanged(double);
+    void on_colorRange3_valueChanged(double);
+    void on_colorRange4_valueChanged(double);
+    void on_redValue0_valueChanged(double);
+    void on_redValue1_valueChanged(double);
+    void on_redValue2_valueChanged(double);
+    void on_redValue3_valueChanged(double);
+    void on_redValue4_valueChanged(double);
+    void on_greenValue0_valueChanged(double);
+    void on_greenValue1_valueChanged(double);
+    void on_greenValue2_valueChanged(double);
+    void on_greenValue3_valueChanged(double);
+    void on_greenValue4_valueChanged(double);
+    void on_blueValue0_valueChanged(double);
+    void on_blueValue1_valueChanged(double);
+    void on_blueValue2_valueChanged(double);
+    void on_blueValue3_valueChanged(double);
+    void on_blueValue4_valueChanged(double);
+
     void pixelChanged(int pixel);
-    void hwIDChanged(int hwid);
-    void swIDChanged(int swid);
-    void crateIDChanged(int cid);
-    void boardIDChanged(int bid);
-    void patchIDChanged(int pid);
-    void autoScalePressed();
-    void entireCameraChanged(bool state);
-    void currentPixelChanged(bool state);
+
+    void cbpxChanged();
+
+    void on_HwIDBox_valueChanged(int = 0);
+    void on_SwIDBox_valueChanged(int);
+    void on_crateIDBox_valueChanged(int) { cbpxChanged(); }
+    void on_boardIDBox_valueChanged(int) { cbpxChanged(); }
+    void on_patchIDBox_valueChanged(int) { cbpxChanged(); }
+    void on_pixelIDBox_valueChanged(int) { cbpxChanged(); }
+
+    void on_autoScaleColor_clicked();
+    void on_entireCameraScale_toggled(bool) { on_autoScaleColor_clicked(); }
+    void on_currentPixelScale_toggled(bool) { on_autoScaleColor_clicked(); }
+
     void slicesPlusPlus();
     void slicesMinusMinus();
-    void drawCalibratedDataChanged(int state);
-    void eventChangedFromSpinner(int cEvent);
-    void sliceChangedFromSpinner(int cSlice);
-
-Q_SIGNALS:
-    void updateCurrentSliceDisplay(int);
-    void updateCurrentEventDisplay(int);
-    void updateCurrentPCTime(QString);
-    void updateCurrentSoftTrigger(QString);
-    void updateCurrentTriggerType(QString);
-    void updateCurrentPixelSliceValue(QString);
-
+
+    void on_calibratedCheckBox_stateChanged(int state);
+    void on_displayingSliceBox_valueChanged(int);
+    void on_displayingEventBox_valueChanged(int);
+
+    int SetupConfiguration(Configuration &conf);
 
 private:
-    RawDataViewer* viewer;
-    QTimer timer;
-    std::string currentFile;
-    std::string currentCalibFile;
-    int crateID;
-    int boardID;
-    int patchID;
-    int hwID;
-    int swID;
-    bool rescaleWholeCamera;
-    QRectF scaleBoundingRectangle(QRectF rectangle, float scale);
-    bool updateSpinnerDisplay;
-
-public:
-    QListWidget *boardsTimeList;
-    QListWidget* startPixelsList;
-    QListWidget* startTimeMarksList;
-//   QLabel*      fileLoadedLabel;
-//    QLabel*      runNumberLabel;
-//    QLabel*      numberOfSlicesLabel;
-//    QLabel*      numberOfTimeMarksLabel;
-//    QLabel*      runTypeLabel;
-//    QLabel*      firstTimeLabel;
-//    QLabel*      lastTimeLabel;
-    QLabel*      currentPixelValue;
-    QLabel*      extraInfoLabel;
-
-    QwtPlot*     boardsTimeHisto;
-    QwtPlot*     startCellHisto;
-    QwtPlot*     startTimeMarkHisto;
-    QwtPlot*     pixelValueCurve;
     QwtPlotCurve boardsTimeHistoItem;
     QwtPlotCurve startCellHistoItem;
     QwtPlotCurve startTimeMarkHistoItem;
-    QwtPlotCurve     pixelValueCurveItem;
-    QwtPlotCurve     aMeanCurveItem;
-    QwtPlotCurve     vCorrCurveItem;
-    QwtPlotCurve     meanCurveItem;
+    QwtPlotCurve pixelValueCurveItem;
+    QwtPlotCurve aMeanCurveItem;
+    QwtPlotCurve vCorrCurveItem;
+    QwtPlotCurve meanCurveItem;
+    QwtPlotCurve triggerDelayHistoItem;
+
     QwtPlotZoomer* curveZoom;
     QwtPlotZoomer* boardsTimeHistoZoom;
     QwtPlotZoomer* startCellHistoZoom;
     QwtPlotZoomer* startTimeMarkHistoZoom;
-
-    QwtPlot*        triggerDelayHisto;
-    QwtPlotCurve triggerDelayHistoItem;
     QwtPlotZoomer* triggerDelayHistoZoom;
-
-    QPushButton* autoScaleColor;
-
-    QListWidget* triggerDelayList;
-
-    QSpinBox*   HwIDBox;
-    QSpinBox*   SwIDBox;
-    QSpinBox*   crateIDBox;
-    QSpinBox*   boardIDBox;
-    QSpinBox*   patchIDBox;
-
-    QSpinBox*   eventNumberBox;
-
-    QRadioButton* currentPixelScale;
-    QRadioButton* entireCameraScale;
-    QRadioButton* playEventsRadio;
-
-    QDoubleSpinBox* range0;
-    QDoubleSpinBox* range1;
-    QDoubleSpinBox* range2;
-    QDoubleSpinBox* range3;
-    QDoubleSpinBox* range4;
-
-    QCheckBox*  drawCalibrationCheckBox;
-
-    void initHistograms();
-
 };
 
