Changeset 10518


Ignore:
Timestamp:
May 2, 2011, 7:12:55 PM (9 years ago)
Author:
tbretz
Message:
Added latest changes, which includes almost a complete FTM support and implements root-plots.
Location:
trunk/FACT++/gui
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/gui/FactGui.h

    r10415 r10518  
    55
    66#include <iomanip>
     7#include <valarray>
    78
    89#include <boost/bind.hpp>
    910
    10 #include <QtGui/QStandardItemModel>
     11#include <QTimer>
     12#include <QStandardItemModel>
    1113
    1214#include "CheckBoxDelegate.h"
     
    1517#include "src/HeadersFTM.h"
    1618#include "src/DimNetwork.h"
     19#include "src/tools.h"
     20
     21#include "TROOT.h"
     22#include "TSystem.h"
     23#include "TGraph.h"
     24#include "TH1.h"
     25#include "TStyle.h"
     26#include "TMarker.h"
     27#include "TColor.h"
    1728
    1829using namespace std;
     30    class Camera : public TObject
     31    {
     32        typedef pair<double,double> Position;
     33        typedef vector<Position> Positions;
     34        Positions fGeom;
     35
     36    void CreatePalette()
     37        {
     38            /*
     39        double ss[5] = {0., 0.10, 0.45, 0.75, 1.00};
     40        double rr[5] = {0., 0.35, 0.85, 1.00, 1.00};
     41        double gg[5] = {0., 0.10, 0.20, 0.73, 1.00};
     42        double bb[5] = {0., 0.03, 0.06, 0.00, 1.00};
     43              */
     44        double ss[5] = {0., 0.25, 0.50, 0.75, 1.00};
     45        double rr[5] = {0., 0.00, 0.00, 1.00, 1.00};
     46        double gg[5] = {0., 0.00, 1.00, 0.00, 1.00};
     47        double bb[5] = {0., 1.00, 0.00, 0.00, 1.00};
     48
     49        const Int_t nn = 1438;
     50
     51        Int_t idx = TColor::CreateGradientColorTable(5, ss, rr, gg, bb, nn);
     52        for (int i=0; i<nn; i++)
     53            fPalette.push_back(idx++);
     54    }
     55
     56    void CreateGeometry()
     57    {
     58        const double gsSin60 = sqrt(3.)/2; 
     59
     60        const int rings = 23;
     61
     62        //  add the first pixel to the list
     63
     64        fGeom.push_back(make_pair(0, -0.5));
     65
     66        for (int ring=1; ring<=rings; ring++)
     67        {
     68            for (int s=0; s<6; s++)
     69            {
     70                for (int i=1; i<=ring; i++)
     71                {
     72                    double xx, yy;
     73                    switch (s)
     74                    {
     75                    case 0: // Direction South East
     76                        xx = (ring+i)*0.5;
     77                        yy = (-ring+i)*gsSin60;
     78                        break;
     79
     80                    case 1: // Direction North East
     81                        xx = ring-i*0.5;
     82                        yy = i*gsSin60;
     83                        break;
     84
     85                    case 2: // Direction North
     86                        xx = ring*0.5-i;
     87                        yy = ring*gsSin60;
     88                        break;
     89
     90                    case 3: // Direction North West
     91                        xx = -(ring+i)*0.5;
     92                        yy = (ring-i)*gsSin60;
     93                        break;
     94
     95                    case 4: // Direction South West
     96                        xx = 0.5*i-ring;
     97                        yy = -i*gsSin60;
     98                        break;
     99
     100                    case 5: // Direction South
     101                        xx = i-ring*0.5;
     102                        yy = -ring*gsSin60;
     103                        break;
     104                    }
     105
     106                    if (xx*xx + yy*yy - xx > 395.75)
     107                        continue;
     108
     109                    fGeom.push_back(make_pair(yy, xx-0.5));
     110                }
     111            }
     112        }
     113    }
     114
     115    valarray<double> fData;
     116    map<int, bool>   fBold;
     117    map<int, bool>   fEnable;
     118
     119    int fWhite;
     120
     121public:
     122    Camera() : fData(0., 1438), fWhite(-1)
     123    {
     124        CreatePalette();
     125        CreateGeometry();
     126
     127        for (int i=0; i<1438; i++)
     128            fData[i] = i;
     129    }
     130
     131    void Reset() { fBold.clear(); }
     132
     133    void SetBold(int idx) { fBold[idx]=true; }
     134    void SetWhite(int idx) { fWhite=idx; }
     135    void SetEnable(int idx, bool b) { fEnable[idx]=b; }
     136    void Toggle(int idx) { fEnable[idx]=!fEnable[idx]; }
     137
     138    const char *GetName() const { return "Camera"; }
     139
     140    vector<Int_t> fPalette;
     141
     142    void Paint(const Position &p)
     143    {
     144        static const Double_t fgCos60 = 0.5;        // TMath::Cos(60/TMath::RadToDeg());
     145        static const Double_t fgSin60 = sqrt(3.)/2; // TMath::Sin(60/TMath::RadToDeg());
     146
     147        static const Double_t fgDy[6] = { fgCos60,   0.,         -fgCos60,   -fgCos60,    0.,           fgCos60   };
     148        static const Double_t fgDx[6] = { fgSin60/3, fgSin60*2/3, fgSin60/3, -fgSin60/3, -fgSin60*2/3, -fgSin60/3 };
     149
     150        //
     151        //  calculate the positions of the pixel corners
     152        //
     153        Double_t x[7], y[7];
     154        for (Int_t i=0; i<7; i++)
     155        {
     156            x[i] = p.first  + fgDx[i%6];
     157            y[i] = p.second + fgDy[i%6];
     158        }
     159
     160        gPad->PaintFillArea(6, x, y);
     161        gPad->PaintPolyLine(7, x, y);
     162
     163    }
     164
     165    void Paint(Option_t *)
     166    {
     167        gStyle->SetPalette(fPalette.size(), fPalette.data());
     168
     169
     170        const double r   = double(gPad->GetWw())/gPad->GetWh();
     171        const double max = 20.5; // 20.5 rings in x and y
     172
     173        if (r>1)
     174            gPad->Range(-r*max, -max, r*max, max);
     175        else
     176            gPad->Range(-max, -max/r, max, max/r);
     177
     178
     179        const double min   = fData.min();
     180        const double scale = fData.max()-fData.min();
     181
     182        TAttFill fill(0, 1001);
     183        TAttLine line;
     184
     185        int cnt=0;
     186        for (Positions::iterator p=fGeom.begin(); p!=fGeom.end(); p++, cnt++)
     187        {
     188            if (fBold[cnt])
     189                continue;
     190
     191
     192            const int col = (fData[cnt]-min)/scale*(fPalette.size()-1);
     193
     194            if (fEnable[cnt])
     195                fill.SetFillColor(gStyle->GetColorPalette(col));
     196            else
     197                fill.SetFillColor(kWhite);
     198
     199            fill.Modify();
     200
     201            Paint(*p);
     202        }
     203
     204        line.SetLineWidth(2);
     205        line.Modify();
     206
     207        cnt = 0;
     208        for (Positions::iterator p=fGeom.begin(); p!=fGeom.end(); p++, cnt++)
     209        {
     210            if (!fBold[cnt])
     211                continue;
     212
     213            const int col = (fData[cnt]-min)/scale*(fPalette.size()-1);
     214
     215            if (fEnable[cnt])
     216                fill.SetFillColor(gStyle->GetColorPalette(col));
     217            else
     218                fill.SetFillColor(kWhite);
     219            fill.Modify();
     220
     221            Paint(*p);
     222        }
     223
     224        TMarker m(0,0,kStar);
     225        m.DrawMarker(0, 0);
     226
     227        if (fWhite<0)
     228            return;
     229
     230        const Position &p = fGeom[fWhite];
     231
     232        line.SetLineColor(kWhite);
     233        line.Modify();
     234
     235        const int col = (fData[fWhite]-min)/scale*(fPalette.size()-1);
     236
     237        if (fEnable[fWhite])
     238            fill.SetFillColor(gStyle->GetColorPalette(col));
     239        else
     240            fill.SetFillColor(kWhite);
     241        fill.Modify();
     242
     243        Paint(p);
     244    }
     245
     246    int GetIdx(float px, float py) const
     247    {
     248        static const double sqrt3 = sqrt(3);
     249
     250        int idx = 0;
     251        for (Positions::const_iterator p=fGeom.begin(); p!=fGeom.end(); p++, idx++)
     252        {
     253            const Double_t dy = py - p->second;
     254            if (fabs(dy)>0.5)
     255                continue;
     256
     257            const Double_t dx = px - p->first;
     258
     259            if  (TMath::Abs(dy + dx*sqrt3) > 1)
     260                continue;
     261
     262            if  (TMath::Abs(dy - dx*sqrt3) > 1)
     263                continue;
     264
     265            return idx;
     266        }
     267        return -1;
     268    }
     269
     270    char* GetObjectInfo(Int_t px, Int_t py) const
     271    {
     272        static stringstream stream;
     273        static string       str;
     274
     275        const float x = gPad->PadtoX(gPad->AbsPixeltoX(px));
     276        const float y = gPad->PadtoY(gPad->AbsPixeltoY(py));
     277
     278        const int idx = GetIdx(x, y);
     279
     280        stream.seekp(0);
     281        if (idx>=0)
     282            stream << "Pixel=" << idx << "   Data=" << fData[idx] << '\0';
     283
     284        str = stream.str();
     285        return const_cast<char*>(str.c_str());
     286    }
     287
     288    Int_t DistancetoPrimitive(Int_t px, Int_t py)
     289    {
     290        const float x = gPad->PadtoX(gPad->AbsPixeltoX(px));
     291        const float y = gPad->PadtoY(gPad->AbsPixeltoY(py));
     292
     293        return GetIdx(x, y)>=0 ? 0 : 99999;
     294    }
     295
     296    void SetData(const valarray<double> &data)
     297    {
     298        fData = data;
     299    }
     300
     301
     302    };
     303
    19304
    20305class FactGui : public MainWindow, public DimNetwork
     
    33318    };
    34319
    35     DimInfo fDimDNS;
     320    DimStampedInfo fDimDNS;
     321
     322    DimStampedInfo fDimLoggerStats;
     323    DimStampedInfo fDimLoggerFilenameNight;
     324    DimStampedInfo fDimLoggerFilenameRun;
     325    DimStampedInfo fDimLoggerNumSubs;
     326
     327    DimStampedInfo fDimFtmPassport;
     328    DimStampedInfo fDimFtmTriggerCounter;
     329    DimStampedInfo fDimFtmError;
     330    DimStampedInfo fDimFtmFtuList;
     331    DimStampedInfo fDimFtmStaticData;
     332    DimStampedInfo fDimFtmDynamicData;
     333
     334    vector<DimInfo*> fDim;
    36335    map<string, DimInfo*> fServices;
    37336
    38     // ======================================================================
     337    // ===================== Services and Commands ==========================
    39338
    40339    QStandardItem *AddServiceItem(const std::string &server, const std::string &service, bool iscmd)
     
    112411        desc->setSelectable(false);
    113412        item->setChild(0, 0, desc);
     413    }
     414
     415    void AddServer(const std::string &s)
     416    {
     417        DimNetwork::AddServer(s);
     418
     419        QApplication::postEvent(this,
     420           new FunctionEvent(boost::bind(&FactGui::handleAddServer, this, s)));
     421    }
     422
     423    void RemoveServer(const std::string &s)
     424    {
     425        UnsubscribeServer(s);
     426
     427        DimNetwork::RemoveServer(s);
     428
     429        QApplication::postEvent(this,
     430           new FunctionEvent(boost::bind(&FactGui::handleRemoveServer, this, s)));
     431    }
     432
     433    void RemoveAllServers()
     434    {
     435        UnsubscribeAllServers();
     436
     437        vector<string> v = GetServerList();
     438        for (vector<string>::iterator i=v.begin(); i<v.end(); i++)
     439            QApplication::postEvent(this,
     440                                    new FunctionEvent(boost::bind(&FactGui::handleStateOffline, this, *i)));
     441
     442        DimNetwork::RemoveAllServers();
     443
     444        QApplication::postEvent(this,
     445           new FunctionEvent(boost::bind(&FactGui::handleRemoveAllServers, this)));
     446    }
     447
     448    void AddService(const std::string &server, const std::string &service, const std::string &fmt, bool iscmd)
     449    {
     450        QApplication::postEvent(this,
     451           new FunctionEvent(boost::bind(&FactGui::handleAddService, this, server, service, fmt, iscmd)));
     452    }
     453
     454    void RemoveService(const std::string &server, const std::string &service, bool iscmd)
     455    {
     456        if (fServices.find(server+'/'+service)!=fServices.end())
     457            UnsubscribeService(server+'/'+service);
     458
     459        QApplication::postEvent(this,
     460           new FunctionEvent(boost::bind(&FactGui::handleRemoveService, this, server, service, iscmd)));
     461    }
     462
     463    void RemoveAllServices(const std::string &server)
     464    {
     465        UnsubscribeServer(server);
     466
     467        QApplication::postEvent(this,
     468           new FunctionEvent(boost::bind(&FactGui::handleRemoveAllServices, this, server)));
     469    }
     470
     471    void AddDescription(const std::string &server, const std::string &service, const vector<Description> &vec)
     472    {
     473        QApplication::postEvent(this,
     474           new FunctionEvent(boost::bind(&FactGui::handleAddDescription, this, server, service, vec)));
    114475    }
    115476
     
    194555    }
    195556
     557    // ======================================================================
     558
     559    void SubscribeService(const string &service)
     560    {
     561        if (fServices.find(service)!=fServices.end())
     562        {
     563            cout << "ERROR - We are already subscribed to " << service << endl;
     564            return;
     565        }
     566
     567        fServices[service] = new DimStampedInfo(service.c_str(), (void*)NULL, 0, this);
     568    }
     569
     570    void UnsubscribeService(const string &service)
     571    {
     572        const map<string,DimInfo*>::iterator i=fServices.find(service);
     573
     574        if (i==fServices.end())
     575        {
     576            cout << "ERROR - We are not subscribed to " << service << endl;
     577            return;
     578        }
     579
     580        delete i->second;
     581
     582        fServices.erase(i);
     583    }
     584
     585    void UnsubscribeServer(const string &server)
     586    {
     587        for (map<string,DimInfo*>::iterator i=fServices.begin();
     588             i!=fServices.end(); i++)
     589            if (i->first.substr(0, server.length()+1)==server+'/')
     590            {
     591                delete i->second;
     592                fServices.erase(i);
     593            }
     594    }
     595
     596    void UnsubscribeAllServers()
     597    {
     598        for (map<string,DimInfo*>::iterator i=fServices.begin();
     599             i!=fServices.end(); i++)
     600            delete i->second;
     601
     602        fServices.clear();
     603    }
     604
     605    // ======================================================================
     606
     607    struct DimData
     608    {
     609        Time time;
     610        int  qos;
     611        string name;
     612        string format;
     613        vector<char> data;
     614
     615        DimInfo *info;  // this is ONLY for a fast check of the type of the DimData!!
     616
     617        DimData(DimInfo *inf) :
     618            time(inf->getTimestamp(), inf->getTimestampMillisecs()*1000),
     619            qos(inf->getQuality()),
     620            name(inf->getName()),
     621            format(inf->getFormat()),
     622            data(inf->getString(), inf->getString()+inf->getSize()),
     623            info(inf)
     624        {
     625        }
     626
     627        template<typename T>
     628                T get() const { return *reinterpret_cast<const T*>(data.data()); }
     629
     630            vector<char> vec(int b) const { return vector<char>(data.begin()+b, data.end()); }
     631            string str(unsigned int b) const { return b>=data.size()?string():string(data.data()+b, data.size()-b); }
     632            const char *c_str() const { return (char*)data.data(); }
     633
     634            vector<boost::any> any() const
     635            {
     636                const Converter conv(format);
     637                conv.Print();
     638                return conv.GetAny(data.data(), data.size());
     639            }
     640            int size() const { return data.size(); }
     641            const void *ptr() const { return data.data(); }
     642    };
     643
     644    // ======================= DNS ==========================================
     645
     646    void handleDimDNS(int version)
     647    {
     648        ostringstream str;
     649        str << "V" << version/100 << 'r' << version%100;
     650
     651        if (version==0)
     652            fStatusDNSLed->setIcon(QIcon(":/Resources/icons/red circle 1.png"));
     653        else
     654            fStatusDNSLed->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     655
     656        fStatusDNSLabel->setText(version==0?"Offline":str.str().c_str());
     657        fStatusDNSLabel->setToolTip(version==0?"No connection to DIM DNS.":"Connection to DIM DNS established.");
     658    }
     659
     660
     661    // ======================= Logger =======================================
     662
     663    void handleLoggerStats(const DimData &d)
     664    {
     665        const bool connected = d.size()!=0;
     666
     667        fLoggerET->setEnabled(connected);
     668        fLoggerRate->setEnabled(connected);
     669        fLoggerWritten->setEnabled(connected);
     670        fLoggerFreeSpace->setEnabled(connected);
     671        fLoggerSpaceLeft->setEnabled(connected);
     672
     673        if (!connected)
     674            return;
     675
     676        const vector<boost::any> any = d.any();
     677
     678        const size_t rate    = boost::any_cast<int>(any[2]);
     679        const size_t space   = boost::any_cast<long long>(any[1]);
     680        const size_t written = boost::any_cast<long long>(any[0]);
     681
     682        fLoggerFreeSpace->setSuffix(" MB");
     683        fLoggerFreeSpace->setDecimals(0);
     684        fLoggerFreeSpace->setValue(space*1e-6);
     685
     686        if (space>   1000000)  // > 1GB
     687        {
     688            fLoggerFreeSpace->setSuffix(" GB");
     689            fLoggerFreeSpace->setDecimals(2);
     690            fLoggerFreeSpace->setValue(space*1e-9);
     691        }
     692        if (space>=  3000000)  // >= 3GB
     693        {
     694            fLoggerFreeSpace->setSuffix(" GB");
     695            fLoggerFreeSpace->setDecimals(1);
     696            fLoggerFreeSpace->setValue(space*1e-9);
     697        }
     698        if (space>=100000000)  // >= 100GB
     699        {
     700            fLoggerFreeSpace->setSuffix(" GB");
     701            fLoggerFreeSpace->setDecimals(0);
     702            fLoggerFreeSpace->setValue(space*1e-9);
     703        }
     704
     705        fLoggerET->setTime(QTime().addSecs(rate>0?space/rate:0));
     706        fLoggerRate->setValue(rate*1e-3); // kB/s
     707        fLoggerWritten->setValue(written*1e-6);
     708
     709        fLoggerRate->setSuffix(" kB/s");
     710        fLoggerRate->setDecimals(2);
     711        fLoggerRate->setValue(rate*1e-3);
     712        if (rate>   2000)  // > 2kB/s
     713        {
     714            fLoggerRate->setSuffix(" kB/s");
     715            fLoggerRate->setDecimals(1);
     716            fLoggerRate->setValue(rate*1e-3);
     717        }
     718        if (rate>=100000)  // >100kB/s
     719        {
     720            fLoggerRate->setSuffix(" kB/s");
     721            fLoggerRate->setDecimals(0);
     722            fLoggerRate->setValue(rate*1e-3);
     723        }
     724        if (rate>=1000000)  // >100kB/s
     725        {
     726            fLoggerRate->setSuffix(" MB/s");
     727            fLoggerRate->setDecimals(2);
     728            fLoggerRate->setValue(rate*1e-6);
     729        }
     730        if (rate>=10000000)  // >1MB/s
     731        {
     732            fLoggerRate->setSuffix(" MB/s");
     733            fLoggerRate->setDecimals(1);
     734            fLoggerRate->setValue(rate*1e-6);
     735        }
     736        if (rate>=100000000)  // >10MB/s
     737        {
     738            fLoggerRate->setSuffix(" MB/s");
     739            fLoggerRate->setDecimals(0);
     740            fLoggerRate->setValue(rate*1e-6);
     741        }
     742
     743        if (space/10000000>static_cast<size_t>(fLoggerSpaceLeft->maximum()))
     744            fLoggerSpaceLeft->setValue(fLoggerSpaceLeft->maximum());  // MB
     745        else
     746            fLoggerSpaceLeft->setValue(space/10000000);  // MB
     747    }
     748
     749    void handleLoggerFilenameNight(const DimData &d)
     750    {
     751        const bool connected = d.size()!=0;
     752
     753        fLoggerFilenameNight->setEnabled(connected);
     754        if (connected)
     755            fLoggerFilenameNight->setText(d.c_str());
     756
     757        if (d.qos&1)
     758            fLoggerLedLog->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     759        else
     760            fLoggerLedLog->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     761
     762        if (d.qos&2)
     763            fLoggerLedRep->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     764        else
     765            fLoggerLedRep->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     766
     767        if (d.qos&4)
     768            fLoggerLedFits->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     769        else
     770            fLoggerLedFits->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     771    }
     772
     773    void handleLoggerFilenameRun(const DimData &d)
     774    {
     775        const bool connected = d.size()!=0;
     776
     777        fLoggerFilenameRun->setEnabled(connected);
     778        if (connected)
     779            fLoggerFilenameRun->setText(d.c_str());
     780
     781        if (d.qos&1)
     782            fLoggerLedLog->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     783        else
     784            fLoggerLedLog->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     785
     786        if (d.qos&2)
     787            fLoggerLedRep->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     788        else
     789            fLoggerLedRep->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     790
     791        if (d.qos&4)
     792            fLoggerLedFits->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     793        else
     794            fLoggerLedFits->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     795    }
     796
     797    void handleLoggerNumSubs(const DimData &d)
     798    {
     799        const bool connected = d.size()!=0;
     800
     801        fLoggerSubscriptions->setEnabled(connected);
     802        fLoggerOpenFiles->setEnabled(connected);
     803        if (!connected)
     804            return;
     805
     806        const vector<boost::any> any = d.any();
     807
     808        fLoggerSubscriptions->setValue(boost::any_cast<int>(any[0]));
     809        fLoggerOpenFiles->setValue(boost::any_cast<int>(any[1]));
     810    }
     811
     812    // ===================== FTM ============================================
     813
     814    void handleFtmTriggerCounter(const DimData &d)
     815    {
     816        if (d.size()==0)
     817            return;
     818
     819        if (d.size()!=sizeof(FTM::DimTriggerCounter))
     820        {
     821            cout << "Size mismatch: " << d.size() << " " << sizeof(FTM::DimTriggerCounter) << endl;
     822            return;
     823        }
     824
     825        const FTM::DimTriggerCounter &sdata = *reinterpret_cast<const FTM::DimTriggerCounter*>(d.ptr());
     826
     827        fFtmTime->setText(QString::number(sdata.fTimeStamp));
     828        fTriggerCounter->setText(QString::number(sdata.fTriggerCounter));
     829    }
     830
     831    void handleFtmDynamicData(const DimData &d)
     832    {
     833        if (d.size()==0)
     834            return;
     835
     836        if (d.size()!=sizeof(FTM::DimDynamicData))
     837        {
     838            cout << "Size mismatch: " << d.size() << " " << sizeof(FTM::DimDynamicData) << endl;
     839            return;
     840        }
     841
     842        const FTM::DimDynamicData &sdata = *reinterpret_cast<const FTM::DimDynamicData*>(d.ptr());
     843
     844        fFtmTime->setText(QString::number(sdata.fTimeStamp));
     845        fOnTime->setText(QString::number(sdata.fOnTimeCounter));
     846
     847        fFtmTemp0->setValue(sdata.fTempSensor[0]*0.1);
     848        fFtmTemp1->setValue(sdata.fTempSensor[1]*0.1);
     849        fFtmTemp2->setValue(sdata.fTempSensor[2]*0.1);
     850        fFtmTemp3->setValue(sdata.fTempSensor[3]*0.1);
     851
     852
     853        // ----------------------------------------------
     854
     855        TCanvas *c = fFtmTempCanv->GetCanvas();
     856
     857        static int cntr = 0;
     858        double_t tm = cntr++;//Time().RootTime();
     859
     860        TH1 *h = (TH1*)c->FindObject("MyFrame");
     861        h->FindBin(tm);
     862
     863        fGraphFtmTemp[0].SetPoint(fGraphFtmTemp[0].GetN(), tm, sdata.fTempSensor[0]*0.1);
     864        fGraphFtmTemp[1].SetPoint(fGraphFtmTemp[1].GetN(), tm, sdata.fTempSensor[1]*0.1);
     865        fGraphFtmTemp[2].SetPoint(fGraphFtmTemp[2].GetN(), tm, sdata.fTempSensor[2]*0.1);
     866        fGraphFtmTemp[3].SetPoint(fGraphFtmTemp[3].GetN(), tm, sdata.fTempSensor[3]*0.1);
     867
     868        c->Modified();
     869        c->Update();
     870
     871        // ----------------------------------------------
     872
     873        valarray<double> dat(0., 1438);
     874
     875        for (int i=0; i<1438; i++)
     876            dat[i] = sdata.fRatePatch[fPatch[i]];
     877
     878        c = fRatesCanv->GetCanvas();
     879        Camera *cam = (Camera*)c->FindObject("Camera");
     880
     881        cam->SetData(dat);
     882
     883        c->Modified();
     884        c->Update();
     885    }
     886
     887    FTM::DimStaticData fFtmStaticData;
     888
     889    void handleFtmStaticData(const DimData &d)
     890    {
     891        if (d.size()==0)
     892            return;
     893
     894        if (d.size()!=sizeof(FTM::DimStaticData))
     895        {
     896            cout << "Size mismatch: " << d.size() << " " << sizeof(FTM::DimStaticData) << endl;
     897            return;
     898        }
     899
     900        const FTM::DimStaticData &sdata = *reinterpret_cast<const FTM::DimStaticData*>(d.ptr());
     901
     902        fTriggerInterval->setValue(sdata.fTriggerInterval);
     903        fPhysicsCoincidence->setValue(sdata.fCoincidencePhysics);
     904        fCalibCoincidence->setValue(sdata.fCoincidenceCalib);
     905        fPhysicsWindow->setValue(sdata.fWindowPhysics);
     906        fCalibWindow->setValue(sdata.fWindowCalib);
     907
     908        fTriggerDelay->setValue(sdata.fDelayTrigger);
     909        fTimeMarkerDelay->setValue(sdata.fDelayTimeMarker);
     910        fDeadTime->setValue(sdata.fDeadTime);
     911
     912        fClockCondR0->setValue(sdata.fClockConditioner[0]);
     913        fClockCondR1->setValue(sdata.fClockConditioner[1]);
     914        fClockCondR8->setValue(sdata.fClockConditioner[2]);
     915        fClockCondR9->setValue(sdata.fClockConditioner[3]);
     916        fClockCondR11->setValue(sdata.fClockConditioner[4]);
     917        fClockCondR13->setValue(sdata.fClockConditioner[5]);
     918        fClockCondR14->setValue(sdata.fClockConditioner[6]);
     919        fClockCondR15->setValue(sdata.fClockConditioner[7]);
     920
     921        fTriggerSeqPed->setValue(sdata.fTriggerSeqPed);
     922        fTriggerSeqLP1->setValue(sdata.fTriggerSeqLP1);
     923        fTriggerSeqLP2->setValue(sdata.fTriggerSeqLP2);
     924
     925        fEnableTrigger->setChecked(sdata.HasTrigger());
     926        fEnableLP1->setChecked(sdata.HasLP1());
     927        fEnableLP2->setChecked(sdata.HasLP2());
     928        fEnableVeto->setChecked(sdata.HasVeto());
     929        fEnablePedestal->setChecked(sdata.HasPedestal());
     930        fEnableExt1->setChecked(sdata.HasExt1());
     931        fEnableExt2->setChecked(sdata.HasExt2());
     932        fEnableTimeMarker->setChecked(sdata.HasTimeMarker());
     933
     934        cout << hex << sdata.fActiveFTU << dec << endl;
     935
     936        for (int i=0; i<64; i++)
     937            std::cout << (sdata.fActiveFTU&(1<<i) ? 1 : 0);
     938        std::cout << std::endl;
     939
     940        for (int i=0; i<40; i++)
     941            if (!sdata.IsActive(i))
     942                fFtuLED[i]->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     943            else
     944                fFtuLED[i]->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     945
     946        Camera *cam = (Camera*)fRatesCanv->GetCanvas()->FindObject("Camera");
     947        for (int i=0; i<1438; i++)
     948            cam->SetEnable(i, sdata.IsEnabled(i));
     949
     950        const int patch1 = fThresholdIdx->value();
     951        fThresholdVal->setValue(sdata.fThreshold[patch1<0?0:patch1]);
     952
     953        fPrescalingVal->setValue(sdata.fPrescaling[0]);
     954
     955        fFtmStaticData = sdata;
     956    }
     957
     958    void handleFtmPassport(const DimData &d)
     959    {
     960        if (d.size()==0)
     961            return;
     962
     963        if (d.size()!=sizeof(FTM::DimPassport))
     964        {
     965            cout << "Size mismatch: " << d.size() << " " << sizeof(FTM::DimPassport) << endl;
     966            return;
     967        }
     968
     969        const FTM::DimPassport &sdata = *reinterpret_cast<const FTM::DimPassport*>(d.ptr());
     970
     971        stringstream str1, str2;
     972        str1 << hex << "0x" << setfill('0') << setw(16) << sdata.fBoardId;
     973        str2 << sdata.fFirmwareId;
     974
     975        fFtmBoardId->setText(str1.str().c_str());
     976        fFtmFirmwareId->setText(str2.str().c_str());
     977    }
     978
     979    void handleFtmFtuList(const DimData &d)
     980    {
     981        if (d.size()==0)
     982            return;
     983
     984        if (d.size()!=sizeof(FTM::DimFtuList))
     985        {
     986            cout << "Size mismatch: " << d.size() << " " << sizeof(FTM::DimFtuList) << endl;
     987            return;
     988        }
     989
     990        const FTM::DimFtuList &sdata = *reinterpret_cast<const FTM::DimFtuList*>(d.ptr());
     991
     992        stringstream str;
     993        str << "<table width='100%'>" << setfill('0');
     994        str << "<tr><th>Num</th><th></th><th>Addr</th><th></th><th>DNA</th></tr>";
     995        for (int i=0; i<40; i++)
     996        {
     997            str << "<tr>";
     998            str << "<td align='center'>"   << dec << i << hex << "</td>";
     999            str << "<td align='center'>:</td>";
     1000            str << "<td align='center'>0x" << setw(2)  << (int)sdata.fAddr[i] << "</td>";
     1001            str << "<td align='center'>:</td>";
     1002            str << "<td align='center'>0x" << setw(16) << sdata.fDNA[i] << "</td>";
     1003            str << "</tr>";
     1004        }
     1005        str << "</table>";
     1006
     1007        fFtuDNA->setText(str.str().c_str());
     1008
     1009        fFtuAnswersTotal->setValue(sdata.fNumBoards);
     1010        fFtuAnswersCrate0->setValue(sdata.fNumBoardsCrate[0]);
     1011        fFtuAnswersCrate1->setValue(sdata.fNumBoardsCrate[1]);
     1012        fFtuAnswersCrate2->setValue(sdata.fNumBoardsCrate[2]);
     1013        fFtuAnswersCrate3->setValue(sdata.fNumBoardsCrate[3]);
     1014
     1015        cout << "FtuList received: fActiveFTU not handled yet." << endl;
     1016
     1017        for (int i=0; i<40; i++)
     1018        {
     1019            if (sdata.IsActive(i))
     1020            {
     1021                if (sdata.fPing[i]>0)
     1022                    fFtuLED[i]->setIcon(QIcon(":/Resources/icons/red circle 1.png"));
     1023                else
     1024                    fFtuLED[i]->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     1025                //if (sdata.fCRC[i]>0)
     1026                //    fFtuLED[i]->setIcon(QIcon(":/Resources/icons/warning 1.png"));
     1027            }
     1028            else
     1029                fFtuLED[i]->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     1030        }
     1031    }
     1032
     1033    void handleFtmError(const DimData &d)
     1034    {
     1035        if (d.size()==0)
     1036            return;
     1037        const Converter conv(d.format);
     1038        cout << "Error:" << endl;
     1039        cout << conv.GetString(&d.data[0], d.size()) << endl;
     1040    }
     1041
     1042    // ====================== MessageImp ====================================
     1043
     1044    bool fChatOnline;
     1045
    1961046    void handleStateChanged(const Time &/*time*/, const std::string &server,
    1971047                            const State &s)
     
    2021052            fStatusFTMLabel->setText(s.name.c_str());
    2031053            fStatusFTMLabel->setToolTip(s.comment.c_str());
     1054
     1055            bool enable = false;
    2041056
    2051057            if (s.index<FTM::kDisconnected) // No Dim connection
     
    2071059            if (s.index==FTM::kDisconnected) // Dim connection / FTM disconnected
    2081060                fStatusFTMLed->setIcon(QIcon(":/Resources/icons/yellow circle 1.png"));
    209             if (s.index==FTM::kConnected) // Dim connection / FTM connected
     1061            if (s.index==FTM::kConnected || s.index==FTM::kIdle) // Dim connection / FTM connected
     1062            {
    2101063                fStatusFTMLed->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     1064                enable = true;
     1065            }
     1066
     1067            fTriggerWidget->setEnabled(enable);
     1068            fFtuWidget->setEnabled(enable);
     1069            fRatesWidget->setEnabled(enable);
    2111070        }
    2121071
     
    2291088            fStatusLoggerLabel->setToolTip(s.comment.c_str());
    2301089
    231             if (s.index<-1) // Error
     1090            bool enable = true;
     1091
     1092            if (s.index<=30)   // Ready/Waiting
     1093                fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/yellow circle 1.png"));
     1094            if (s.index<-1)     // Offline
     1095            {
    2321096                fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/gray circle 1.png"));
     1097                enable = false;
     1098            }
    2331099            if (s.index>=0x100) // Error
    2341100                fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/red circle 1.png"));
    235             if (s.index<=30)   // Waiting
    236                 fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/yellow circle 1.png"));
    2371101            if (s.index==40)   // Logging
    2381102                fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
     1103
     1104            cout << "enable " << s.index << " " << enable << endl;
     1105            fLoggerWidget->setEnabled(enable);
    2391106        }
    2401107
     
    2431110            fStatusChatLabel->setText(s.name.c_str());
    2441111
    245             if (s.index==FTM::kConnected) // Dim connection / FTM connected
     1112            fChatOnline = s.index;
     1113
     1114            if (fChatOnline) // Dim connection / FTM connected
    2461115                fStatusChatLed->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
    2471116            else
     
    2531122    {
    2541123        handleStateChanged(Time(), server, State(-2, "Offline", "No connection via DIM."));
     1124    }
     1125
     1126    void on_fTabWidget_currentChanged(int which)
     1127    {
     1128        if (fTabWidget->tabText(which)=="Chat")
     1129            fTabWidget->setTabIcon(which, QIcon());
    2551130    }
    2561131
     
    2651140            out << text.substr(6);
    2661141            fChatText->append(out.str().c_str());
     1142
     1143            if (fTabWidget->tabText(fTabWidget->currentIndex())=="Chat")
     1144                return;
     1145
     1146            static int num = 0;
     1147            if (num++<2)
     1148                return;
     1149
     1150            for (int i=0; i<fTabWidget->count(); i++)
     1151                if (fTabWidget->tabText(i)=="Chat")
     1152                {
     1153                    fTabWidget->setTabIcon(i, QIcon(":/Resources/icons/warning 3.png"));
     1154                    break;
     1155                }
     1156
    2671157            return;
    2681158        }
     
    2891179    }
    2901180
    291     void handleDimService(const string &txt)
    292     {
    293         fDimSvcText->append(txt.c_str());
    294     }
    295 
    296     void handleDimDNS(int version)
    297     {
    298         ostringstream str;
    299         str << "DIM V" << version/100 << 'r' << version%100;
    300 
    301         if (version==0)
    302             fStatusDNSLed->setIcon(QIcon(":/Resources/icons/red circle 1.png"));
    303         else
    304             fStatusDNSLed->setIcon(QIcon(":/Resources/icons/green circle 1.png"));
    305 
    306         fStatusDNSLabel->setText(version==0?"Offline":str.str().c_str());
    307         fStatusDNSLabel->setToolTip(version==0?"No connection to DIM DNS.":"Connection to DIM DNS established.");
    308     }
    309 
    310     // ======================================================================
    311 
    312     void AddServer(const std::string &s)
    313     {
    314         DimNetwork::AddServer(s);
    315 
    316         QApplication::postEvent(this,
    317            new FunctionEvent(boost::bind(&FactGui::handleAddServer, this, s)));
    318     }
    319 
    320     void RemoveServer(const std::string &s)
    321     {
    322         UnsubscribeServer(s);
    323 
    324         DimNetwork::RemoveServer(s);
    325 
    326         QApplication::postEvent(this,
    327            new FunctionEvent(boost::bind(&FactGui::handleRemoveServer, this, s)));
    328     }
    329 
    330     void RemoveAllServers()
    331     {
    332         UnsubscribeAllServers();
    333 
    334         vector<string> v = GetServerList();
    335         for (vector<string>::iterator i=v.begin(); i<v.end(); i++)
    336             QApplication::postEvent(this,
    337                                     new FunctionEvent(boost::bind(&FactGui::handleStateOffline, this, *i)));
    338 
    339         DimNetwork::RemoveAllServers();
    340 
    341         QApplication::postEvent(this,
    342            new FunctionEvent(boost::bind(&FactGui::handleRemoveAllServers, this)));
    343     }
    344 
    345     void AddService(const std::string &server, const std::string &service, const std::string &fmt, bool iscmd)
    346     {
    347         QApplication::postEvent(this,
    348            new FunctionEvent(boost::bind(&FactGui::handleAddService, this, server, service, fmt, iscmd)));
    349     }
    350 
    351     void RemoveService(const std::string &server, const std::string &service, bool iscmd)
    352     {
    353         if (fServices.find(server+'/'+service)!=fServices.end())
    354             UnsubscribeService(server+'/'+service);
    355 
    356         QApplication::postEvent(this,
    357            new FunctionEvent(boost::bind(&FactGui::handleRemoveService, this, server, service, iscmd)));
    358     }
    359 
    360     void RemoveAllServices(const std::string &server)
    361     {
    362         UnsubscribeServer(server);
    363 
    364         QApplication::postEvent(this,
    365            new FunctionEvent(boost::bind(&FactGui::handleRemoveAllServices, this, server)));
    366     }
    367 
    368     void AddDescription(const std::string &server, const std::string &service, const vector<Description> &vec)
    369     {
    370         QApplication::postEvent(this,
    371            new FunctionEvent(boost::bind(&FactGui::handleAddDescription, this, server, service, vec)));
    372     }
    373 
    374 
    3751181    void IndicateStateChange(const Time &time, const std::string &server)
    3761182    {
     
    3891195    }
    3901196
    391     void infoHandler(DimInfo &info)
    392     {
    393         const string fmt = string("DIS_DNS/SERVER_INFO")==info.getName() ? "C" : info.getFormat();
     1197    // ====================== Dim infoHandler================================
     1198
     1199    void handleDimInfo(const DimData &d)
     1200    {
     1201        if (d.info==&fDimDNS)
     1202            return handleDimDNS(d.get<unsigned int>());
     1203
     1204        cout << "HandleDimInfo " << d.name << endl;
     1205
     1206        if (d.info==&fDimLoggerStats)
     1207            return handleLoggerStats(d);
     1208
     1209        if (d.info==&fDimLoggerFilenameNight)
     1210            return handleLoggerFilenameNight(d);
     1211
     1212        if (d.info==&fDimLoggerNumSubs)
     1213            return handleLoggerNumSubs(d);
     1214
     1215        if (d.info==&fDimLoggerFilenameRun)
     1216            return handleLoggerFilenameRun(d);
     1217
     1218        if (d.info==&fDimFtmTriggerCounter)
     1219            return handleFtmTriggerCounter(d);
     1220
     1221        if (d.info==&fDimFtmDynamicData)
     1222            return handleFtmDynamicData(d);
     1223
     1224        if (d.info==&fDimFtmPassport)
     1225            return handleFtmPassport(d);
     1226
     1227        if (d.info==&fDimFtmFtuList)
     1228            return handleFtmFtuList(d);
     1229
     1230        if (d.info==&fDimFtmStaticData)
     1231            return handleFtmStaticData(d);
     1232
     1233        if (d.info==&fDimFtmError)
     1234            return handleFtmError(d);
     1235    }
     1236
     1237    void handleDimService(const string &txt)
     1238    {
     1239        fDimSvcText->append(txt.c_str());
     1240    }
     1241
     1242
     1243    void infoHandlerService(DimInfo &info)
     1244    {
     1245        const string fmt = string(info.getFormat()).empty() ? "C" : info.getFormat();
    3941246
    3951247        stringstream dummy;
    3961248        const Converter conv(dummy, fmt, false);
    3971249
    398         const Time tm(info.getTimestamp(), info.getTimestampMillisecs());
     1250        const Time tm(info.getTimestamp(), info.getTimestampMillisecs()*1000);
    3991251
    4001252        stringstream out;
    401         out << Time::fmt("%H:%M:%S.%f") << tm << "   <B>" << info.getName() << "</B> - ";
    402 
    403         bool iserr = false;
     1253        out << "<font size'-1' color='navy'>[" << Time::fmt("%H:%M:%S.%f") << tm << "]</font>   <B>" << info.getName() << "</B> - ";
     1254
     1255        bool iserr = true;
    4041256        if (!conv)
    4051257        {
    4061258            out << "Compilation of format string '" << fmt << "' failed!";
    407             iserr = true;
    4081259        }
    4091260        else
     
    4131264                const string dat = conv.GetString(info.getData(), info.getSize());
    4141265                out << dat;
     1266                iserr = false;
    4151267            }
    4161268            catch (const runtime_error &e)
    4171269            {
    4181270                out << "Conversion to string failed!<pre>" << e.what() << "</pre>";
    419                 iserr = true;
    4201271            }
    4211272        }
     
    4261277        int bg = hash<string>()(string(info.getName()));
    4271278
    428         int r = bg&0x1f0000;
    429         int g = bg&0x001f00;
    430         int b = bg&0x00001f;
    431 
    432         bg = ~(b|g|r)&0xffffff;
     1279        // allow only light colors
     1280        bg = ~(bg&0x1f1f1f)&0xffffff;
    4331281
    4341282        if (iserr)
     
    4471295    void infoHandler()
    4481296    {
    449         if (getInfo()==&fDimDNS)
     1297        // Initialize the time-stamp (what a weird workaround...)
     1298        getInfo()->getTimestamp();
     1299
     1300        if (std::find(fDim.begin(), fDim.end(), getInfo())!=fDim.end())
    4501301        {
    4511302            QApplication::postEvent(this,
    452                                     new FunctionEvent(boost::bind(&FactGui::handleDimDNS, this, getInfo()->getInt())));
     1303                                    new FunctionEvent(boost::bind(&FactGui::handleDimInfo, this, DimData(getInfo()))));
    4531304            return;
    4541305        }
     
    4571308            if (i->second==getInfo())
    4581309            {
    459                 infoHandler(*i->second);
     1310                infoHandlerService(*i->second);
    4601311                return;
    4611312            }
     
    4641315    }
    4651316
    466     // ======================================================================
    467 
    468 
    469     void SubscribeService(const string &service)
    470     {
    471         if (fServices.find(service)!=fServices.end())
    472         {
    473             cout << "ERROR - We are already subscribed to " << service << endl;
    474             return;
    475         }
    476 
    477         fServices[service] = new DimStampedInfo(service.c_str(), (void*)NULL, 0, this);
    478     }
    479 
    480     void UnsubscribeService(const string &service)
    481     {
    482         const map<string,DimInfo*>::iterator i=fServices.find(service);
    483 
    484         if (i==fServices.end())
    485         {
    486             cout << "ERROR - We are not subscribed to " << service << endl;
    487             return;
    488         }
    489 
    490         delete i->second;
    491 
    492         fServices.erase(i);
    493     }
    494 
    495     void UnsubscribeServer(const string &server)
    496     {
    497         for (map<string,DimInfo*>::iterator i=fServices.begin();
    498              i!=fServices.end(); i++)
    499             if (i->first.substr(0, server.length()+1)==server+'/')
    500             {
    501                 delete i->second;
    502                 fServices.erase(i);
    503             }
    504     }
    505 
    506     void UnsubscribeAllServers()
    507     {
    508         for (map<string,DimInfo*>::iterator i=fServices.begin();
    509              i!=fServices.end(); i++)
    510             delete i->second;
    511 
    512         fServices.clear();
    513     }
    5141317
    5151318    // ======================================================================
     
    5411344    }
    5421345
    543     void on_fDimCmdSend_clicked(bool)
     1346    void on_fDimCmdSend_clicked()
    5441347    {
    5451348        const QString server    = fDimCmdServers->currentIndex().data().toString();
     
    5651368        }
    5661369    }
     1370    void ChoosePatch(Camera &cam, int idx)
     1371    {
     1372        cam.Reset();
     1373
     1374        fThresholdIdx->setValue(idx);
     1375        fThresholdVal->setValue(fFtmStaticData.fThreshold[idx<0?0:idx]);
     1376
     1377        if (idx<0)
     1378            return;
     1379
     1380        for (unsigned int i=0; i<fPatch.size(); i++)
     1381            if (fPatch[i]==idx)
     1382                cam.SetBold(i);
     1383    }
     1384
     1385    void ChoosePixel(Camera &cam, int idx)
     1386    {
     1387        cam.SetWhite(idx);
     1388        ChoosePatch(cam, fPatch[idx]);
     1389    }
     1390
     1391    void slot_RootEventProcessed(TObject *obj, unsigned int evt, TCanvas *)
     1392    {
     1393        // kMousePressEvent       // TCanvas processed QEvent mousePressEvent
     1394        // kMouseMoveEvent        // TCanvas processed QEvent mouseMoveEvent
     1395        // kMouseReleaseEvent     // TCanvas processed QEvent mouseReleaseEvent
     1396        // kMouseDoubleClickEvent // TCanvas processed QEvent mouseDoubleClickEvent
     1397        // kKeyPressEvent         // TCanvas processed QEvent keyPressEvent
     1398        // kEnterEvent            // TCanvas processed QEvent enterEvent
     1399        // kLeaveEvent            // TCanvas processed QEvent leaveEvent
     1400
     1401        if (dynamic_cast<TCanvas*>(obj))
     1402            return;
     1403
     1404        TQtWidget *tipped = static_cast<TQtWidget*>(sender());
     1405
     1406        if (evt==11/*kMouseReleaseEvent*/)
     1407        {
     1408            if (dynamic_cast<Camera*>(obj))
     1409            {
     1410                const float xx = gPad->PadtoX(gPad->AbsPixeltoX(tipped->GetEventX()));
     1411                const float yy = gPad->PadtoY(gPad->AbsPixeltoY(tipped->GetEventY()));
     1412
     1413                Camera *cam = static_cast<Camera*>(obj);
     1414                const int idx = cam->GetIdx(xx, yy);
     1415
     1416                ChoosePixel(*cam, idx);
     1417            }
     1418            return;
     1419        }
     1420
     1421        if (evt==61/*kMouseDoubleClickEvent*/)
     1422        {
     1423            if (dynamic_cast<Camera*>(obj))
     1424            {
     1425                const float xx = gPad->PadtoX(gPad->AbsPixeltoX(tipped->GetEventX()));
     1426                const float yy = gPad->PadtoY(gPad->AbsPixeltoY(tipped->GetEventY()));
     1427
     1428                Camera *cam = static_cast<Camera*>(obj);
     1429                const int idx = cam->GetIdx(xx, yy);
     1430
     1431                cam->Toggle(idx);
     1432            }
     1433            return;
     1434        }
     1435
     1436        // Find the object which will get picked by the GetObjectInfo
     1437        // due to buffer overflows in many root-versions
     1438        // in TH1 and TProfile we have to work around and implement
     1439        // our own GetObjectInfo which make everything a bit more
     1440        // complicated.
     1441#if ROOT_VERSION_CODE > ROOT_VERSION(5,22,00)
     1442        const char *objectInfo =
     1443            obj->GetObjectInfo(tipped->GetEventX(),tipped->GetEventY());
     1444#else
     1445        const char *objectInfo = dynamic_cast<TH1*>(obj) ?
     1446            "" : obj->GetObjectInfo(tipped->GetEventX(),tipped->GetEventY());
     1447#endif
     1448
     1449        QString tipText;
     1450        tipText += obj->GetName();
     1451        tipText += " [";
     1452        tipText += obj->ClassName();
     1453        tipText += "]: ";
     1454        tipText += objectInfo;
     1455
     1456        if (dynamic_cast<Camera*>(obj))
     1457        {
     1458            const float xx = gPad->PadtoX(gPad->AbsPixeltoX(tipped->GetEventX()));
     1459            const float yy = gPad->PadtoY(gPad->AbsPixeltoY(tipped->GetEventY()));
     1460
     1461            Camera *cam = static_cast<Camera*>(obj);
     1462            int idx = fPatch[cam->GetIdx(xx, yy)];
     1463
     1464            tipText+="  Patch=";
     1465            tipText+=QString::number(idx);
     1466        }
     1467
     1468
     1469        fStatusBar->showMessage(tipText, 3000);
     1470
     1471        gSystem->ProcessEvents();
     1472        //QWhatsThis::display(tipText)
     1473    }
     1474
     1475    void slot_RootUpdate()
     1476    {
     1477        gSystem->ProcessEvents();
     1478        QTimer::singleShot(100, this, SLOT(slot_RootUpdate()));
     1479    }
     1480    void on_fThresholdIdx_valueChanged(int idx)
     1481    {
     1482        Camera *cam = (Camera*)fRatesCanv->GetCanvas()->FindObject("Camera");
     1483        ChoosePatch(*cam, idx);
     1484    }
     1485
     1486    TGraph fGraphFtmTemp[4];
     1487
     1488    map<int, int> fPatch;
    5671489
    5681490public:
    569     FactGui() : fDimDNS("DIS_DNS/VERSION_NUMBER", 1, int(0), this)
     1491    FactGui() :
     1492        fDimDNS("DIS_DNS/VERSION_NUMBER", 1, int(0), this),
     1493
     1494        fDimLoggerStats        ("DATA_LOGGER/STATS", (void*)NULL, 0, this),
     1495        fDimLoggerFilenameNight("DATA_LOGGER/FILENAME_NIGHT", const_cast<char*>(""), 0, this),
     1496        fDimLoggerFilenameRun  ("DATA_LOGGER/FILENAME_RUN",   const_cast<char*>(""), 0, this),
     1497        fDimLoggerNumSubs      ("DATA_LOGGER/NUM_SUBS",       const_cast<char*>(""), 0, this),
     1498
     1499        fDimFtmPassport      ("FTM_CONTROL/PASSPORT",        (void*)NULL, 0, this),
     1500        fDimFtmTriggerCounter("FTM_CONTROL/TRIGGER_COUNTER", (void*)NULL, 0, this),
     1501        fDimFtmError         ("FTM_CONTROL/ERROR",           (void*)NULL, 0, this),
     1502        fDimFtmFtuList       ("FTM_CONTROL/FTU_LIST",        (void*)NULL, 0, this),
     1503        fDimFtmStaticData    ("FTM_CONTROL/STATIC_DATA",     (void*)NULL, 0, this),
     1504        fDimFtmDynamicData   ("FTM_CONTROL/DYNAMIC_DATA",    (void*)NULL, 0, this)
     1505
     1506
    5701507    {
    5711508        DimClient::sendCommand("CHAT/MSG", "GUI online.");
    5721509        // + MessageDimRX
     1510
     1511        fDim.push_back(&fDimFtmDynamicData);
     1512        fDim.push_back(&fDimFtmTriggerCounter);
     1513        fDim.push_back(&fDimFtmStaticData);
     1514        fDim.push_back(&fDimFtmFtuList);
     1515        fDim.push_back(&fDimFtmPassport);
     1516        fDim.push_back(&fDimFtmError);
     1517        fDim.push_back(&fDimLoggerStats);
     1518        fDim.push_back(&fDimLoggerFilenameNight);
     1519        fDim.push_back(&fDimLoggerFilenameRun);
     1520        fDim.push_back(&fDimLoggerNumSubs);
     1521        fDim.push_back(&fDimDNS);
     1522
     1523        fTriggerWidget->setEnabled(false);
     1524        fFtuWidget->setEnabled(false);
     1525        fRatesWidget->setEnabled(false);
     1526        fLoggerWidget->setEnabled(false);
     1527
     1528        // --------------------------------------------------------------------------
     1529
     1530        ifstream fin("fact-trigger-all.txt");
     1531
     1532        int l = 0;
     1533
     1534        string buf;
     1535        while (getline(fin, buf, '\n'))
     1536        {
     1537            buf = Tools::Trim(buf);
     1538            if (buf[0]=='#')
     1539                continue;
     1540
     1541            stringstream str(buf);
     1542            for (int i=0; i<9; i++)
     1543            {
     1544                int n;
     1545                str >> n;
     1546
     1547                fPatch[n] = l;
     1548            }
     1549            l++;
     1550        }
     1551
     1552        // --------------------------------------------------------------------------
     1553
     1554        TCanvas *c = fFtmTempCanv->GetCanvas();
     1555        c->SetBit(TCanvas::kNoContextMenu);
     1556        c->SetBorderMode(0);
     1557        c->SetFrameBorderMode(0);
     1558        c->SetFillColor(kWhite);
     1559        c->SetRightMargin(0.03);
     1560        c->SetTopMargin(0.03);
     1561        c->cd();
     1562
     1563        TH1F h("MyFrame", "", 1000, 0, 1);//Time().RootTime()-1./24/60/60, Time().RootTime());
     1564        h.SetDirectory(0);
     1565        h.SetBit(TH1::kCanRebin);
     1566        h.SetStats(kFALSE);
     1567        h.SetMinimum(-20);
     1568        h.SetMaximum(100);
     1569        h.SetXTitle("Time");
     1570        h.SetYTitle("Temperature / °C");
     1571        h.GetXaxis()->CenterTitle();
     1572        h.GetYaxis()->CenterTitle();
     1573//        h.GetXaxis()->SetTitleSize(1.2);
     1574//        h.GetYaxis()->SetTitleSize(1.2);
     1575        h.DrawCopy();
     1576
     1577        fGraphFtmTemp[0].SetMarkerStyle(kFullDotSmall);
     1578        fGraphFtmTemp[1].SetMarkerStyle(kFullDotSmall);
     1579        fGraphFtmTemp[2].SetMarkerStyle(kFullDotSmall);
     1580        fGraphFtmTemp[3].SetMarkerStyle(kFullDotSmall);
     1581
     1582        fGraphFtmTemp[1].SetLineColor(kBlue);
     1583        fGraphFtmTemp[2].SetLineColor(kRed);
     1584        fGraphFtmTemp[3].SetLineColor(kGreen);
     1585
     1586        fGraphFtmTemp[1].SetMarkerColor(kBlue);
     1587        fGraphFtmTemp[2].SetMarkerColor(kRed);
     1588        fGraphFtmTemp[3].SetMarkerColor(kGreen);
     1589
     1590        fGraphFtmTemp[0].Draw("LP");
     1591        fGraphFtmTemp[1].Draw("LP");
     1592        fGraphFtmTemp[2].Draw("LP");
     1593        fGraphFtmTemp[3].Draw("LP");
     1594
     1595        // --------------------------------------------------------------------------
     1596
     1597        c = fRatesCanv->GetCanvas();
     1598        c->SetBit(TCanvas::kNoContextMenu);
     1599        c->SetBorderMode(0);
     1600        c->SetFrameBorderMode(0);
     1601        c->SetFillColor(kWhite);
     1602        c->cd();
     1603
     1604        Camera *cam = new Camera;
     1605        cam->SetBit(kCanDelete);
     1606        cam->Draw();
     1607
     1608        ChoosePixel(*cam, 1);
     1609
     1610        QTimer::singleShot(100, this, SLOT(slot_RootUpdate()));
     1611
     1612        //widget->setMouseTracking(true);
     1613        //widget->EnableSignalEvents(kMouseMoveEvent);
     1614
     1615        fFtmTempCanv->setMouseTracking(true);
     1616        fFtmTempCanv->EnableSignalEvents(kMouseMoveEvent);
     1617
     1618        fRatesCanv->setMouseTracking(true);
     1619        fRatesCanv->EnableSignalEvents(kMouseMoveEvent|kMouseReleaseEvent|kMouseDoubleClickEvent);
     1620
     1621        connect(fRatesCanv,   SIGNAL(     RootEventProcessed(TObject *, unsigned int, TCanvas *)),
     1622                this,         SLOT  (slot_RootEventProcessed(TObject *, unsigned int, TCanvas *)));
     1623        connect(fFtmTempCanv, SIGNAL(     RootEventProcessed(TObject *, unsigned int, TCanvas *)),
     1624                this,         SLOT  (slot_RootEventProcessed(TObject *, unsigned int, TCanvas *)));
    5731625    }
    5741626    ~FactGui()
  • trunk/FACT++/gui/MainWindow.cc

    r10394 r10518  
    11#include "MainWindow.h"
     2
     3#include <iostream>
    24
    35#include "dic.hxx"
     
    2729    fDimSvcDescription->setItemDelegate(new HtmlDelegate);
    2830
    29     fStatusBar->showMessage("FACT++");
     31    fStatusBar->showMessage(PACKAGE_STRING"   |   "PACKAGE_URL"   |   report bugs to <"PACKAGE_BUGREPORT">");
     32
     33    fFtuLED[0] = fFtuLEDPrototype;
     34
     35    for (int i=1; i<40; i++)
     36    {
     37        QPushButton *b = new QPushButton(static_cast<QWidget*>(fFtuLEDPrototype->parent()));
     38
     39        b->setEnabled(fFtuLEDPrototype->isEnabled());
     40        b->setSizePolicy(fFtuLEDPrototype->sizePolicy());
     41        b->setMaximumSize(fFtuLEDPrototype->maximumSize());
     42        b->setIcon(fFtuLEDPrototype->icon());
     43        b->setIconSize(fFtuLEDPrototype->iconSize());
     44        b->setCheckable(fFtuLEDPrototype->isCheckable());
     45        b->setFlat(fFtuLEDPrototype->isFlat());
     46
     47        fFtuLedLayout->addWidget(b, i/10+1, i%10+1, 1, 1);
     48
     49        fFtuLED[i] = b;
     50    }
     51
     52    for (int i=0; i<40; i++)
     53    {
     54        fFtuLED[i]->setObjectName(QString::fromUtf8("fFtuLED")+QString::number(i));
     55        QObject::connect(fFtuLED[i], SIGNAL(clicked()), this, SLOT(slot_fFtuLED_clicked()));
     56    }
     57}
     58
     59void MainWindow::SelectTab(const QString &name)
     60{
     61    for (int i=0; i<fTabWidget->count(); i++)
     62        if (fTabWidget->tabText(i)==name)
     63        {
     64            fTabWidget->setCurrentIndex(i);
     65            break;
     66        }
     67}
     68
     69void MainWindow::on_fShutdown_clicked()
     70{
     71    DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0);
    3072}
    3173
    3274
     75void MainWindow::on_fShutdownAll_clicked()
     76{
     77    DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0);
     78    DimClient::sendCommand("DIS_DNS/EXIT",         1);
     79}
     80
    3381void MainWindow::on_fTabWidget_tabCloseRequested(int which)
    3482{
    35     QWidget *w = fTabWidget->widget(which);
     83    // To get the correct size we have to switch to this tab
     84    // An alternative would be to take the size of the current tab
     85    fTabWidget->setCurrentIndex(which);
     86
     87    QWidget *w = fTabWidget->currentWidget(); //fTabWidget->widget(which);
    3688    if (!w)
     89    {
     90        cout << "Weird... the tab requested to be closed doesn't exist!" << endl;
    3791        return;
     92    }
    3893
    3994    QDockWidget *d = w->findChild<QDockWidget*>();
    4095    if (!d)
     96    {
     97        cout << "Sorry, tab requested to be closed contains no QDockWidget!" << endl;
    4198        return;
     99    }
    42100
    43     DockWindow *mw = new DockWindow(d, fTabWidget->tabText(which));
     101    new DockWindow(d, fTabWidget->tabText(which));
    44102    fTabWidget->removeTab(which);
    45     mw->show();
    46103
    47104    if (fTabWidget->count()==1)
     
    50107
    51108
    52 void MainWindow::on_fChatSend_clicked(bool)
     109void MainWindow::on_fChatSend_clicked()
    53110{
    54     DimClient::sendCommand("CHAT/MSG", fChatMessage->displayText().toStdString().c_str());
    55     fChatMessage->clear();
     111    if (DimClient::sendCommand("CHAT/MSG", fChatMessage->displayText().toStdString().c_str()))
     112        fChatMessage->clear();
    56113}
    57114
    58 
    59 void MainWindow::on_fShutdown_clicked(bool)
     115void MainWindow::on_fStatusLoggerLed_clicked()
    60116{
    61     DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0);
     117    SelectTab("Logger");
    62118}
    63119
    64 
    65 void MainWindow::on_fShutdownAll_clicked(bool)
     120void MainWindow::on_fStatusChatLed_clicked()
    66121{
    67     DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0);
    68     DimClient::sendCommand("DIS_DNS/EXIT",         1);
     122    SelectTab("Chat");
    69123}
    70124
     125void MainWindow::on_fStatusFTMLed_clicked()
     126{
     127    SelectTab("Trigger");
     128}
    71129
    72 void MainWindow::on_fStatusFTMEnable_stateChanged(int/* state*/)
     130void MainWindow::slot_fFtuLED_clicked()
    73131{
    74 
     132    for (int i=0; i<40; i++)
     133        if (sender()==fFtuLED[i])
     134            cout << "--------------> clicked #" << i << endl;
    75135}
  • trunk/FACT++/gui/MainWindow.h

    r10394 r10518  
    44#include "design.h"
    55
    6 #include <QtGui/QMainWindow>
     6#include <QMainWindow>
     7
     8class TObject;
     9class TCanvas;
    710
    811class MainWindow : public QMainWindow, protected Ui::MainWindow
     
    1013    Q_OBJECT;
    1114
     15    void SelectTab(const QString &name);
     16
     17protected:
     18    QPushButton *fFtuLED[40];
     19
    1220public:
    1321    MainWindow(QWidget *p=0);
    1422
    1523private slots:
     24    // System status
     25    void on_fShutdown_clicked();
     26    void on_fShutdownAll_clicked();
     27
     28    // Status LEDs signals
     29    void on_fStatusFTMLed_clicked();
     30    void on_fStatusLoggerLed_clicked();
     31    void on_fStatusChatLed_clicked();
     32    //void on_fStatusFTMEnable_stateChanged(int state);
     33
     34    // Tab Widget
     35    void on_fTabWidget_tabCloseRequested(int which);
     36    virtual void on_fTabWidget_currentChanged(int) { }
     37
     38    // Tab: FTM
     39    void on_fEnablePedestal_clicked(bool) { }
     40    void on_fEnableLP1_clicked(bool) { }
     41    void on_fEnableLP2_clicked(bool) { }
     42    void on_fEnableTrigger_clicked(bool) { }
     43    void on_fEnableExt1_clicked(bool) { }
     44    void on_fEnableExt2_clicked(bool) { }
     45    void on_fEnableTimeMarker_clicked(bool) { }
     46    void on_fEnableVeto_clicked(bool) { }
     47
     48    void on_fTriggerSeqPed_valueChanged(int) { }
     49    void on_fTriggerSeqLP1_valueChanged(int) { }
     50    void on_fTriggerSeqLP2_valueChanged(int) { }
     51
     52    void on_fTriggerInterval_valueChanged(int) { }
     53
     54    void on_fPhysicsCoincidence_valueChanged(int) { }
     55    void on_fCalibCoincidence_valueChanged(int) { }
     56
     57    void on_fPhysicsWindow_valueChanged(int) { }
     58    void on_fCalibWindow_valueChanged(int) { }
     59
     60    void on_fTriggerDelay_valueChanged(int) { }
     61    void on_fTimeMarkerDelay_valueChanged(int) { }
     62    void on_fDeadTime_valueChanged(int) { }
     63
     64    void on_fClockCondR0_valueChanged(int) { }
     65    void on_fClockCondR1_valueChanged(int) { }
     66    void on_fClockCondR8_valueChanged(int) { }
     67    void on_fClockCondR9_valueChanged(int) { }
     68    void on_fClockCondR11_valueChanged(int) { }
     69    void on_fClockCondR13_valueChanged(int) { }
     70    void on_fClockCondR14_valueChanged(int) { }
     71    void on_fClockCondR15_valueChanged(int) { }
     72
     73    void on_fPrescalingVal_valueChanged(int) { }
     74
     75    // Tab: FTUs
     76    void slot_fFtuLED_clicked();
     77
     78    // Tab: Rates
     79    void on_fThresholdVal_valueChanged(int v) { fThresholdVolt->setValue(2500./4095*v); }
     80    virtual void on_fThresholdIdx_valueChanged(int) { }
     81
     82    // Tab: Chat
     83    void on_fChatSend_clicked();
     84
     85    // Tab: Commands
    1686    /// Needs access to DimNetwork thus it is implemented in the derived class
    17     virtual void on_fDimCmdSend_clicked(bool) { }
     87    virtual void on_fDimCmdSend_clicked() { }
    1888
    19     void on_fTabWidget_tabCloseRequested(int which);
    20     void on_fChatSend_clicked(bool);
    21     void on_fShutdown_clicked(bool);
    22     void on_fShutdownAll_clicked(bool);
    23     void on_fStatusFTMEnable_stateChanged(int state);
     89    // Main menu
     90    //    void on_fMenuLogSaveAs_triggered(bool)
     91
     92    virtual void slot_RootEventProcessed(TObject *, unsigned int, TCanvas *) { }
     93    virtual void slot_RootUpdate() { }
    2494};
    2595
  • trunk/FACT++/gui/design.ui

    r10437 r10518  
    3333    </sizepolicy>
    3434   </property>
    35    <layout class="QGridLayout" name="gridLayout" rowstretch="0" columnminimumwidth="0">
     35   <layout class="QGridLayout" name="gridLayout" rowstretch="0">
    3636    <property name="sizeConstraint">
    3737     <enum>QLayout::SetDefaultConstraint</enum>
     
    3939    <item row="0" column="0">
    4040     <widget class="QTabWidget" name="fTabWidget">
     41      <property name="enabled">
     42       <bool>true</bool>
     43      </property>
    4144      <property name="sizePolicy">
    4245       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     
    4952      </property>
    5053      <property name="currentIndex">
    51        <number>2</number>
     54       <number>1</number>
    5255      </property>
    5356      <property name="documentMode">
     
    6063       <bool>true</bool>
    6164      </property>
    62       <widget class="QWidget" name="fDimSvcTab">
     65      <widget class="QWidget" name="fTriggerTab">
    6366       <attribute name="title">
    64         <string>Services</string>
     67        <string>Trigger</string>
    6568       </attribute>
    66        <layout class="QGridLayout" name="gridLayout_3">
     69       <layout class="QGridLayout" name="gridLayout_16">
    6770        <item row="0" column="0">
    68          <widget class="QDockWidget" name="fDimSvcDock">
     71         <widget class="QDockWidget" name="fTriggerDock">
     72          <property name="sizePolicy">
     73           <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
     74            <horstretch>0</horstretch>
     75            <verstretch>0</verstretch>
     76           </sizepolicy>
     77          </property>
     78          <property name="features">
     79           <set>QDockWidget::NoDockWidgetFeatures</set>
     80          </property>
     81          <property name="allowedAreas">
     82           <set>Qt::AllDockWidgetAreas</set>
     83          </property>
     84          <property name="windowTitle">
     85           <string>Trigegr settings</string>
     86          </property>
     87          <widget class="QWidget" name="fTriggerWidget">
     88           <property name="sizePolicy">
     89            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     90             <horstretch>0</horstretch>
     91             <verstretch>0</verstretch>
     92            </sizepolicy>
     93           </property>
     94           <layout class="QGridLayout" name="gridLayout_21" rowstretch="0,1,1" columnstretch="1,1,1">
     95            <item row="0" column="1">
     96             <layout class="QGridLayout" name="gridLayout_26">
     97              <property name="topMargin">
     98               <number>0</number>
     99              </property>
     100              <item row="1" column="0">
     101               <widget class="QLabel" name="label_35">
     102                <property name="text">
     103                 <string>FTM Firmware ID</string>
     104                </property>
     105               </widget>
     106              </item>
     107              <item row="0" column="0">
     108               <widget class="QLabel" name="label_37">
     109                <property name="text">
     110                 <string>FTM Board ID</string>
     111                </property>
     112               </widget>
     113              </item>
     114              <item row="1" column="1">
     115               <widget class="QLineEdit" name="fFtmFirmwareId">
     116                <property name="enabled">
     117                 <bool>true</bool>
     118                </property>
     119                <property name="alignment">
     120                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     121                </property>
     122                <property name="readOnly">
     123                 <bool>true</bool>
     124                </property>
     125               </widget>
     126              </item>
     127              <item row="0" column="1">
     128               <widget class="QLineEdit" name="fFtmBoardId">
     129                <property name="enabled">
     130                 <bool>true</bool>
     131                </property>
     132                <property name="alignment">
     133                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     134                </property>
     135                <property name="readOnly">
     136                 <bool>true</bool>
     137                </property>
     138               </widget>
     139              </item>
     140             </layout>
     141            </item>
     142            <item row="2" column="2">
     143             <widget class="QGroupBox" name="groupBox_3">
     144              <property name="sizePolicy">
     145               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     146                <horstretch>0</horstretch>
     147                <verstretch>0</verstretch>
     148               </sizepolicy>
     149              </property>
     150              <property name="title">
     151               <string>Clock conditioner</string>
     152              </property>
     153              <layout class="QGridLayout" name="gridLayout_18">
     154               <item row="3" column="1">
     155                <widget class="QSpinBox" name="fClockCondR0">
     156                 <property name="alignment">
     157                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     158                 </property>
     159                 <property name="buttonSymbols">
     160                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     161                 </property>
     162                 <property name="accelerated">
     163                  <bool>true</bool>
     164                 </property>
     165                 <property name="maximum">
     166                  <number>65535</number>
     167                 </property>
     168                </widget>
     169               </item>
     170               <item row="3" column="2">
     171                <widget class="QSpinBox" name="fClockCondR1">
     172                 <property name="alignment">
     173                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     174                 </property>
     175                 <property name="buttonSymbols">
     176                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     177                 </property>
     178                 <property name="accelerated">
     179                  <bool>true</bool>
     180                 </property>
     181                 <property name="maximum">
     182                  <number>65535</number>
     183                 </property>
     184                </widget>
     185               </item>
     186               <item row="3" column="3">
     187                <widget class="QSpinBox" name="fClockCondR8">
     188                 <property name="alignment">
     189                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     190                 </property>
     191                 <property name="buttonSymbols">
     192                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     193                 </property>
     194                 <property name="accelerated">
     195                  <bool>true</bool>
     196                 </property>
     197                 <property name="maximum">
     198                  <number>65535</number>
     199                 </property>
     200                </widget>
     201               </item>
     202               <item row="3" column="4">
     203                <widget class="QSpinBox" name="fClockCondR9">
     204                 <property name="alignment">
     205                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     206                 </property>
     207                 <property name="buttonSymbols">
     208                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     209                 </property>
     210                 <property name="accelerated">
     211                  <bool>true</bool>
     212                 </property>
     213                 <property name="maximum">
     214                  <number>65535</number>
     215                 </property>
     216                </widget>
     217               </item>
     218               <item row="4" column="1">
     219                <widget class="QSpinBox" name="fClockCondR11">
     220                 <property name="alignment">
     221                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     222                 </property>
     223                 <property name="buttonSymbols">
     224                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     225                 </property>
     226                 <property name="accelerated">
     227                  <bool>true</bool>
     228                 </property>
     229                 <property name="maximum">
     230                  <number>65535</number>
     231                 </property>
     232                </widget>
     233               </item>
     234               <item row="4" column="2">
     235                <widget class="QSpinBox" name="fClockCondR13">
     236                 <property name="alignment">
     237                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     238                 </property>
     239                 <property name="buttonSymbols">
     240                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     241                 </property>
     242                 <property name="accelerated">
     243                  <bool>true</bool>
     244                 </property>
     245                 <property name="maximum">
     246                  <number>65535</number>
     247                 </property>
     248                </widget>
     249               </item>
     250               <item row="4" column="3">
     251                <widget class="QSpinBox" name="fClockCondR14">
     252                 <property name="alignment">
     253                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     254                 </property>
     255                 <property name="buttonSymbols">
     256                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     257                 </property>
     258                 <property name="accelerated">
     259                  <bool>true</bool>
     260                 </property>
     261                 <property name="maximum">
     262                  <number>65535</number>
     263                 </property>
     264                </widget>
     265               </item>
     266               <item row="4" column="4">
     267                <widget class="QSpinBox" name="fClockCondR15">
     268                 <property name="alignment">
     269                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     270                 </property>
     271                 <property name="buttonSymbols">
     272                  <enum>QAbstractSpinBox::UpDownArrows</enum>
     273                 </property>
     274                 <property name="accelerated">
     275                  <bool>true</bool>
     276                 </property>
     277                 <property name="maximum">
     278                  <number>65535</number>
     279                 </property>
     280                </widget>
     281               </item>
     282               <item row="2" column="2">
     283                <widget class="QLabel" name="label_11">
     284                 <property name="text">
     285                  <string>R1</string>
     286                 </property>
     287                 <property name="alignment">
     288                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     289                 </property>
     290                </widget>
     291               </item>
     292               <item row="2" column="1">
     293                <widget class="QLabel" name="label_16">
     294                 <property name="text">
     295                  <string>R0</string>
     296                 </property>
     297                 <property name="alignment">
     298                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     299                 </property>
     300                </widget>
     301               </item>
     302               <item row="2" column="3">
     303                <widget class="QLabel" name="label_17">
     304                 <property name="text">
     305                  <string>R8</string>
     306                 </property>
     307                 <property name="alignment">
     308                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     309                 </property>
     310                </widget>
     311               </item>
     312               <item row="2" column="4">
     313                <widget class="QLabel" name="label_18">
     314                 <property name="text">
     315                  <string>R9</string>
     316                 </property>
     317                 <property name="alignment">
     318                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     319                 </property>
     320                </widget>
     321               </item>
     322               <item row="5" column="1">
     323                <widget class="QLabel" name="label_19">
     324                 <property name="text">
     325                  <string>R11</string>
     326                 </property>
     327                 <property name="alignment">
     328                  <set>Qt::AlignHCenter|Qt::AlignTop</set>
     329                 </property>
     330                </widget>
     331               </item>
     332               <item row="5" column="2">
     333                <widget class="QLabel" name="label_20">
     334                 <property name="text">
     335                  <string>R13</string>
     336                 </property>
     337                 <property name="alignment">
     338                  <set>Qt::AlignHCenter|Qt::AlignTop</set>
     339                 </property>
     340                </widget>
     341               </item>
     342               <item row="5" column="3">
     343                <widget class="QLabel" name="label_21">
     344                 <property name="text">
     345                  <string>R14</string>
     346                 </property>
     347                 <property name="alignment">
     348                  <set>Qt::AlignHCenter|Qt::AlignTop</set>
     349                 </property>
     350                </widget>
     351               </item>
     352               <item row="5" column="4">
     353                <widget class="QLabel" name="label_22">
     354                 <property name="text">
     355                  <string>R15</string>
     356                 </property>
     357                 <property name="alignment">
     358                  <set>Qt::AlignHCenter|Qt::AlignTop</set>
     359                 </property>
     360                </widget>
     361               </item>
     362               <item row="0" column="0" colspan="6">
     363                <widget class="Line" name="line_10">
     364                 <property name="sizePolicy">
     365                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
     366                   <horstretch>0</horstretch>
     367                   <verstretch>0</verstretch>
     368                  </sizepolicy>
     369                 </property>
     370                 <property name="orientation">
     371                  <enum>Qt::Horizontal</enum>
     372                 </property>
     373                </widget>
     374               </item>
     375               <item row="6" column="2">
     376                <spacer name="verticalSpacer_12">
     377                 <property name="orientation">
     378                  <enum>Qt::Vertical</enum>
     379                 </property>
     380                 <property name="sizeHint" stdset="0">
     381                  <size>
     382                   <width>20</width>
     383                   <height>0</height>
     384                  </size>
     385                 </property>
     386                </spacer>
     387               </item>
     388               <item row="1" column="2">
     389                <spacer name="verticalSpacer_13">
     390                 <property name="orientation">
     391                  <enum>Qt::Vertical</enum>
     392                 </property>
     393                 <property name="sizeHint" stdset="0">
     394                  <size>
     395                   <width>20</width>
     396                   <height>0</height>
     397                  </size>
     398                 </property>
     399                </spacer>
     400               </item>
     401               <item row="3" column="0">
     402                <spacer name="horizontalSpacer_25">
     403                 <property name="orientation">
     404                  <enum>Qt::Horizontal</enum>
     405                 </property>
     406                 <property name="sizeHint" stdset="0">
     407                  <size>
     408                   <width>40</width>
     409                   <height>20</height>
     410                  </size>
     411                 </property>
     412                </spacer>
     413               </item>
     414               <item row="3" column="5">
     415                <spacer name="horizontalSpacer_26">
     416                 <property name="orientation">
     417                  <enum>Qt::Horizontal</enum>
     418                 </property>
     419                 <property name="sizeHint" stdset="0">
     420                  <size>
     421                   <width>40</width>
     422                   <height>20</height>
     423                  </size>
     424                 </property>
     425                </spacer>
     426               </item>
     427              </layout>
     428             </widget>
     429            </item>
     430            <item row="1" column="0">
     431             <widget class="QGroupBox" name="groupBox_5">
     432              <property name="sizePolicy">
     433               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     434                <horstretch>0</horstretch>
     435                <verstretch>0</verstretch>
     436               </sizepolicy>
     437              </property>
     438              <property name="title">
     439               <string>Trigger setup</string>
     440              </property>
     441              <property name="flat">
     442               <bool>false</bool>
     443              </property>
     444              <property name="checkable">
     445               <bool>false</bool>
     446              </property>
     447              <layout class="QGridLayout" name="gridLayout_23">
     448               <item row="2" column="2">
     449                <layout class="QHBoxLayout" name="horizontalLayout_10">
     450                 <property name="topMargin">
     451                  <number>0</number>
     452                 </property>
     453                 <item>
     454                  <spacer name="horizontalSpacer_18">
     455                   <property name="orientation">
     456                    <enum>Qt::Horizontal</enum>
     457                   </property>
     458                   <property name="sizeHint" stdset="0">
     459                    <size>
     460                     <width>40</width>
     461                     <height>20</height>
     462                    </size>
     463                   </property>
     464                  </spacer>
     465                 </item>
     466                 <item>
     467                  <widget class="QLabel" name="label_31">
     468                   <property name="text">
     469                    <string>Interval</string>
     470                   </property>
     471                   <property name="alignment">
     472                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     473                   </property>
     474                  </widget>
     475                 </item>
     476                 <item>
     477                  <widget class="QSpinBox" name="fTriggerInterval">
     478                   <property name="accelerated">
     479                    <bool>true</bool>
     480                   </property>
     481                   <property name="suffix">
     482                    <string> ms</string>
     483                   </property>
     484                   <property name="minimum">
     485                    <number>1</number>
     486                   </property>
     487                   <property name="maximum">
     488                    <number>1023</number>
     489                   </property>
     490                  </widget>
     491                 </item>
     492                 <item>
     493                  <spacer name="horizontalSpacer_17">
     494                   <property name="orientation">
     495                    <enum>Qt::Horizontal</enum>
     496                   </property>
     497                   <property name="sizeHint" stdset="0">
     498                    <size>
     499                     <width>40</width>
     500                     <height>20</height>
     501                    </size>
     502                   </property>
     503                  </spacer>
     504                 </item>
     505                </layout>
     506               </item>
     507               <item row="6" column="0" colspan="4">
     508                <widget class="Line" name="line_5">
     509                 <property name="orientation">
     510                  <enum>Qt::Horizontal</enum>
     511                 </property>
     512                </widget>
     513               </item>
     514               <item row="0" column="0" colspan="4">
     515                <widget class="Line" name="line_6">
     516                 <property name="orientation">
     517                  <enum>Qt::Horizontal</enum>
     518                 </property>
     519                </widget>
     520               </item>
     521               <item row="1" column="2">
     522                <spacer name="verticalSpacer_8">
     523                 <property name="orientation">
     524                  <enum>Qt::Vertical</enum>
     525                 </property>
     526                 <property name="sizeHint" stdset="0">
     527                  <size>
     528                   <width>20</width>
     529                   <height>0</height>
     530                  </size>
     531                 </property>
     532                </spacer>
     533               </item>
     534               <item row="15" column="2">
     535                <spacer name="verticalSpacer_9">
     536                 <property name="orientation">
     537                  <enum>Qt::Vertical</enum>
     538                 </property>
     539                 <property name="sizeHint" stdset="0">
     540                  <size>
     541                   <width>20</width>
     542                   <height>0</height>
     543                  </size>
     544                 </property>
     545                </spacer>
     546               </item>
     547               <item row="8" column="0">
     548                <spacer name="horizontalSpacer_23">
     549                 <property name="orientation">
     550                  <enum>Qt::Horizontal</enum>
     551                 </property>
     552                 <property name="sizeHint" stdset="0">
     553                  <size>
     554                   <width>40</width>
     555                   <height>20</height>
     556                  </size>
     557                 </property>
     558                </spacer>
     559               </item>
     560               <item row="8" column="3">
     561                <spacer name="horizontalSpacer_24">
     562                 <property name="orientation">
     563                  <enum>Qt::Horizontal</enum>
     564                 </property>
     565                 <property name="sizeHint" stdset="0">
     566                  <size>
     567                   <width>40</width>
     568                   <height>20</height>
     569                  </size>
     570                 </property>
     571                </spacer>
     572               </item>
     573               <item row="11" column="0" colspan="4">
     574                <widget class="Line" name="line_11">
     575                 <property name="orientation">
     576                  <enum>Qt::Horizontal</enum>
     577                 </property>
     578                </widget>
     579               </item>
     580               <item row="13" column="2">
     581                <layout class="QGridLayout" name="gridLayout_30">
     582                 <property name="topMargin">
     583                  <number>0</number>
     584                 </property>
     585                 <item row="1" column="0">
     586                  <widget class="QCheckBox" name="fEnableTrigger">
     587                   <property name="sizePolicy">
     588                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     589                     <horstretch>0</horstretch>
     590                     <verstretch>0</verstretch>
     591                    </sizepolicy>
     592                   </property>
     593                   <property name="text">
     594                    <string/>
     595                   </property>
     596                   <property name="checked">
     597                    <bool>false</bool>
     598                   </property>
     599                  </widget>
     600                 </item>
     601                 <item row="1" column="1">
     602                  <widget class="QCheckBox" name="fEnableExt1">
     603                   <property name="sizePolicy">
     604                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     605                     <horstretch>0</horstretch>
     606                     <verstretch>0</verstretch>
     607                    </sizepolicy>
     608                   </property>
     609                   <property name="text">
     610                    <string/>
     611                   </property>
     612                  </widget>
     613                 </item>
     614                 <item row="1" column="2">
     615                  <widget class="QCheckBox" name="fEnableExt2">
     616                   <property name="sizePolicy">
     617                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     618                     <horstretch>0</horstretch>
     619                     <verstretch>0</verstretch>
     620                    </sizepolicy>
     621                   </property>
     622                   <property name="text">
     623                    <string/>
     624                   </property>
     625                  </widget>
     626                 </item>
     627                 <item row="1" column="3">
     628                  <widget class="QCheckBox" name="fEnableTimeMarker">
     629                   <property name="sizePolicy">
     630                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     631                     <horstretch>0</horstretch>
     632                     <verstretch>0</verstretch>
     633                    </sizepolicy>
     634                   </property>
     635                   <property name="text">
     636                    <string/>
     637                   </property>
     638                  </widget>
     639                 </item>
     640                 <item row="1" column="5">
     641                  <widget class="QCheckBox" name="fEnableVeto">
     642                   <property name="sizePolicy">
     643                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     644                     <horstretch>0</horstretch>
     645                     <verstretch>0</verstretch>
     646                    </sizepolicy>
     647                   </property>
     648                   <property name="maximumSize">
     649                    <size>
     650                     <width>16777215</width>
     651                     <height>16777215</height>
     652                    </size>
     653                   </property>
     654                   <property name="baseSize">
     655                    <size>
     656                     <width>0</width>
     657                     <height>0</height>
     658                    </size>
     659                   </property>
     660                   <property name="text">
     661                    <string/>
     662                   </property>
     663                  </widget>
     664                 </item>
     665                 <item row="0" column="0">
     666                  <widget class="QLabel" name="label_23">
     667                   <property name="text">
     668                    <string>Trg</string>
     669                   </property>
     670                   <property name="alignment">
     671                    <set>Qt::AlignHCenter|Qt::AlignTop</set>
     672                   </property>
     673                  </widget>
     674                 </item>
     675                 <item row="0" column="1">
     676                  <widget class="QLabel" name="label_29">
     677                   <property name="text">
     678                    <string>Ext1</string>
     679                   </property>
     680                   <property name="alignment">
     681                    <set>Qt::AlignHCenter|Qt::AlignTop</set>
     682                   </property>
     683                  </widget>
     684                 </item>
     685                 <item row="0" column="2">
     686                  <widget class="QLabel" name="label_30">
     687                   <property name="text">
     688                    <string>Ext2</string>
     689                   </property>
     690                   <property name="alignment">
     691                    <set>Qt::AlignHCenter|Qt::AlignTop</set>
     692                   </property>
     693                  </widget>
     694                 </item>
     695                 <item row="0" column="3">
     696                  <widget class="QLabel" name="label_28">
     697                   <property name="text">
     698                    <string>TIM</string>
     699                   </property>
     700                   <property name="alignment">
     701                    <set>Qt::AlignHCenter|Qt::AlignTop</set>
     702                   </property>
     703                  </widget>
     704                 </item>
     705                 <item row="1" column="4">
     706                  <spacer name="horizontalSpacer_30">
     707                   <property name="orientation">
     708                    <enum>Qt::Horizontal</enum>
     709                   </property>
     710                   <property name="sizeType">
     711                    <enum>QSizePolicy::Fixed</enum>
     712                   </property>
     713                   <property name="sizeHint" stdset="0">
     714                    <size>
     715                     <width>10</width>
     716                     <height>0</height>
     717                    </size>
     718                   </property>
     719                  </spacer>
     720                 </item>
     721                 <item row="0" column="5">
     722                  <widget class="QLabel" name="label_27">
     723                   <property name="text">
     724                    <string>Veto</string>
     725                   </property>
     726                   <property name="alignment">
     727                    <set>Qt::AlignHCenter|Qt::AlignTop</set>
     728                   </property>
     729                  </widget>
     730                 </item>
     731                </layout>
     732               </item>
     733               <item row="7" column="2">
     734                <spacer name="verticalSpacer_10">
     735                 <property name="orientation">
     736                  <enum>Qt::Vertical</enum>
     737                 </property>
     738                 <property name="sizeHint" stdset="0">
     739                  <size>
     740                   <width>20</width>
     741                   <height>40</height>
     742                  </size>
     743                 </property>
     744                </spacer>
     745               </item>
     746               <item row="8" column="2">
     747                <layout class="QGridLayout" name="gridLayout_24">
     748                 <item row="2" column="0">
     749                  <widget class="QLabel" name="label_34">
     750                   <property name="text">
     751                    <string>Pedestal</string>
     752                   </property>
     753                   <property name="alignment">
     754                    <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     755                   </property>
     756                  </widget>
     757                 </item>
     758                 <item row="4" column="0">
     759                  <widget class="QSpinBox" name="fTriggerSeqPed">
     760                   <property name="enabled">
     761                    <bool>false</bool>
     762                   </property>
     763                   <property name="sizePolicy">
     764                    <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
     765                     <horstretch>0</horstretch>
     766                     <verstretch>0</verstretch>
     767                    </sizepolicy>
     768                   </property>
     769                   <property name="alignment">
     770                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     771                   </property>
     772                   <property name="maximum">
     773                    <number>31</number>
     774                   </property>
     775                  </widget>
     776                 </item>
     777                 <item row="4" column="2">
     778                  <widget class="QLabel" name="label_32">
     779                   <property name="text">
     780                    <string>:</string>
     781                   </property>
     782                   <property name="alignment">
     783                    <set>Qt::AlignCenter</set>
     784                   </property>
     785                  </widget>
     786                 </item>
     787                 <item row="4" column="3">
     788                  <widget class="QSpinBox" name="fTriggerSeqLP1">
     789                   <property name="enabled">
     790                    <bool>false</bool>
     791                   </property>
     792                   <property name="sizePolicy">
     793                    <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
     794                     <horstretch>0</horstretch>
     795                     <verstretch>0</verstretch>
     796                    </sizepolicy>
     797                   </property>
     798                   <property name="alignment">
     799                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     800                   </property>
     801                   <property name="maximum">
     802                    <number>31</number>
     803                   </property>
     804                  </widget>
     805                 </item>
     806                 <item row="4" column="5">
     807                  <widget class="QSpinBox" name="fTriggerSeqLP2">
     808                   <property name="enabled">
     809                    <bool>false</bool>
     810                   </property>
     811                   <property name="sizePolicy">
     812                    <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
     813                     <horstretch>0</horstretch>
     814                     <verstretch>0</verstretch>
     815                    </sizepolicy>
     816                   </property>
     817                   <property name="alignment">
     818                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     819                   </property>
     820                   <property name="maximum">
     821                    <number>31</number>
     822                   </property>
     823                  </widget>
     824                 </item>
     825                 <item row="4" column="4">
     826                  <widget class="QLabel" name="label_33">
     827                   <property name="text">
     828                    <string>:</string>
     829                   </property>
     830                   <property name="alignment">
     831                    <set>Qt::AlignCenter</set>
     832                   </property>
     833                  </widget>
     834                 </item>
     835                 <item row="2" column="5">
     836                  <widget class="QLabel" name="label_38">
     837                   <property name="text">
     838                    <string>LP2</string>
     839                   </property>
     840                   <property name="alignment">
     841                    <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     842                   </property>
     843                  </widget>
     844                 </item>
     845                 <item row="2" column="3">
     846                  <widget class="QLabel" name="label_36">
     847                   <property name="text">
     848                    <string>LP1</string>
     849                   </property>
     850                   <property name="alignment">
     851                    <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     852                   </property>
     853                  </widget>
     854                 </item>
     855                 <item row="3" column="0">
     856                  <layout class="QHBoxLayout" name="horizontalLayout_15">
     857                   <property name="rightMargin">
     858                    <number>0</number>
     859                   </property>
     860                   <item>
     861                    <widget class="QCheckBox" name="fEnablePedestal">
     862                     <property name="sizePolicy">
     863                      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     864                       <horstretch>0</horstretch>
     865                       <verstretch>0</verstretch>
     866                      </sizepolicy>
     867                     </property>
     868                     <property name="text">
     869                      <string/>
     870                     </property>
     871                    </widget>
     872                   </item>
     873                  </layout>
     874                 </item>
     875                 <item row="3" column="3">
     876                  <layout class="QHBoxLayout" name="horizontalLayout_12">
     877                   <property name="rightMargin">
     878                    <number>0</number>
     879                   </property>
     880                   <item>
     881                    <widget class="QCheckBox" name="fEnableLP1">
     882                     <property name="sizePolicy">
     883                      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     884                       <horstretch>0</horstretch>
     885                       <verstretch>0</verstretch>
     886                      </sizepolicy>
     887                     </property>
     888                     <property name="text">
     889                      <string/>
     890                     </property>
     891                    </widget>
     892                   </item>
     893                  </layout>
     894                 </item>
     895                 <item row="3" column="5">
     896                  <layout class="QHBoxLayout" name="horizontalLayout_13">
     897                   <property name="rightMargin">
     898                    <number>0</number>
     899                   </property>
     900                   <item>
     901                    <widget class="QCheckBox" name="fEnableLP2">
     902                     <property name="sizePolicy">
     903                      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     904                       <horstretch>0</horstretch>
     905                       <verstretch>0</verstretch>
     906                      </sizepolicy>
     907                     </property>
     908                     <property name="text">
     909                      <string/>
     910                     </property>
     911                    </widget>
     912                   </item>
     913                  </layout>
     914                 </item>
     915                </layout>
     916               </item>
     917               <item row="10" column="2">
     918                <spacer name="verticalSpacer_11">
     919                 <property name="orientation">
     920                  <enum>Qt::Vertical</enum>
     921                 </property>
     922                 <property name="sizeType">
     923                  <enum>QSizePolicy::Fixed</enum>
     924                 </property>
     925                 <property name="sizeHint" stdset="0">
     926                  <size>
     927                   <width>20</width>
     928                   <height>5</height>
     929                  </size>
     930                 </property>
     931                </spacer>
     932               </item>
     933               <item row="12" column="2">
     934                <spacer name="verticalSpacer_17">
     935                 <property name="orientation">
     936                  <enum>Qt::Vertical</enum>
     937                 </property>
     938                 <property name="sizeType">
     939                  <enum>QSizePolicy::Fixed</enum>
     940                 </property>
     941                 <property name="sizeHint" stdset="0">
     942                  <size>
     943                   <width>20</width>
     944                   <height>5</height>
     945                  </size>
     946                 </property>
     947                </spacer>
     948               </item>
     949               <item row="14" column="2">
     950                <spacer name="verticalSpacer_18">
     951                 <property name="orientation">
     952                  <enum>Qt::Vertical</enum>
     953                 </property>
     954                 <property name="sizeHint" stdset="0">
     955                  <size>
     956                   <width>20</width>
     957                   <height>40</height>
     958                  </size>
     959                 </property>
     960                </spacer>
     961               </item>
     962               <item row="3" column="2">
     963                <spacer name="verticalSpacer_7">
     964                 <property name="orientation">
     965                  <enum>Qt::Vertical</enum>
     966                 </property>
     967                 <property name="sizeHint" stdset="0">
     968                  <size>
     969                   <width>20</width>
     970                   <height>40</height>
     971                  </size>
     972                 </property>
     973                </spacer>
     974               </item>
     975              </layout>
     976             </widget>
     977            </item>
     978            <item row="1" column="1">
     979             <widget class="QGroupBox" name="groupBox">
     980              <property name="sizePolicy">
     981               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     982                <horstretch>0</horstretch>
     983                <verstretch>0</verstretch>
     984               </sizepolicy>
     985              </property>
     986              <property name="title">
     987               <string>Trigger Majority Logic</string>
     988              </property>
     989              <layout class="QGridLayout" name="gridLayout_15">
     990               <item row="2" column="1">
     991                <widget class="QLabel" name="label_8">
     992                 <property name="text">
     993                  <string>Physics</string>
     994                 </property>
     995                </widget>
     996               </item>
     997               <item row="2" column="2">
     998                <widget class="QSpinBox" name="fPhysicsCoincidence">
     999                 <property name="alignment">
     1000                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1001                 </property>
     1002                 <property name="suffix">
     1003                  <string> / 40</string>
     1004                 </property>
     1005                 <property name="minimum">
     1006                  <number>1</number>
     1007                 </property>
     1008                 <property name="maximum">
     1009                  <number>40</number>
     1010                 </property>
     1011                </widget>
     1012               </item>
     1013               <item row="5" column="2">
     1014                <widget class="QSpinBox" name="fCalibCoincidence">
     1015                 <property name="alignment">
     1016                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1017                 </property>
     1018                 <property name="suffix">
     1019                  <string> / 40</string>
     1020                 </property>
     1021                 <property name="minimum">
     1022                  <number>1</number>
     1023                 </property>
     1024                 <property name="maximum">
     1025                  <number>40</number>
     1026                 </property>
     1027                </widget>
     1028               </item>
     1029               <item row="2" column="3">
     1030                <widget class="SpinBox4ns" name="fPhysicsWindow">
     1031                 <property name="alignment">
     1032                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1033                 </property>
     1034                 <property name="accelerated">
     1035                  <bool>false</bool>
     1036                 </property>
     1037                 <property name="correctionMode">
     1038                  <enum>QAbstractSpinBox::CorrectToPreviousValue</enum>
     1039                 </property>
     1040                 <property name="suffix">
     1041                  <string> ns</string>
     1042                 </property>
     1043                 <property name="minimum">
     1044                  <number>8</number>
     1045                 </property>
     1046                 <property name="maximum">
     1047                  <number>68</number>
     1048                 </property>
     1049                 <property name="singleStep">
     1050                  <number>4</number>
     1051                 </property>
     1052                </widget>
     1053               </item>
     1054               <item row="5" column="3">
     1055                <widget class="SpinBox4ns" name="fCalibWindow">
     1056                 <property name="alignment">
     1057                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1058                 </property>
     1059                 <property name="suffix">
     1060                  <string> ns</string>
     1061                 </property>
     1062                 <property name="minimum">
     1063                  <number>8</number>
     1064                 </property>
     1065                 <property name="maximum">
     1066                  <number>68</number>
     1067                 </property>
     1068                 <property name="singleStep">
     1069                  <number>4</number>
     1070                 </property>
     1071                </widget>
     1072               </item>
     1073               <item row="5" column="1">
     1074                <widget class="QLabel" name="label_13">
     1075                 <property name="text">
     1076                  <string>Calibration</string>
     1077                 </property>
     1078                </widget>
     1079               </item>
     1080               <item row="1" column="2">
     1081                <widget class="QLabel" name="label_9">
     1082                 <property name="text">
     1083                  <string>Coincidence</string>
     1084                 </property>
     1085                 <property name="alignment">
     1086                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     1087                 </property>
     1088                </widget>
     1089               </item>
     1090               <item row="1" column="3">
     1091                <widget class="QLabel" name="label_10">
     1092                 <property name="text">
     1093                  <string>Window</string>
     1094                 </property>
     1095                 <property name="alignment">
     1096                  <set>Qt::AlignBottom|Qt::AlignHCenter</set>
     1097                 </property>
     1098                </widget>
     1099               </item>
     1100               <item row="0" column="0" colspan="5">
     1101                <widget class="Line" name="line_8">
     1102                 <property name="orientation">
     1103                  <enum>Qt::Horizontal</enum>
     1104                 </property>
     1105                </widget>
     1106               </item>
     1107               <item row="1" column="1">
     1108                <spacer name="verticalSpacer_14">
     1109                 <property name="orientation">
     1110                  <enum>Qt::Vertical</enum>
     1111                 </property>
     1112                 <property name="sizeHint" stdset="0">
     1113                  <size>
     1114                   <width>20</width>
     1115                   <height>0</height>
     1116                  </size>
     1117                 </property>
     1118                </spacer>
     1119               </item>
     1120               <item row="6" column="1">
     1121                <spacer name="verticalSpacer_15">
     1122                 <property name="orientation">
     1123                  <enum>Qt::Vertical</enum>
     1124                 </property>
     1125                 <property name="sizeHint" stdset="0">
     1126                  <size>
     1127                   <width>20</width>
     1128                   <height>0</height>
     1129                  </size>
     1130                 </property>
     1131                </spacer>
     1132               </item>
     1133               <item row="2" column="0">
     1134                <spacer name="horizontalSpacer_21">
     1135                 <property name="orientation">
     1136                  <enum>Qt::Horizontal</enum>
     1137                 </property>
     1138                 <property name="sizeHint" stdset="0">
     1139                  <size>
     1140                   <width>40</width>
     1141                   <height>20</height>
     1142                  </size>
     1143                 </property>
     1144                </spacer>
     1145               </item>
     1146               <item row="2" column="4">
     1147                <spacer name="horizontalSpacer_22">
     1148                 <property name="orientation">
     1149                  <enum>Qt::Horizontal</enum>
     1150                 </property>
     1151                 <property name="sizeHint" stdset="0">
     1152                  <size>
     1153                   <width>40</width>
     1154                   <height>20</height>
     1155                  </size>
     1156                 </property>
     1157                </spacer>
     1158               </item>
     1159              </layout>
     1160             </widget>
     1161            </item>
     1162            <item row="2" column="0">
     1163             <widget class="QGroupBox" name="groupBox_6">
     1164              <property name="sizePolicy">
     1165               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1166                <horstretch>0</horstretch>
     1167                <verstretch>0</verstretch>
     1168               </sizepolicy>
     1169              </property>
     1170              <property name="title">
     1171               <string>Light pulser settings</string>
     1172              </property>
     1173             </widget>
     1174            </item>
     1175            <item row="1" column="2">
     1176             <widget class="QGroupBox" name="groupBox_2">
     1177              <property name="sizePolicy">
     1178               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1179                <horstretch>0</horstretch>
     1180                <verstretch>0</verstretch>
     1181               </sizepolicy>
     1182              </property>
     1183              <property name="title">
     1184               <string>Trigger timing</string>
     1185              </property>
     1186              <layout class="QGridLayout" name="gridLayout_17">
     1187               <item row="2" column="1">
     1188                <widget class="QLabel" name="label_12">
     1189                 <property name="text">
     1190                  <string>Trigger signal delay</string>
     1191                 </property>
     1192                </widget>
     1193               </item>
     1194               <item row="3" column="1">
     1195                <widget class="QLabel" name="label_14">
     1196                 <property name="text">
     1197                  <string>Time marker delay</string>
     1198                 </property>
     1199                </widget>
     1200               </item>
     1201               <item row="4" column="1">
     1202                <widget class="QLabel" name="label_15">
     1203                 <property name="text">
     1204                  <string>Dead time</string>
     1205                 </property>
     1206                </widget>
     1207               </item>
     1208               <item row="2" column="2">
     1209                <widget class="SpinBox4ns" name="fTriggerDelay">
     1210                 <property name="alignment">
     1211                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1212                 </property>
     1213                 <property name="accelerated">
     1214                  <bool>true</bool>
     1215                 </property>
     1216                 <property name="suffix">
     1217                  <string> ns</string>
     1218                 </property>
     1219                 <property name="prefix">
     1220                  <string/>
     1221                 </property>
     1222                 <property name="minimum">
     1223                  <number>8</number>
     1224                 </property>
     1225                 <property name="maximum">
     1226                  <number>4100</number>
     1227                 </property>
     1228                 <property name="singleStep">
     1229                  <number>4</number>
     1230                 </property>
     1231                </widget>
     1232               </item>
     1233               <item row="3" column="2">
     1234                <widget class="SpinBox4ns" name="fTimeMarkerDelay">
     1235                 <property name="alignment">
     1236                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1237                 </property>
     1238                 <property name="accelerated">
     1239                  <bool>true</bool>
     1240                 </property>
     1241                 <property name="suffix">
     1242                  <string> ns</string>
     1243                 </property>
     1244                 <property name="minimum">
     1245                  <number>8</number>
     1246                 </property>
     1247                 <property name="maximum">
     1248                  <number>4100</number>
     1249                 </property>
     1250                 <property name="singleStep">
     1251                  <number>4</number>
     1252                 </property>
     1253                </widget>
     1254               </item>
     1255               <item row="4" column="2">
     1256                <widget class="SpinBox4ns" name="fDeadTime">
     1257                 <property name="alignment">
     1258                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1259                 </property>
     1260                 <property name="accelerated">
     1261                  <bool>true</bool>
     1262                 </property>
     1263                 <property name="suffix">
     1264                  <string> ns</string>
     1265                 </property>
     1266                 <property name="minimum">
     1267                  <number>8</number>
     1268                 </property>
     1269                 <property name="maximum">
     1270                  <number>262148</number>
     1271                 </property>
     1272                 <property name="singleStep">
     1273                  <number>4</number>
     1274                 </property>
     1275                </widget>
     1276               </item>
     1277               <item row="0" column="0" colspan="4">
     1278                <widget class="Line" name="line_9">
     1279                 <property name="orientation">
     1280                  <enum>Qt::Horizontal</enum>
     1281                 </property>
     1282                </widget>
     1283               </item>
     1284               <item row="1" column="2">
     1285                <spacer name="verticalSpacer_2">
     1286                 <property name="orientation">
     1287                  <enum>Qt::Vertical</enum>
     1288                 </property>
     1289                 <property name="sizeHint" stdset="0">
     1290                  <size>
     1291                   <width>20</width>
     1292                   <height>0</height>
     1293                  </size>
     1294                 </property>
     1295                </spacer>
     1296               </item>
     1297               <item row="5" column="1">
     1298                <spacer name="verticalSpacer_5">
     1299                 <property name="orientation">
     1300                  <enum>Qt::Vertical</enum>
     1301                 </property>
     1302                 <property name="sizeHint" stdset="0">
     1303                  <size>
     1304                   <width>20</width>
     1305                   <height>0</height>
     1306                  </size>
     1307                 </property>
     1308                </spacer>
     1309               </item>
     1310               <item row="2" column="3">
     1311                <spacer name="horizontalSpacer_19">
     1312                 <property name="orientation">
     1313                  <enum>Qt::Horizontal</enum>
     1314                 </property>
     1315                 <property name="sizeHint" stdset="0">
     1316                  <size>
     1317                   <width>40</width>
     1318                   <height>20</height>
     1319                  </size>
     1320                 </property>
     1321                </spacer>
     1322               </item>
     1323               <item row="2" column="0">
     1324                <spacer name="horizontalSpacer_20">
     1325                 <property name="orientation">
     1326                  <enum>Qt::Horizontal</enum>
     1327                 </property>
     1328                 <property name="sizeHint" stdset="0">
     1329                  <size>
     1330                   <width>40</width>
     1331                   <height>20</height>
     1332                  </size>
     1333                 </property>
     1334                </spacer>
     1335               </item>
     1336              </layout>
     1337             </widget>
     1338            </item>
     1339            <item row="2" column="1">
     1340             <widget class="QGroupBox" name="groupBox_4">
     1341              <property name="sizePolicy">
     1342               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1343                <horstretch>0</horstretch>
     1344                <verstretch>0</verstretch>
     1345               </sizepolicy>
     1346              </property>
     1347              <property name="title">
     1348               <string>Rate settings</string>
     1349              </property>
     1350              <layout class="QGridLayout" name="gridLayout_22">
     1351               <item row="0" column="0" colspan="9">
     1352                <widget class="Line" name="line_7">
     1353                 <property name="sizePolicy">
     1354                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
     1355                   <horstretch>0</horstretch>
     1356                   <verstretch>0</verstretch>
     1357                  </sizepolicy>
     1358                 </property>
     1359                 <property name="orientation">
     1360                  <enum>Qt::Horizontal</enum>
     1361                 </property>
     1362                </widget>
     1363               </item>
     1364               <item row="1" column="4">
     1365                <spacer name="verticalSpacer_6">
     1366                 <property name="orientation">
     1367                  <enum>Qt::Vertical</enum>
     1368                 </property>
     1369                 <property name="sizeHint" stdset="0">
     1370                  <size>
     1371                   <width>20</width>
     1372                   <height>40</height>
     1373                  </size>
     1374                 </property>
     1375                </spacer>
     1376               </item>
     1377               <item row="2" column="4">
     1378                <widget class="QSpinBox" name="fPrescalingVal">
     1379                 <property name="alignment">
     1380                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1381                 </property>
     1382                 <property name="minimum">
     1383                  <number>1</number>
     1384                 </property>
     1385                 <property name="maximum">
     1386                  <number>256</number>
     1387                 </property>
     1388                </widget>
     1389               </item>
     1390               <item row="3" column="4">
     1391                <spacer name="verticalSpacer_22">
     1392                 <property name="orientation">
     1393                  <enum>Qt::Vertical</enum>
     1394                 </property>
     1395                 <property name="sizeHint" stdset="0">
     1396                  <size>
     1397                   <width>20</width>
     1398                   <height>40</height>
     1399                  </size>
     1400                 </property>
     1401                </spacer>
     1402               </item>
     1403               <item row="2" column="3">
     1404                <widget class="QLabel" name="label_56">
     1405                 <property name="text">
     1406                  <string>Prescaling</string>
     1407                 </property>
     1408                </widget>
     1409               </item>
     1410               <item row="2" column="5">
     1411                <widget class="QLabel" name="label_57">
     1412                 <property name="text">
     1413                  <string>· 0.5 Hz</string>
     1414                 </property>
     1415                </widget>
     1416               </item>
     1417              </layout>
     1418             </widget>
     1419            </item>
     1420           </layout>
     1421          </widget>
     1422         </widget>
     1423        </item>
     1424       </layout>
     1425      </widget>
     1426      <widget class="QWidget" name="fFtuTab">
     1427       <attribute name="title">
     1428        <string>FTUs</string>
     1429       </attribute>
     1430       <layout class="QGridLayout" name="gridLayout_28">
     1431        <item row="0" column="1">
     1432         <widget class="QDockWidget" name="fFtuDock">
     1433          <property name="sizePolicy">
     1434           <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
     1435            <horstretch>0</horstretch>
     1436            <verstretch>0</verstretch>
     1437           </sizepolicy>
     1438          </property>
     1439          <property name="features">
     1440           <set>QDockWidget::NoDockWidgetFeatures</set>
     1441          </property>
     1442          <property name="allowedAreas">
     1443           <set>Qt::AllDockWidgetAreas</set>
     1444          </property>
     1445          <property name="windowTitle">
     1446           <string>FTU overview</string>
     1447          </property>
     1448          <widget class="QWidget" name="fFtuWidget">
     1449           <property name="sizePolicy">
     1450            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1451             <horstretch>0</horstretch>
     1452             <verstretch>0</verstretch>
     1453            </sizepolicy>
     1454           </property>
     1455           <layout class="QGridLayout" name="gridLayout_25" rowstretch="0,0,0,0,0" columnstretch="1,0">
     1456            <item row="0" column="1" rowspan="5">
     1457             <widget class="QGroupBox" name="groupBox_8">
     1458              <property name="sizePolicy">
     1459               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1460                <horstretch>0</horstretch>
     1461                <verstretch>0</verstretch>
     1462               </sizepolicy>
     1463              </property>
     1464              <property name="title">
     1465               <string>Temperatures</string>
     1466              </property>
     1467              <layout class="QVBoxLayout" name="verticalLayout_4">
     1468               <item>
     1469                <layout class="QHBoxLayout" name="horizontalLayout_14">
     1470                 <property name="topMargin">
     1471                  <number>0</number>
     1472                 </property>
     1473                 <item>
     1474                  <widget class="QDoubleSpinBox" name="fFtmTemp0">
     1475                   <property name="alignment">
     1476                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1477                   </property>
     1478                   <property name="readOnly">
     1479                    <bool>true</bool>
     1480                   </property>
     1481                   <property name="buttonSymbols">
     1482                    <enum>QAbstractSpinBox::NoButtons</enum>
     1483                   </property>
     1484                   <property name="suffix">
     1485                    <string>°C</string>
     1486                   </property>
     1487                   <property name="decimals">
     1488                    <number>1</number>
     1489                   </property>
     1490                   <property name="minimum">
     1491                    <double>-20.000000000000000</double>
     1492                   </property>
     1493                  </widget>
     1494                 </item>
     1495                 <item>
     1496                  <widget class="QDoubleSpinBox" name="fFtmTemp1">
     1497                   <property name="alignment">
     1498                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1499                   </property>
     1500                   <property name="readOnly">
     1501                    <bool>true</bool>
     1502                   </property>
     1503                   <property name="buttonSymbols">
     1504                    <enum>QAbstractSpinBox::NoButtons</enum>
     1505                   </property>
     1506                   <property name="suffix">
     1507                    <string>°C</string>
     1508                   </property>
     1509                   <property name="decimals">
     1510                    <number>1</number>
     1511                   </property>
     1512                   <property name="minimum">
     1513                    <double>-20.000000000000000</double>
     1514                   </property>
     1515                  </widget>
     1516                 </item>
     1517                 <item>
     1518                  <widget class="QDoubleSpinBox" name="fFtmTemp2">
     1519                   <property name="alignment">
     1520                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1521                   </property>
     1522                   <property name="readOnly">
     1523                    <bool>true</bool>
     1524                   </property>
     1525                   <property name="buttonSymbols">
     1526                    <enum>QAbstractSpinBox::NoButtons</enum>
     1527                   </property>
     1528                   <property name="suffix">
     1529                    <string>°C</string>
     1530                   </property>
     1531                   <property name="decimals">
     1532                    <number>1</number>
     1533                   </property>
     1534                   <property name="minimum">
     1535                    <double>-20.000000000000000</double>
     1536                   </property>
     1537                  </widget>
     1538                 </item>
     1539                 <item>
     1540                  <widget class="QDoubleSpinBox" name="fFtmTemp3">
     1541                   <property name="alignment">
     1542                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1543                   </property>
     1544                   <property name="readOnly">
     1545                    <bool>true</bool>
     1546                   </property>
     1547                   <property name="buttonSymbols">
     1548                    <enum>QAbstractSpinBox::NoButtons</enum>
     1549                   </property>
     1550                   <property name="suffix">
     1551                    <string>°C</string>
     1552                   </property>
     1553                   <property name="decimals">
     1554                    <number>1</number>
     1555                   </property>
     1556                   <property name="minimum">
     1557                    <double>-20.000000000000000</double>
     1558                   </property>
     1559                  </widget>
     1560                 </item>
     1561                </layout>
     1562               </item>
     1563               <item>
     1564                <widget class="QFrame" name="frame_2">
     1565                 <property name="sizePolicy">
     1566                  <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1567                   <horstretch>0</horstretch>
     1568                   <verstretch>0</verstretch>
     1569                  </sizepolicy>
     1570                 </property>
     1571                 <property name="frameShape">
     1572                  <enum>QFrame::StyledPanel</enum>
     1573                 </property>
     1574                 <property name="frameShadow">
     1575                  <enum>QFrame::Sunken</enum>
     1576                 </property>
     1577                 <layout class="QGridLayout" name="gridLayout_29">
     1578                  <property name="margin">
     1579                   <number>3</number>
     1580                  </property>
     1581                  <item row="0" column="0">
     1582                   <widget class="TQtWidget" name="fFtmTempCanv" native="true">
     1583                    <property name="sizePolicy">
     1584                     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     1585                      <horstretch>0</horstretch>
     1586                      <verstretch>0</verstretch>
     1587                     </sizepolicy>
     1588                    </property>
     1589                   </widget>
     1590                  </item>
     1591                 </layout>
     1592                </widget>
     1593               </item>
     1594              </layout>
     1595             </widget>
     1596            </item>
     1597            <item row="0" column="0">
     1598             <widget class="QGroupBox" name="groupBox_10">
     1599              <property name="sizePolicy">
     1600               <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
     1601                <horstretch>0</horstretch>
     1602                <verstretch>0</verstretch>
     1603               </sizepolicy>
     1604              </property>
     1605              <property name="title">
     1606               <string>Counter</string>
     1607              </property>
     1608              <layout class="QGridLayout" name="gridLayout_33">
     1609               <item row="1" column="0">
     1610                <widget class="QLabel" name="label_39">
     1611                 <property name="text">
     1612                  <string>Time</string>
     1613                 </property>
     1614                </widget>
     1615               </item>
     1616               <item row="2" column="0">
     1617                <widget class="QLabel" name="label_41">
     1618                 <property name="text">
     1619                  <string>On time</string>
     1620                 </property>
     1621                </widget>
     1622               </item>
     1623               <item row="1" column="1">
     1624                <widget class="QLineEdit" name="fFtmTime">
     1625                 <property name="sizePolicy">
     1626                  <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     1627                   <horstretch>0</horstretch>
     1628                   <verstretch>0</verstretch>
     1629                  </sizepolicy>
     1630                 </property>
     1631                 <property name="alignment">
     1632                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1633                 </property>
     1634                </widget>
     1635               </item>
     1636               <item row="2" column="1">
     1637                <widget class="QLineEdit" name="fOnTime">
     1638                 <property name="sizePolicy">
     1639                  <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     1640                   <horstretch>0</horstretch>
     1641                   <verstretch>0</verstretch>
     1642                  </sizepolicy>
     1643                 </property>
     1644                 <property name="alignment">
     1645                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1646                 </property>
     1647                </widget>
     1648               </item>
     1649               <item row="3" column="1">
     1650                <widget class="QLineEdit" name="fTriggerCounter">
     1651                 <property name="sizePolicy">
     1652                  <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     1653                   <horstretch>0</horstretch>
     1654                   <verstretch>0</verstretch>
     1655                  </sizepolicy>
     1656                 </property>
     1657                 <property name="alignment">
     1658                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1659                 </property>
     1660                </widget>
     1661               </item>
     1662               <item row="3" column="0">
     1663                <widget class="QLabel" name="label_40">
     1664                 <property name="text">
     1665                  <string>Trigger counter</string>
     1666                 </property>
     1667                </widget>
     1668               </item>
     1669              </layout>
     1670             </widget>
     1671            </item>
     1672            <item row="2" column="0">
     1673             <widget class="QGroupBox" name="groupBox_7">
     1674              <property name="sizePolicy">
     1675               <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
     1676                <horstretch>0</horstretch>
     1677                <verstretch>0</verstretch>
     1678               </sizepolicy>
     1679              </property>
     1680              <property name="minimumSize">
     1681               <size>
     1682                <width>359</width>
     1683                <height>0</height>
     1684               </size>
     1685              </property>
     1686              <property name="title">
     1687               <string>FTU DNAs</string>
     1688              </property>
     1689              <layout class="QGridLayout" name="gridLayout_13">
     1690               <item row="0" column="0">
     1691                <widget class="QTextEdit" name="fFtuDNA">
     1692                 <property name="readOnly">
     1693                  <bool>true</bool>
     1694                 </property>
     1695                </widget>
     1696               </item>
     1697              </layout>
     1698             </widget>
     1699            </item>
     1700            <item row="1" column="0">
     1701             <widget class="QGroupBox" name="groupBox_9">
     1702              <property name="sizePolicy">
     1703               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     1704                <horstretch>0</horstretch>
     1705                <verstretch>0</verstretch>
     1706               </sizepolicy>
     1707              </property>
     1708              <property name="minimumSize">
     1709               <size>
     1710                <width>359</width>
     1711                <height>176</height>
     1712               </size>
     1713              </property>
     1714              <property name="title">
     1715               <string>FTU Enable</string>
     1716              </property>
     1717              <layout class="QGridLayout" name="gridLayout_32">
     1718               <item row="0" column="0">
     1719                <layout class="QGridLayout" name="fFtuLedLayout" rowstretch="0,0,0,0,0" columnstretch="0,0,0,0,0,0,0,0,0,0,0,0">
     1720                 <property name="margin">
     1721                  <number>4</number>
     1722                 </property>
     1723                 <item row="1" column="1">
     1724                  <widget class="QPushButton" name="fFtuLEDPrototype">
     1725                   <property name="enabled">
     1726                    <bool>true</bool>
     1727                   </property>
     1728                   <property name="sizePolicy">
     1729                    <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
     1730                     <horstretch>0</horstretch>
     1731                     <verstretch>0</verstretch>
     1732                    </sizepolicy>
     1733                   </property>
     1734                   <property name="maximumSize">
     1735                    <size>
     1736                     <width>18</width>
     1737                     <height>16777215</height>
     1738                    </size>
     1739                   </property>
     1740                   <property name="text">
     1741                    <string/>
     1742                   </property>
     1743                   <property name="icon">
     1744                    <iconset resource="design.qrc">
     1745                     <normaloff>:/Resources/icons/gray circle 1.png</normaloff>:/Resources/icons/gray circle 1.png</iconset>
     1746                   </property>
     1747                   <property name="iconSize">
     1748                    <size>
     1749                     <width>16</width>
     1750                     <height>16</height>
     1751                    </size>
     1752                   </property>
     1753                   <property name="checkable">
     1754                    <bool>false</bool>
     1755                   </property>
     1756                   <property name="flat">
     1757                    <bool>true</bool>
     1758                   </property>
     1759                  </widget>
     1760                 </item>
     1761                 <item row="1" column="0">
     1762                  <widget class="QLabel" name="label_42">
     1763                   <property name="text">
     1764                    <string>Crate#0</string>
     1765                   </property>
     1766                  </widget>
     1767                 </item>
     1768                 <item row="2" column="0">
     1769                  <widget class="QLabel" name="label_43">
     1770                   <property name="text">
     1771                    <string>Crate #1</string>
     1772                   </property>
     1773                  </widget>
     1774                 </item>
     1775                 <item row="3" column="0">
     1776                  <widget class="QLabel" name="label_44">
     1777                   <property name="text">
     1778                    <string>Crate#2</string>
     1779                   </property>
     1780                  </widget>
     1781                 </item>
     1782                 <item row="4" column="0">
     1783                  <widget class="QLabel" name="label_45">
     1784                   <property name="text">
     1785                    <string>Crate #3</string>
     1786                   </property>
     1787                  </widget>
     1788                 </item>
     1789                 <item row="0" column="1">
     1790                  <widget class="QLabel" name="label_46">
     1791                   <property name="text">
     1792                    <string>1</string>
     1793                   </property>
     1794                   <property name="alignment">
     1795                    <set>Qt::AlignCenter</set>
     1796                   </property>
     1797                  </widget>
     1798                 </item>
     1799                 <item row="0" column="2">
     1800                  <widget class="QLabel" name="label_47">
     1801                   <property name="text">
     1802                    <string>2</string>
     1803                   </property>
     1804                   <property name="alignment">
     1805                    <set>Qt::AlignCenter</set>
     1806                   </property>
     1807                  </widget>
     1808                 </item>
     1809                 <item row="0" column="3">
     1810                  <widget class="QLabel" name="label_48">
     1811                   <property name="text">
     1812                    <string>3</string>
     1813                   </property>
     1814                   <property name="alignment">
     1815                    <set>Qt::AlignCenter</set>
     1816                   </property>
     1817                  </widget>
     1818                 </item>
     1819                 <item row="0" column="4">
     1820                  <widget class="QLabel" name="label_49">
     1821                   <property name="text">
     1822                    <string>4</string>
     1823                   </property>
     1824                   <property name="alignment">
     1825                    <set>Qt::AlignCenter</set>
     1826                   </property>
     1827                  </widget>
     1828                 </item>
     1829                 <item row="0" column="5">
     1830                  <widget class="QLabel" name="label_50">
     1831                   <property name="text">
     1832                    <string>5</string>
     1833                   </property>
     1834                   <property name="alignment">
     1835                    <set>Qt::AlignCenter</set>
     1836                   </property>
     1837                  </widget>
     1838                 </item>
     1839                 <item row="0" column="6">
     1840                  <widget class="QLabel" name="label_51">
     1841                   <property name="text">
     1842                    <string>6</string>
     1843                   </property>
     1844                   <property name="alignment">
     1845                    <set>Qt::AlignCenter</set>
     1846                   </property>
     1847                  </widget>
     1848                 </item>
     1849                 <item row="0" column="7">
     1850                  <widget class="QLabel" name="label_52">
     1851                   <property name="text">
     1852                    <string>7</string>
     1853                   </property>
     1854                   <property name="alignment">
     1855                    <set>Qt::AlignCenter</set>
     1856                   </property>
     1857                  </widget>
     1858                 </item>
     1859                 <item row="0" column="8">
     1860                  <widget class="QLabel" name="label_53">
     1861                   <property name="text">
     1862                    <string>8</string>
     1863                   </property>
     1864                   <property name="alignment">
     1865                    <set>Qt::AlignCenter</set>
     1866                   </property>
     1867                  </widget>
     1868                 </item>
     1869                 <item row="0" column="9">
     1870                  <widget class="QLabel" name="label_54">
     1871                   <property name="text">
     1872                    <string>9</string>
     1873                   </property>
     1874                   <property name="alignment">
     1875                    <set>Qt::AlignCenter</set>
     1876                   </property>
     1877                  </widget>
     1878                 </item>
     1879                 <item row="0" column="10">
     1880                  <widget class="QLabel" name="label_55">
     1881                   <property name="text">
     1882                    <string>10</string>
     1883                   </property>
     1884                   <property name="alignment">
     1885                    <set>Qt::AlignCenter</set>
     1886                   </property>
     1887                  </widget>
     1888                 </item>
     1889                 <item row="1" column="11">
     1890                  <widget class="QSpinBox" name="fFtuAnswersCrate0">
     1891                   <property name="alignment">
     1892                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1893                   </property>
     1894                   <property name="readOnly">
     1895                    <bool>true</bool>
     1896                   </property>
     1897                   <property name="buttonSymbols">
     1898                    <enum>QAbstractSpinBox::NoButtons</enum>
     1899                   </property>
     1900                   <property name="maximum">
     1901                    <number>10</number>
     1902                   </property>
     1903                  </widget>
     1904                 </item>
     1905                 <item row="2" column="11">
     1906                  <widget class="QSpinBox" name="fFtuAnswersCrate1">
     1907                   <property name="alignment">
     1908                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1909                   </property>
     1910                   <property name="readOnly">
     1911                    <bool>true</bool>
     1912                   </property>
     1913                   <property name="buttonSymbols">
     1914                    <enum>QAbstractSpinBox::NoButtons</enum>
     1915                   </property>
     1916                   <property name="maximum">
     1917                    <number>10</number>
     1918                   </property>
     1919                  </widget>
     1920                 </item>
     1921                 <item row="3" column="11">
     1922                  <widget class="QSpinBox" name="fFtuAnswersCrate2">
     1923                   <property name="alignment">
     1924                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1925                   </property>
     1926                   <property name="readOnly">
     1927                    <bool>true</bool>
     1928                   </property>
     1929                   <property name="buttonSymbols">
     1930                    <enum>QAbstractSpinBox::NoButtons</enum>
     1931                   </property>
     1932                   <property name="maximum">
     1933                    <number>10</number>
     1934                   </property>
     1935                  </widget>
     1936                 </item>
     1937                 <item row="4" column="11">
     1938                  <widget class="QSpinBox" name="fFtuAnswersCrate3">
     1939                   <property name="alignment">
     1940                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1941                   </property>
     1942                   <property name="readOnly">
     1943                    <bool>true</bool>
     1944                   </property>
     1945                   <property name="buttonSymbols">
     1946                    <enum>QAbstractSpinBox::NoButtons</enum>
     1947                   </property>
     1948                   <property name="maximum">
     1949                    <number>10</number>
     1950                   </property>
     1951                  </widget>
     1952                 </item>
     1953                 <item row="0" column="11">
     1954                  <widget class="QSpinBox" name="fFtuAnswersTotal">
     1955                   <property name="alignment">
     1956                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     1957                   </property>
     1958                   <property name="readOnly">
     1959                    <bool>true</bool>
     1960                   </property>
     1961                   <property name="buttonSymbols">
     1962                    <enum>QAbstractSpinBox::NoButtons</enum>
     1963                   </property>
     1964                   <property name="maximum">
     1965                    <number>40</number>
     1966                   </property>
     1967                  </widget>
     1968                 </item>
     1969                </layout>
     1970               </item>
     1971              </layout>
     1972             </widget>
     1973            </item>
     1974           </layout>
     1975          </widget>
     1976         </widget>
     1977        </item>
     1978       </layout>
     1979      </widget>
     1980      <widget class="QWidget" name="fRatesTab">
     1981       <attribute name="title">
     1982        <string>Rates</string>
     1983       </attribute>
     1984       <layout class="QGridLayout" name="gridLayout_12">
     1985        <item row="0" column="0">
     1986         <widget class="QDockWidget" name="fRatesDock">
    691987          <property name="sizePolicy">
    701988           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     
    801998          </property>
    811999          <property name="windowTitle">
    82            <string>Dim service overview</string>
     2000           <string>Dim command overview</string>
    832001          </property>
    84           <widget class="QWidget" name="fDimSvcWidget">
     2002          <widget class="QWidget" name="fRatesWidget">
    852003           <property name="sizePolicy">
    862004            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     
    892007            </sizepolicy>
    902008           </property>
    91            <layout class="QGridLayout" name="gridLayout_10" rowstretch="0,0,4,0,3">
    92             <item row="2" column="0">
    93              <layout class="QHBoxLayout" name="horizontalLayout_7" stretch="3,5,8">
    94               <property name="topMargin">
     2009           <layout class="QGridLayout" name="gridLayout_6">
     2010            <item row="0" column="0">
     2011             <widget class="QFrame" name="frame_4">
     2012              <property name="sizePolicy">
     2013               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
     2014                <horstretch>0</horstretch>
     2015                <verstretch>0</verstretch>
     2016               </sizepolicy>
     2017              </property>
     2018              <property name="minimumSize">
     2019               <size>
     2020                <width>500</width>
     2021                <height>500</height>
     2022               </size>
     2023              </property>
     2024              <property name="frameShape">
     2025               <enum>QFrame::StyledPanel</enum>
     2026              </property>
     2027              <property name="frameShadow">
     2028               <enum>QFrame::Sunken</enum>
     2029              </property>
     2030              <layout class="QGridLayout" name="gridLayout_31">
     2031               <property name="margin">
     2032                <number>3</number>
     2033               </property>
     2034               <item row="0" column="0">
     2035                <widget class="TQtWidget" name="fRatesCanv" native="true"/>
     2036               </item>
     2037              </layout>
     2038             </widget>
     2039            </item>
     2040            <item row="0" column="1">
     2041             <layout class="QVBoxLayout" name="verticalLayout_5">
     2042              <property name="rightMargin">
    952043               <number>0</number>
    962044              </property>
    972045              <item>
    98                <widget class="QListView" name="fDimSvcServers">
     2046               <widget class="QLabel" name="label_25">
     2047                <property name="text">
     2048                 <string>Patch</string>
     2049                </property>
     2050               </widget>
     2051              </item>
     2052              <item>
     2053               <widget class="QSpinBox" name="fThresholdIdx">
     2054                <property name="alignment">
     2055                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2056                </property>
     2057                <property name="readOnly">
     2058                 <bool>false</bool>
     2059                </property>
     2060                <property name="specialValueText">
     2061                 <string>all</string>
     2062                </property>
     2063                <property name="minimum">
     2064                 <number>-1</number>
     2065                </property>
     2066                <property name="maximum">
     2067                 <number>1438</number>
     2068                </property>
     2069                <property name="value">
     2070                 <number>0</number>
     2071                </property>
     2072               </widget>
     2073              </item>
     2074              <item>
     2075               <spacer name="verticalSpacer_20">
     2076                <property name="orientation">
     2077                 <enum>Qt::Vertical</enum>
     2078                </property>
     2079                <property name="sizeType">
     2080                 <enum>QSizePolicy::Fixed</enum>
     2081                </property>
     2082                <property name="sizeHint" stdset="0">
     2083                 <size>
     2084                  <width>20</width>
     2085                  <height>5</height>
     2086                 </size>
     2087                </property>
     2088               </spacer>
     2089              </item>
     2090              <item>
     2091               <widget class="QLabel" name="label_24">
     2092                <property name="text">
     2093                 <string>Threshold</string>
     2094                </property>
     2095               </widget>
     2096              </item>
     2097              <item>
     2098               <widget class="QSpinBox" name="fThresholdVal">
     2099                <property name="alignment">
     2100                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2101                </property>
     2102                <property name="maximum">
     2103                 <number>4095</number>
     2104                </property>
     2105               </widget>
     2106              </item>
     2107              <item>
     2108               <widget class="QDoubleSpinBox" name="fThresholdVolt">
    992109                <property name="sizePolicy">
    100                  <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2110                 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    1012111                  <horstretch>0</horstretch>
    1022112                  <verstretch>0</verstretch>
    1032113                 </sizepolicy>
    1042114                </property>
    105                 <property name="editTriggers">
    106                  <set>QAbstractItemView::NoEditTriggers</set>
    107                 </property>
    108                 <property name="showDropIndicator" stdset="0">
    109                  <bool>false</bool>
    110                 </property>
    111                 <property name="alternatingRowColors">
     2115                <property name="minimumSize">
     2116                 <size>
     2117                  <width>100</width>
     2118                  <height>0</height>
     2119                 </size>
     2120                </property>
     2121                <property name="alignment">
     2122                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2123                </property>
     2124                <property name="readOnly">
    1122125                 <bool>true</bool>
    1132126                </property>
    114                 <property name="movement">
    115                  <enum>QListView::Static</enum>
    116                 </property>
    117                 <property name="resizeMode">
    118                  <enum>QListView::Fixed</enum>
    119                 </property>
    120                 <property name="selectionRectVisible">
    121                  <bool>true</bool>
     2127                <property name="buttonSymbols">
     2128                 <enum>QAbstractSpinBox::NoButtons</enum>
     2129                </property>
     2130                <property name="suffix">
     2131                 <string> mV</string>
     2132                </property>
     2133                <property name="decimals">
     2134                 <number>1</number>
     2135                </property>
     2136                <property name="maximum">
     2137                 <double>2500.000000000000000</double>
     2138                </property>
     2139                <property name="value">
     2140                 <double>0.000000000000000</double>
    1222141                </property>
    1232142               </widget>
    1242143              </item>
    1252144              <item>
    126                <widget class="QListView" name="fDimSvcServices">
    127                 <property name="sizePolicy">
    128                  <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    129                   <horstretch>0</horstretch>
    130                   <verstretch>0</verstretch>
    131                  </sizepolicy>
    132                 </property>
    133                 <property name="editTriggers">
    134                  <set>QAbstractItemView::NoEditTriggers</set>
    135                 </property>
    136                 <property name="showDropIndicator" stdset="0">
    137                  <bool>false</bool>
    138                 </property>
    139                 <property name="alternatingRowColors">
    140                  <bool>true</bool>
    141                 </property>
    142                 <property name="movement">
    143                  <enum>QListView::Static</enum>
    144                 </property>
    145                 <property name="resizeMode">
    146                  <enum>QListView::Fixed</enum>
    147                 </property>
    148                </widget>
    149               </item>
    150               <item>
    151                <widget class="QListView" name="fDimSvcDescription">
    152                 <property name="sizePolicy">
    153                  <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    154                   <horstretch>0</horstretch>
    155                   <verstretch>0</verstretch>
    156                  </sizepolicy>
    157                 </property>
    158                 <property name="editTriggers">
    159                  <set>QAbstractItemView::NoEditTriggers</set>
    160                 </property>
    161                 <property name="showDropIndicator" stdset="0">
    162                  <bool>false</bool>
    163                 </property>
    164                 <property name="selectionMode">
    165                  <enum>QAbstractItemView::NoSelection</enum>
    166                 </property>
    167                 <property name="movement">
    168                  <enum>QListView::Static</enum>
    169                 </property>
    170                 <property name="isWrapping" stdset="0">
    171                  <bool>false</bool>
    172                 </property>
    173                 <property name="resizeMode">
    174                  <enum>QListView::Fixed</enum>
    175                 </property>
    176                </widget>
    177               </item>
    178              </layout>
    179             </item>
    180             <item row="4" column="0">
    181              <widget class="QTextEdit" name="fDimSvcText">
    182               <property name="sizePolicy">
    183                <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    184                 <horstretch>0</horstretch>
    185                 <verstretch>1</verstretch>
    186                </sizepolicy>
    187               </property>
    188               <property name="maximumSize">
    189                <size>
    190                 <width>16777215</width>
    191                 <height>16777215</height>
    192                </size>
    193               </property>
    194               <property name="textInteractionFlags">
    195                <set>Qt::TextSelectableByMouse</set>
    196               </property>
    197              </widget>
    198             </item>
    199             <item row="3" column="0">
    200              <layout class="QHBoxLayout" name="horizontalLayout_8">
    201               <property name="bottomMargin">
    202                <number>0</number>
    203               </property>
    204               <item>
    205                <spacer name="horizontalSpacer_9">
     2145               <spacer name="verticalSpacer_19">
    2062146                <property name="orientation">
    207                  <enum>Qt::Horizontal</enum>
    208                 </property>
    209                 <property name="sizeHint" stdset="0">
    210                  <size>
    211                   <width>40</width>
    212                   <height>20</height>
    213                  </size>
    214                 </property>
    215                </spacer>
    216               </item>
    217               <item>
    218                <widget class="QPushButton" name="pushButton">
    219                 <property name="toolTip">
    220                  <string>Clear contents of the service message window.</string>
    221                 </property>
    222                 <property name="text">
    223                  <string>Clear</string>
    224                 </property>
    225                </widget>
    226               </item>
    227               <item>
    228                <spacer name="horizontalSpacer_10">
    229                 <property name="orientation">
    230                  <enum>Qt::Horizontal</enum>
    231                 </property>
    232                 <property name="sizeType">
    233                  <enum>QSizePolicy::Fixed</enum>
     2147                 <enum>Qt::Vertical</enum>
    2342148                </property>
    2352149                <property name="sizeHint" stdset="0">
    2362150                 <size>
    2372151                  <width>20</width>
    238                   <height>20</height>
     2152                  <height>40</height>
    2392153                 </size>
    2402154                </property>
    2412155               </spacer>
    242               </item>
    243               <item>
    244                <widget class="QPushButton" name="pushButton_2">
    245                 <property name="toolTip">
    246                  <string>Increase size of the service message window.</string>
    247                 </property>
    248                 <property name="text">
    249                  <string>+</string>
    250                 </property>
    251                </widget>
    252               </item>
    253               <item>
    254                <widget class="QPushButton" name="pushButton_3">
    255                 <property name="toolTip">
    256                  <string>Decrease size of the service message window.</string>
    257                 </property>
    258                 <property name="text">
    259                  <string>-</string>
    260                 </property>
    261                </widget>
    2622156              </item>
    2632157             </layout>
     
    2702164      </widget>
    2712165      <widget class="QWidget" name="fLoggerTab">
     2166       <property name="enabled">
     2167        <bool>true</bool>
     2168       </property>
    2722169       <attribute name="title">
    2732170        <string>Logger</string>
     
    2762173        <item row="1" column="2">
    2772174         <widget class="QDockWidget" name="fLoggerDock">
     2175          <property name="enabled">
     2176           <bool>true</bool>
     2177          </property>
    2782178          <property name="sizePolicy">
    2792179           <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
     
    2922192          </property>
    2932193          <widget class="QWidget" name="fLoggerWidget">
     2194           <property name="enabled">
     2195            <bool>true</bool>
     2196           </property>
    2942197           <property name="sizePolicy">
    2952198            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     
    2992202           </property>
    3002203           <layout class="QGridLayout" name="gridLayout_19">
    301             <item row="5" column="1">
     2204            <item row="6" column="0">
    3022205             <widget class="QLabel" name="label_4">
    3032206              <property name="text">
     
    3062209             </widget>
    3072210            </item>
    308             <item row="4" column="1">
     2211            <item row="5" column="0">
    3092212             <widget class="QLabel" name="label_5">
    3102213              <property name="text">
    311                <string>Daily file</string>
     2214               <string>Night file</string>
    3122215              </property>
    3132216             </widget>
    3142217            </item>
    315             <item row="4" column="2">
    316              <widget class="QLineEdit" name="fLoggerFilenameDay">
     2218            <item row="5" column="1">
     2219             <widget class="QLineEdit" name="fLoggerFilenameNight">
    3172220              <property name="enabled">
    3182221               <bool>true</bool>
     
    3232226             </widget>
    3242227            </item>
    325             <item row="5" column="2">
     2228            <item row="6" column="1">
    3262229             <widget class="QLineEdit" name="fLoggerFilenameRun">
    3272230              <property name="enabled">
     
    3332236             </widget>
    3342237            </item>
    335             <item row="5" column="4">
     2238            <item row="6" column="2">
    3362239             <spacer name="horizontalSpacer_14">
    3372240              <property name="orientation">
     
    3492252             </spacer>
    3502253            </item>
    351             <item row="6" column="2">
    352              <widget class="QDoubleSpinBox" name="doubleSpinBox">
    353               <property name="enabled">
    354                <bool>true</bool>
    355               </property>
    356               <property name="sizePolicy">
    357                <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
    358                 <horstretch>0</horstretch>
    359                 <verstretch>0</verstretch>
    360                </sizepolicy>
    361               </property>
    362               <property name="font">
    363                <font>
    364                 <weight>50</weight>
    365                 <bold>false</bold>
    366                </font>
    367               </property>
    368               <property name="frame">
    369                <bool>true</bool>
    370               </property>
    371               <property name="alignment">
    372                <set>Qt::AlignCenter</set>
    373               </property>
    374               <property name="readOnly">
    375                <bool>true</bool>
    376               </property>
    377               <property name="buttonSymbols">
    378                <enum>QAbstractSpinBox::NoButtons</enum>
    379               </property>
    380               <property name="keyboardTracking">
    381                <bool>true</bool>
    382               </property>
    383               <property name="suffix">
    384                <string> Hz</string>
    385               </property>
    386               <property name="value">
    387                <double>99.989999999999995</double>
    388               </property>
    389              </widget>
    390             </item>
    391             <item row="6" column="1">
    392              <widget class="QLabel" name="label_7">
    393               <property name="text">
    394                <string>Rate</string>
    395               </property>
    396              </widget>
    397             </item>
    398             <item row="4" column="5" rowspan="3">
     2254            <item row="4" column="3" rowspan="7">
    3992255             <layout class="QHBoxLayout" name="horizontalLayout_9">
    4002256              <item>
    401                <widget class="QProgressBar" name="progressBar">
     2257               <widget class="QProgressBar" name="fLoggerSpaceLeft">
     2258                <property name="enabled">
     2259                 <bool>false</bool>
     2260                </property>
    4022261                <property name="contextMenuPolicy">
    4032262                 <enum>Qt::DefaultContextMenu</enum>
    4042263                </property>
     2264                <property name="maximum">
     2265                 <number>1000</number>
     2266                </property>
    4052267                <property name="value">
    406                  <number>24</number>
     2268                 <number>0</number>
    4072269                </property>
    4082270                <property name="alignment">
     
    4282290             </layout>
    4292291            </item>
    430             <item row="7" column="5">
     2292            <item row="12" column="3">
    4312293             <widget class="QLabel" name="label">
    4322294              <property name="sizePolicy">
     
    4372299              </property>
    4382300              <property name="text">
    439                <string>Min</string>
     2301               <string>Empty</string>
    4402302              </property>
    4412303              <property name="alignment">
     
    4442306             </widget>
    4452307            </item>
    446             <item row="2" column="5">
    447              <widget class="QTimeEdit" name="timeEdit">
     2308            <item row="15" column="3">
     2309             <spacer name="verticalSpacer_4">
     2310              <property name="orientation">
     2311               <enum>Qt::Vertical</enum>
     2312              </property>
     2313              <property name="sizeType">
     2314               <enum>QSizePolicy::Expanding</enum>
     2315              </property>
     2316              <property name="sizeHint" stdset="0">
     2317               <size>
     2318                <width>20</width>
     2319                <height>40</height>
     2320               </size>
     2321              </property>
     2322             </spacer>
     2323            </item>
     2324            <item row="2" column="3">
     2325             <widget class="QDoubleSpinBox" name="fLoggerFreeSpace">
     2326              <property name="toolTip">
     2327               <string>Remaining free disk space</string>
     2328              </property>
     2329              <property name="alignment">
     2330               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2331              </property>
     2332              <property name="readOnly">
     2333               <bool>true</bool>
     2334              </property>
     2335              <property name="buttonSymbols">
     2336               <enum>QAbstractSpinBox::NoButtons</enum>
     2337              </property>
     2338              <property name="prefix">
     2339               <string/>
     2340              </property>
     2341              <property name="suffix">
     2342               <string> GB</string>
     2343              </property>
     2344             </widget>
     2345            </item>
     2346            <item row="14" column="3">
     2347             <widget class="QTimeEdit" name="fLoggerET">
    4482348              <property name="sizePolicy">
    449                <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     2349               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
    4502350                <horstretch>0</horstretch>
    4512351                <verstretch>0</verstretch>
     
    4612361               </font>
    4622362              </property>
     2363              <property name="toolTip">
     2364               <string>Estimated time until disk is filled with the current writing speed.</string>
     2365              </property>
    4632366              <property name="alignment">
    464                <set>Qt::AlignCenter</set>
     2367               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
    4652368              </property>
    4662369              <property name="readOnly">
     
    4712374              </property>
    4722375              <property name="currentSection">
    473                <enum>QDateTimeEdit::NoSection</enum>
     2376               <enum>QDateTimeEdit::HourSection</enum>
    4742377              </property>
    4752378              <property name="displayFormat">
    476                <string>    HH:mm</string>
     2379               <string>hh:mm:ss</string>
    4772380              </property>
    4782381              <property name="calendarPopup">
     
    4912394             </widget>
    4922395            </item>
    493             <item row="3" column="5">
     2396            <item row="7" column="1" rowspan="2">
     2397             <layout class="QGridLayout" name="gridLayout_14">
     2398              <item row="1" column="0">
     2399               <widget class="QDoubleSpinBox" name="fLoggerWritten">
     2400                <property name="sizePolicy">
     2401                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     2402                  <horstretch>0</horstretch>
     2403                  <verstretch>0</verstretch>
     2404                 </sizepolicy>
     2405                </property>
     2406                <property name="toolTip">
     2407                 <string>Number of bytes written since startup of data logger.</string>
     2408                </property>
     2409                <property name="alignment">
     2410                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2411                </property>
     2412                <property name="readOnly">
     2413                 <bool>true</bool>
     2414                </property>
     2415                <property name="buttonSymbols">
     2416                 <enum>QAbstractSpinBox::NoButtons</enum>
     2417                </property>
     2418                <property name="suffix">
     2419                 <string> MB</string>
     2420                </property>
     2421               </widget>
     2422              </item>
     2423              <item row="2" column="0">
     2424               <widget class="QDoubleSpinBox" name="fLoggerRate">
     2425                <property name="enabled">
     2426                 <bool>true</bool>
     2427                </property>
     2428                <property name="sizePolicy">
     2429                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
     2430                  <horstretch>0</horstretch>
     2431                  <verstretch>0</verstretch>
     2432                 </sizepolicy>
     2433                </property>
     2434                <property name="font">
     2435                 <font>
     2436                  <weight>50</weight>
     2437                  <bold>false</bold>
     2438                 </font>
     2439                </property>
     2440                <property name="toolTip">
     2441                 <string>Current writing speed</string>
     2442                </property>
     2443                <property name="frame">
     2444                 <bool>true</bool>
     2445                </property>
     2446                <property name="alignment">
     2447                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2448                </property>
     2449                <property name="readOnly">
     2450                 <bool>true</bool>
     2451                </property>
     2452                <property name="buttonSymbols">
     2453                 <enum>QAbstractSpinBox::NoButtons</enum>
     2454                </property>
     2455                <property name="keyboardTracking">
     2456                 <bool>true</bool>
     2457                </property>
     2458                <property name="suffix">
     2459                 <string> kB/s</string>
     2460                </property>
     2461                <property name="maximum">
     2462                 <double>99999.000000000000000</double>
     2463                </property>
     2464                <property name="value">
     2465                 <double>0.000000000000000</double>
     2466                </property>
     2467               </widget>
     2468              </item>
     2469              <item row="1" column="1">
     2470               <spacer name="horizontalSpacer_11">
     2471                <property name="orientation">
     2472                 <enum>Qt::Horizontal</enum>
     2473                </property>
     2474                <property name="sizeHint" stdset="0">
     2475                 <size>
     2476                  <width>40</width>
     2477                  <height>20</height>
     2478                 </size>
     2479                </property>
     2480               </spacer>
     2481              </item>
     2482             </layout>
     2483            </item>
     2484            <item row="8" column="0">
     2485             <widget class="QLabel" name="label_7">
     2486              <property name="text">
     2487               <string>Rate</string>
     2488              </property>
     2489             </widget>
     2490            </item>
     2491            <item row="7" column="0">
     2492             <widget class="QLabel" name="label_6">
     2493              <property name="text">
     2494               <string>Written</string>
     2495              </property>
     2496             </widget>
     2497            </item>
     2498            <item row="4" column="0" colspan="2">
     2499             <layout class="QHBoxLayout" name="horizontalLayout_11">
     2500              <property name="topMargin">
     2501               <number>0</number>
     2502              </property>
     2503              <item>
     2504               <widget class="QLabel" name="label_26">
     2505                <property name="text">
     2506                 <string>Open files / subscriptions</string>
     2507                </property>
     2508               </widget>
     2509              </item>
     2510              <item>
     2511               <widget class="QSpinBox" name="fLoggerOpenFiles">
     2512                <property name="alignment">
     2513                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2514                </property>
     2515                <property name="readOnly">
     2516                 <bool>true</bool>
     2517                </property>
     2518                <property name="buttonSymbols">
     2519                 <enum>QAbstractSpinBox::NoButtons</enum>
     2520                </property>
     2521               </widget>
     2522              </item>
     2523              <item>
     2524               <widget class="QLabel" name="label_58">
     2525                <property name="text">
     2526                 <string>/</string>
     2527                </property>
     2528               </widget>
     2529              </item>
     2530              <item>
     2531               <widget class="QSpinBox" name="fLoggerSubscriptions">
     2532                <property name="alignment">
     2533                 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     2534                </property>
     2535                <property name="readOnly">
     2536                 <bool>true</bool>
     2537                </property>
     2538                <property name="buttonSymbols">
     2539                 <enum>QAbstractSpinBox::NoButtons</enum>
     2540                </property>
     2541               </widget>
     2542              </item>
     2543              <item>
     2544               <spacer name="horizontalSpacer_12">
     2545                <property name="orientation">
     2546                 <enum>Qt::Horizontal</enum>
     2547                </property>
     2548                <property name="sizeHint" stdset="0">
     2549                 <size>
     2550                  <width>40</width>
     2551                  <height>20</height>
     2552                 </size>
     2553                </property>
     2554               </spacer>
     2555              </item>
     2556              <item>
     2557               <widget class="QPushButton" name="fLoggerLedLog">
     2558                <property name="text">
     2559                 <string>log</string>
     2560                </property>
     2561                <property name="icon">
     2562                 <iconset resource="design.qrc">
     2563                  <normaloff>:/Resources/icons/gray circle 1.png</normaloff>:/Resources/icons/gray circle 1.png</iconset>
     2564                </property>
     2565                <property name="flat">
     2566                 <bool>true</bool>
     2567                </property>
     2568               </widget>
     2569              </item>
     2570              <item>
     2571               <widget class="QPushButton" name="fLoggerLedRep">
     2572                <property name="text">
     2573                 <string>rep</string>
     2574                </property>
     2575                <property name="icon">
     2576                 <iconset resource="design.qrc">
     2577                  <normaloff>:/Resources/icons/gray circle 1.png</normaloff>:/Resources/icons/gray circle 1.png</iconset>
     2578                </property>
     2579                <property name="flat">
     2580                 <bool>true</bool>
     2581                </property>
     2582               </widget>
     2583              </item>
     2584              <item>
     2585               <widget class="QPushButton" name="fLoggerLedFits">
     2586                <property name="text">
     2587                 <string>fits</string>
     2588                </property>
     2589                <property name="icon">
     2590                 <iconset resource="design.qrc">
     2591                  <normaloff>:/Resources/icons/gray circle 1.png</normaloff>:/Resources/icons/gray circle 1.png</iconset>
     2592                </property>
     2593                <property name="flat">
     2594                 <bool>true</bool>
     2595                </property>
     2596               </widget>
     2597              </item>
     2598             </layout>
     2599            </item>
     2600            <item row="3" column="3">
    4942601             <widget class="QLabel" name="label_3">
    4952602              <property name="sizePolicy">
     
    5002607              </property>
    5012608              <property name="text">
    502                <string>Max</string>
     2609               <string>&gt;=1GB</string>
    5032610              </property>
    5042611              <property name="alignment">
    5052612               <set>Qt::AlignBottom|Qt::AlignHCenter</set>
    5062613              </property>
    507              </widget>
    508             </item>
    509             <item row="5" column="0">
    510              <spacer name="horizontalSpacer_11">
    511               <property name="orientation">
    512                <enum>Qt::Horizontal</enum>
    513               </property>
    514               <property name="sizeHint" stdset="0">
    515                <size>
    516                 <width>40</width>
    517                 <height>20</height>
    518                </size>
    519               </property>
    520              </spacer>
    521             </item>
    522             <item row="5" column="6">
    523              <spacer name="horizontalSpacer_12">
    524               <property name="orientation">
    525                <enum>Qt::Horizontal</enum>
    526               </property>
    527               <property name="sizeHint" stdset="0">
    528                <size>
    529                 <width>40</width>
    530                 <height>20</height>
    531                </size>
    532               </property>
    533              </spacer>
    534             </item>
    535             <item row="1" column="5">
    536              <spacer name="verticalSpacer">
    537               <property name="orientation">
    538                <enum>Qt::Vertical</enum>
    539               </property>
    540               <property name="sizeType">
    541                <enum>QSizePolicy::Expanding</enum>
    542               </property>
    543               <property name="sizeHint" stdset="0">
    544                <size>
    545                 <width>20</width>
    546                 <height>40</height>
    547                </size>
    548               </property>
    549              </spacer>
    550             </item>
    551             <item row="9" column="5">
    552              <spacer name="verticalSpacer_4">
    553               <property name="orientation">
    554                <enum>Qt::Vertical</enum>
    555               </property>
    556               <property name="sizeType">
    557                <enum>QSizePolicy::Expanding</enum>
    558               </property>
    559               <property name="sizeHint" stdset="0">
    560                <size>
    561                 <width>20</width>
    562                 <height>40</height>
    563                </size>
    564               </property>
    565              </spacer>
    566             </item>
    567             <item row="8" column="5">
    568              <widget class="QDoubleSpinBox" name="doubleSpinBox_2">
    569               <property name="alignment">
    570                <set>Qt::AlignCenter</set>
    571               </property>
    572               <property name="readOnly">
    573                <bool>true</bool>
    574               </property>
    575               <property name="buttonSymbols">
    576                <enum>QAbstractSpinBox::NoButtons</enum>
    577               </property>
    578               <property name="prefix">
    579                <string/>
    580               </property>
    581               <property name="suffix">
    582                <string> GB</string>
    583               </property>
    584              </widget>
    585             </item>
    586            </layout>
    587           </widget>
    588          </widget>
    589         </item>
    590        </layout>
    591       </widget>
    592       <widget class="QWidget" name="tab">
    593        <attribute name="title">
    594         <string>Page</string>
    595        </attribute>
    596        <layout class="QGridLayout" name="gridLayout_12">
    597         <item row="0" column="0">
    598          <widget class="QDockWidget" name="fDimCmdDock_2">
    599           <property name="sizePolicy">
    600            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    601             <horstretch>0</horstretch>
    602             <verstretch>0</verstretch>
    603            </sizepolicy>
    604           </property>
    605           <property name="features">
    606            <set>QDockWidget::NoDockWidgetFeatures</set>
    607           </property>
    608           <property name="allowedAreas">
    609            <set>Qt::AllDockWidgetAreas</set>
    610           </property>
    611           <property name="windowTitle">
    612            <string>Dim command overview</string>
    613           </property>
    614           <widget class="QWidget" name="fDimCmdWidget_2">
    615            <property name="sizePolicy">
    616             <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    617              <horstretch>0</horstretch>
    618              <verstretch>0</verstretch>
    619             </sizepolicy>
    620            </property>
    621            <layout class="QGridLayout" name="gridLayout_6">
    622             <item row="0" column="0">
    623              <widget class="QFrame" name="frame">
    624               <property name="frameShape">
    625                <enum>QFrame::StyledPanel</enum>
    626               </property>
    627               <property name="frameShadow">
    628                <enum>QFrame::Sunken</enum>
    629               </property>
    630               <layout class="QGridLayout" name="gridLayout_13">
    631                <property name="margin">
    632                 <number>0</number>
    633                </property>
    634                <item row="0" column="0">
    635                 <widget class="TQtWidget" name="widget" native="true">
    636                  <property name="enabled">
    637                   <bool>true</bool>
    638                  </property>
    639                  <property name="mouseTracking">
    640                   <bool>false</bool>
    641                  </property>
    642                 </widget>
    643                </item>
    644               </layout>
    6452614             </widget>
    6462615            </item>
     
    7742743                 <enum>QListView::Fixed</enum>
    7752744                </property>
     2745                <property name="wordWrap">
     2746                 <bool>true</bool>
     2747                </property>
    7762748               </widget>
    7772749              </item>
     
    7912763              </item>
    7922764              <item>
    793                <widget class="QLineEdit" name="fDimCmdLineEdit"/>
     2765               <widget class="QLineEdit" name="fDimCmdLineEdit">
     2766                <property name="toolTip">
     2767                 <string>Arguments to be sent with the command (0x will be interpreted as hex value, a leading 0 as octal)</string>
     2768                </property>
     2769               </widget>
    7942770              </item>
    7952771              <item>
     
    7972773                <property name="text">
    7982774                 <string>Send</string>
     2775                </property>
     2776               </widget>
     2777              </item>
     2778             </layout>
     2779            </item>
     2780           </layout>
     2781          </widget>
     2782         </widget>
     2783        </item>
     2784       </layout>
     2785      </widget>
     2786      <widget class="QWidget" name="fDimSvcTab">
     2787       <attribute name="title">
     2788        <string>Services</string>
     2789       </attribute>
     2790       <layout class="QGridLayout" name="gridLayout_3">
     2791        <item row="0" column="0">
     2792         <widget class="QDockWidget" name="fDimSvcDock">
     2793          <property name="sizePolicy">
     2794           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2795            <horstretch>0</horstretch>
     2796            <verstretch>0</verstretch>
     2797           </sizepolicy>
     2798          </property>
     2799          <property name="features">
     2800           <set>QDockWidget::NoDockWidgetFeatures</set>
     2801          </property>
     2802          <property name="allowedAreas">
     2803           <set>Qt::AllDockWidgetAreas</set>
     2804          </property>
     2805          <property name="windowTitle">
     2806           <string>Dim service overview</string>
     2807          </property>
     2808          <widget class="QWidget" name="fDimSvcWidget">
     2809           <property name="sizePolicy">
     2810            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2811             <horstretch>0</horstretch>
     2812             <verstretch>0</verstretch>
     2813            </sizepolicy>
     2814           </property>
     2815           <layout class="QGridLayout" name="gridLayout_10" rowstretch="0,0,4,0,3">
     2816            <item row="2" column="0">
     2817             <layout class="QHBoxLayout" name="horizontalLayout_7" stretch="3,5,8">
     2818              <property name="topMargin">
     2819               <number>0</number>
     2820              </property>
     2821              <item>
     2822               <widget class="QListView" name="fDimSvcServers">
     2823                <property name="sizePolicy">
     2824                 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2825                  <horstretch>0</horstretch>
     2826                  <verstretch>0</verstretch>
     2827                 </sizepolicy>
     2828                </property>
     2829                <property name="editTriggers">
     2830                 <set>QAbstractItemView::NoEditTriggers</set>
     2831                </property>
     2832                <property name="showDropIndicator" stdset="0">
     2833                 <bool>false</bool>
     2834                </property>
     2835                <property name="alternatingRowColors">
     2836                 <bool>true</bool>
     2837                </property>
     2838                <property name="movement">
     2839                 <enum>QListView::Static</enum>
     2840                </property>
     2841                <property name="resizeMode">
     2842                 <enum>QListView::Fixed</enum>
     2843                </property>
     2844                <property name="selectionRectVisible">
     2845                 <bool>true</bool>
     2846                </property>
     2847               </widget>
     2848              </item>
     2849              <item>
     2850               <widget class="QListView" name="fDimSvcServices">
     2851                <property name="sizePolicy">
     2852                 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2853                  <horstretch>0</horstretch>
     2854                  <verstretch>0</verstretch>
     2855                 </sizepolicy>
     2856                </property>
     2857                <property name="editTriggers">
     2858                 <set>QAbstractItemView::NoEditTriggers</set>
     2859                </property>
     2860                <property name="showDropIndicator" stdset="0">
     2861                 <bool>false</bool>
     2862                </property>
     2863                <property name="alternatingRowColors">
     2864                 <bool>true</bool>
     2865                </property>
     2866                <property name="movement">
     2867                 <enum>QListView::Static</enum>
     2868                </property>
     2869                <property name="resizeMode">
     2870                 <enum>QListView::Fixed</enum>
     2871                </property>
     2872               </widget>
     2873              </item>
     2874              <item>
     2875               <widget class="QListView" name="fDimSvcDescription">
     2876                <property name="sizePolicy">
     2877                 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2878                  <horstretch>0</horstretch>
     2879                  <verstretch>0</verstretch>
     2880                 </sizepolicy>
     2881                </property>
     2882                <property name="editTriggers">
     2883                 <set>QAbstractItemView::NoEditTriggers</set>
     2884                </property>
     2885                <property name="showDropIndicator" stdset="0">
     2886                 <bool>false</bool>
     2887                </property>
     2888                <property name="selectionMode">
     2889                 <enum>QAbstractItemView::NoSelection</enum>
     2890                </property>
     2891                <property name="movement">
     2892                 <enum>QListView::Static</enum>
     2893                </property>
     2894                <property name="isWrapping" stdset="0">
     2895                 <bool>false</bool>
     2896                </property>
     2897                <property name="resizeMode">
     2898                 <enum>QListView::Fixed</enum>
     2899                </property>
     2900               </widget>
     2901              </item>
     2902             </layout>
     2903            </item>
     2904            <item row="4" column="0">
     2905             <widget class="QTextEdit" name="fDimSvcText">
     2906              <property name="sizePolicy">
     2907               <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     2908                <horstretch>0</horstretch>
     2909                <verstretch>1</verstretch>
     2910               </sizepolicy>
     2911              </property>
     2912              <property name="maximumSize">
     2913               <size>
     2914                <width>16777215</width>
     2915                <height>16777215</height>
     2916               </size>
     2917              </property>
     2918              <property name="textInteractionFlags">
     2919               <set>Qt::TextSelectableByMouse</set>
     2920              </property>
     2921             </widget>
     2922            </item>
     2923            <item row="3" column="0">
     2924             <layout class="QHBoxLayout" name="horizontalLayout_8">
     2925              <property name="bottomMargin">
     2926               <number>0</number>
     2927              </property>
     2928              <item>
     2929               <spacer name="horizontalSpacer_9">
     2930                <property name="orientation">
     2931                 <enum>Qt::Horizontal</enum>
     2932                </property>
     2933                <property name="sizeHint" stdset="0">
     2934                 <size>
     2935                  <width>40</width>
     2936                  <height>20</height>
     2937                 </size>
     2938                </property>
     2939               </spacer>
     2940              </item>
     2941              <item>
     2942               <widget class="QPushButton" name="pushButton">
     2943                <property name="toolTip">
     2944                 <string>Clear contents of the service message window.</string>
     2945                </property>
     2946                <property name="text">
     2947                 <string>Clear</string>
     2948                </property>
     2949               </widget>
     2950              </item>
     2951              <item>
     2952               <spacer name="horizontalSpacer_10">
     2953                <property name="orientation">
     2954                 <enum>Qt::Horizontal</enum>
     2955                </property>
     2956                <property name="sizeType">
     2957                 <enum>QSizePolicy::Fixed</enum>
     2958                </property>
     2959                <property name="sizeHint" stdset="0">
     2960                 <size>
     2961                  <width>20</width>
     2962                  <height>20</height>
     2963                 </size>
     2964                </property>
     2965               </spacer>
     2966              </item>
     2967              <item>
     2968               <widget class="QPushButton" name="pushButton_2">
     2969                <property name="toolTip">
     2970                 <string>Increase size of the service message window.</string>
     2971                </property>
     2972                <property name="text">
     2973                 <string>+</string>
     2974                </property>
     2975               </widget>
     2976              </item>
     2977              <item>
     2978               <widget class="QPushButton" name="pushButton_3">
     2979                <property name="toolTip">
     2980                 <string>Decrease size of the service message window.</string>
     2981                </property>
     2982                <property name="text">
     2983                 <string>-</string>
    7992984                </property>
    8002985               </widget>
     
    10723257p, li { white-space: pre-wrap; }
    10733258&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
    1074 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;FIXME: Notice when new message arrived.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
     3259&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
    10753260              </property>
    10763261              <property name="textInteractionFlags">
     
    13193504   </property>
    13203505   <property name="windowTitle">
    1321     <string>Network status</string>
     3506    <string>System status</string>
    13223507   </property>
    13233508   <attribute name="dockWidgetArea">
     
    14273612       <item row="3" column="2">
    14283613        <widget class="QCheckBox" name="fStatusFTMEnable">
     3614         <property name="enabled">
     3615          <bool>false</bool>
     3616         </property>
    14293617         <property name="sizePolicy">
    14303618          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
     
    14943682       <item row="4" column="2">
    14953683        <widget class="QCheckBox" name="fStatusFADEnable">
     3684         <property name="enabled">
     3685          <bool>false</bool>
     3686         </property>
    14963687         <property name="sizePolicy">
    14973688          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
     
    15613752       <item row="5" column="2">
    15623753        <widget class="QCheckBox" name="fStatusLoggerEnable">
     3754         <property name="enabled">
     3755          <bool>false</bool>
     3756         </property>
    15633757         <property name="sizePolicy">
    15643758          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
     
    18194013   <container>1</container>
    18204014  </customwidget>
     4015  <customwidget>
     4016   <class>SpinBox4ns</class>
     4017   <extends>QSpinBox</extends>
     4018   <header>SpinBox4ns.h</header>
     4019  </customwidget>
    18214020 </customwidgets>
    18224021 <resources>
     
    18324031    <hint type="sourcelabel">
    18334032     <x>918</x>
    1834      <y>667</y>
     4033     <y>647</y>
    18354034    </hint>
    18364035    <hint type="destinationlabel">
     
    18644063    <hint type="sourcelabel">
    18654064     <x>979</x>
    1866      <y>667</y>
     4065     <y>647</y>
    18674066    </hint>
    18684067    <hint type="destinationlabel">
     
    18804079    <hint type="sourcelabel">
    18814080     <x>1014</x>
    1882      <y>667</y>
     4081     <y>647</y>
    18834082    </hint>
    18844083    <hint type="destinationlabel">
     
    19284127    <hint type="sourcelabel">
    19294128     <x>946</x>
    1930      <y>590</y>
     4129     <y>570</y>
    19314130    </hint>
    19324131    <hint type="destinationlabel">
    19334132     <x>1003</x>
    1934      <y>591</y>
     4133     <y>571</y>
    19354134    </hint>
    19364135   </hints>
     
    20244223    <hint type="sourcelabel">
    20254224     <x>946</x>
    2026      <y>590</y>
     4225     <y>570</y>
    20274226    </hint>
    20284227    <hint type="destinationlabel">
    20294228     <x>1003</x>
    2030      <y>591</y>
     4229     <y>571</y>
    20314230    </hint>
    20324231   </hints>
     
    21364335    <hint type="sourcelabel">
    21374336     <x>907</x>
    2138      <y>382</y>
     4337     <y>371</y>
    21394338    </hint>
    21404339    <hint type="destinationlabel">
    21414340     <x>1004</x>
    2142      <y>592</y>
     4341     <y>572</y>
    21434342    </hint>
    21444343   </hints>
     
    21524351    <hint type="sourcelabel">
    21534352     <x>968</x>
    2154      <y>382</y>
     4353     <y>371</y>
    21554354    </hint>
    21564355    <hint type="destinationlabel">
    21574356     <x>1004</x>
    2158      <y>592</y>
     4357     <y>572</y>
    21594358    </hint>
    21604359   </hints>
     
    21684367    <hint type="sourcelabel">
    21694368     <x>1003</x>
    2170      <y>382</y>
     4369     <y>371</y>
    21714370    </hint>
    21724371    <hint type="destinationlabel">
    21734372     <x>1004</x>
    2174      <y>592</y>
     4373     <y>572</y>
     4374    </hint>
     4375   </hints>
     4376  </connection>
     4377  <connection>
     4378   <sender>fEnableLP1</sender>
     4379   <signal>toggled(bool)</signal>
     4380   <receiver>fTriggerSeqLP1</receiver>
     4381   <slot>setEnabled(bool)</slot>
     4382   <hints>
     4383    <hint type="sourcelabel">
     4384     <x>386</x>
     4385     <y>263</y>
     4386    </hint>
     4387    <hint type="destinationlabel">
     4388     <x>400</x>
     4389     <y>291</y>
     4390    </hint>
     4391   </hints>
     4392  </connection>
     4393  <connection>
     4394   <sender>fEnableLP2</sender>
     4395   <signal>toggled(bool)</signal>
     4396   <receiver>fTriggerSeqLP2</receiver>
     4397   <slot>setEnabled(bool)</slot>
     4398   <hints>
     4399    <hint type="sourcelabel">
     4400     <x>450</x>
     4401     <y>263</y>
     4402    </hint>
     4403    <hint type="destinationlabel">
     4404     <x>464</x>
     4405     <y>291</y>
     4406    </hint>
     4407   </hints>
     4408  </connection>
     4409  <connection>
     4410   <sender>fEnablePedestal</sender>
     4411   <signal>toggled(bool)</signal>
     4412   <receiver>fTriggerSeqPed</receiver>
     4413   <slot>setEnabled(bool)</slot>
     4414   <hints>
     4415    <hint type="sourcelabel">
     4416     <x>322</x>
     4417     <y>263</y>
     4418    </hint>
     4419    <hint type="destinationlabel">
     4420     <x>336</x>
     4421     <y>291</y>
    21754422    </hint>
    21764423   </hints>
  • trunk/FACT++/gui/fact.cc

    r10394 r10518  
    11#include "FactGui.h"
    22
    3 int main(int argc, char *argv[])
     3#include "src/Configuration.h"
     4
     5/*
     6 Extract usage clause(s) [if any] for SYNOPSIS.
     7 Translators: "Usage" and "or" here are patterns (regular expressions) which
     8 are used to match the usage synopsis in program output.  An example from cp
     9 (GNU coreutils) which contains both strings:
     10  Usage: cp [OPTION]... [-T] SOURCE DEST
     11    or:  cp [OPTION]... SOURCE... DIRECTORY
     12    or:  cp [OPTION]... -t DIRECTORY SOURCE...
     13 */
     14void PrintUsage()
    415{
    5     setenv("DIM_DNS_NODE", "localhost", 0);
     16    cout << "\n"
     17        "The console connects to all available Dim Servers and allows to "
     18        "easily access all of their commands.\n"
     19        "\n"
     20        "Usage: test3 [-c type] [OPTIONS]\n"
     21        "  or:  test3 [OPTIONS]\n"
     22        "\n"
     23        "Options:\n"
     24        "The following describes the available commandline options. "
     25        "For further details on how command line option are parsed "
     26        "and in which order which configuration sources are accessed "
     27        "please refer to the class reference of the Configuration class.";
     28    cout << endl;
    629
    7     QApplication app(argc, argv);
     30}
     31
     32void PrintHelp()
     33{
     34    cout << "\n"
     35        "The default is that the program is started without user interaction. "
     36        "All actions are supposed to arrive as DimCommands. Using the -c "
     37        "option, a local shell can be initialized. With h or help a short "
     38        "help message about the usuage can be brought to the screen."
     39        << endl;
     40
     41    /*
     42     cout << "bla bla bla" << endl << endl;
     43     cout << endl;
     44     cout << "Environment:" << endl;
     45     cout << "environment" << endl;
     46     cout << endl;
     47     cout << "Examples:" << endl;
     48     cout << "test exam" << endl;
     49     cout << endl;
     50     cout << "Files:" << endl;
     51     cout << "files" << endl;
     52     cout << endl;
     53     */
     54}
     55
     56/*
     57 The first line of the --version information is assumed to be in one
     58 of the following formats:
     59
     60   <version>
     61   <program> <version>
     62   {GNU,Free} <program> <version>
     63   <program> ({GNU,Free} <package>) <version>
     64   <program> - {GNU,Free} <package> <version>
     65
     66 and separated from any copyright/author details by a blank line.
     67
     68 Handle multi-line bug reporting sections of the form:
     69
     70   Report <program> bugs to <addr>
     71   GNU <package> home page: <url>
     72   ...
     73*/
     74void PrintVersion(const char *name)
     75{
     76    cout <<
     77        name << " - "PACKAGE_STRING"\n"
     78        "\n"
     79        "Written by Thomas Bretz et al.\n"
     80        "\n"
     81        "Report bugs to <"PACKAGE_BUGREPORT">\n"
     82        "Home page: "PACKAGE_URL"\n"
     83        "\n"
     84        "Copyright (C) 2011 by the FACT Collaboration.\n"
     85        "This is free software; see the source for copying conditions.\n"
     86        << endl;
     87}
     88
     89
     90void SetupConfiguration(Configuration &conf)
     91{
     92    po::options_description config("Program options");
     93    config.add_options()
     94        ("dns",       var<string>("localhost"),  "Dim nameserver host name (Overwites DIM_DNS_NODE environment variable)")
     95        ;
     96
     97    conf.AddEnv("dns", "DIM_DNS_NODE");
     98
     99    conf.AddOptions(config);
     100}
     101
     102int main(int argc, const char* argv[])
     103{
     104    Configuration conf(argv[0]);
     105    conf.SetPrintUsage(PrintUsage);
     106    SetupConfiguration(conf);
     107
     108    po::variables_map vm;
     109    try
     110    {
     111        vm = conf.Parse(argc, argv);
     112    }
     113    catch (std::exception &e)
     114    {
     115#if BOOST_VERSION > 104000
     116        po::multiple_occurrences *MO = dynamic_cast<po::multiple_occurrences*>(&e);
     117        if (MO)
     118            cout << "Error: " << e.what() << " of '" << MO->get_option_name() << "' option." << endl;
     119        else
     120#endif
     121            cout << "Error: " << e.what() << endl;
     122        cout << endl;
     123
     124        return -1;
     125    }
     126
     127    if (conf.HasPrint())
     128        return -1;
     129
     130    if (conf.HasVersion())
     131    {
     132        PrintVersion(argv[0]);
     133        return -1;
     134    }
     135
     136    if (conf.HasHelp())
     137    {
     138        PrintHelp();
     139        return -1;
     140    }
     141
     142    // To allow overwriting of DIM_DNS_NODE set 0 to 1
     143    setenv("DIM_DNS_NODE", conf.Get<string>("dns").c_str(), 1);
     144
     145
     146    QApplication app(argc, const_cast<char**>(argv));
    8147
    9148    FactGui gui;
Note: See TracChangeset for help on using the changeset viewer.