Commit 7889c609 authored by Thibault Soucarre's avatar Thibault Soucarre

Changement algorithme browse_container

parent a467885a
......@@ -48,6 +48,8 @@
#ifndef DRAW_TRACE_HPP
#define DRAW_TRACE_HPP
#include <iostream>
/*
* Theses constants can not be put as static const float because it is a template and there binary representation is not normed by the C++ langage.
*/
......@@ -270,7 +272,7 @@ public:
template<class T>
inline void browse_container_tree(T* draw_object, Trace* trace, std::vector<const Container *> *container){
/*** Drawing containers ***/
int position = 0;
Element_pos y = 0.;
const Container::Vector *root_containers = trace->get_view_root_containers();
if (root_containers->empty())
......@@ -285,7 +287,7 @@ public:
i++)
// Use the fact that if a container is selected, then it implies that all his ancestors are
if(is_in_set(*i,container))
position += browse_container(draw_object, *i, position, 0,container);
y += browse_container(draw_object, *i, 0., y, _container_width, 0., container);
}
}/* end browse_container_tree */
......@@ -297,24 +299,27 @@ public:
* current depth in the tree
*/
template<class T>
int browse_container(T* draw_object, const Container *container, int position, int depth,
std::vector<const Container *> *set_container) {
int size = 0;
Element_pos browse_container(T* draw_object, const Container *container, Element_pos x, Element_pos y,
Element_pos w, Element_pos h, std::vector<const Container *> *set_container) {
//int size = 0;
// Draw children:
// we want to display only children meant to be displayed
const Container::Vector *children = container->get_view_children();
if( children->empty() )
children = container->get_children();
/*if(!children.empty())
h = 0.;*/
for (Container::VectorIt i = children->begin();
i != children->end();
i++) {
if(is_in_set(*i,set_container))
size += browse_container(draw_object, (*i), position+size, depth+1,set_container);
h += browse_container(draw_object, (*i), x + _container_width + _container_h_space, y + h, _container_width, 0., set_container) + _container_v_space;
}
// h -= _container_v_space;
/*if(is_in_set(*i,set_container))
size += browse_container(draw_object, (*i), position+size, depth+1,set_container);*/
// Use one line for states and events
// Use one line for states and events
#ifdef USE_ITC
if ( (container->get_states() != NULL && !container->get_states()->empty()) ||
(container->get_events() != NULL && !container->get_events()->empty()) )
......@@ -323,31 +328,32 @@ public:
!container->get_events()->empty() )
#endif
{
size++;
h += _container_height + _container_v_space;
_entity_containers.push_back(container);
}
// Store the position to draw links
_container_positions[container] = position; // First line after children
_container_sizes[container] = size; // First line after children
_container_positions[container] = y/(_container_height + _container_v_space) /*+ 7 * _container_v_space*/;//position; // First line after children
_container_sizes[container] = h/(_container_height + _container_v_space);//size; // First line after children
// Use one line for each variable
if (container->get_variable_number() > 0) {
_variable_containers.push_back(container);
size += container->get_variable_number();
h += (_container_height + _container_v_space) * container->get_variable_number();
}
h -= _container_v_space;
if (size < 1) // Minimum size
size = 1;
if (h < _container_height) // Minimum size
h = _container_height;
// Push containers with links to draw
if (!container->get_links()->empty())
_link_containers.push_back(container);
// Draw this container
draw_container(draw_object, position, size, depth, container->get_name().to_string());
draw_container(draw_object, x, y, w, h, container->get_name().to_string());
return size;
return h;
}
/*!
......@@ -359,12 +365,12 @@ public:
* \param text Name of the container
*/
template<class T>
inline void draw_container(T* draw_object, int position, int size, int depth, const std::string &text) {
Element_pos x = depth *(_container_width +_container_h_space) + _container_h_space/2;
Element_pos y = position*(_container_height+_container_v_space) + _container_v_space/2;
Element_pos height = size *(_container_height+_container_v_space) - _container_v_space;
draw_object->draw_container(x, y, _container_width, height);
draw_object->draw_container_text(x, y+height/2, text);
inline void draw_container(T* draw_object, Element_pos x, Element_pos y, Element_pos w, Element_pos h, const std::string &text) {
//Element_pos x = depth *(_container_width +_container_h_space) + _container_h_space/2;
//Element_pos y = position*(_container_height+_container_v_space) + _container_v_space/2;
//Element_pos height = size *(_container_height+_container_v_space) - _container_v_space;
draw_object->draw_container(x, y+_container_v_space/2, w, h);
draw_object->draw_container_text(x, y+h/2, text);
}
/*!
......@@ -373,6 +379,7 @@ public:
template<class T>
inline void browse_entities(T* draw_object, double zoom, Interval* interval, std::vector<const Container *> *set_container) {
//////////////////////////////////////////////////////////
std::cout << "browse entities" << std::endl;
const Container *container;
StateChange::Tree *state_tree;
Event::Tree *event_tree;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment