Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

DisplayManager.cpp

00001 #include "DisplayManager.h"
00002 #include "DisplayInfo.h"
00003 #include "Exceptions.h"
00004 #include "Displayer.h"
00005 #include "Sct/Serializable.h"
00006 #include "Sct/LogicErrors.h"
00007 #include "TROOT.h"
00008 #include "TCanvas.h"
00009 #include "TSeqCollection.h"
00010 
00011 using namespace Sct;
00012 
00013 namespace SctDataDisplay {
00014     
00015 DisplayManager::DisplayManager() {
00016   m_batchMode=false;
00017 }
00018 
00019 DisplayManager& DisplayManager::instance() {
00020     static DisplayManager disp;
00021     return disp;
00022 }
00023 
00024 bool DisplayManager::addToMap(string className, shared_ptr<Displayer> displayer) {
00025     if (instance().displayerMap.find(className) != instance().displayerMap.end()) return false;
00026     instance().displayerMap[className] = displayer;
00027     return true;
00028 }
00029 
00030 shared_ptr<DisplayData> DisplayManager::display(shared_ptr<const Serializable> ob, const DisplayInfo& info, std::ostream& os) {
00031     if (!ob) 
00032         throw InvalidArgumentError("Passed a null pointer to DisplayManager::display", __FILE__, __LINE__);
00033 
00034     if (instance().displayerMap.find(ob->getClassName()) == instance().displayerMap.end()) {
00035         for (unsigned int i=0; i<instance().genericList.size(); ++i) {
00036             if (instance().genericList[i]->canDisplay(*ob))
00037                 return instance().genericList[i]->display(ob, info, os);
00038         }
00039 
00040     throw NoDisplayerException("No Displayer for class: " + ob->getClassName(), __FILE__, __LINE__);
00041     }
00042 
00043     return instance().displayerMap[ob->getClassName()]->display(ob, info, os);
00044 }
00045 
00046 
00047 bool DisplayManager::addGeneric(shared_ptr<GenericDisplayer> generic) {
00048     instance().genericList.push_back(generic);
00049     return true;
00050 }
00051 
00052   bool DisplayManager::batchMode(){
00053     return instance().m_batchMode;
00054   }
00055 
00056   std::string DisplayManager::getOutputDir(){
00057      if (instance().m_outputdir=="") return instance().m_outputdir;
00058      return instance().m_outputdir + "/";
00059   }
00060 
00061   void DisplayManager::setOutputDir(const std::string& s){
00062        instance().setBatchMode();
00063        std::cout << "OUTPUT=" << s << std::endl;
00064        instance().m_outputdir=s;
00065   }
00066 
00067   void DisplayManager::setBatchMode(bool b){
00068     instance().m_batchMode=b;
00069   }
00070   
00071   void DisplayManager::OutputCanvases(){
00072     
00073     TSeqCollection* list = gROOT->GetListOfCanvases();
00074     for (int i=0; i<=list->LastIndex(); ++i){
00075       TCanvas* canvas=static_cast<TCanvas*>(list->At(i));
00076       string filename=getOutputDir() + canvas->GetName() + ".eps";
00077       
00078       while (true) {
00079     unsigned ipos=filename.rfind(' ');
00080     if (ipos==string::npos) break;
00081     filename[ipos]='_';
00082       }
00083       std::cout << "FILE " << filename << std::endl;
00084       canvas->Print((filename).c_str());
00085     }
00086   }
00087 
00088 }

Generated on Sat Jul 31 14:18:07 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5