00001
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 class DataRep;
00026 class DataRepXML;
00027 class DataSource;
00028 class FontBase;
00029 class HiNTupleXML;
00030 class PlotterBase;
00031 class TupleCut;
00032 class TupleCutXML;
00033 class ViewBase;
00034 class ViewBaseXML;
00035 class ViewFactory;
00036 class XmlDocument;
00037 class XmlElement;
00038
00052 class MDL_HIPPOPLOT_API XmlController
00053 {
00054
00055 public:
00056
00058 enum Status { Success, OpenError, ParseError, NTupleError };
00059
00060 private:
00061
00063 ViewFactory * m_view_factory;
00064
00066 XmlController ( const XmlController & );
00067 std::list < std::string > m_missing_tuples;
00068
00070 void fillNTupleMap ();
00071
00074 void fillTupleCutMap ( const std::vector < const ViewBase * > & views );
00075
00079 void saveToDocument ( const std::vector < const ViewBase * > & selviews );
00080
00082 const std::list < ViewBase * > &
00083 getFromDocument ( ViewFactory * facotry,
00084 const std::vector < const ViewBase * > & views );
00085
00087 XmlDocument * m_pasteboard;
00088
00090 XmlDocument * m_selectboard;
00091
00093 std::list < ViewBase * > m_views;
00094
00096 std::map < const DataSource *, XmlElement * > m_data;
00097
00100 std::map < const void *, int > m_addr_map;
00101
00104 typedef std::map < const void *, int >::iterator AddrMapIterator_t;
00105
00108 int m_id;
00109
00111 std::map < int, const DataSource * > m_tuple_map;
00112
00114 std::map < int, const TupleCut * > m_tuple_cut_map;
00115
00117 std::map < int, DataRep * > m_datarep_map;
00118
00120 std::map < int, PlotterBase * > m_plotter_map;
00121
00123 ViewBaseXML * m_view;
00124
00126 DataRepXML * m_datarep_xml;
00127
00129 HiNTupleXML * m_ntuple;
00130
00132 TupleCutXML * m_tuple_cut_xml;
00133
00135 XmlElement * m_element;
00136
00140 virtual void newDocument ( const std::string & name ) = 0;
00141
00148 virtual Status openDocument ( const std::string & filename );
00149
00153 virtual Status openNTuples ( );
00154
00156 void getDataReps ();
00157
00159 void getTupleCuts ();
00160
00162 virtual void getViews ( );
00163
00165 void getViews ( const XmlElement * root );
00166
00167 protected:
00168
00171 XmlController();
00172
00173 public:
00174
00176 virtual ~XmlController();
00177
00181 static XmlDocument * m_xml_doc;
00182
00185 virtual void createDocument ( const std::string & doc_name );
00186
00188 virtual bool fileExists ( const std::string & filename ) const = 0;
00189
00193 Status openFile ( const std::string & filename );
00194
00197 virtual const std::list < ViewBase * > & getViews ( ViewFactory * );
00198
00201 bool areDataSourcesSaved ( const std::vector < const ViewBase * > & views );
00202
00206 virtual bool
00207 serializeViews ( const std::vector < const ViewBase * > & views );
00208
00210 bool isPasteboardEmpty ();
00211
00217 const std::list < ViewBase * > &
00218 getFromPasteboard ( ViewFactory * factory,
00219 const std::vector < const ViewBase * > & views );
00220
00223 const std::list < ViewBase * > &
00224 getFromSelectionCopy ( ViewFactory * factory,
00225 const std::vector < const ViewBase * > & views );
00226
00231 void saveToPasteboard ( const std::vector < const ViewBase * > & );
00232
00237 void saveToSelectionCopy ( const std::vector < const ViewBase * > & views );
00238
00241 Status saveToFile ( const std::vector < const ViewBase * > & views,
00242 const std::string & filename );
00243
00244
00246 PlotterBase * createDisplay ( );
00247
00249 void addViews ( const std::vector < const ViewBase * > & views );
00250
00254 ViewBase * createView ( PlotterBase * );
00255
00258 FontBase * createFont () const;
00259
00262 virtual XmlElement * addDataSource ( const DataSource * ntuple );
00263
00265 const DataSource * getDataSource ( int ref_id );
00266
00269 const TupleCut * getTupleCut ( int ref_id );
00270
00272 DataRep * getDataRep ( int ref );
00273
00277 PlotterBase * getPlotter ( int ref );
00278
00281 void registerPlotter ( int id, PlotterBase * plotter );
00282
00285 int getId ( const void * address );
00286
00287 };
00288
00289 #endif // _XmlController_H_