Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // Generic model manager. Manages models, associated 28 // factories, messengers, command placement etc 29 // 30 // Jane Tinslay, March 2006 31 // 32 #ifndef G4VISMODELMANAGER_HH 33 #define G4VISMODELMANAGER_HH 34 35 #include "G4UImessenger.hh" 36 #include "G4VisCommandModelCreate.hh" 37 #include "G4VisListManager.hh" 38 #include "G4VModelFactory.hh" 39 #include <vector> 40 41 template <typename Model> 42 class G4VisModelManager { 43 44 public: // With description 45 46 // Useful typedef's 47 typedef G4VisListManager<Model> List; 48 typedef G4VModelFactory<Model> Factory; 49 50 G4VisModelManager(const G4String&); 51 virtual ~G4VisModelManager(); 52 53 // Registration methods 54 void Register(Model*); 55 void Register(Factory*); 56 57 // Change/Retrieve "Current" object 58 void SetCurrent(const G4String&); 59 const Model* Current() const; 60 61 // Command placement 62 G4String Placement() const; 63 64 // Print factory and model data 65 void Print(std::ostream& ostr, const G4String& name="") const; 66 67 // Accessors 68 const List* ListManager() const; 69 const std::vector<Factory*>& FactoryList() const; 70 71 private: 72 73 // Private copy constructor and assigment operator - copying and 74 // assignment not allowed. Keeps Coverity happy. 75 G4VisModelManager (const G4VisModelManager&); 76 G4VisModelManager& operator = (const G4VisModelManager&); 77 78 // Data members 79 G4String fPlacement; 80 List* fpModelList; 81 std::vector<Factory*> fFactoryList; 82 std::vector<G4UImessenger*> fMessengerList; 83 84 }; 85 86 template <typename Model> 87 G4VisModelManager<Model>::G4VisModelManager(const G4String& placement) 88 :fPlacement(placement) 89 ,fpModelList(new List) 90 {} 91 92 template <typename Model> 93 G4VisModelManager<Model>::~G4VisModelManager() 94 { 95 // Cleanup 96 std::vector<G4UImessenger*>::iterator iterMsgr = fMessengerList.begin(); 97 98 while (iterMsgr != fMessengerList.end()) { 99 delete *iterMsgr; 100 iterMsgr++; 101 } 102 103 typename std::vector<Factory*>::iterator iterFactory = fFactoryList.begin(); 104 105 while (iterFactory != fFactoryList.end()) { 106 delete *iterFactory; 107 iterFactory++; 108 } 109 110 delete fpModelList; 111 } 112 113 template <typename Model> 114 void 115 G4VisModelManager<Model>::Register(Model* model) 116 { 117 fpModelList->Register(model); 118 } 119 120 template <typename Model> 121 void 122 G4VisModelManager<Model>::Register(Factory* factory) 123 { 124 // Assume ownership 125 fFactoryList.push_back(factory); 126 127 // Generate "create" command for this factory 128 fMessengerList.push_back(new G4VisCommandModelCreate<Factory>(factory, fPlacement)); 129 } 130 131 template <typename Model> 132 void 133 G4VisModelManager<Model>::SetCurrent(const G4String& model) 134 { 135 fpModelList->SetCurrent(model); 136 } 137 138 template <typename Model> 139 const Model* 140 G4VisModelManager<Model>::Current() const 141 { 142 return fpModelList->Current(); 143 } 144 145 template <typename Model> 146 G4String 147 G4VisModelManager<Model>::Placement() const 148 { 149 return fPlacement; 150 } 151 152 template <typename Model> 153 void 154 G4VisModelManager<Model>::Print(std::ostream& ostr, const G4String& name) const 155 { 156 ostr<<"Registered model factories:"<<std::endl; 157 158 typename std::vector<Factory*>::const_iterator iter = fFactoryList.begin(); 159 160 while (iter != fFactoryList.end()) { 161 (*iter)->Print(ostr); 162 iter++; 163 } 164 165 if (0 == fFactoryList.size()) ostr<<" None"<<std::endl; 166 167 ostr<<std::endl; 168 ostr<<"Registered models: "<<std::endl; 169 170 fpModelList->Print(ostr, name); 171 } 172 173 template <typename Model> 174 const G4VisListManager<Model>* 175 G4VisModelManager<Model>::ListManager() const 176 { 177 return fpModelList; 178 } 179 180 template <typename Model> 181 const std::vector<G4VModelFactory<Model>*>& 182 G4VisModelManager<Model>::FactoryList() const 183 { 184 return fFactoryList; 185 } 186 187 #endif 188