From f04c1140af63a6fc78f6cbb6b4e9b1e2ecc562f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vuchener?= <clement.vuchener@inria.fr> Date: Thu, 5 Mar 2009 15:54:15 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20support=20des=20couleurs=20pour=20?= =?UTF-8?q?les=20=C3=A9tats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/parser/ParserEventDecoder.cpp | 15 ++++++------- src/trace/DrawTrace.hpp | 19 ++++++++++++++-- src/trace/EntityValue.cpp | 7 +++++- src/trace/EntityValue.hpp | 8 ++++++- src/trace/Trace.cpp | 36 +++++++++++++++---------------- src/trace/Trace.hpp | 34 ++++++++++++++--------------- src/trace/values/Color.cpp | 12 +++++++++++ src/trace/values/Color.hpp | 24 +++++++++++++++++++++ 8 files changed, 108 insertions(+), 47 deletions(-) diff --git a/src/parser/ParserEventDecoder.cpp b/src/parser/ParserEventDecoder.cpp index b3c2e9fd..00965aac 100644 --- a/src/parser/ParserEventDecoder.cpp +++ b/src/parser/ParserEventDecoder.cpp @@ -25,7 +25,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T String dest_container; String key; - vector<Value *> extra_fields; + map<std::string, Value *> extra_fields; unsigned int i = 1; vector<Field> fields = definition.get_fields(); @@ -109,8 +109,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T else { if(fields[i-1]._type == "string") { - String value = current_value; - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new String(current_value); } else if(fields[i-1]._type == "double") { Double value; @@ -119,7 +118,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T //cerr << "warning : incompatible value : " << current_value << endl; return; } - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new Double(value); } else if(fields[i-1]._type == "hex") { Hex value; @@ -128,7 +127,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T //cerr << "warning : incompatible value : " << current_value << endl; return; } - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new Hex(value); } else if(fields[i-1]._type == "date") { Date value; @@ -137,7 +136,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T //cerr << "warning : incompatible value : " << current_value << endl; return; } - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new Date(value); } else if(fields[i-1]._type == "int") { Integer value; @@ -146,7 +145,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T //cerr << "warning : incompatible value : " << current_value << endl; return; } - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new Integer(value); } else if(fields[i-1]._type == "color") { Color value; @@ -155,7 +154,7 @@ void ParserEventDecoder::store_event(const Definition &definition, Line &line, T //cerr << "warning : incompatible value : " << current_value << endl; return; } - extra_fields.push_back(&value); + extra_fields[fields[i-1]._name] = new Color(value); } else { Error::set_and_print_warning(Error::_UNKNOWN_TYPE_IN_EVENT + current_value, line.get_line_count()); diff --git a/src/trace/DrawTrace.hpp b/src/trace/DrawTrace.hpp index 2fd7206a..8855bdcb 100644 --- a/src/trace/DrawTrace.hpp +++ b/src/trace/DrawTrace.hpp @@ -294,6 +294,8 @@ public: Event *event; const list<Link *> *link_list; Link *link; + const map<std::string, Value *> *extra_fields; + const Color *color; Element_count i;/* for the level (y axis) of the states */ i = 0; @@ -308,8 +310,21 @@ public: state = *it; Element_pos base = ((Element_pos)i)*_container_height+((Element_pos)i)*_container_v_space+_container_v_space; - /* Call the object state drawing function */ - draw_object->draw_state(state->get_start_time().get_value(), state->get_end_time().get_value(), base, _state_height, 0.7, 0.7, 0.75); + + // Search the color + extra_fields = state->get_value()->get_extra_fields(); + map<std::string, Value *>::const_iterator field = extra_fields->find(std::string("Color")); + if (field == extra_fields->end()) { + /* Call the object state drawing function with default color */ + draw_object->draw_state(state->get_start_time().get_value(), state->get_end_time().get_value(), base, _state_height, 0.7, 0.7, 0.75); + } + else { + /* Call the object state drawing function with the state color */ + color = (const Color *)(*field).second; + draw_object->draw_state(state->get_start_time().get_value(), state->get_end_time().get_value(), + base, _state_height, + color->get_red(), color->get_green(), color->get_blue()); + } }/* end for */ // Browse events diff --git a/src/trace/EntityValue.cpp b/src/trace/EntityValue.cpp index 384ab1a4..49caca65 100644 --- a/src/trace/EntityValue.cpp +++ b/src/trace/EntityValue.cpp @@ -1,6 +1,6 @@ #include "EntityValue.hpp" -EntityValue::EntityValue(const Name &name, EntityType *type): _name(name), _type(type) { +EntityValue::EntityValue(const Name &name, EntityType *type, map<std::string, Value *> opt): _name(name), _type(type), _opt(opt) { } @@ -11,3 +11,8 @@ Name EntityValue::get_name() const { const EntityType *EntityValue::get_type() const { return _type; } + +const map<std::string, Value *> *EntityValue::get_extra_fields() const { + return &_opt; +} + diff --git a/src/trace/EntityValue.hpp b/src/trace/EntityValue.hpp index 27d95aa4..68e9355d 100644 --- a/src/trace/EntityValue.hpp +++ b/src/trace/EntityValue.hpp @@ -10,6 +10,10 @@ * */ +#include "values/Value.hpp" +#include <map> +using std::map; + class EntityValue; #include "EntityType.hpp" @@ -24,12 +28,14 @@ class EntityValue { private: Name _name; EntityType *_type; + map<std::string, Value *> _opt; public: - EntityValue(const Name &name, EntityType *type); + EntityValue(const Name &name, EntityType *type, map<std::string, Value *> opt); Name get_name() const; const EntityType *get_type() const; + const map<std::string, Value *> *get_extra_fields() const; }; #endif diff --git a/src/trace/Trace.cpp b/src/trace/Trace.cpp index 78f713ec..79a42e29 100644 --- a/src/trace/Trace.cpp +++ b/src/trace/Trace.cpp @@ -16,7 +16,7 @@ Trace::~Trace() { } } -void Trace::define_container_type(Name &name, ContainerType *parent, const vector<Value *> &opt) { +void Trace::define_container_type(Name &name, ContainerType *parent, const map<std::string, Value *> &opt) { ContainerType *type = new ContainerType(name, parent); if (parent) parent->add_child(type); @@ -24,7 +24,7 @@ void Trace::define_container_type(Name &name, ContainerType *parent, const vecto _root_container_types.push_back(type); } -void Trace::create_container(Date &time, Name &name, ContainerType *type, Container *parent, const vector<Value *> &opt) { +void Trace::create_container(Date &time, Name &name, ContainerType *type, Container *parent, const map<std::string, Value *> &opt) { if (!type) return; @@ -35,73 +35,73 @@ void Trace::create_container(Date &time, Name &name, ContainerType *type, Contai _root_containers.push_back(cont); } -void Trace::destroy_container(Date &time, Container *cont, ContainerType *type, const vector<Value *> &opt) { +void Trace::destroy_container(Date &time, Container *cont, ContainerType *type, const map<std::string, Value *> &opt) { if (cont) cont->destroy(time); } -void Trace::define_event_type(Name &name, ContainerType *container_type, const vector<Value *> &opt) { +void Trace::define_event_type(Name &name, ContainerType *container_type, const map<std::string, Value *> &opt) { if (container_type) _event_types.push_back(new EventType(name, container_type)); } -void Trace::define_state_type(Name &name, ContainerType *container_type, const vector<Value *> &opt) { +void Trace::define_state_type(Name &name, ContainerType *container_type, const map<std::string, Value *> &opt) { if (container_type) _state_types.push_back(new StateType(name, container_type)); } -void Trace::define_variable_type(Name &name, ContainerType *container_type, const vector<Value *> &opt) { +void Trace::define_variable_type(Name &name, ContainerType *container_type, const map<std::string, Value *> &opt) { } -void Trace::define_link_type(Name &name, ContainerType *ancestor, ContainerType *source, ContainerType *destination, const vector<Value *> &opt) { +void Trace::define_link_type(Name &name, ContainerType *ancestor, ContainerType *source, ContainerType *destination, const map<std::string, Value *> &opt) { if (ancestor) _link_types.push_back(new LinkType(name, ancestor, source, destination)); } -void Trace::define_entity_value(Name &name, EntityType *entity_type, const vector<Value *> &opt) { +void Trace::define_entity_value(Name &name, EntityType *entity_type, const map<std::string, Value *> &opt) { if (entity_type) - entity_type->add_value(new EntityValue(name, entity_type)); + entity_type->add_value(new EntityValue(name, entity_type, opt)); } -void Trace::set_state(Date &time, StateType *type, Container *container, EntityValue *value, const vector<Value *> &opt) { +void Trace::set_state(Date &time, StateType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt) { if (container && type && value) container->set_state(time, type, value); } -void Trace::push_state(Date &time, StateType *type, Container *container, EntityValue *value, const vector<Value *> &opt) { +void Trace::push_state(Date &time, StateType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt) { if (container && type && value) container->push_state(time, type, value); } -void Trace::pop_state(Date &time, StateType *type, Container *container, const vector<Value *> &opt) { +void Trace::pop_state(Date &time, StateType *type, Container *container, const map<std::string, Value *> &opt) { if (container) container->pop_state(time); } -void Trace::new_event(Date &time, EventType *type, Container *container, EntityValue *value, const vector<Value *> &opt) { +void Trace::new_event(Date &time, EventType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt) { if (container) container->new_event(time, type, value); } -void Trace::set_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt) { +void Trace::set_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt) { } -void Trace::add_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt) { +void Trace::add_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt) { } -void Trace::sub_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt) { +void Trace::sub_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt) { } -void Trace::start_link(Date &time, LinkType *type, Container *ancestor, Container *source, EntityValue *value, String key, const vector<Value *> &opt) { +void Trace::start_link(Date &time, LinkType *type, Container *ancestor, Container *source, EntityValue *value, String key, const map<std::string, Value *> &opt) { if (ancestor) ancestor->start_link(time, type, source, value, key); } -void Trace::end_link(Date &time, LinkType *type, Container *ancestor, Container *destination, EntityValue *value, String key, const vector<Value *> &opt) { +void Trace::end_link(Date &time, LinkType *type, Container *ancestor, Container *destination, EntityValue *value, String key, const map<std::string, Value *> &opt) { if (ancestor) ancestor->end_link(time, destination, key); } diff --git a/src/trace/Trace.hpp b/src/trace/Trace.hpp index ba41329e..b2e4ea8d 100644 --- a/src/trace/Trace.hpp +++ b/src/trace/Trace.hpp @@ -66,7 +66,7 @@ public : *\param container_type_parent an object that can contain a name, an alias or both * */ - void define_container_type(Name &alias, ContainerType *container_type_parent, const vector<Value *> &opt); + void define_container_type(Name &alias, ContainerType *container_type_parent, const map<std::string, Value *> &opt); /*! * @@ -80,7 +80,7 @@ public : *\param String : the parent of the container * */ - void create_container(Date &time, Name &alias, ContainerType *type, Container *parent, const vector<Value *> &opt); + void create_container(Date &time, Name &alias, ContainerType *type, Container *parent, const map<std::string, Value *> &opt); /*! * @@ -92,7 +92,7 @@ public : *\param type the type of the container * */ - void destroy_container(Date &time, Container *cont, ContainerType *type, const vector<Value *> &opt); + void destroy_container(Date &time, Container *cont, ContainerType *type, const map<std::string, Value *> &opt); /*! @@ -104,7 +104,7 @@ public : *\param container_type the type of the container * */ - void define_event_type(Name &alias, ContainerType *container_type, const vector<Value *> &opt); + void define_event_type(Name &alias, ContainerType *container_type, const map<std::string, Value *> &opt); /*! @@ -117,7 +117,7 @@ public : * * */ - void define_state_type(Name &alias, ContainerType *container_type, const vector<Value *> &opt); + void define_state_type(Name &alias, ContainerType *container_type, const map<std::string, Value *> &opt); /*! @@ -129,7 +129,7 @@ public : *\param container_type the type of the container * */ - void define_variable_type(Name &alias, ContainerType *container_type, const vector<Value *> &opt); + void define_variable_type(Name &alias, ContainerType *container_type, const map<std::string, Value *> &opt); /*! @@ -143,7 +143,7 @@ public : *\param destination the type of the container where the link goes * */ - void define_link_type(Name &alias, ContainerType *ancestor, ContainerType *source, ContainerType *destination, const vector<Value *> &opt); + void define_link_type(Name &alias, ContainerType *ancestor, ContainerType *source, ContainerType *destination, const map<std::string, Value *> &opt); /*! @@ -155,7 +155,7 @@ public : *\param entity_type the type of the entity * */ - void define_entity_value(Name &alias, EntityType *entity_type, const vector<Value *> &opt); + void define_entity_value(Name &alias, EntityType *entity_type, const map<std::string, Value *> &opt); /*! @@ -169,7 +169,7 @@ public : *\param value the new value of the state * */ - void set_state(Date &time, StateType *type, Container *container, EntityValue *value, const vector<Value *> &opt); + void set_state(Date &time, StateType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt); /*! @@ -183,7 +183,7 @@ public : *\param String : the new value of the state * */ - void push_state(Date &time, StateType *type, Container *container, EntityValue *value, const vector<Value *> &opt); + void push_state(Date &time, StateType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt); /*! @@ -196,7 +196,7 @@ public : *\param container the container * */ - void pop_state(Date &time, StateType *type, Container *container, const vector<Value *> &opt); + void pop_state(Date &time, StateType *type, Container *container, const map<std::string, Value *> &opt); /*! @@ -210,7 +210,7 @@ public : *\param value the value of the event * */ - void new_event(Date &time, EventType *type, Container *container, EntityValue *value, const vector<Value *> &opt); + void new_event(Date &time, EventType *type, Container *container, EntityValue *value, const map<std::string, Value *> &opt); /*! @@ -224,7 +224,7 @@ public : *\param value the value of the variable * */ - void set_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt); + void set_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt); /*! @@ -238,7 +238,7 @@ public : *\param value the value of the variable * */ - void add_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt); + void add_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt); /*! @@ -252,7 +252,7 @@ public : *\param value the value of the variable * */ - void sub_variable(Date &time, VariableType *type, Container *container, Double value, const vector<Value *> &opt); + void sub_variable(Date &time, VariableType *type, Container *container, Double value, const map<std::string, Value *> &opt); /*! @@ -267,7 +267,7 @@ public : *\param value the value of the variable * */ - void start_link(Date &time, LinkType *type, Container *ancestor, Container *source, EntityValue *value, String key, const vector<Value *> &opt); + void start_link(Date &time, LinkType *type, Container *ancestor, Container *source, EntityValue *value, String key, const map<std::string, Value *> &opt); /*! @@ -282,7 +282,7 @@ public : *\param value the value of the variable * */ - void end_link(Date &time, LinkType *type, Container *ancestor, Container *destination, EntityValue *value, String key, const vector<Value *> &opt); + void end_link(Date &time, LinkType *type, Container *ancestor, Container *destination, EntityValue *value, String key, const map<std::string, Value *> &opt); /*! diff --git a/src/trace/values/Color.cpp b/src/trace/values/Color.cpp index a608049c..b6efcb5e 100644 --- a/src/trace/values/Color.cpp +++ b/src/trace/values/Color.cpp @@ -60,4 +60,16 @@ bool Color::replace_in_string(std::string &characters, char to_replace, char rep } return has_change; +} + +double Color::get_red() const { + return _r; +} + +double Color::get_green() const { + return _g; +} + +double Color::get_blue() const { + return _b; } diff --git a/src/trace/values/Color.hpp b/src/trace/values/Color.hpp index 1567b570..0738d4f2 100644 --- a/src/trace/values/Color.hpp +++ b/src/trace/values/Color.hpp @@ -58,6 +58,30 @@ public: * */ std::string to_string() const; + + /*! + * + * \fn get_red() const + * \return red value + * + */ + double get_red() const; + + /*! + * + * \fn get_green() const; + * \return green value + * + */ + double get_green() const; + + /*! + * + * \fn get_blue() const; + * \return blue value + * + */ + double get_blue() const; private: /*! -- GitLab