XmlController.h

Go to the documentation of this file.
00001 /* -*- mode: c++ -*- */
00002 
00014 #ifndef _XmlController_H_
00015 #define _XmlController_H_
00016 
00017 #include "pattern/libhippo.h"
00018 
00019 
00020 #include <list>
00021 #include <map>
00022 #include <string>
00023 #include <vector>
00024 
00025 namespace hippodraw {
00026 class DataRep;
00027 class DataRepXML;
00028 class DataSource;
00029 class FontBase;
00030 class HiNTupleXML;
00031 class PlotterBase;
00032 class TupleCut;
00033 class TupleCutXML;
00034 class ViewBase;
00035 class ViewBaseXML;
00036 class ViewFactory;
00037 class XmlDocument;
00038 class XmlElement;
00039 
00053 class MDL_HIPPOPLOT_API XmlController
00054 {
00055 
00056 public:
00057 
00059   enum Status { Success, OpenError, ParseError, NTupleError };
00060 
00061 private:
00062 
00064   ViewFactory * m_view_factory;
00065 
00067   XmlController ( const XmlController & );
00068 
00071   std::list < std::string > m_missing_tuples;
00072   
00075   std::vector < int > m_missing_ids;
00076 
00079   void clearDataSourceMap ();
00080 
00082   void fillNTupleMap ();
00083 
00086   void fillTupleCutMap ( const std::vector < const ViewBase * > & views );
00087 
00091   void saveToDocument ( const std::vector < const ViewBase * > & selviews );
00092 
00094   const std::list < ViewBase * > &
00095   getFromDocument ( ViewFactory * facotry,
00096                     const std::vector < const ViewBase * > & views );
00097 
00099   XmlDocument * m_pasteboard;
00100 
00102   XmlDocument * m_selectboard;
00103 
00105   std::list < ViewBase * > m_views;
00106 
00108   std::map < const DataSource *, XmlElement * > m_data;
00109 
00112   std::map < const void *, int > m_addr_map;
00113 
00116   typedef std::map < const void *, int >::iterator AddrMapIterator_t;
00117 
00120   int m_id;
00121 
00123   std::map < int, const DataSource * > m_tuple_map;
00124 
00126   std::map < int, const TupleCut * > m_tuple_cut_map;
00127 
00129   std::map < int, DataRep * > m_datarep_map;
00130 
00132   std::map < int, PlotterBase * > m_plotter_map;
00133 
00135   ViewBaseXML * m_view;
00136 
00138   DataRepXML * m_datarep_xml;
00139 
00141   HiNTupleXML * m_ntuple;
00142 
00144   TupleCutXML * m_tuple_cut_xml;
00145 
00147   XmlElement * m_element;
00148 
00152   virtual void newDocument ( const std::string & name ) = 0;
00153 
00160   virtual Status openDocument ( const std::string & filename );
00161 
00165   virtual Status openNTuples ( );
00166 
00167 
00169   void getDataReps ();
00170 
00172   void getTupleCuts ();
00173 
00175   virtual void getViews ( );
00176 
00178   void getViews ( const XmlElement * root );
00179 
00180 protected:
00181 
00184   XmlController();
00185 
00186 public:
00187 
00189   virtual ~XmlController();
00190 
00194   static XmlDocument * m_xml_doc;
00195 
00198   virtual void createDocument ( const std::string & doc_name );
00199 
00201   virtual bool fileExists ( const std::string & filename ) const = 0;
00202 
00206   Status openFile ( const std::string & filename );
00207 
00210   virtual const std::list < ViewBase * > & getViews ( ViewFactory * );
00211 
00214   bool areDataSourcesSaved ( const std::vector < const ViewBase * > & views );
00215 
00219   virtual bool 
00220   serializeViews ( const std::vector < const ViewBase * > & views );
00221 
00223   bool isPasteboardEmpty ();
00224 
00230   const std::list < ViewBase * > & 
00231   getFromPasteboard ( ViewFactory * factory,
00232                       const std::vector < const ViewBase * > & views );
00233 
00236   const std::list < ViewBase * > & 
00237   getFromSelectionCopy ( ViewFactory * factory,
00238                          const std::vector < const ViewBase * > & views );
00239 
00244   void saveToPasteboard ( const std::vector < const ViewBase * > & );
00245 
00250   void saveToSelectionCopy ( const std::vector < const ViewBase * > & views );
00251 
00254   Status saveToFile ( const std::vector < const ViewBase * > & views,
00255                       const std::string & filename );
00256 
00257 
00259   PlotterBase *  createDisplay ( );
00260 
00262   void addViews ( const std::vector < const ViewBase * > & views );
00263 
00267   ViewBase * createView ( PlotterBase * );
00268 
00271   FontBase * createFont () const;
00272 
00275   virtual XmlElement * addDataSource ( const DataSource * ntuple );
00276 
00278   const DataSource * getDataSource ( int ref_id );
00279 
00282   const TupleCut * getTupleCut ( int ref_id );
00283 
00285   DataRep * getDataRep ( int ref );
00286 
00290   PlotterBase * getPlotter ( int ref );
00291 
00294   void registerPlotter ( int id, PlotterBase * plotter );
00295 
00298   int getId ( const void * address );
00299 
00303   std::list < std::string > & getMissingTuples ();
00304 
00307   virtual Status openUpdatedNTuples ( );
00308 
00309 };
00310 
00311 } // namespace hippodraw
00312 
00313 #endif // _XmlController_H_

Generated for HippoDraw Class Library by doxygen