- Timestamp:
- 05/02/11 19:12:55 (14 years ago)
- Location:
- trunk/FACT++/gui
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/gui/FactGui.h
r10415 r10518 5 5 6 6 #include <iomanip> 7 #include <valarray> 7 8 8 9 #include <boost/bind.hpp> 9 10 10 #include <QtGui/QStandardItemModel> 11 #include <QTimer> 12 #include <QStandardItemModel> 11 13 12 14 #include "CheckBoxDelegate.h" … … 15 17 #include "src/HeadersFTM.h" 16 18 #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" 17 28 18 29 using 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 121 public: 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 19 304 20 305 class FactGui : public MainWindow, public DimNetwork … … 33 318 }; 34 319 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; 36 335 map<string, DimInfo*> fServices; 37 336 38 // ===================== =================================================337 // ===================== Services and Commands ========================== 39 338 40 339 QStandardItem *AddServiceItem(const std::string &server, const std::string &service, bool iscmd) … … 112 411 desc->setSelectable(false); 113 412 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))); 114 475 } 115 476 … … 194 555 } 195 556 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 196 1046 void handleStateChanged(const Time &/*time*/, const std::string &server, 197 1047 const State &s) … … 202 1052 fStatusFTMLabel->setText(s.name.c_str()); 203 1053 fStatusFTMLabel->setToolTip(s.comment.c_str()); 1054 1055 bool enable = false; 204 1056 205 1057 if (s.index<FTM::kDisconnected) // No Dim connection … … 207 1059 if (s.index==FTM::kDisconnected) // Dim connection / FTM disconnected 208 1060 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 { 210 1063 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); 211 1070 } 212 1071 … … 229 1088 fStatusLoggerLabel->setToolTip(s.comment.c_str()); 230 1089 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 { 232 1096 fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/gray circle 1.png")); 1097 enable = false; 1098 } 233 1099 if (s.index>=0x100) // Error 234 1100 fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/red circle 1.png")); 235 if (s.index<=30) // Waiting236 fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/yellow circle 1.png"));237 1101 if (s.index==40) // Logging 238 1102 fStatusLoggerLed->setIcon(QIcon(":/Resources/icons/green circle 1.png")); 1103 1104 cout << "enable " << s.index << " " << enable << endl; 1105 fLoggerWidget->setEnabled(enable); 239 1106 } 240 1107 … … 243 1110 fStatusChatLabel->setText(s.name.c_str()); 244 1111 245 if (s.index==FTM::kConnected) // Dim connection / FTM connected 1112 fChatOnline = s.index; 1113 1114 if (fChatOnline) // Dim connection / FTM connected 246 1115 fStatusChatLed->setIcon(QIcon(":/Resources/icons/green circle 1.png")); 247 1116 else … … 253 1122 { 254 1123 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()); 255 1130 } 256 1131 … … 265 1140 out << text.substr(6); 266 1141 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 267 1157 return; 268 1158 } … … 289 1179 } 290 1180 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 else304 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 375 1181 void IndicateStateChange(const Time &time, const std::string &server) 376 1182 { … … 389 1195 } 390 1196 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(); 394 1246 395 1247 stringstream dummy; 396 1248 const Converter conv(dummy, fmt, false); 397 1249 398 const Time tm(info.getTimestamp(), info.getTimestampMillisecs() );1250 const Time tm(info.getTimestamp(), info.getTimestampMillisecs()*1000); 399 1251 400 1252 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; 404 1256 if (!conv) 405 1257 { 406 1258 out << "Compilation of format string '" << fmt << "' failed!"; 407 iserr = true;408 1259 } 409 1260 else … … 413 1264 const string dat = conv.GetString(info.getData(), info.getSize()); 414 1265 out << dat; 1266 iserr = false; 415 1267 } 416 1268 catch (const runtime_error &e) 417 1269 { 418 1270 out << "Conversion to string failed!<pre>" << e.what() << "</pre>"; 419 iserr = true;420 1271 } 421 1272 } … … 426 1277 int bg = hash<string>()(string(info.getName())); 427 1278 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; 433 1281 434 1282 if (iserr) … … 447 1295 void infoHandler() 448 1296 { 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()) 450 1301 { 451 1302 QApplication::postEvent(this, 452 new FunctionEvent(boost::bind(&FactGui::handleDim DNS, this, getInfo()->getInt())));1303 new FunctionEvent(boost::bind(&FactGui::handleDimInfo, this, DimData(getInfo())))); 453 1304 return; 454 1305 } … … 457 1308 if (i->second==getInfo()) 458 1309 { 459 infoHandler (*i->second);1310 infoHandlerService(*i->second); 460 1311 return; 461 1312 } … … 464 1315 } 465 1316 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 }514 1317 515 1318 // ====================================================================== … … 541 1344 } 542 1345 543 void on_fDimCmdSend_clicked( bool)1346 void on_fDimCmdSend_clicked() 544 1347 { 545 1348 const QString server = fDimCmdServers->currentIndex().data().toString(); … … 565 1368 } 566 1369 } 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; 567 1489 568 1490 public: 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 570 1507 { 571 1508 DimClient::sendCommand("CHAT/MSG", "GUI online."); 572 1509 // + 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 *))); 573 1625 } 574 1626 ~FactGui() -
trunk/FACT++/gui/MainWindow.cc
r10394 r10518 1 1 #include "MainWindow.h" 2 3 #include <iostream> 2 4 3 5 #include "dic.hxx" … … 27 29 fDimSvcDescription->setItemDelegate(new HtmlDelegate); 28 30 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 59 void 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 69 void MainWindow::on_fShutdown_clicked() 70 { 71 DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0); 30 72 } 31 73 32 74 75 void MainWindow::on_fShutdownAll_clicked() 76 { 77 DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0); 78 DimClient::sendCommand("DIS_DNS/EXIT", 1); 79 } 80 33 81 void MainWindow::on_fTabWidget_tabCloseRequested(int which) 34 82 { 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); 36 88 if (!w) 89 { 90 cout << "Weird... the tab requested to be closed doesn't exist!" << endl; 37 91 return; 92 } 38 93 39 94 QDockWidget *d = w->findChild<QDockWidget*>(); 40 95 if (!d) 96 { 97 cout << "Sorry, tab requested to be closed contains no QDockWidget!" << endl; 41 98 return; 99 } 42 100 43 DockWindow *mw =new DockWindow(d, fTabWidget->tabText(which));101 new DockWindow(d, fTabWidget->tabText(which)); 44 102 fTabWidget->removeTab(which); 45 mw->show();46 103 47 104 if (fTabWidget->count()==1) … … 50 107 51 108 52 void MainWindow::on_fChatSend_clicked( bool)109 void MainWindow::on_fChatSend_clicked() 53 110 { 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(); 56 113 } 57 114 58 59 void MainWindow::on_fShutdown_clicked(bool) 115 void MainWindow::on_fStatusLoggerLed_clicked() 60 116 { 61 DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0);117 SelectTab("Logger"); 62 118 } 63 119 64 65 void MainWindow::on_fShutdownAll_clicked(bool) 120 void MainWindow::on_fStatusChatLed_clicked() 66 121 { 67 DimClient::sendCommand("DIS_DNS/KILL_SERVERS", NULL, 0); 68 DimClient::sendCommand("DIS_DNS/EXIT", 1); 122 SelectTab("Chat"); 69 123 } 70 124 125 void MainWindow::on_fStatusFTMLed_clicked() 126 { 127 SelectTab("Trigger"); 128 } 71 129 72 void MainWindow:: on_fStatusFTMEnable_stateChanged(int/* state*/)130 void MainWindow::slot_fFtuLED_clicked() 73 131 { 74 132 for (int i=0; i<40; i++) 133 if (sender()==fFtuLED[i]) 134 cout << "--------------> clicked #" << i << endl; 75 135 } -
trunk/FACT++/gui/MainWindow.h
r10394 r10518 4 4 #include "design.h" 5 5 6 #include <QtGui/QMainWindow> 6 #include <QMainWindow> 7 8 class TObject; 9 class TCanvas; 7 10 8 11 class MainWindow : public QMainWindow, protected Ui::MainWindow … … 10 13 Q_OBJECT; 11 14 15 void SelectTab(const QString &name); 16 17 protected: 18 QPushButton *fFtuLED[40]; 19 12 20 public: 13 21 MainWindow(QWidget *p=0); 14 22 15 23 private 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 16 86 /// 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() { } 18 88 19 void on_fTabWidget_tabCloseRequested(int which);20 void on_fChatSend_clicked(bool);21 void on_fShutdown_clicked(bool); 22 v oid on_fShutdownAll_clicked(bool);23 v oid 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() { } 24 94 }; 25 95 -
trunk/FACT++/gui/design.ui
r10437 r10518 33 33 </sizepolicy> 34 34 </property> 35 <layout class="QGridLayout" name="gridLayout" rowstretch="0" columnminimumwidth="0">35 <layout class="QGridLayout" name="gridLayout" rowstretch="0"> 36 36 <property name="sizeConstraint"> 37 37 <enum>QLayout::SetDefaultConstraint</enum> … … 39 39 <item row="0" column="0"> 40 40 <widget class="QTabWidget" name="fTabWidget"> 41 <property name="enabled"> 42 <bool>true</bool> 43 </property> 41 44 <property name="sizePolicy"> 42 45 <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> … … 49 52 </property> 50 53 <property name="currentIndex"> 51 <number> 2</number>54 <number>1</number> 52 55 </property> 53 56 <property name="documentMode"> … … 60 63 <bool>true</bool> 61 64 </property> 62 <widget class="QWidget" name="f DimSvcTab">65 <widget class="QWidget" name="fTriggerTab"> 63 66 <attribute name="title"> 64 <string> Services</string>67 <string>Trigger</string> 65 68 </attribute> 66 <layout class="QGridLayout" name="gridLayout_ 3">69 <layout class="QGridLayout" name="gridLayout_16"> 67 70 <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"> 69 1987 <property name="sizePolicy"> 70 1988 <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> … … 80 1998 </property> 81 1999 <property name="windowTitle"> 82 <string>Dim serviceoverview</string>2000 <string>Dim command overview</string> 83 2001 </property> 84 <widget class="QWidget" name="f DimSvcWidget">2002 <widget class="QWidget" name="fRatesWidget"> 85 2003 <property name="sizePolicy"> 86 2004 <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> … … 89 2007 </sizepolicy> 90 2008 </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"> 95 2043 <number>0</number> 96 2044 </property> 97 2045 <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"> 99 2109 <property name="sizePolicy"> 100 <sizepolicy hsizetype=" Expanding" vsizetype="Expanding">2110 <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 101 2111 <horstretch>0</horstretch> 102 2112 <verstretch>0</verstretch> 103 2113 </sizepolicy> 104 2114 </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"> 112 2125 <bool>true</bool> 113 2126 </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> 122 2141 </property> 123 2142 </widget> 124 2143 </item> 125 2144 <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"> 206 2146 <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> 234 2148 </property> 235 2149 <property name="sizeHint" stdset="0"> 236 2150 <size> 237 2151 <width>20</width> 238 <height> 20</height>2152 <height>40</height> 239 2153 </size> 240 2154 </property> 241 2155 </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>262 2156 </item> 263 2157 </layout> … … 270 2164 </widget> 271 2165 <widget class="QWidget" name="fLoggerTab"> 2166 <property name="enabled"> 2167 <bool>true</bool> 2168 </property> 272 2169 <attribute name="title"> 273 2170 <string>Logger</string> … … 276 2173 <item row="1" column="2"> 277 2174 <widget class="QDockWidget" name="fLoggerDock"> 2175 <property name="enabled"> 2176 <bool>true</bool> 2177 </property> 278 2178 <property name="sizePolicy"> 279 2179 <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> … … 292 2192 </property> 293 2193 <widget class="QWidget" name="fLoggerWidget"> 2194 <property name="enabled"> 2195 <bool>true</bool> 2196 </property> 294 2197 <property name="sizePolicy"> 295 2198 <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> … … 299 2202 </property> 300 2203 <layout class="QGridLayout" name="gridLayout_19"> 301 <item row=" 5" column="1">2204 <item row="6" column="0"> 302 2205 <widget class="QLabel" name="label_4"> 303 2206 <property name="text"> … … 306 2209 </widget> 307 2210 </item> 308 <item row=" 4" column="1">2211 <item row="5" column="0"> 309 2212 <widget class="QLabel" name="label_5"> 310 2213 <property name="text"> 311 <string> Dailyfile</string>2214 <string>Night file</string> 312 2215 </property> 313 2216 </widget> 314 2217 </item> 315 <item row=" 4" column="2">316 <widget class="QLineEdit" name="fLoggerFilename Day">2218 <item row="5" column="1"> 2219 <widget class="QLineEdit" name="fLoggerFilenameNight"> 317 2220 <property name="enabled"> 318 2221 <bool>true</bool> … … 323 2226 </widget> 324 2227 </item> 325 <item row=" 5" column="2">2228 <item row="6" column="1"> 326 2229 <widget class="QLineEdit" name="fLoggerFilenameRun"> 327 2230 <property name="enabled"> … … 333 2236 </widget> 334 2237 </item> 335 <item row=" 5" column="4">2238 <item row="6" column="2"> 336 2239 <spacer name="horizontalSpacer_14"> 337 2240 <property name="orientation"> … … 349 2252 </spacer> 350 2253 </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"> 399 2255 <layout class="QHBoxLayout" name="horizontalLayout_9"> 400 2256 <item> 401 <widget class="QProgressBar" name="progressBar"> 2257 <widget class="QProgressBar" name="fLoggerSpaceLeft"> 2258 <property name="enabled"> 2259 <bool>false</bool> 2260 </property> 402 2261 <property name="contextMenuPolicy"> 403 2262 <enum>Qt::DefaultContextMenu</enum> 404 2263 </property> 2264 <property name="maximum"> 2265 <number>1000</number> 2266 </property> 405 2267 <property name="value"> 406 <number> 24</number>2268 <number>0</number> 407 2269 </property> 408 2270 <property name="alignment"> … … 428 2290 </layout> 429 2291 </item> 430 <item row=" 7" column="5">2292 <item row="12" column="3"> 431 2293 <widget class="QLabel" name="label"> 432 2294 <property name="sizePolicy"> … … 437 2299 </property> 438 2300 <property name="text"> 439 <string> Min</string>2301 <string>Empty</string> 440 2302 </property> 441 2303 <property name="alignment"> … … 444 2306 </widget> 445 2307 </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"> 448 2348 <property name="sizePolicy"> 449 <sizepolicy hsizetype=" Fixed" vsizetype="Fixed">2349 <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> 450 2350 <horstretch>0</horstretch> 451 2351 <verstretch>0</verstretch> … … 461 2361 </font> 462 2362 </property> 2363 <property name="toolTip"> 2364 <string>Estimated time until disk is filled with the current writing speed.</string> 2365 </property> 463 2366 <property name="alignment"> 464 <set>Qt::Align Center</set>2367 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 465 2368 </property> 466 2369 <property name="readOnly"> … … 471 2374 </property> 472 2375 <property name="currentSection"> 473 <enum>QDateTimeEdit:: NoSection</enum>2376 <enum>QDateTimeEdit::HourSection</enum> 474 2377 </property> 475 2378 <property name="displayFormat"> 476 <string> HH:mm</string>2379 <string>hh:mm:ss</string> 477 2380 </property> 478 2381 <property name="calendarPopup"> … … 491 2394 </widget> 492 2395 </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"> 494 2601 <widget class="QLabel" name="label_3"> 495 2602 <property name="sizePolicy"> … … 500 2607 </property> 501 2608 <property name="text"> 502 <string> Max</string>2609 <string>>=1GB</string> 503 2610 </property> 504 2611 <property name="alignment"> 505 2612 <set>Qt::AlignBottom|Qt::AlignHCenter</set> 506 2613 </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>645 2614 </widget> 646 2615 </item> … … 774 2743 <enum>QListView::Fixed</enum> 775 2744 </property> 2745 <property name="wordWrap"> 2746 <bool>true</bool> 2747 </property> 776 2748 </widget> 777 2749 </item> … … 791 2763 </item> 792 2764 <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> 794 2770 </item> 795 2771 <item> … … 797 2773 <property name="text"> 798 2774 <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> 799 2984 </property> 800 2985 </widget> … … 1072 3257 p, li { white-space: pre-wrap; } 1073 3258 </style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;"> 1074 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">FIXME: Notice when new message arrived.</p></body></html></string>3259 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string> 1075 3260 </property> 1076 3261 <property name="textInteractionFlags"> … … 1319 3504 </property> 1320 3505 <property name="windowTitle"> 1321 <string> Networkstatus</string>3506 <string>System status</string> 1322 3507 </property> 1323 3508 <attribute name="dockWidgetArea"> … … 1427 3612 <item row="3" column="2"> 1428 3613 <widget class="QCheckBox" name="fStatusFTMEnable"> 3614 <property name="enabled"> 3615 <bool>false</bool> 3616 </property> 1429 3617 <property name="sizePolicy"> 1430 3618 <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> … … 1494 3682 <item row="4" column="2"> 1495 3683 <widget class="QCheckBox" name="fStatusFADEnable"> 3684 <property name="enabled"> 3685 <bool>false</bool> 3686 </property> 1496 3687 <property name="sizePolicy"> 1497 3688 <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> … … 1561 3752 <item row="5" column="2"> 1562 3753 <widget class="QCheckBox" name="fStatusLoggerEnable"> 3754 <property name="enabled"> 3755 <bool>false</bool> 3756 </property> 1563 3757 <property name="sizePolicy"> 1564 3758 <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> … … 1819 4013 <container>1</container> 1820 4014 </customwidget> 4015 <customwidget> 4016 <class>SpinBox4ns</class> 4017 <extends>QSpinBox</extends> 4018 <header>SpinBox4ns.h</header> 4019 </customwidget> 1821 4020 </customwidgets> 1822 4021 <resources> … … 1832 4031 <hint type="sourcelabel"> 1833 4032 <x>918</x> 1834 <y>6 67</y>4033 <y>647</y> 1835 4034 </hint> 1836 4035 <hint type="destinationlabel"> … … 1864 4063 <hint type="sourcelabel"> 1865 4064 <x>979</x> 1866 <y>6 67</y>4065 <y>647</y> 1867 4066 </hint> 1868 4067 <hint type="destinationlabel"> … … 1880 4079 <hint type="sourcelabel"> 1881 4080 <x>1014</x> 1882 <y>6 67</y>4081 <y>647</y> 1883 4082 </hint> 1884 4083 <hint type="destinationlabel"> … … 1928 4127 <hint type="sourcelabel"> 1929 4128 <x>946</x> 1930 <y>5 90</y>4129 <y>570</y> 1931 4130 </hint> 1932 4131 <hint type="destinationlabel"> 1933 4132 <x>1003</x> 1934 <y>5 91</y>4133 <y>571</y> 1935 4134 </hint> 1936 4135 </hints> … … 2024 4223 <hint type="sourcelabel"> 2025 4224 <x>946</x> 2026 <y>5 90</y>4225 <y>570</y> 2027 4226 </hint> 2028 4227 <hint type="destinationlabel"> 2029 4228 <x>1003</x> 2030 <y>5 91</y>4229 <y>571</y> 2031 4230 </hint> 2032 4231 </hints> … … 2136 4335 <hint type="sourcelabel"> 2137 4336 <x>907</x> 2138 <y>3 82</y>4337 <y>371</y> 2139 4338 </hint> 2140 4339 <hint type="destinationlabel"> 2141 4340 <x>1004</x> 2142 <y>5 92</y>4341 <y>572</y> 2143 4342 </hint> 2144 4343 </hints> … … 2152 4351 <hint type="sourcelabel"> 2153 4352 <x>968</x> 2154 <y>3 82</y>4353 <y>371</y> 2155 4354 </hint> 2156 4355 <hint type="destinationlabel"> 2157 4356 <x>1004</x> 2158 <y>5 92</y>4357 <y>572</y> 2159 4358 </hint> 2160 4359 </hints> … … 2168 4367 <hint type="sourcelabel"> 2169 4368 <x>1003</x> 2170 <y>3 82</y>4369 <y>371</y> 2171 4370 </hint> 2172 4371 <hint type="destinationlabel"> 2173 4372 <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> 2175 4422 </hint> 2176 4423 </hints> -
trunk/FACT++/gui/fact.cc
r10394 r10518 1 1 #include "FactGui.h" 2 2 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 */ 14 void PrintUsage() 4 15 { 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; 6 29 7 QApplication app(argc, argv); 30 } 31 32 void 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 */ 74 void 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 90 void 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 102 int 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)); 8 147 9 148 FactGui gui;
Note:
See TracChangeset
for help on using the changeset viewer.