ATLAS Offline Software
Loading...
Searching...
No Matches
IVP1ChannelWidget.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6// //
7// Implementation of class IVP1ChannelWidget //
8// //
9// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> //
10// //
11// Initial version: April 2007 //
12// //
14
16#include "VP1Base/IVP1System.h"
17
18#include <cassert>
19#include <QPixmap>
20
22
23public:
24 Imp(const QString & n, const QString & i, const QString & c)
25: name(n), information(i), contact_info(c),
30{}
31 const QString name;
32 const QString information;
33 const QString contact_info;
34 unsigned cloneid;
35 std::set<IVP1System *> systems;
36 QWidget * controller;
41 unsigned long long eventnumber;
42 unsigned timestamp;
43};
44
45//_______________________________________________________
46IVP1ChannelWidget::IVP1ChannelWidget(const QString & n, const QString & i, const QString & c)
47 : QWidget(0), m_d(new Imp(n,i,c))
48{
49 m_d->state=CONSTRUCTED;
50 m_d->cloneid = 0;
51 m_d->controller = 0;
52 m_d->canregistercontroller=false;
53 m_d->canregistersystem=true;
54 m_d->runnumber = 0;
55 m_d->eventnumber = 0;
56 setObjectName("IVP1ChannelWidget:"+n);
57}
58
59//_______________________________________________________
61{
62 VP1Msg::messageDebug("IVP1ChannelWidget::~IVP1ChannelWidget()");
63 assert(m_d->state==UNCREATED||m_d->state==CONSTRUCTED);
64 assert(!m_d->controller);
65 //Delete systems:
66 std::set<IVP1System *>::iterator it, itE = m_d->systems.end();
67 for (it=m_d->systems.begin();it!=itE;++it) {
68 assert((*it)->state()==IVP1System::UNCREATED||(*it)->state()==IVP1System::CONSTRUCTED);
69 VP1Msg::messageDebug("deleting system: "+ (*it)->name());
70 delete *it;
71 }
72 m_d->systems.clear();
73 delete m_d;
74}
75
76//_______________________________________________________
78{
79 return m_d->controller;
80}
81
82//_______________________________________________________
84{
85 return false;
86}
87
88//_______________________________________________________
89void IVP1ChannelWidget::setRunEvtNumber(int runnumber, unsigned long long eventnumber)
90{
91 m_d->runnumber = runnumber;
92 m_d->eventnumber = eventnumber;
93}
94
95//_______________________________________________________
96void IVP1ChannelWidget::setEvtTimestamp(unsigned timestamp)
97{
98 m_d->timestamp = timestamp;
99}
100
101//________________________________________________________
103{
104 return m_d->state;
105}
106
107//________________________________________________________
109{
110
111#ifndef NDEBUG
112 assert(s!=CONSTRUCTED);
113 if (s==READY) {
114 assert(m_d->state==CONSTRUCTED);
115 }
116 if (s==UNCREATED) {
117 assert(m_d->state==READY);
118 }
119#endif
120 m_d->state = s;
121}
122
123//_______________________________________________________
125{
126 assert(m_d->state==CONSTRUCTED);
127}
128
129//_______________________________________________________
131{
132 assert(m_d->state==READY);
133 if( ! (s->state()==IVP1System::REFRESHED) ) {
134 VP1Msg::messageVerbose("s->state() != IVP1System::REFRESHED!");
135 }
136 assert(s->state()==IVP1System::REFRESHED);
137// s = 0;//get rid of compile warning in opt mode
138 VP1Msg::messageDebug("systemRefreshed: "+s->name());
139}
140
141//_______________________________________________________
143{
144 assert(m_d->state==READY);
145 bool isErased = (s->state()==IVP1System::ERASED) ? true : false;
146 if(!isErased) {
147 VP1Msg::messageVerbose("s->state() != IVP1System::ERASED!");
148 }
149 assert(isErased);
150// s = 0;//get rid of compile warning in opt mode
151 VP1Msg::messageDebug("systemErased: "+s->name());
152}
153
154//_______________________________________________________
156{
157 assert(m_d->state==READY);
158}
159
160//_______________________________________________________
162{
163 std::set<IVP1System *>::iterator it, itE = m_d->systems.end();
164 for (it=m_d->systems.begin();it!=itE;++it) {
165 // assert((*it)->state()==IVP1System::ERASED);
166 if (*it)
167 (*it)->deleteController();
168 }
169 if (m_d->controller)
170 m_d->controller->deleteLater();
171 m_d->controller = 0;
172}
173
174//_______________________________________________________
176{
177 return m_d->name+(m_d->cloneid?" ["+QString::number(m_d->cloneid)+"]":QString(""));//Fixme: make sure that it is forbidden to end a name with ' [.*]'!
178}
179//________________________________________________________
180const QString& IVP1ChannelWidget::name() const
181{
182 return m_d->name;
183}
184//________________________________________________________
185const QString& IVP1ChannelWidget::information() const
186{
187 return m_d->information;
188}
189
190//________________________________________________________
192{
193 return m_d->contact_info;
194}
195
196//_______________________________________________________
198{
199 return m_d->cloneid;
200}
201
202//_______________________________________________________
204{
205 m_d->cloneid=id;
207}
208
209//_______________________________________________________
211{
212 assert(m_d->canregistercontroller&&"Please only register controllers during create()");
213 assert(m_d->state==CONSTRUCTED);
214 assert(w&&"IVP1ChannelWidget::registerController(...) called with null pointer!!");
215 assert(!m_d->controller&&"IVP1ChannelWidget::registerController(...) called twice!!");
216 m_d->controller = w;
217 w->setParent(0);
218}
219
220//_______________________________________________________
222{
223 assert(m_d->canregistersystem&&"Please only register systems during the channel constructor");
224 assert(m_d->state==CONSTRUCTED);
225 assert(m_d->systems.find(s)==m_d->systems.end()&&"IVP1ChannelWidget::registerSystem(...) called twice on the same system!!");
226 m_d->systems.insert(s);
227 s->setChannel(this);
228}
229
230//_______________________________________________________
231const std::set<IVP1System *>& IVP1ChannelWidget::systems()
232{
233 return m_d->systems;
234}
235
236//_______________________________________________________
238{
239 assert(s->channel()==this);
240 assert(m_d->systems.find(s)!=m_d->systems.end());
241 s->setActiveState(IVP1System::ON);
243}
244
245//_______________________________________________________
246void IVP1ChannelWidget::turnOff(IVP1System*s,const bool& immediateErase)
247{
248 assert(s->channel()==this);
249 assert(m_d->systems.find(s)!=m_d->systems.end());
250 s->setActiveState(IVP1System::OFF,!immediateErase);
252}
253
254//_______________________________________________________
255void IVP1ChannelWidget::getRunEvtNumber(int& runnumber, unsigned long long& eventnumber)
256{
257 runnumber = m_d->runnumber;
258 eventnumber = m_d->eventnumber;
259}
260
261//_______________________________________________________
262void IVP1ChannelWidget::getEvtTimestamp(unsigned& timestamp)
263{
264 timestamp = m_d->timestamp;
265}
266
267//_______________________________________________________
269{
270 int nsysOn(0), nsysOnRefreshed(0);
271 QString sysrefreshing;
272 std::set<IVP1System *>::iterator it, itE = m_d->systems.end();
273 for (it=m_d->systems.begin();it!=itE;++it) {
274 if ((*it)->activeState()==IVP1System::ON) {
275 ++nsysOn;
276 if((*it)->state()==IVP1System::REFRESHED)
277 ++nsysOnRefreshed;
278 if ((*it)->isRefreshing()) {
279 assert(sysrefreshing.isEmpty());
280 sysrefreshing=(*it)->name();
281 }
282 }
283 }
284 //Fixme: Only emit if actually changed.
285 systemRefreshInfoChanged(sysrefreshing, nsysOn, nsysOnRefreshed);
286}
287
288//_______________________________________________________
290 std::set<IVP1System *>::iterator it, itE = m_d->systems.end();
291 for (it=m_d->systems.begin();it!=itE;++it) {
292 if ((*it)->isRefreshing())
293 return true;
294 }
295 return false;
296}
297
298//_______________________________________________________
299void IVP1ChannelWidget::setCanRegister(const bool&c,const bool&s)
300{
301 m_d->canregistercontroller=c;
302 m_d->canregistersystem=s;
303}
304
305//_______________________________________________________
306QPixmap IVP1ChannelWidget::getSnapshot(bool transp, int width, bool batch)
307{
308 VP1Msg::messageVerbose("IVP1ChannelWidget::getSnapshot() - using QPixmap::grabWidget()");
309 VP1Msg::messageVerbose("(and so, not using the values - transp: "+QString::number(transp)+" - width: "+QString::number(width)+" - batch: " + batch +")");
310
311 return this->grab();
312}
313
314//_______________________________________________________
318
319//_______________________________________________________
321 VP1Msg::messageVerbose("IVP1ChannelWidget base saveState called");
322 return QByteArray();
323}
324
325//_______________________________________________________
327{
328 VP1Msg::messageVerbose("IVP1ChannelWidget base restoreFromState called");
329 if (!ba.isEmpty())
330 message("Error in IVP1System::restoreFromState: Received non-empty saved state.");
331}
332
333//_______________________________________________________
335{
336 VP1Msg::messageVerbose("IVP1ChannelWidget base lastOfActiveSystemsRefreshed called");
337}
const double width
Imp(const QString &n, const QString &i, const QString &c)
std::set< IVP1System * > systems
unsigned long long eventnumber
void registerSystem(IVP1System *)
void getRunEvtNumber(int &runnumber, unsigned long long &eventnumber)
virtual void lastOfActiveSystemsRefreshed()
virtual bool isAccumulator() const
virtual void dockResized()
void setRunEvtNumber(int runnumber, unsigned long long eventnumber)
void setEvtTimestamp(unsigned timestamp)
void registerController(QWidget *)
virtual void systemRefreshed(IVP1System *)
virtual void restoreFromState(QByteArray)
void message(QString)
unsigned cloneID() const
virtual QPixmap getSnapshot(bool transp=false, int width=0, bool batch=false)
void turnOff(IVP1System *, const bool &immediateErase=true)
void systemRefreshInfoChanged(QString sysrefreshing, int nsysOn, int nsysOnRefreshed)
void setCloneID(unsigned id)
void setState(const State &)
void uniqueNameChanged(const QString &)
const QString & information() const
void getEvtTimestamp(unsigned &timestamp)
const QString unique_name() const
const QString & name() const
const std::set< IVP1System * > & systems()
IVP1ChannelWidget(const QString &name, const QString &information, const QString &contact_info)
virtual void systemErased(IVP1System *)
void setCanRegister(const bool &controller, const bool &system)
const QString & contact_info() const
virtual QByteArray saveState()
void turnOn(IVP1System *)
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39
static std::vector< uint32_t > runnumber
Definition iLumiCalc.h:37