00001
00002
00014 #ifndef _CutController_H_
00015 #define _CutController_H_
00016
00017 #include "graphics/Color.h"
00018 #include "axes/AxesType.h"
00019
00020 #include <list>
00021
00022 namespace hippodraw {
00023 class DataRep;
00024 class DataSource;
00025 class PlotterBase;
00026 class CutPlotter;
00027 class Cut1DPlotter;
00028 class Cut2DPlotter;
00029 class NTupleProjector;
00030 class Range;
00031 class TupleCut;
00032 class ViewBase;
00033
00038 class MDL_HIPPOPLOT_API CutController
00039 {
00040
00041 private:
00042
00046 typedef std::vector < PlotterBase * > PlotterList_t;
00047
00049 static CutController * s_instance;
00050
00052 CutController ( const CutController & );
00053
00055 std:: list < std::pair< PlotterBase *, Axes::Type > > m_zoom_pan;
00056
00061 mutable std::vector < PlotterBase * > m_cut_list;
00062
00064 mutable std::vector < std::string > m_cut_strings;
00065
00072 void connectDataRep ( DataRep * rep,
00073 const std::vector < const ViewBase * > & views );
00074
00081 void connectDataRep ( const TupleCut * cut,
00082 DataRep * rep,
00083 const std::vector < const ViewBase * > & views );
00084
00085 protected:
00086
00089 CutController();
00090
00091 public:
00092
00094 static CutController * instance ();
00095
00103 Cut1DPlotter * addCut ( PlotterBase * plotter, const std::string & label );
00104
00110 PlotterBase * addCut ( PlotterBase * plotter,
00111 std::vector< std::string > & bindings );
00112
00120 void addCut ( PlotterBase * cut_plotter,
00121 PlotterBase * plotter );
00122
00125 void addCuts ( const std::vector < PlotterBase * > & cut_list,
00126 PlotterBase * plotter );
00127
00132 void linkCutAndRep ( CutPlotter * cut_plotter,
00133 DataRep * target );
00134
00135
00143 CutPlotter *
00144 createCut ( const std::string & name,
00145 const DataSource * source,
00146 const std::vector < std::string > & bindings,
00147 const Color & color ) const;
00148
00151 void removeCut ( PlotterBase * cut_plotter, PlotterBase * plotter );
00152
00156 void fillCutList ( const std::vector < PlotterBase * > & plotter_list,
00157 std::vector < CutPlotter * > & cut_list );
00158
00162 void fillCutList ( const PlotterBase * plotter,
00163 std::vector < PlotterBase * > & cut_list );
00164
00165 private:
00169 void fillCutList ( const DataRep * data_rep,
00170 std::vector < PlotterBase * > & cut_list );
00171
00172 public:
00175 const std::vector < const TupleCut * > &
00176 getCutList ( const DataRep * rep ) const;
00177
00181 const std::vector < PlotterBase * > &
00182 getCutList ( const std::vector < PlotterBase * > &,
00183 const DataSource * rep ) const;
00184
00190 void fillCutWeb ( const std::vector < PlotterBase * > & plotters,
00191 std::vector < PlotterBase * > & web );
00192
00196 void appendToWeb ( PlotterBase * plotter, PlotterList_t & web );
00197
00199 void appendToWeb ( CutPlotter * cutter,
00200 PlotterList_t & web );
00201
00203 void appendToWeb ( const std::vector < PlotterBase * > & cutters,
00204 PlotterList_t & web );
00205
00209 PlotterBase * findPlotter ( const DataRep * data_rep );
00210
00215 void fillTupleCutList ( const std::vector < const ViewBase * > & views,
00216 std::vector < const TupleCut * > & cut_list );
00217
00224 void connectDataRep ( const std::list < ViewBase * > & targets,
00225 const std::vector < const ViewBase * > & views );
00226
00231 void setZoomPan ( PlotterBase * plotter,
00232 hippodraw::Axes::Type axis, bool yes );
00233
00236 bool isZoomPan ( const PlotterBase * cut_plotter,
00237 hippodraw::Axes::Type axis ) const;
00238
00239 static void fillAcceptedRows ( std::vector < bool > & array,
00240 const DataSource * source,
00241 const std::vector< const TupleCut * > & cuts);
00242
00244 void createIdCut ( const DataSource * source, DataSource * destination );
00245
00246 };
00247
00248 }
00249
00250 #endif // _CutController_H_