CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CmsShowMain.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Core
4 // Class : CmsShowMain
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author:
10 // Created: Mon Dec 3 08:38:38 PST 2007
11 // $Id: CmsShowMain.cc,v 1.187 2011/02/22 16:22:33 amraktad Exp $
12 //
13 
14 // system include files
15 #include <sstream>
16 #include <boost/bind.hpp>
17 #include <boost/program_options.hpp>
18 #include <string.h>
19 
20 #include "TSystem.h"
21 #include "TGLWidget.h"
22 #include "TTimer.h"
23 #include "TROOT.h"
24 #include "TGFileDialog.h"
25 #include "TGMsgBox.h"
26 #include "TMonitor.h"
27 #include "TServerSocket.h"
28 #include "TEveLine.h"
29 #include "TEveManager.h"
30 #include "TFile.h"
31 
33 
35 
49 
54 
56 
60 
62 
64 
65 //
66 // constants, enums and typedefs
67 //
68 
69 static const char* const kInputFilesOpt = "input-files";
70 static const char* const kInputFilesCommandOpt = "input-files,i";
71 static const char* const kConfigFileOpt = "config-file";
72 static const char* const kConfigFileCommandOpt = "config-file,c";
73 static const char* const kGeomFileOpt = "geom-file";
74 static const char* const kGeomFileCommandOpt = "geom-file,g";
75 static const char* const kNoConfigFileOpt = "noconfig";
76 static const char* const kNoConfigFileCommandOpt = "noconfig,n";
77 static const char* const kPlayOpt = "play";
78 static const char* const kPlayCommandOpt = "play,p";
79 static const char* const kLoopOpt = "loop";
80 static const char* const kLoopCommandOpt = "loop";
81 static const char* const kDebugOpt = "debug";
82 static const char* const kDebugCommandOpt = "debug,d";
83 static const char* const kLogLevelCommandOpt = "log";
84 static const char* const kLogLevelOpt = "log";
85 static const char* const kEveOpt = "eve";
86 static const char* const kEveCommandOpt = "eve";
87 static const char* const kAdvancedRenderOpt = "shine";
88 static const char* const kAdvancedRenderCommandOpt = "shine,s";
89 static const char* const kHelpOpt = "help";
90 static const char* const kHelpCommandOpt = "help,h";
91 static const char* const kSoftCommandOpt = "soft";
92 static const char* const kPortCommandOpt = "port";
93 static const char* const kPlainRootCommandOpt = "prompt";
94 static const char* const kRootInteractiveCommandOpt = "root-interactive,r";
95 static const char* const kChainCommandOpt = "chain";
96 static const char* const kLiveCommandOpt = "live";
97 static const char* const kFieldCommandOpt = "field";
98 static const char* const kFreePaletteCommandOpt = "free-palette";
99 static const char* const kAutoSaveAllViews = "auto-save-all-views";
100 static const char* const kEnableFPE = "enable-fpe";
101 static const char* const kZeroWinOffsets = "zero-window-offsets";
102 
103 
104 //
105 // constructors and destructor
106 //
107 CmsShowMain::CmsShowMain(int argc, char *argv[])
108  : CmsShowMainBase(),
109  m_navigator(new CmsShowNavigator(*this)),
110  m_metadataManager(new FWLiteJobMetadataManager()),
111  m_context(new fireworks::Context(changeManager(),
112  selectionManager(),
113  eiManager(),
114  colorManager(),
115  m_metadataManager.get())),
116  m_loadedAnyInputFile(false),
117  m_openFile(0),
118  m_live(false),
119  m_liveTimer(new SignalTimer()),
120  m_liveTimeout(600000),
121  m_lastPointerPositionX(-999),
122  m_lastPointerPositionY(-999)
123 {
124  try {
125  TGLWidget* w = TGLWidget::Create(gClient->GetDefaultRoot(), kTRUE, kTRUE, 0, 10, 10);
126  delete w;
127  }
128  catch (std::exception& iException) {
129  std::cerr << "Failed creating an OpenGL window: " << iException.what() << "\n"
130  "Things to check:\n"
131  "- Is DISPLAY environment variable set?\n"
132  "- Are OpenGL libraries installed?\n"
133  "- If running remotely, make sure you use 'ssh -X' or 'ssh -Y'.\n"
134  "See also: https://twiki.cern.ch/twiki/bin/viewauth/CMS/WorkBookFireworks\n";
135  gSystem->Exit(1);
136  }
137 
138  eiManager()->setContext(m_context.get());
139 
140 
141  std::string descString(argv[0]);
142  descString += " [options] <data file>\nAllowed options";
143 
144  namespace po = boost::program_options;
145  po::options_description desc(descString);
146  desc.add_options()
147  (kInputFilesCommandOpt, po::value< std::vector<std::string> >(), "Input root files")
148  (kConfigFileCommandOpt, po::value<std::string>(), "Include configuration file")
149  (kGeomFileCommandOpt, po::value<std::string>(), "Include geometry file")
150  (kNoConfigFileCommandOpt, "Don't load any configuration file")
151  (kPlayCommandOpt, po::value<float>(), "Start in play mode with given interval between events in seconds")
152  (kPortCommandOpt, po::value<unsigned int>(), "Listen to port for new data files to open")
153  (kEveCommandOpt, "Show Eve browser to help debug problems")
154  (kLoopCommandOpt, "Loop events in play mode")
155  (kPlainRootCommandOpt, "Plain ROOT without event display")
156  (kRootInteractiveCommandOpt, "Enable root interactive prompt")
157  (kDebugCommandOpt, "Start the display from a debugger and produce a crash report")
158  (kEnableFPE, "Enable detection of floating-point exceptions")
159  (kLogLevelCommandOpt, po::value<unsigned int>(), "Set log level starting from 0 to 4 : kDebug, kInfo, kWarning, kError")
160  (kAdvancedRenderCommandOpt, "Use advance options to improve rendering quality (anti-alias etc)")
161  (kSoftCommandOpt, "Try to force software rendering to avoid problems with bad hardware drivers")
162  (kChainCommandOpt, po::value<unsigned int>(), "Chain up to a given number of recently open files. Default is 1 - no chain")
163  (kLiveCommandOpt, "Enforce playback mode if a user is not using display")
164  (kFieldCommandOpt, po::value<double>(), "Set magnetic field value explicitly. Default is auto-field estimation")
165  (kFreePaletteCommandOpt, "Allow free color selection (requires special configuration!)")
166  (kAutoSaveAllViews, po::value<std::string>(), "Auto-save all views with given prefix (run_event_lumi_view.png is appended)")
167  (kZeroWinOffsets, "Disable auto-detection of window position offsets.")
168  (kHelpCommandOpt, "Display help message");
169  po::positional_options_description p;
170  p.add(kInputFilesOpt, -1);
171 
172  int newArgc = argc;
173  char **newArgv = argv;
174  po::variables_map vm;
175  //po::store(po::parse_command_line(newArgc, newArgv, desc), vm);
176  //po::notify(vm);
177  po::store(po::command_line_parser(newArgc, newArgv).
178  options(desc).positional(p).run(), vm);
179  po::notify(vm);
180  if(vm.count(kHelpOpt)) {
181  std::cout << desc <<std::endl;
182  exit(0);
183  }
184 
185  if(vm.count(kLogLevelOpt)) {
186  fwlog::LogLevel level = (fwlog::LogLevel)(vm[kLogLevelOpt].as<unsigned int>());
188  }
189 
190  if(vm.count(kPlainRootCommandOpt)) {
191  fwLog(fwlog::kInfo) << "Plain ROOT prompt requested" << std::endl;
192  return;
193  }
194 
195  const char* cmspath = gSystem->Getenv("CMSSW_BASE");
196  if(0 == cmspath) {
197  throw std::runtime_error("CMSSW_BASE environment variable not set");
198  }
199 
200  // input file
201  if (vm.count(kInputFilesOpt)) {
202  m_inputFiles = vm[kInputFilesOpt].as< std::vector<std::string> >();
203  }
204 
205  if (!m_inputFiles.size())
206  fwLog(fwlog::kInfo) << "No data file given." << std::endl;
207  else if (m_inputFiles.size() == 1)
208  fwLog(fwlog::kInfo) << "Input " << m_inputFiles.front() << std::endl;
209  else
210  fwLog(fwlog::kInfo) << m_inputFiles.size() << " input files; first: " << m_inputFiles.front() << ", last: " << m_inputFiles.back() << std::endl;
211 
212  // configuration file
213  if (vm.count(kConfigFileOpt)) {
214  setConfigFilename(vm[kConfigFileOpt].as<std::string>());
215  if (access(configFilename(), R_OK) == -1)
216  {
217  fwLog(fwlog::kError) << "Specified configuration file does not exist. Quitting.\n";
218  exit(1);
219  }
220  } else {
221  if (vm.count(kNoConfigFileOpt)) {
222  fwLog(fwlog::kInfo) << "No configuration is loaded, show everything.\n";
223  setConfigFilename("");
224  } else
225  setConfigFilename("default.fwc");
226  }
227  fwLog(fwlog::kInfo) << "Config " << configFilename() << std::endl;
228 
229  // geometry
230  if (vm.count(kGeomFileOpt)) {
231  setGeometryFilename(vm[kGeomFileOpt].as<std::string>());
232  } else {
233  fwLog(fwlog::kInfo) << "No geom file name. Choosing default.\n";
234  setGeometryFilename("cmsGeom10.root");
235  }
236  fwLog(fwlog::kInfo) << "Geom " << geometryFilename() << std::endl;
237 
238  // Free-palette palette
239  if (vm.count(kFreePaletteCommandOpt)) {
241  fwLog(fwlog::kInfo) << "Palette restriction removed on user request!\n";
242  }
243  bool eveMode = vm.count(kEveOpt);
244 
245  //Delay creating guiManager and enabling autoloading until here so that if we have a 'help' request we don't
246  // open any graphics or build dictionaries
248 
249  TEveManager::Create(kFALSE, "FIV");
250 
251  setup(m_navigator.get(), m_context.get(), m_metadataManager.get());
252 
253  if (vm.count(kZeroWinOffsets))
254  {
256  fwLog(fwlog::kInfo) << "Window offsets reset on user request!\n";
257  }
258 
259  if ( vm.count(kAdvancedRenderOpt) )
260  {
261  TEveLine::SetDefaultSmooth(kTRUE);
262  }
263 
264  //figure out where to find macros
265  //tell ROOT where to find our macros
267  // first check if port is not occupied
268  if (vm.count(kPortCommandOpt)) {
269  f=boost::bind(&CmsShowMain::setupSocket, this, vm[kPortCommandOpt].as<unsigned int>());
270  startupTasks()->addTask(f);
271  }
272 
273  f=boost::bind(&CmsShowMainBase::loadGeometry,this);
274  startupTasks()->addTask(f);
275  f=boost::bind(&CmsShowMainBase::setupViewManagers,this);
276  startupTasks()->addTask(f);
277  f=boost::bind(&CmsShowMainBase::setupConfiguration,this);
278  startupTasks()->addTask(f);
279  f=boost::bind(&CmsShowMain::setupDataHandling,this);
280  startupTasks()->addTask(f);
281 
282  if (vm.count(kLoopOpt))
283  setPlayLoop();
284 
285  if (eveMode) {
286  f = boost::bind(&CmsShowMainBase::setupDebugSupport,this);
287  startupTasks()->addTask(f);
288  }
289  if(vm.count(kChainCommandOpt)) {
290  f = boost::bind(&CmsShowNavigator::setMaxNumberOfFilesToChain, m_navigator.get(), vm[kChainCommandOpt].as<unsigned int>());
291  startupTasks()->addTask(f);
292  }
293  if (vm.count(kPlayOpt)) {
294  f = boost::bind(&CmsShowMainBase::setupAutoLoad, this, vm[kPlayOpt].as<float>());
295  startupTasks()->addTask(f);
296  }
297 
298  if(vm.count(kLiveCommandOpt))
299  {
300  f = boost::bind(&CmsShowMain::setLiveMode, this);
301  startupTasks()->addTask(f);
302  }
303 
304  if(vm.count(kFieldCommandOpt))
305  {
306  m_context->getField()->setSource(FWMagField::kUser);
307  m_context->getField()->setUserField(vm[kFieldCommandOpt].as<double>());
308  }
309  if(vm.count(kAutoSaveAllViews)) {
310  std::string fmt = vm[kAutoSaveAllViews].as<std::string>();
311  fmt += "%d_%d_%d_%s.png";
313  }
314  if(vm.count(kEnableFPE)) {
315  gSystem->SetFPEMask();
316  }
317 
318  if (vm.count(kPortCommandOpt)) {
319  f=boost::bind(&CmsShowMain::connectSocket, this);
320  startupTasks()->addTask(f);
321  }
322 
324 }
325 
326 //
327 // Destruction
328 //
329 
331 {}
332 
333 class DieTimer : public TTimer
334 {
335 protected:
337 public:
338  DieTimer(CmsShowMain* app) : TTimer(), fApp(app)
339  {
340  Start(0, kTRUE);
341  }
342 
343  virtual Bool_t Notify()
344  {
345  TurnOff();
346  fApp->doExit();
347  delete this;
348  return kFALSE;
349  }
350 };
351 
353 {
354  new DieTimer(this);
355 }
356 
358 {
359  // pre terminate eve
360  m_context->deleteEveElements();
362 
363  // sleep at least 150 ms
364  // windows in ROOT GUI are destroyed in 150 ms timeout after
365  gSystem->Sleep(151);
366  gSystem->ProcessEvents();
367  gSystem->ExitLoop();
368 }
369 
370 //
371 // assignment operators
372 //
373 // const CmsShowMain& CmsShowMain::operator=(const CmsShowMain& rhs)
374 // {
375 // //An exception safe implementation is
376 // CmsShowMain temp(rhs);
377 // swap(rhs);
378 //
379 // return *this;
380 // }
381 
382 //
383 // member functions
384 //
385 
386 const fwlite::Event*
388 {
389  if (m_navigator.get())
390  return static_cast<const fwlite::Event*>(m_navigator->getCurrentEvent());
391  return 0;
392 }
393 
394 void
396 {
397  m_openFile = file;
398  if (file)
399  guiManager()->titleChanged(m_navigator->frameTitle());
400 
402 }
403 
404 void
406 {
408  guiManager()->titleChanged(m_navigator->frameTitle());
410 }
411 
413  //printf("Need to reset\n");
414 }
415 
417 {
418  const char* kRootType[] = {"ROOT files","*.root", 0, 0};
419  TGFileInfo fi;
420  fi.fFileTypes = kRootType;
421  /* this is how things used to be done:
422  fi.fIniDir = ".";
423  this is bad because the destructor calls delete[] on fIniDir.
424  */
425  fi.fIniDir = new char[128];
426  strncpy(fi.fIniDir, ".", 127);
427  guiManager()->updateStatus("waiting for data file ...");
428  new TGFileDialog(gClient->GetDefaultRoot(), guiManager()->getMainFrame(), kFDOpen, &fi);
429  guiManager()->updateStatus("loading file ...");
430  if (fi.fFilename) {
431  m_navigator->openFile(fi.fFilename);
432  m_loadedAnyInputFile = true;
433  m_navigator->firstEvent();
434  checkPosition();
435  draw();
436  }
437  guiManager()->clearStatus();
438 }
439 
441 {
442  const char* kRootType[] = {"ROOT files","*.root", 0, 0};
443  TGFileInfo fi;
444  fi.fFileTypes = kRootType;
445  /* this is how things used to be done:
446  fi.fIniDir = ".";
447  this is bad because the destructor calls delete[] on fIniDir.
448  */
449  fi.fIniDir = new char[128];
450  strncpy(fi.fIniDir, ".", 127);
451  guiManager()->updateStatus("waiting for data file ...");
452  new TGFileDialog(gClient->GetDefaultRoot(), guiManager()->getMainFrame(), kFDOpen, &fi);
453  guiManager()->updateStatus("loading file ...");
454  if (fi.fFilename) {
455  m_navigator->appendFile(fi.fFilename, false, false);
456  m_loadedAnyInputFile = true;
457  checkPosition();
458  draw();
459  guiManager()->titleChanged(m_navigator->frameTitle());
460  }
461  guiManager()->clearStatus();
462 }
463 
464 void
466 {
467  if (m_searchFiles.get() == 0) {
468  m_searchFiles = std::auto_ptr<CmsShowSearchFiles>(new CmsShowSearchFiles("",
469  "Open Remote Data Files",
470  guiManager()->getMainFrame(),
471  500, 400));
472  m_searchFiles->CenterOnParent(kTRUE,TGTransientFrame::kBottomRight);
473  }
474  std::string chosenFile = m_searchFiles->chooseFileFromURL();
475  if(!chosenFile.empty()) {
476  guiManager()->updateStatus("loading file ...");
477  if(m_navigator->openFile(chosenFile.c_str())) {
478  m_navigator->firstEvent();
479  checkPosition();
480  draw();
481  guiManager()->clearStatus();
482  } else {
483  guiManager()->updateStatus("failed to load data file");
484  }
485  }
486 }
487 
488 //
489 // const member functions
490 //
491 
492 //_______________________________________________________________________________
493 void
495 {
497 
498  // case when start with no input file
500  {
501  if (m_monitor.get())
503  return;
504  }
505 
506  bool reachedEnd = (forward() && m_navigator->isLastEvent()) || (!forward() && m_navigator->isFirstEvent());
507 
508  if (loop() && reachedEnd)
509  {
510  forward() ? m_navigator->firstEvent() : m_navigator->lastEvent();
511  draw();
512  }
513  else if (!reachedEnd)
514  {
515  forward() ? m_navigator->nextEvent() : m_navigator->previousEvent();
516  draw();
517  }
518 
519  // stop loop in case no loop or monitor mode
520  if (reachedEnd && (loop() || m_monitor.get()) == kFALSE)
521  {
522  if (forward() && m_navigator->isLastEvent())
523  {
525  checkPosition();
526  }
527 
528  if ((!forward()) && m_navigator->isFirstEvent())
529  {
531  checkPosition();
532  }
533  }
534  else
536 }
537 
538 //______________________________________________________________________________
539 
540 void
542 {
543  if ((m_monitor.get() || loop() ) && isPlaying())
544  return;
545 
547 
548  if (m_navigator->isFirstEvent())
550 
551  if (m_navigator->isLastEvent())
552  {
553  guiManager()->disableNext();
554  // force enable play events action in --port mode
555  if (m_monitor.get() && !guiManager()->playEventsAction()->isEnabled())
557  }
558 }
559 
560 //==============================================================================
561 void
563 {
564  guiManager()->updateStatus("Setting up data handling...");
565 
566 
567  // navigator filtering ->
568  m_navigator->fileChanged_.connect(boost::bind(&CmsShowMain::fileChangedSlot, this, _1));
569  m_navigator->editFiltersExternally_.connect(boost::bind(&FWGUIManager::updateEventFilterEnable, guiManager(), _1));
570  m_navigator->filterStateChanged_.connect(boost::bind(&CmsShowMain::navigatorChangedFilterState, this, _1));
571  m_navigator->postFiltering_.connect(boost::bind(&CmsShowMain::postFiltering, this));
572 
573  // navigator fitlering <-
576 
577  // Data handling. File related and therefore not in the base class.
578  if (guiManager()->getAction(cmsshow::sOpenData) != 0)
579  guiManager()->getAction(cmsshow::sOpenData)->activated.connect(sigc::mem_fun(*this, &CmsShowMain::openData));
580  if (guiManager()->getAction(cmsshow::sAppendData) != 0)
581  guiManager()->getAction(cmsshow::sAppendData)->activated.connect(sigc::mem_fun(*this, &CmsShowMain::appendData));
582  if (guiManager()->getAction(cmsshow::sSearchFiles) != 0)
584 
585  setupActions();
586  // init data from CmsShowNavigator configuration, can do this with signals since there were not connected yet
587  guiManager()->setFilterButtonIcon(m_navigator->getFilterState());
588 
589  for (unsigned int ii = 0; ii < m_inputFiles.size(); ++ii)
590  {
591  const std::string& fname = m_inputFiles[ii];
592  if (fname.empty())
593  continue;
594  guiManager()->updateStatus("loading data file ...");
595  if (!m_navigator->appendFile(fname, false, false))
596  {
597  guiManager()->updateStatus("failed to load data file");
598  openData();
599  }
600  else
601  {
602  m_loadedAnyInputFile = true;
603 
604  }
605  }
606 
608  {
609  m_navigator->firstEvent();
610  checkPosition();
611  draw();
612  }
613  else if (m_monitor.get() == 0)
614  openData();
615 }
616 
617 void
618 CmsShowMain::setupSocket(unsigned int iSocket)
619 {
620  m_monitor = std::auto_ptr<TMonitor>(new TMonitor);
621  TServerSocket* server = new TServerSocket(iSocket,kTRUE);
622  if (server->GetErrorCode())
623  {
624  fwLog(fwlog::kError) << "CmsShowMain::setupSocket, can't create socket on port "<< iSocket << "." << std::endl;
625  exit(0);
626  }
627  m_monitor->Add(server);
628 }
629 
630 void
632 {
633  m_monitor->Connect("Ready(TSocket*)","CmsShowMain",this,"notified(TSocket*)");
634 
635 }
636 
637 void
638 CmsShowMain::notified(TSocket* iSocket)
639 {
640  TServerSocket* server = dynamic_cast<TServerSocket*> (iSocket);
641  if (server)
642  {
643  TSocket* connection = server->Accept();
644  if (connection)
645  {
646  m_monitor->Add(connection);
647  std::stringstream s;
648  s << "received connection from "<<iSocket->GetInetAddress().GetHostName();
649  guiManager()->updateStatus(s.str().c_str());
650  }
651  }
652  else
653  {
654  char buffer[4096];
655  memset(buffer,0,sizeof(buffer));
656  if (iSocket->RecvRaw(buffer, sizeof(buffer)) <= 0)
657  {
658  m_monitor->Remove(iSocket);
659  //std::stringstream s;
660  //s << "closing connection to "<<iSocket->GetInetAddress().GetHostName();
661  //m_guiManager->updateStatus(s.str().c_str());
662  delete iSocket;
663  return;
664  }
665  std::string fileName(buffer);
666  std::string::size_type lastNonSpace = fileName.find_last_not_of(" \n\t");
667  if (lastNonSpace != std::string::npos)
668  {
669  fileName.erase(lastNonSpace+1);
670  }
671 
672  std::stringstream s;
673  s <<"New file notified '"<<fileName<<"'";
674  guiManager()->updateStatus(s.str().c_str());
675 
676  bool appended = m_navigator->appendFile(fileName, true, m_live);
677 
678  if (appended)
679  {
680  if (m_live && isPlaying() && forward())
681  m_navigator->activateNewFileOnNextEvent();
682  else if (!isPlaying())
683  checkPosition();
684 
685  // bootstrap case: --port and no input file
687  {
688  m_loadedAnyInputFile = true;
689  m_navigator->firstEvent();
690  if (!isPlaying())
691  draw();
692  }
693 
694  std::stringstream sr;
695  sr <<"New file registered '"<<fileName<<"'";
696  guiManager()->updateStatus(sr.str().c_str());
697  }
698  else
699  {
700  std::stringstream sr;
701  sr <<"New file NOT registered '"<<fileName<<"'";
702  guiManager()->updateStatus(sr.str().c_str());
703  }
704  }
705 }
706 
707 void
709 {
711  if (m_live)
712  m_navigator->resetNewFileOnNextEvent();
713  setIsPlaying(false);
715  checkPosition();
716 }
717 
718 void
720 {
722  if (m_navigator->filesNeedUpdate() == false)
723  {
724  guiManager()->setFilterButtonText(m_navigator->filterStatusMessage());
725  checkPosition();
726  }
727 }
728 
729 void
731 {
732  if (m_navigator->getFilterState() == CmsShowNavigator::kWithdrawn )
734  else
735  m_navigator->toggleFilterEnable();
736 }
737 
738 void
740 {
741  // called only if filter has changed
742  guiManager()->updateStatus("Filtering events");
743 }
744 
745 void
747 {
748  // called only filter is changed
749  guiManager()->clearStatus();
750  draw();
751  checkPosition();
752  guiManager()->setFilterButtonText(m_navigator->filterStatusMessage());
753 }
754 
755 //______________________________________________________________________________
756 
757 void
759 {
760  m_live = true;
761  m_liveTimer.reset(new SignalTimer());
762  m_liveTimer->timeout_.connect(boost::bind(&CmsShowMain::checkLiveMode,this));
763 
764  Window_t rootw, childw;
765  Int_t root_x, root_y, win_x, win_y;
766  UInt_t mask;
767  gVirtualX->QueryPointer(gClient->GetDefaultRoot()->GetId(),
768  rootw, childw,
769  root_x, root_y,
770  win_x, win_y,
771  mask);
772 
773 
774  m_liveTimer->SetTime(m_liveTimeout);
775  m_liveTimer->Reset();
776  m_liveTimer->TurnOn();
777 }
778 
779 void
781 {
782  m_liveTimer->TurnOff();
783 
784  Window_t rootw, childw;
785  Int_t root_x, root_y, win_x, win_y;
786  UInt_t mask;
787  gVirtualX->QueryPointer(gClient->GetDefaultRoot()->GetId(),
788  rootw, childw,
789  root_x, root_y,
790  win_x, win_y,
791  mask);
792 
793 
794  if ( !isPlaying() &&
795  m_lastPointerPositionX == root_x &&
796  m_lastPointerPositionY == root_y )
797  {
799  }
800 
801  m_lastPointerPositionX = root_x;
802  m_lastPointerPositionY = root_y;
803 
804 
805  m_liveTimer->SetTime((Long_t)(m_liveTimeout));
806  m_liveTimer->Reset();
807  m_liveTimer->TurnOn();
808 }
DieTimer(CmsShowMain *app)
Definition: CmsShowMain.cc:338
void fileChangedSlot(const TFile *file)
Definition: CmsShowMain.cc:395
static const char *const kPlayCommandOpt
Definition: CmsShowMain.cc:78
void navigatorChangedFilterState(int)
Definition: CmsShowMain.cc:719
void openData()
Definition: CmsShowMain.cc:416
const fwlite::Event * getCurrentEvent() const
Definition: CmsShowMain.cc:387
CmsShowMain * fApp
Definition: CmsShowMain.cc:336
static const char *const kGeomFileCommandOpt
Definition: CmsShowMain.cc:74
void showEventFilterGUI(const TGWindow *p)
sigc::signal< void > filterButtonClicked_
Definition: FWGUIManager.h:208
static const char *const kChainCommandOpt
Definition: CmsShowMain.cc:95
static const char *const kAutoSaveAllViews
Definition: CmsShowMain.cc:99
bool m_loadedAnyInputFile
Definition: CmsShowMain.h:119
void resetInitialization()
Definition: CmsShowMain.cc:412
virtual void checkPosition()
Definition: CmsShowMain.cc:541
virtual void eventChangedImp()
Definition: CmsShowMain.cc:405
FWGUIManager * guiManager()
static const char *const kZeroWinOffsets
Definition: CmsShowMain.cc:101
void appendData()
Definition: CmsShowMain.cc:440
void preFiltering()
Definition: CmsShowMain.cc:739
void setupSocket(unsigned int)
Definition: CmsShowMain.cc:618
void setFilterButtonIcon(int)
void checkLiveMode()
Definition: CmsShowMain.cc:780
static const char *const kFieldCommandOpt
Definition: CmsShowMain.cc:97
Int_t m_lastPointerPositionX
Definition: CmsShowMain.h:128
list file
Definition: dbtoweb.py:253
void enable()
Definition: CSGAction.cc:274
FWEventItemsManager * eiManager()
sigc::signal< void > activated
Definition: CSGAction.h:89
static const char *const kLogLevelOpt
Definition: CmsShowMain.cc:84
std::auto_ptr< FWLiteJobMetadataManager > m_metadataManager
Definition: CmsShowMain.h:115
static const char *const kNoConfigFileOpt
Definition: CmsShowMain.cc:75
const char * configFilename() const
const std::string sOpenData
Definition: ActionsList.cc:12
void setup(FWNavigatorBase *navigator, fireworks::Context *context, FWJobMetadataManager *metadataManager)
void updateStatus(const char *status)
void setContext(fireworks::Context *)
virtual ~CmsShowMain()
Definition: CmsShowMain.cc:330
uint16_t size_type
static const char *const kConfigFileCommandOpt
Definition: CmsShowMain.cc:72
void setupDataHandling()
Definition: CmsShowMain.cc:562
void enableActions(bool enable=true)
virtual void autoLoadNewEvent()
Definition: CmsShowMain.cc:494
std::auto_ptr< SignalTimer > m_liveTimer
Definition: CmsShowMain.h:126
static const char *const kAdvancedRenderOpt
Definition: CmsShowMain.cc:87
CmsShowMain(int argc, char *argv[])
Definition: CmsShowMain.cc:107
static const char *const kGeomFileOpt
Definition: CmsShowMain.cc:73
std::auto_ptr< fireworks::Context > m_context
Definition: CmsShowMain.h:116
LogLevel
Definition: fwLog.h:36
void setupAutoLoad(float x)
static const char *const kPortCommandOpt
Definition: CmsShowMain.cc:92
void setGeometryFilename(const std::string &filename)
static const char *const kPlayOpt
Definition: CmsShowMain.cc:77
void filterButtonClicked()
Definition: CmsShowMain.cc:730
void resetWMOffsets()
const std::string sAppendData
Definition: ActionsList.cc:13
bool loop() const
CmsShowTaskExecutor * startupTasks()
virtual Bool_t isEnabled() const
Definition: CSGAction.cc:298
std::auto_ptr< TMonitor > m_monitor
Definition: CmsShowMain.h:131
sigc::signal< void, const TGWindow * > showEventFilterGUI_
Definition: FWGUIManager.h:209
static const char *const kEveOpt
Definition: CmsShowMain.cc:85
virtual void quit()
Definition: CmsShowMain.cc:352
virtual void eventChangedImp()
static const char *const kConfigFileOpt
Definition: CmsShowMain.cc:71
static const char *const kFreePaletteCommandOpt
Definition: CmsShowMain.cc:98
static const char *const kLoopOpt
Definition: CmsShowMain.cc:79
static const char *const kDebugCommandOpt
Definition: CmsShowMain.cc:82
static const char *const kEveCommandOpt
Definition: CmsShowMain.cc:86
double f[11][100]
static const char *const kSoftCommandOpt
Definition: CmsShowMain.cc:91
static const char *const kLogLevelCommandOpt
Definition: CmsShowMain.cc:83
CmsShowMainFrame * getMainFrame() const
Definition: FWGUIManager.h:202
void disablePrevious()
static const char *const kNoConfigFileCommandOpt
Definition: CmsShowMain.cc:76
static const char *const kEnableFPE
Definition: CmsShowMain.cc:100
std::vector< std::string > m_inputFiles
Definition: CmsShowMain.h:118
void setLiveMode()
Definition: CmsShowMain.cc:758
void setIsPlaying(bool value)
void clearStatus()
unsigned int UInt_t
Definition: FUTypes.h:12
static const char *const kDebugOpt
Definition: CmsShowMain.cc:81
CSGAction * getAction(const std::string name)
static const char *const kLiveCommandOpt
Definition: CmsShowMain.cc:96
void updateEventFilterEnable(bool)
static const char *const kHelpCommandOpt
Definition: CmsShowMain.cc:90
static const char *const kInputFilesCommandOpt
Definition: CmsShowMain.cc:70
#define fwLog(_level_)
Definition: fwLog.h:51
static const char *const kInputFilesOpt
Definition: CmsShowMain.cc:69
static const char *const kPlainRootCommandOpt
Definition: CmsShowMain.cc:93
const TFile * m_openFile
Definition: CmsShowMain.h:120
void setAutoSaveAllViewsFormat(const std::string &fmt)
std::auto_ptr< CmsShowNavigator > m_navigator
Definition: CmsShowMain.h:114
void setFilterButtonText(const char *txt)
std::auto_ptr< CmsShowSearchFiles > m_searchFiles
Definition: CmsShowMain.h:122
char state
Definition: procUtils.cc:75
static const char *const kRootInteractiveCommandOpt
Definition: CmsShowMain.cc:94
CSGContinuousAction * playEventsAction()
string fname
main script
static const char *const kAdvancedRenderCommandOpt
Definition: CmsShowMain.cc:88
void doExit()
Definition: CmsShowMain.cc:357
bool isPlaying() const
boost::function0< void > TaskFunctor
void showEventFilterGUI()
void addTask(const TaskFunctor &iTask)
int m_liveTimeout
Definition: CmsShowMain.h:127
void evePreTerminate()
void setMaxNumberOfFilesToChain(unsigned int i)
static void enable()
enable automatic library loading
tuple cout
Definition: gather_cfg.py:41
virtual void stopPlaying()
Definition: CmsShowMain.cc:708
void notified(TSocket *)
Definition: CmsShowMain.cc:638
tuple level
Definition: testEve_cfg.py:34
bool forward() const
string s
Definition: asciidump.py:422
const std::string & geometryFilename(void)
static void EnableFreePalette()
Int_t m_lastPointerPositionY
Definition: CmsShowMain.h:129
void setPresentLogLevel(LogLevel)
Definition: fwLog.cc:56
void connectSocket()
Definition: CmsShowMain.cc:631
void titleChanged(const char *title)
static const char *const kHelpOpt
Definition: CmsShowMain.cc:89
void disableNext()
static const char *const kLoopCommandOpt
Definition: CmsShowMain.cc:80
void postFiltering()
Definition: CmsShowMain.cc:746
void openDataViaURL()
Definition: CmsShowMain.cc:465
void reachedEnd()
void setConfigFilename(const std::string &f)
T get(const Candidate &c)
Definition: component.h:56
const std::string sSearchFiles
Definition: ActionsList.cc:14
virtual Bool_t Notify()
Definition: CmsShowMain.cc:343