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   void DisplayManager::setBatchMode(bool b){
00057     instance().m_batchMode=b;
00058   }
00059   
00060   void DisplayManager::OutputCanvases(){
00061     
00062     TSeqCollection* list = gROOT->GetListOfCanvases();
00063     for (int i=0; i<=list->LastIndex(); ++i){
00064       TCanvas* canvas=static_cast<TCanvas*>(list->At(i));
00065       string filename=canvas->GetName();
00066       
00067       while (true) {
00068     unsigned ipos=filename.rfind(' ');
00069     std::cout << filename << ", " << ipos << std::endl;
00070     if (ipos==string::npos) break;
00071     filename[ipos]='_';
00072       }
00073 
00074       canvas->Print((filename+".eps").c_str());
00075     }
00076   }
00077 
00078 }

Generated on Thu Jul 15 09:50:45 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5