if (dynamic_cast<ViewAnd *>(i->second) || dynamic_cast<ViewOr *>(i->second) || dynamic_cast<ViewNot *>(i->second)) {
x1 = i->second->x + i->second->in_x;
y1 = i->second->y + i->second->in_y;
- std::list<std::string>::iterator linea;
+ std::list<t_Linea>::iterator linea;
for(linea=i->second->in_lines.begin(); linea!=i->second->in_lines.end(); linea++) {
- ViewItem *tmp = find_item(*linea);
- x2 = tmp->x + tmp->out_x;
- y2 = tmp->y + tmp->out_y;
- if (tmp->get_open()) {
- gc->set_foreground(color_high);
+ ViewItem *tmp = find_item(linea->dst);
+ /* Si este item es un tanque */
+ if (linea->is_tank) {
+ if (linea->is_tank_lower) {
+ x2 = tmp->x + tmp->out_x;
+ y2 = tmp->y + tmp->out_y;
+ if (dynamic_cast<ViewTank *>(tmp)->get_out_inf()) {
+ gc->set_foreground(color_high);
+ } else {
+ gc->set_foreground(color_low);
+ }
+ } else {
+ x2 = tmp->x + tmp->in_x;
+ y2 = tmp->y + tmp->in_y;
+ if (dynamic_cast<ViewTank *>(tmp)->get_out_sup()) {
+ gc->set_foreground(color_high);
+ } else {
+ gc->set_foreground(color_low);
+ }
+ }
} else {
- gc->set_foreground(color_low);
+ x2 = tmp->x + tmp->out_x;
+ y2 = tmp->y + tmp->out_y;
+ if (tmp->get_open()) {
+ gc->set_foreground(color_high);
+ } else {
+ gc->set_foreground(color_low);
+ }
}
gc->set_line_attributes(3, Gdk::LINE_SOLID, Gdk::CAP_NOT_LAST, Gdk::JOIN_MITER);
window->draw_line(gc, x2+tmp->item_offset_x, y2+tmp->item_offset_y, x2+tmp->item_offset_x, y1+i->second->offset_y);
x1 = i->second->x + i->second->out_x;
y1 = i->second->y + i->second->out_y;
for(linea=i->second->out_lines.begin(); linea!=i->second->out_lines.end(); linea++) {
- ViewItem *tmp = find_item(*linea);
+ ViewItem *tmp = find_item(linea->dst);
x2 = tmp->x + tmp->in_x;
y2 = tmp->y + tmp->in_y;
if (i->second->get_open()) {
std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id");
int orientacion=0, x, y;
+ t_Linea linea;
ViewNot *p;
nodo = nodo->children;
} else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
} else if (xmlStrcmp(nodo->name, BAD_CAST"salida") == 0) {
- p->out_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ p->out_lines.push_back(linea);
} else if (xmlStrcmp(nodo->name, BAD_CAST"entrada") == 0) {
- p->in_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ linea.is_tank = false;
+ if (dynamic_cast<ViewTank *>(find_item(linea.dst)) != NULL) {
+ linea.is_tank = true;
+ linea.is_tank_lower = false;
+ if (xmlStrcmp(xmlGetProp(nodo, BAD_CAST"id"), BAD_CAST"inferior")==0)
+ linea.is_tank_lower = true;
+ }
+ p->in_lines.push_back(linea);
}
}
nodo = nodo->next;
std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id");
int orientacion=0, x, y;
+ t_Linea linea;
ViewOr *p;
} else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
} else if (xmlStrcmp(nodo->name, BAD_CAST"salida") == 0) {
- p->out_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ p->out_lines.push_back(linea);
} else if (xmlStrcmp(nodo->name, BAD_CAST"entrada") == 0) {
- p->in_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ linea.is_tank = false;
+ if (dynamic_cast<ViewTank *>(find_item(linea.dst)) != NULL) {
+ linea.is_tank = true;
+ linea.is_tank_lower = false;
+ if (xmlStrcmp(xmlGetProp(nodo, BAD_CAST"id"), BAD_CAST"inferior")==0)
+ linea.is_tank_lower = true;
+ }
+ p->in_lines.push_back(linea);
}
}
nodo = nodo->next;
int orientacion=0, x, y;
float flujo;
xmlNodePtr inicial = nodo;
-
+ t_Linea linea;
ViewAnd *p;
nodo = nodo->children;
} else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
} else if (xmlStrcmp(nodo->name, BAD_CAST"salida") == 0) {
- p->out_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ p->out_lines.push_back(linea);
} else if (xmlStrcmp(nodo->name, BAD_CAST"entrada") == 0) {
- p->in_lines.push_back((char *)XML_GET_CONTENT(nodo->children));
+ linea.dst = (char *)XML_GET_CONTENT(nodo->children);
+ linea.is_tank = false;
+ if (dynamic_cast<ViewTank *>(find_item(linea.dst)) != NULL) {
+ linea.is_tank = true;
+ linea.is_tank_lower = false;
+ if (xmlStrcmp(xmlGetProp(nodo, BAD_CAST"id"), BAD_CAST"inferior")==0)
+ linea.is_tank_lower = true;
+ }
+ p->in_lines.push_back(linea);
}
}
nodo = nodo->next;
xmlNodePtr nodo_tmp = items->children;
float cap, lit;
cap = lit = -1;
+ bool b_inf, b_sup;
while (nodo_tmp != NULL) {
if (nodo_tmp->type == XML_ELEMENT_NODE) {
if (xmlStrcmp(nodo_tmp->name, BAD_CAST"capacity")==0)
cap = atof( (char *)XML_GET_CONTENT(nodo_tmp->children) );
else if (xmlStrcmp(nodo_tmp->name, BAD_CAST"litros")==0)
lit= atof( (char *)XML_GET_CONTENT(nodo_tmp->children) );
+ else if (xmlStrcmp(nodo_tmp->name, BAD_CAST"salida")==0) {
+ if (xmlStrcmp(xmlGetProp(items, BAD_CAST"id"), BAD_CAST"inferior")==0) {
+ b_inf = get_bool_from_xml(nodo_tmp->children);
+ } else {
+ b_sup = get_bool_from_xml(nodo_tmp->children);
+ }
+ }
}
nodo_tmp = nodo_tmp->next;
}
item_name = (char *)xmlGetProp(items, BAD_CAST"name");
mapItems[item_name]->set_actual_flow(cap);
mapItems[item_name]->set_extra(lit);
+ dynamic_cast<ViewTank *>(mapItems[item_name])->set_out_sup(b_sup);
+ dynamic_cast<ViewTank *>(mapItems[item_name])->set_out_inf(b_inf);
}
}
items = items->next;