]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Constructor/src/constructor.cpp
* Se agrega el TIP de luca
[z.facultad/75.42/plaqui.git] / Constructor / src / constructor.cpp
index 8a368099443ee3690758de92cafacb6863601208..acf5bc1f2ca8f743d408aac8c1c1419638e15b17 100644 (file)
@@ -769,6 +769,7 @@ Pump *Constructor::loadBomba(xmlNodePtr nodo)
        std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id");
        int orientacion=0, x, y;
        float flujo;
+       Gdk::Color color;
 
        nodo = nodo->children;
        while (nodo != NULL) {
@@ -782,7 +783,7 @@ Pump *Constructor::loadBomba(xmlNodePtr nodo)
                        } else if (xmlStrcmp(nodo->name, BAD_CAST"entrega") == 0) {
                                flujo = atof( (char *)XML_GET_CONTENT(nodo->children) );
                        } else if (xmlStrcmp(nodo->name, BAD_CAST"color") == 0) {
-                               // FIXME !
+                               color = loadColor(nodo->children);
                        }
                }
                nodo = nodo->next;
@@ -793,10 +794,31 @@ Pump *Constructor::loadBomba(xmlNodePtr nodo)
        p->set_entrega(flujo);
        p->set_id( atoi(id.c_str()) );
        p->set_name(name);
+       p->set_liquid_color(color);
 
        return p;
 }
 
+Gdk::Color Constructor::loadColor(xmlNodePtr nodo)
+{
+       gushort r,g,b;
+       while (nodo != NULL) {
+               if (nodo->type == XML_ELEMENT_NODE) {
+                       if (xmlStrcmp(nodo->name, BAD_CAST"rojo")==0)
+                               r = atoi( (char *)XML_GET_CONTENT(nodo->children) );
+                       if (xmlStrcmp(nodo->name, BAD_CAST"verde")==0)
+                               g = atoi( (char *)XML_GET_CONTENT(nodo->children) );
+                       if (xmlStrcmp(nodo->name, BAD_CAST"azul")==0)
+                               b = atoi( (char *)XML_GET_CONTENT(nodo->children) );
+               }
+               nodo = nodo->next;
+       }
+       Gdk::Color c;
+       c.set_rgb(r,g,b);
+       std::cout << r << "  " << g << " " << b << std::endl;
+       return c;
+}
+
 Conduct *Constructor::loadConduct(xmlNodePtr nodo)
 {
        std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
@@ -868,6 +890,7 @@ Cistern *Constructor::loadTank(xmlNodePtr nodo)
        std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id");
        int orientacion=0, x, y;
        float liquido,capacidad;
+       Gdk::Color color;
 
        nodo = nodo->children;
        while (nodo != NULL) {
@@ -882,6 +905,8 @@ Cistern *Constructor::loadTank(xmlNodePtr nodo)
                                capacidad = atof ((char *)XML_GET_CONTENT(nodo->children) );
                        } else if (xmlStrcmp(nodo->name, BAD_CAST"inicial") == 0) {
                                liquido = atof ((char *)XML_GET_CONTENT(nodo->children) );
+                       } else if (xmlStrcmp(nodo->name, BAD_CAST"color") == 0) {
+                               color = loadColor(nodo->children);
                        }
                }
                nodo = nodo->next;
@@ -893,7 +918,7 @@ Cistern *Constructor::loadTank(xmlNodePtr nodo)
        p->set_name(name);
        p->set_capacidad(capacidad);
        p->set_contenido_inicial(liquido);
-
+       p->set_liquid_color(color);
        return p;
 }
 
@@ -1030,16 +1055,36 @@ void Constructor::create_line(xmlNodePtr nodo, int logic_id)
                                t_line tmp_line;
                                tmp_line.logic_id = logic_id;
                                //workplace->get_logic_item(logic_id)->set_out_connected(true);
-                               tmp_line.store_id = workplace->get_item_id(otro);
-                               std::cout << otro << " " << tmp_line.logic_id << " " << tmp_line.store_id << std::endl;
-                               workplace->lista_lineas_in.push_back(tmp_line);
+                               if (workplace->get_item_id(otro) != -1) {
+                                       tmp_line.store_id = workplace->get_item_id(otro);
+                                       std::cout << otro << " se conecta a una compuerta" << std::endl;
+                                       workplace->lista_lineas_in.push_back(tmp_line);
+                               } else {
+                                       /* Como no era un item, debe ser una compuerta */
+                                       tmp_line.store_id = workplace->get_logic_id(otro);
+                                       workplace->lista_lineas_logic.push_back(tmp_line);
+                               }
                        } else if (xmlStrcmp(nodo->name, BAD_CAST"entrada")==0) {
                                otro = (char *)XML_GET_CONTENT(nodo->children);
                                t_line tmp_line;
                                tmp_line.logic_id = logic_id;
-                               tmp_line.store_id = workplace->get_item_id(otro);
-                               workplace->lista_lineas_out.push_back(tmp_line);
-                               std::cout << otro << " " << tmp_line.logic_id << " " << tmp_line.store_id << std::endl;
+                               if (workplace->get_item_id(otro) != -1) {
+                                       tmp_line.store_id = workplace->get_item_id(otro);
+                                       /* Tengo que ver si es un tanque, para setearlo correctamente */
+                                       if (dynamic_cast<Cistern *>(workplace->get_item(workplace->get_item_id(otro)))) {
+                                               std::string donde = (char *)xmlGetProp(nodo, BAD_CAST"id");
+                                               tmp_line.cistern_out1 = true;
+                                               if (donde == "inferior") {
+                                                       tmp_line.cistern_out1 = false;
+                                               }
+                                       }
+                                       workplace->lista_lineas_out.push_back(tmp_line);
+                                       std::cout << otro << " se conecta a una compuerta" << std::endl;
+                               } else {
+                                       /* Como no era un item, debe ser una compuerta */
+                                       tmp_line.store_id = workplace->get_logic_id(otro);
+                                       workplace->lista_lineas_logic.push_back(tmp_line);
+                               }
                        }
                }
                nodo = nodo->next;