]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
* Se agrega carga de una planta desde un XML (Archivo->Abrir)
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 18 Nov 2003 19:57:14 +0000 (19:57 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 18 Nov 2003 19:57:14 +0000 (19:57 +0000)
* 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 :-)

18 files changed:
Constructor/dialogs/constructor.glade
Constructor/include/cistern.h
Constructor/include/conduct.h
Constructor/include/constructor.h
Constructor/include/drain.h
Constructor/include/exclusa.h
Constructor/include/item.h
Constructor/include/pump.h
Constructor/include/splitter.h
Constructor/include/union.h
Constructor/src/cistern.cpp
Constructor/src/conduct.cpp
Constructor/src/constructor.cpp
Constructor/src/drain.cpp
Constructor/src/exclusa.cpp
Constructor/src/pump.cpp
Constructor/src/splitter.cpp
Constructor/src/union.cpp

index 5deafe93ffa0ecb5938816ca03bc85d7a8bea9c5..70055b409358a0835990384bc8cc10c56a001494 100644 (file)
@@ -51,7 +51,7 @@
                      </child>
 
                      <child>
-                       <widget class="GtkImageMenuItem" id="open1">
+                       <widget class="GtkImageMenuItem" id="main_menu_open">
                          <property name="visible">True</property>
                          <property name="label">gtk-open</property>
                          <property name="use_stock">True</property>
                        </widget>
                      </child>
 
-                     <child>
-                       <widget class="GtkImageMenuItem" id="save_as1">
-                         <property name="visible">True</property>
-                         <property name="label">gtk-save-as</property>
-                         <property name="use_stock">True</property>
-                         <signal name="activate" handler="on_save_as1_activate" last_modification_time="Tue, 14 Oct 2003 11:17:30 GMT"/>
-                       </widget>
-                     </child>
-
                      <child>
                        <widget class="GtkMenuItem" id="separatormenuitem1">
                          <property name="visible">True</property>
   <property name="title" translatable="yes">Propiedades del Tanque</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">False</property>
   <property name="destroy_with_parent">False</property>
   <property name="has_separator">True</property>
   <property name="title" translatable="yes">Propiedades del </property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">False</property>
   <property name="destroy_with_parent">False</property>
   <property name="has_separator">True</property>
 
 <widget class="GtkFileSelection" id="file_selection">
   <property name="border_width">10</property>
-  <property name="title" translatable="yes">Select File</property>
+  <property name="title" translatable="yes">Guardar ...</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
   <property name="show_fileops">True</property>
   <property name="title" translatable="yes">Propiedades de la Exclusa</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">False</property>
   <property name="destroy_with_parent">False</property>
   <property name="has_separator">True</property>
   <property name="title" translatable="yes">Seleccionar Color</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">False</property>
   <property name="destroy_with_parent">False</property>
 
   <property name="title" translatable="yes">Propiedades de la Bomba</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
-  <property name="modal">False</property>
+  <property name="modal">True</property>
   <property name="resizable">False</property>
   <property name="destroy_with_parent">False</property>
   <property name="has_separator">True</property>
   </child>
 </widget>
 
+<widget class="GtkFileSelection" id="file_open_selection">
+  <property name="border_width">10</property>
+  <property name="title" translatable="yes">Abrir ...</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
+  <property name="modal">True</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="show_fileops">True</property>
+
+  <child internal-child="cancel_button">
+    <widget class="GtkButton" id="cancel_button2">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+    </widget>
+  </child>
+
+  <child internal-child="ok_button">
+    <widget class="GtkButton" id="ok_button2">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+    </widget>
+  </child>
+</widget>
+
 </glade-interface>
index 84ddc20a400031b9f8033871e2df105c0f5facc0..87b6ef6d7f4440c60576a99922f1826470247c4f 100644 (file)
@@ -10,7 +10,7 @@ class Cistern : public CItem {
        public:
                /**Constructor
                */
-               Cistern();
+               Cistern(int orientacion=0);
                /**Destructor
                */
                virtual ~Cistern();
index 10d4270c25d76f61d1e303ee7e1442151a3bb3fb..02682dbe56cd0f6c1aa0821b3826b8d9eed3097e 100644 (file)
@@ -6,7 +6,7 @@
 class Conduct : public CItem {
        public:
                ///Constructor
-               Conduct();
+               Conduct(int orientacion=0);
                ///Destructor
                virtual ~Conduct();
                ///Funciones redefinidas de CItem
index b406ce5c376bb0bf5fab829fa56438d64da675a7..ecc6fe7feaf0e78f429afee62ebd1576fc7c08b6 100644 (file)
@@ -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<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
        virtual void on_btn_not_drag_get(const Glib::RefPtr<Gdk::DragContext>& 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<Gdk::DragContext>& context);
        virtual void on_y_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
@@ -86,5 +90,14 @@ class Constructor : public Gtk::Window {
        virtual void on_item_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
 
        virtual void on_item_drop_drag_received(const Glib::RefPtr<Gdk::DragContext>& 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
index 697a2172ad7b146ec7b69abfc8eb54d35b7904c3..a13b440096a76ae5f28f96b9d2c2aea05bace9a7 100644 (file)
@@ -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();
index a34704a5f9eaff3cd756ffdad543eea13487d49c..016b77e648af72a7ca7041c0985fb9c4ff841126 100644 (file)
@@ -9,7 +9,7 @@ class Exclusa : public CItem {
        public:
                /**Constructor
                */
-               Exclusa();
+               Exclusa(int orientacion=0);
                /**Destructor
                */
                virtual ~Exclusa();
index 34f9ecd770831ea1008528f713178399a95c21cb..5db334182c026d25382d2b030317c08cedacf441 100644 (file)
@@ -131,6 +131,8 @@ public:
         *excepto el tanque que seria derecha-izquierda.
         */                                                             
        std::vector<Connector> 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;
index 488d4953e7e8e581cd0f525e5760fc95f3d4aa96..514548c12e1a54955d7380f04fb22f04f0806aee 100644 (file)
@@ -9,7 +9,7 @@ class PumpPtyWnd;
 class Pump : public CItem {
        public:
                ///Constructor
-               Pump();
+               Pump(int orientacion=0);
                ///Destructor
                virtual ~Pump();
                ///Funciones redefinidas de CItem
index 500aaca3d0a6f978ae839822486cc386f48e00b1..ac05a36cb3820b91de3749086a07b50868a235ab 100644 (file)
@@ -7,7 +7,7 @@ class Splitter : public CItem {
        public:
                /**Constructor
                */
-               Splitter();
+               Splitter(int orientacion=0);
                /**Destructor
                */
                virtual ~Splitter();
index e7975b18d70cf2d5245acfe05f35a0f79f223737..f0f1e9acaf610f0394b37d832512eae66dfdbc92 100644 (file)
@@ -8,7 +8,7 @@ class Union : public CItem {
        public:
                /**Constructor
                */
-               Union();
+               Union(int orientacion=0);
                /**Destructor
                */
                virtual ~Union();
index 6cb0323f2eaa8d38b9a501f15d5b828cf0742e64..a03d3bed1e381929d007d9745003bdf559aebf22 100644 (file)
@@ -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<Gnome::Glade::Xml> ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "cistern_pty_wnd");
index c3557dc087e4fe656ef4b7e43a6b304c5c823aa4..f753a67bb398db155ebd46fee99623bd7d114322 100644 (file)
@@ -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";
index 1dcc0074b15771bb6bcd8fad69158c6aa7d8a55a..212057390590a412b4726dd63fefbcc1ab4c0393 100644 (file)
@@ -28,9 +28,11 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glad
        refGlade->get_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::RefPtr<Gnome::Glad
        chk_btn_logica->signal_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<CItem *>::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;
+}
+
index 1fe84eb305b424a8e4f7a9806863efadb315d084..9eefcefefbf280801c5328e0542f6cfc818e229e 100644 (file)
@@ -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;
index 69eef26148049849ae7dcbff1ccc774815b6886a..4d079948219ca7a4e843bc5d1ecfde3201988c5c 100644 (file)
@@ -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<Gnome::Glade::Xml> ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "exclusa_pty_wnd");
index 629f3924fe0786512242c2b389b69f51b06fe9e0..e2510f6081279d2ca4bf2139bb303d36652f7375 100644 (file)
@@ -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<Gnome::Glade::Xml> ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "pump_pty_wnd");
index 0ca5af6ec9835be22aeb81dc6d680d459f44ec32..45d60ce731b214468499ac916766c600bf429a0c 100644 (file)
@@ -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";
index b10ea1287ef6d25d53f6aef7eda66ce056f4f064..d130c7a517386aff9137a66ebb26c787a24b88d1 100644 (file)
@@ -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;