From: Ricardo Markiewicz Date: Tue, 18 Nov 2003 19:57:14 +0000 (+0000) Subject: * Se agrega carga de una planta desde un XML (Archivo->Abrir) X-Git-Tag: svn_import~262 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/f85e6b00bd29ddff6067db8c6d4c56f53bcf4c0b * Se agrega carga de una planta desde un XML (Archivo->Abrir) * Se saca el menu Guardar Como * Se hacen todos los dialogos Modal TODO : * cargar el color de la bomba y el tanque desde el XML * eliminar la planta actual cuando se abre una nueva (para que no quede basura) * Poner cartelitos de "Uds no ha salvado su trabajo pedaso de idiota, desea hacerlo ahora?" * Seguro que algo se me escapa ahora :-) --- diff --git a/Constructor/dialogs/constructor.glade b/Constructor/dialogs/constructor.glade index 5deafe9..70055b4 100644 --- a/Constructor/dialogs/constructor.glade +++ b/Constructor/dialogs/constructor.glade @@ -51,7 +51,7 @@ - + True gtk-open True @@ -68,15 +68,6 @@ - - - True - gtk-save-as - True - - - - True @@ -707,7 +698,7 @@ Propiedades del Tanque GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True False False True @@ -959,7 +950,7 @@ Propiedades del GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True False False True @@ -1205,10 +1196,10 @@ 10 - Select File + Guardar ... GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True True False True @@ -1303,7 +1294,7 @@ Propiedades de la Exclusa GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True False False True @@ -1509,7 +1500,7 @@ Seleccionar Color GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True False False @@ -1557,7 +1548,7 @@ Propiedades de la Bomba GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER - False + True False False True @@ -1760,4 +1751,33 @@ + + 10 + Abrir ... + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER + True + True + False + True + + + + True + True + True + GTK_RELIEF_NORMAL + + + + + + True + True + True + GTK_RELIEF_NORMAL + + + + diff --git a/Constructor/include/cistern.h b/Constructor/include/cistern.h index 84ddc20..87b6ef6 100644 --- a/Constructor/include/cistern.h +++ b/Constructor/include/cistern.h @@ -10,7 +10,7 @@ class Cistern : public CItem { public: /**Constructor */ - Cistern(); + Cistern(int orientacion=0); /**Destructor */ virtual ~Cistern(); diff --git a/Constructor/include/conduct.h b/Constructor/include/conduct.h index 10d4270..02682db 100644 --- a/Constructor/include/conduct.h +++ b/Constructor/include/conduct.h @@ -6,7 +6,7 @@ class Conduct : public CItem { public: ///Constructor - Conduct(); + Conduct(int orientacion=0); ///Destructor virtual ~Conduct(); ///Funciones redefinidas de CItem diff --git a/Constructor/include/constructor.h b/Constructor/include/constructor.h index b406ce5..ecc6fe7 100644 --- a/Constructor/include/constructor.h +++ b/Constructor/include/constructor.h @@ -24,6 +24,7 @@ #include "and.h" #include "or.h" #include "not.h" +#include "libxml/parser.h" class Constructor : public Gtk::Window { public: @@ -35,10 +36,10 @@ class Constructor : public Gtk::Window { int id; // / defino los elementos de la ventana. Gtk::Button *btn_canio, *btn_codo, *btn_y, *btn_tanque, *btn_bomba, *btn_exclusa, *btn_drain, *btn_file_ok, *btn_file_cancel, *btn_check, *btn_dlg_close, - *btn_and, *btn_or, *btn_not; - Gtk::ImageMenuItem *main_menu_quit, *edit_menu_del, *main_menu_save; + *btn_and, *btn_or, *btn_not, *btn_open_ok, *btn_open_cancel; + Gtk::ImageMenuItem *main_menu_quit, *edit_menu_del, *main_menu_save, *main_menu_open; Gtk::CheckButton *chk_btn_logica; - Gtk::FileSelection *file_selection; + Gtk::FileSelection *file_selection, *file_open_selection; Gtk::Entry *combo_entry; Gtk::Dialog *dlg_connect; Gtk::Label *dlg_label; @@ -62,14 +63,17 @@ class Constructor : public Gtk::Window { virtual void on_btn_or_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_btn_not_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_main_menu_quit(); + virtual void on_main_menu_open(); virtual void on_main_menu_save(); virtual void on_edit_menu_del(); virtual void on_chk_btn_clicked(); + virtual void on_btn_open_cancel_clicked(); virtual void on_btn_file_ok_clicked(); virtual void on_btn_file_cancel_clicked(); virtual void on_btn_check_clicked(); virtual void on_btn_dlg_connect_clicked(); - + virtual void on_load_from_xml(); + // señales para cambiar el icono. virtual void on_canio_drag_begin(const Glib::RefPtr& context); virtual void on_y_drag_begin(const Glib::RefPtr& context); @@ -86,5 +90,14 @@ class Constructor : public Gtk::Window { virtual void on_item_drag_data_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_item_drop_drag_received(const Glib::RefPtr& context, int x, int y, GtkSelectionData* selection_data, guint info, guint time); + + // Carga desde un XML + Pump *loadBomba(xmlNodePtr nodo); + Conduct *loadConduct(xmlNodePtr nodo); + Exclusa *loadExclusa(xmlNodePtr nodo); + Cistern *loadTank(xmlNodePtr nodo); + Union *loadUnion(xmlNodePtr nodo); + Drain *loadDrain(xmlNodePtr nodo); + Splitter *loadCodo(xmlNodePtr nodo); }; #endif diff --git a/Constructor/include/drain.h b/Constructor/include/drain.h index 697a217..a13b440 100644 --- a/Constructor/include/drain.h +++ b/Constructor/include/drain.h @@ -7,7 +7,7 @@ class Drain : public CItem { public: - Drain(); + Drain(int orientacion=0); virtual ~Drain(); virtual bool on_button_press_event(GdkEventButton *event); virtual void on_menu_popup_rotar(); diff --git a/Constructor/include/exclusa.h b/Constructor/include/exclusa.h index a34704a..016b77e 100644 --- a/Constructor/include/exclusa.h +++ b/Constructor/include/exclusa.h @@ -9,7 +9,7 @@ class Exclusa : public CItem { public: /**Constructor */ - Exclusa(); + Exclusa(int orientacion=0); /**Destructor */ virtual ~Exclusa(); diff --git a/Constructor/include/item.h b/Constructor/include/item.h index 34f9ecd..5db3341 100644 --- a/Constructor/include/item.h +++ b/Constructor/include/item.h @@ -131,6 +131,8 @@ public: *excepto el tanque que seria derecha-izquierda. */ std::vector connect_vec; + + void set_img_actual(int i) { imgActual = i; } protected: ///Indica el numero que le corresponde a la imagen actual del item. int imgActual; diff --git a/Constructor/include/pump.h b/Constructor/include/pump.h index 488d495..514548c 100644 --- a/Constructor/include/pump.h +++ b/Constructor/include/pump.h @@ -9,7 +9,7 @@ class PumpPtyWnd; class Pump : public CItem { public: ///Constructor - Pump(); + Pump(int orientacion=0); ///Destructor virtual ~Pump(); ///Funciones redefinidas de CItem diff --git a/Constructor/include/splitter.h b/Constructor/include/splitter.h index 500aaca..ac05a36 100644 --- a/Constructor/include/splitter.h +++ b/Constructor/include/splitter.h @@ -7,7 +7,7 @@ class Splitter : public CItem { public: /**Constructor */ - Splitter(); + Splitter(int orientacion=0); /**Destructor */ virtual ~Splitter(); diff --git a/Constructor/include/union.h b/Constructor/include/union.h index e7975b1..f0f1e9a 100644 --- a/Constructor/include/union.h +++ b/Constructor/include/union.h @@ -8,7 +8,7 @@ class Union : public CItem { public: /**Constructor */ - Union(); + Union(int orientacion=0); /**Destructor */ virtual ~Union(); diff --git a/Constructor/src/cistern.cpp b/Constructor/src/cistern.cpp index 6cb0323..a03d3be 100644 --- a/Constructor/src/cistern.cpp +++ b/Constructor/src/cistern.cpp @@ -1,13 +1,20 @@ #include "cistern.h" #include "cisternptywnd.h" -Cistern::Cistern() +Cistern::Cistern(int orientacion) { imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/tanque_e.png"); imageO = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/tanque_o.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/tanque_null.png"); - imgActual = 0; - image = imageE; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageO; + break; + default: + imgActual = 0; + image = imageE; + } set_size_request(image->get_width(), image->get_height()); Glib::RefPtr ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "cistern_pty_wnd"); diff --git a/Constructor/src/conduct.cpp b/Constructor/src/conduct.cpp index c3557dc..f753a67 100644 --- a/Constructor/src/conduct.cpp +++ b/Constructor/src/conduct.cpp @@ -1,12 +1,19 @@ #include "conduct.h" -Conduct::Conduct() +Conduct::Conduct(int orientacion) { imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/canio_n.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/canio_s.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/null.png"); - imgActual = 0; - image = imageN; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageS; + break; + default: + imgActual = 0; + image = imageN; + } set_size_request(image->get_width(), image->get_height()); property_wnd->set_title("Propiedades del Tubo"); name="tubo"; diff --git a/Constructor/src/constructor.cpp b/Constructor/src/constructor.cpp index 1dcc007..2120573 100644 --- a/Constructor/src/constructor.cpp +++ b/Constructor/src/constructor.cpp @@ -28,9 +28,11 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtrget_widget("btn_or", btn_or); refGlade->get_widget("btn_not", btn_not); refGlade->get_widget("main_menu_quit",main_menu_quit); + refGlade->get_widget("main_menu_open",main_menu_open); refGlade->get_widget("main_menu_save",main_menu_save); refGlade->get_widget("edit_menu_del",edit_menu_del); refGlade->get_widget("chk_btn_logica",chk_btn_logica); + refGlade->get_widget("file_open_selection",file_open_selection); refGlade->get_widget("file_selection",file_selection); refGlade->get_widget("combo_entry",combo_entry); refGlade->get_widget("btn_check",btn_check); @@ -72,14 +74,20 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtrsignal_clicked().connect(SigC::slot(*this, &Constructor::on_chk_btn_clicked)); main_menu_quit->signal_activate().connect(SigC::slot(*this, &Constructor::on_main_menu_quit)); + main_menu_open->signal_activate().connect(SigC::slot(*this, &Constructor::on_main_menu_open)); main_menu_save->signal_activate().connect(SigC::slot(*this, &Constructor::on_main_menu_save)); edit_menu_del->signal_activate().connect(SigC::slot(*this,&Constructor::on_edit_menu_del)); btn_file_cancel = file_selection->get_cancel_button(); btn_file_ok = file_selection->get_ok_button(); - btn_file_cancel->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_file_cancel_clicked)); btn_file_ok->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_file_ok_clicked)); + btn_file_cancel->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_file_cancel_clicked)); + btn_open_cancel = file_open_selection->get_cancel_button(); + btn_open_ok = file_open_selection->get_ok_button(); + btn_open_ok->signal_clicked().connect(SigC::slot(*this,&Constructor::on_load_from_xml)); + btn_open_cancel->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_open_cancel_clicked)); + // Señales para cambiar el icono cuando empieza el drag. btn_canio->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_canio_drag_begin)); btn_y->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_y_drag_begin)); @@ -167,8 +175,15 @@ void Constructor::on_main_menu_quit() //hide(); } +void Constructor::on_main_menu_open() +{ + // Conecto el boton OK para llamar al cargar del XML + file_open_selection->show(); +} + void Constructor::on_main_menu_save() { + // Conecto el boton OK para llamar al salvar file_selection->show(); } @@ -191,6 +206,73 @@ void Constructor::on_chk_btn_clicked() logica = !logica; } +void Constructor::on_load_from_xml() +{ + std::string file_name = file_open_selection->get_filename(); + + /* Parseo de ejemplo de un XML desde archivo */ + xmlDocPtr document; + document = xmlParseFile(file_name.c_str()); + if (document == NULL) { + // TODO : dar un aviso de que no se pudo abrir el archivo!! + return; + } + + /* bien, el archivo se parseo bien! */ + xmlNodePtr nodo, items; + nodo = document->children; + + // Recorro los items + CItem *current; + if (strcmp((char *)nodo->name, "planta") == 0) { + items = nodo->children; + while (items != NULL) { + current = NULL; + if (items->type == XML_ELEMENT_NODE) { + std::cout << "ITEM" << std::endl; + if (xmlStrcmp(items->name, BAD_CAST"bomba")==0) { + current = loadBomba(items); + } else if (xmlStrcmp(items->name, BAD_CAST"tubo")==0) { + current = loadConduct(items); + } else if (xmlStrcmp(items->name, BAD_CAST"codo")==0) { + current = loadCodo(items); + } else if (xmlStrcmp(items->name, BAD_CAST"exclusa")==0) { + current = loadExclusa(items); + } else if (xmlStrcmp(items->name, BAD_CAST"tanque")==0) { + current = loadTank(items); + } else if (xmlStrcmp(items->name, BAD_CAST"empalme")==0) { + current = loadUnion(items); + } else if (xmlStrcmp(items->name, BAD_CAST"drenaje")==0) { + current = loadDrain(items); + } + + if (current != NULL) { + // Agrego y conecto la bomba + listaItems.push_back(current); + current->drag_source_set(listTargets); + workplace->put(*current, current->get_position_x(), current->get_position_y()); + //Apunto al workplace + current->workplace= workplace; + //Apunto a la lista. + current->combo_entry = combo_entry; + //Apunto a la listaItems. + current->listaItems = &listaItems; + //Apunto a la lista de items logicos + current->lista_logic_Items = &lista_logic_Items; + // Conecto las señales + current->signal_drag_data_get().connect( SigC::slot(*this, &Constructor::on_item_drag_data_get)); + current->signal_drag_begin().connect(SigC::bind( SigC::slot(*this, &Constructor::on_item_drag_begin), current)); + current->show(); + } + } + items = items->next; + } + } else { + // TODO : avisar que el XML no es valido!! + } + std::cout << "CARGA COMPLETA" << std::endl; + file_open_selection->hide(); +} void Constructor::on_btn_file_ok_clicked() { std::list::iterator i = listaItems.begin(); @@ -215,6 +297,11 @@ void Constructor::on_btn_file_cancel_clicked() file_selection->hide(); } +void Constructor::on_btn_open_cancel_clicked() +{ + file_open_selection->hide(); +} + void Constructor::on_btn_dlg_connect_clicked() { dlg_connect->hide(); @@ -410,3 +497,234 @@ void Constructor::on_btn_check_clicked() dlg_connect->show(); } } + +Pump *Constructor::loadBomba(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + int orientacion=0, x, y; + float flujo; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"entrega") == 0) { + flujo = atof( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"color") == 0) { + // FIXME ! + } + } + nodo = nodo->next; + } + + Pump *p = new Pump(orientacion); + p->set_position(x,y); + p->set_entrega(flujo); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + + return p; +} + +Conduct *Constructor::loadConduct(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + int orientacion=0, x, y; + float flujo; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"caudal") == 0) { + flujo = atof( (char *)XML_GET_CONTENT(nodo->children) ); + } + } + nodo = nodo->next; + } + + Conduct *p = new Conduct(orientacion); + p->set_position(x,y); + p->set_caudal(flujo); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + + return p; +} + +Exclusa *Constructor::loadExclusa(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + std::string estado; + int orientacion=0, x, y; + float flujo; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"estado") == 0) { + estado = (char *)XML_GET_CONTENT(nodo->children); + } + } + nodo = nodo->next; + } + + Exclusa *p = new Exclusa(orientacion); + p->set_position(x,y); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + p->set_estado( estado == "1" ); + + return p; +} + +Cistern *Constructor::loadTank(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + int orientacion=0, x, y; + float liquido,capacidad; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"capacidad") == 0) { + 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) ); + } + } + nodo = nodo->next; + } + + Cistern *p = new Cistern(orientacion); + p->set_position(x,y); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + p->set_capacidad(capacidad); + p->set_contenido_inicial(liquido); + + return p; +} + +Union *Constructor::loadUnion(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + std::string tipo; + int orientacion=0, x, y; + float caudal; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"caudal") == 0) { + caudal = atof ((char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"tipo") == 0) { + tipo = (char *)XML_GET_CONTENT(nodo->children); + } + } + nodo = nodo->next; + } + + Union *p = new Union(orientacion); + p->set_position(x,y); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + p->set_caudal(caudal); + p->is_union = (tipo == "union"); + + return p; +} + +Drain *Constructor::loadDrain(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + int orientacion=0, x, y; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) { + y = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } + } + nodo = nodo->next; + } + + Drain *p = new Drain(orientacion); + p->set_position(x,y); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + + return p; +} + +Splitter *Constructor::loadCodo(xmlNodePtr nodo) +{ + std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); + std::string id = (char *)xmlGetProp(nodo, BAD_CAST"id"); + int orientacion=0, x, y; + float caudal; + + nodo = nodo->children; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) { + orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) { + x = atoi( (char *)XML_GET_CONTENT(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"caudal") == 0) { + caudal = atof( (char *)XML_GET_CONTENT(nodo->children) ); + } + } + nodo = nodo->next; + } + + Splitter *p = new Splitter(orientacion); + p->set_position(x,y); + p->set_id( atoi(id.c_str()) ); + p->set_name(name); + p->set_caudal(caudal); + + return p; +} + diff --git a/Constructor/src/drain.cpp b/Constructor/src/drain.cpp index 1fe84eb..9eefcef 100644 --- a/Constructor/src/drain.cpp +++ b/Constructor/src/drain.cpp @@ -1,14 +1,27 @@ #include "drain.h" -Drain::Drain() +Drain::Drain(int orientacion) { imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/drain_e.png"); imageO = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/drain_o.png"); imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/drain_n.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/drain_s.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/null.png"); - imgActual = 0; - image = imageN; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageE; + break; + case 2: + image = imageS; + break; + case 3: + image = imageO; + break; + default: + imgActual = 0; + image = imageN; + } set_size_request(image->get_width(), image->get_height()); property_wnd->item = this; property_wnd->lb_max_fluid->property_visible() = false; diff --git a/Constructor/src/exclusa.cpp b/Constructor/src/exclusa.cpp index 69eef26..4d07994 100644 --- a/Constructor/src/exclusa.cpp +++ b/Constructor/src/exclusa.cpp @@ -1,13 +1,20 @@ #include "exclusa.h" #include "exclusaptywnd.h" -Exclusa::Exclusa() +Exclusa::Exclusa(int orientacion) { imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/exclusa_h.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/exclusa_s.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/null.png"); - imgActual = 0; - image = imageN; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageS; + break; + default: + imgActual = 0; + image = imageN; + } set_size_request(image->get_width(), image->get_height()); Glib::RefPtr ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "exclusa_pty_wnd"); diff --git a/Constructor/src/pump.cpp b/Constructor/src/pump.cpp index 629f392..e2510f6 100644 --- a/Constructor/src/pump.cpp +++ b/Constructor/src/pump.cpp @@ -1,13 +1,20 @@ #include "pump.h" #include "pumpptywnd.h" -Pump::Pump() +Pump::Pump(int orientacion) { imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/bomba_e.png"); imageO = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/bomba_o.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/bomba_null.png"); - imgActual = 0; - image = imageE; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageO; + break; + default: + imgActual = 0; + image = imageE; + } set_size_request(image->get_width(), image->get_height()); Glib::RefPtr ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "pump_pty_wnd"); diff --git a/Constructor/src/splitter.cpp b/Constructor/src/splitter.cpp index 0ca5af6..45d60ce 100644 --- a/Constructor/src/splitter.cpp +++ b/Constructor/src/splitter.cpp @@ -1,14 +1,27 @@ #include "splitter.h" -Splitter::Splitter() +Splitter::Splitter(int orientacion) { imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_n.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_s.png"); imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_e.png"); imageO = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_o.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/null.png"); - imgActual = 0; - image = imageO; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageN; + break; + case 2: + image = imageE; + break; + case 3: + image = imageS; + break; + default: + imgActual = 0; + image = imageO; + } set_size_request(image->get_width(), image->get_height()); property_wnd->set_title("Propiedades del Codo"); name = "codo"; diff --git a/Constructor/src/union.cpp b/Constructor/src/union.cpp index b10ea12..d130c7a 100644 --- a/Constructor/src/union.cpp +++ b/Constructor/src/union.cpp @@ -1,14 +1,27 @@ #include "union.h" -Union::Union() +Union::Union(int orientacion) { imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/y_n.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/y_s.png"); imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/y_e.png"); imageO = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/y_o.png"); null = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/null.png"); - imgActual = 0; - image = imageN; + imgActual = orientacion; + switch (imgActual) { + case 1: + image = imageE; + break; + case 2: + image = imageS; + break; + case 3: + image = imageO; + break; + default: + imgActual = 0; + image = imageN; + } set_size_request(image->get_width(), image->get_height()); property_wnd->set_title("Propiedades del Empalme"); property_wnd->rd_btn_division->property_visible() = true;