00001 #ifndef __GRAPH_INSET_H 00002 #define __GRAPH_INSET_H 00003 00009 #include <config.h> 00010 #include <vector> 00011 #include <list> 00012 #include <string> 00013 00014 #include <graph/vertex.h> 00015 #include <util/vector.h> 00016 #include <util/parms.h> 00017 00018 class Viewer; 00019 class QString; 00020 00021 namespace util 00022 { 00023 class Palette; 00024 00030 class GraphInset 00031 { 00032 public: 00036 struct Data 00037 { 00038 Data(double t, const std::vector<double>& vs, bool c) 00039 : time(t) 00040 , values(vs) 00041 , changed(c) 00042 { } 00043 00044 Data(const Data& copy) 00045 : time(copy.time) 00046 , values(copy.values) 00047 , changed(copy.changed) 00048 { } 00049 00053 double time; 00054 00058 std::vector<double> values; 00059 00063 bool changed; 00064 }; 00065 00069 typedef std::list<Data>::const_iterator iterator; 00070 00074 typedef std::list<Data>::const_reverse_iterator reverse_iterator; 00075 00079 typedef Data value_type; 00083 typedef const Data* pointer; 00087 typedef const Data& reference; 00088 00095 GraphInset(int nb_lines = 0); 00096 00103 void readParms(const QString& section, util::Parms parms); 00104 00113 void addData( double time, const std::vector<double>& values, bool changed = false); 00114 00118 void addData( double time, double value, bool changed = false) 00119 { 00120 std::vector<double> vs(1, value); 00121 addData(time, vs, changed); 00122 } 00123 00127 void addData( double time, double value1, double value2, bool changed = false) 00128 { 00129 std::vector<double> vs(2, value1); 00130 vs[1] = value2; 00131 addData(time, vs, changed); 00132 } 00133 00137 void addData( double time, double value1, double value2, double value3, bool changed = false) 00138 { 00139 std::vector<double> vs(3, value1); 00140 vs[1] = value2; 00141 vs[2] = value3; 00142 addData(time, vs, changed); 00143 } 00144 00148 void addData( double time, double value1, double value2, double value3, double value4, bool changed = false) 00149 { 00150 std::vector<double> vs(4, value1); 00151 vs[1] = value2; 00152 vs[2] = value3; 00153 vs[3] = value4; 00154 addData(time, vs, changed); 00155 } 00156 00160 void addData( double time, double value1, double value2, double value3, double value4, double value5, bool changed = false) 00161 { 00162 std::vector<double> vs(5, value1); 00163 vs[1] = value2; 00164 vs[2] = value3; 00165 vs[3] = value4; 00166 vs[4] = value5; 00167 addData(time, vs, changed); 00168 } 00169 00173 template <size_t N> 00174 void addData( double time, const util::Vector<N,double>& values, bool changed = false) 00175 { 00176 std::vector<double> vec_values(N); 00177 for(size_t i = 0 ; i < N ; ++i) 00178 { 00179 vec_values[i] = values[i]; 00180 } 00181 addData(time, vec_values, changed); 00182 } 00183 00187 void addData( double time, const double* values, bool changed = false) 00188 { 00189 std::vector<double> vec_values(_numberOfLines); 00190 for(size_t i = 0 ; i < _numberOfLines ; ++i) 00191 { 00192 vec_values[i] = values[i]; 00193 } 00194 addData(time, vec_values, changed); 00195 } 00196 00197 void dataSourceChanged(); 00198 00203 void cleanData(); 00204 00208 void draw(Viewer* viewer, const util::Palette& palette); 00209 00216 void drawWithName(size_t id, Viewer* viewer); 00217 00223 void drawFrame(size_t id, Viewer* viewer); 00224 00228 void closeGraph(); 00229 00233 void openGraph(); 00234 00238 bool graphClosed() const { return closed; } 00239 00243 void setTime(double t) { time = t; } 00244 00248 void clear(); 00249 00253 int numberOfLines() const { return (int)_numberOfLines; } 00254 00260 void setNumberOfLines(size_t nb_lines); 00261 00268 void check(); 00269 00273 bool writeCSV(const QString& filename); 00274 00276 00277 00280 size_t size() const { return data.size(); } 00281 00282 iterator begin() const { return data.begin(); } 00283 00284 iterator end() const { return data.end(); } 00285 00286 reverse_iterator rbegin() const { return data.rbegin(); } 00287 00288 reverse_iterator rend() const { return data.rend(); } 00289 00290 reference front() const { return data.front(); } 00291 00292 reference back() const { return data.back(); } 00294 00295 protected: 00299 size_t _numberOfLines; 00300 00304 bool initialized; 00305 00309 bool closed; 00310 00314 std::list<Data> data; 00315 00316 public: 00317 00321 double timeSpan; 00322 00328 int backColor; 00329 00333 std::vector<int> linesColor; 00334 00338 std::vector<double> linesWidth; 00339 00343 std::vector<util::Vector<2, double> > linesMinMaxView; 00344 00348 int contourColor; 00349 00353 int contourWidth; 00354 00364 util::Vector<2,int> windowPosition; 00365 00369 util::Vector<2,size_t> windowSize; 00370 00375 int changeSourceColor; 00376 00381 int changeSourceWidth; 00382 00386 double backgroundOffset; 00387 00391 double contourOffset; 00392 00396 double changeSourceOffset; 00397 00401 std::vector<double> linesOffset; 00402 00406 double time; 00407 00411 bool keepAllData; 00412 00420 bool autoOpenClose; 00421 00425 bool showAll; 00426 00430 std::vector<size_t> showIndices; 00431 00432 }; 00433 } 00434 00435 #endif // GRAPH_INSET_H 00436