]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
-Se conectan como trompada!!!!!
authorNicolás Dimov <ndimov@gmail.com>
Mon, 17 Nov 2003 21:36:50 +0000 (21:36 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Mon, 17 Nov 2003 21:36:50 +0000 (21:36 +0000)
-ahora voy a hacer que se tiren cablecitos entre las compuertas y los items (tanque, exclusa, y algo mas?)
-miren el xml que larga, y diganme que les parece.

17 files changed:
Constructor/cistern.cpp
Constructor/cistern.h
Constructor/conduct.cpp
Constructor/conduct.h
Constructor/constructor.cpp
Constructor/constructor.h
Constructor/drain.cpp
Constructor/exclusa.cpp
Constructor/exclusa.h
Constructor/item.cpp
Constructor/item.h
Constructor/or.cpp
Constructor/pump.h
Constructor/splitter.cpp
Constructor/splitter.h
Constructor/union.cpp
Constructor/union.h

index 198d94047c304a896f7df4fa381b055fc1026c60..433f03075005ab5d09b7dd30163bc8e43f384b89 100644 (file)
@@ -113,15 +113,8 @@ void Cistern::save(FILE *archivo)
 {
        char c_id[50], c_cap[50], c_x[50], c_y[50], c_img[50], c_ini[50], c_red[50], c_green[50], c_blue[50];
        Glib::ustring  con0, con1;
-       if (connect_vec[0].type == IN)
-               con0 = "\t\t\t<entrada>"+get_other_name(connect_vec[0].id_dest)+"</entrada>\n";
-       else
-               con0 = "\t\t\t<salida>"+get_other_name(connect_vec[0].id_dest)+"</salida>\n";
-       if (connect_vec[1].type == IN) 
-               con1 = "\t\t\t<entrada>"+get_other_name(connect_vec[1].id_dest)+"</entrada>\n";
-       else 
-               con1 = "\t\t\t<salida>"+get_other_name(connect_vec[1].id_dest)+"</salida>\n";
-       
+       con0 = "\t\t\t<entrada>"+get_other_name(connect_vec[0].id_dest)+"</entrada>\n";
+       con1 = "\t\t\t<salida>"+get_other_name(connect_vec[1].id_dest)+"</salida>\n";
        sprintf(c_red,"\t\t\t<rojo>%d</rojo>\n",liquid_color.get_red());
        sprintf(c_green,"\t\t\t<verde>%d</verde>\n",liquid_color.get_green());
        sprintf(c_blue,"\t\t\t<azul>%d</azul>\n",liquid_color.get_blue());
@@ -156,12 +149,12 @@ bool Cistern::check_connection()
        ConnectorType temp0, temp1;
        switch (get_img_actual()) {
                case 0:
-                       temp0 = is_other_connection_area( get_position_x()+get_image()->get_width() + 5 , get_position_y()+get_image()->get_height() -16, &_item);
-                       temp1 = is_other_connection_area( get_position_x() + 16, get_position_y() - 5, &_item1);
+                       temp0 = is_other_connection_area( get_position_x() + 16, get_position_y() - 5, &_item);//arriba - entrada
+                       temp1 = is_other_connection_area( get_position_x()+get_image()->get_width() + 5 , get_position_y()+get_image()->get_height() -16, &_item1);//abajo - salida             
                        break;
                case 1:
-                       temp0 = is_other_connection_area( get_position_x() -5, get_position_y()+get_image()->get_height()-16, &_item);
-                       temp1 = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() - 5, &_item1);
+                       temp0 = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() - 5, &_item);//arriba - entrada
+                       temp1 = is_other_connection_area( get_position_x() -5, get_position_y()+get_image()->get_height()-16, &_item1); //abajo - salida
        }
        if (temp0 == OUT && temp1 == IN) { 
                connect_vec[0].id_dest = _item->get_id();
@@ -174,14 +167,14 @@ bool Cistern::check_connection()
 ConnectorType Cistern::get_connector_type(int _a, int _b)
 {
        switch (imgActual) {
-               case 0: if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+10)&&(_b > y) )
+               case 0: if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+10)&&(_b > y) )//arriba
                                                return connect_vec[0].type;
-                                       if ( (_a <= x+image->get_width()-1)&&(_a >=x+image->get_width()-10)&&(_b<=y+image->get_height()-10)&&(_b >=y+image->get_height()-22) )
+                                       if ( (_a <= x+image->get_width()-1)&&(_a >=x+image->get_width()-10)&&(_b<=y+image->get_height()-10)&&(_b >=y+image->get_height()-22) )//abajo
                                                return connect_vec[1].type;
                                        break;
-               case 1: if ( (_a <= x+image->get_width()-10)&&(_a>=x+image->get_width()-22)&&(_b<=y+10)&&(_b > y) )
+               case 1: if ( (_a <= x+image->get_width()-10)&&(_a>=x+image->get_width()-22)&&(_b<=y+10)&&(_b > y) )//arriba
                                                return connect_vec[0].type;
-                                       if ( (_a <= x +10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b >=y+image->get_height()-22) )
+                                       if ( (_a <= x +10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b >=y+image->get_height()-22) )//abajo
                                                return connect_vec[1].type;
        }
        return UNDEF;
index 330d239a9db72f6df25e0db5c55e54d156e02842..84ddc20a400031b9f8033871e2df105c0f5facc0 100644 (file)
@@ -8,27 +8,52 @@ class CisternPtyWnd;
 
 class Cistern : public CItem {
        public:
+               /**Constructor
+               */
                Cistern();
+               /**Destructor
+               */
                virtual ~Cistern();
+               /**Redefiniciones de las funciones de CItem
+               */
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               
+               /** Funciones para obtener y setear los atributos del Tanque
+               */
                void set_capacidad(double _cap);
                void set_contenido_inicial(double _ini);
                void set_liquid_color(Gdk::Color _color);
                double get_contenido_inicial();
                double get_capacidad();
                Gdk::Color get_liquid_color();
+               /**El item se guarda en formato xml en el archivo pasado por parametro
+               */
                virtual void save(FILE *archivo);
+               /**Verifica si en sus conectores hay alguien conectado, y que tipo de conexion tiene para ver si es compatible con El. 
+               */
                virtual bool check_connection();
+               /**Pone sus conectores por defecto
+               */
                virtual void set_default_connector();
+               /**Devuelve el tipo de conector que posee en las coordenadas (_a, _b) segun su orientacion
+               */
                virtual ConnectorType get_connector_type(int _a, int _b);       
        protected:
+               /**Atributos que definen su comportamiento
+               */
                double capacidad, contenido_inicial;
+               /**Color del liquido almacenado
+               */
+               Gdk::Color liquid_color;
+               /**Imagenes en sus 2 posiciones
+               */
                Glib::RefPtr<Gdk::Pixbuf> imageE; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageO; // 1
                Glib::RefPtr<Gdk::Pixbuf> null; 
-               Gdk::Color liquid_color;
+               /**Puntero a la ventana de propiedades
+               */
                CisternPtyWnd *cistern_pty_wnd;
 };
 #endif
index b286e684ef6968c109f5c362ea353bc64586d285..2493f32a24fc3506ca94d14c9e1f7353fd80e696 100644 (file)
@@ -104,6 +104,7 @@ void Conduct::save(FILE *archivo)
 
 bool Conduct::check_connection()
 {
+       ConnectorType aux;
        CItem *_item0, *_item1;
        switch (get_img_actual()) {
                        case 0:
@@ -115,6 +116,9 @@ bool Conduct::check_connection()
                                connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+16, &_item1);
        }
        if ( connect_vec[0].type != UNDEF && connect_vec[1].type != UNDEF ) {
+               aux = connect_vec[0].type; 
+               connect_vec[0].type = connect_vec[1].type;
+               connect_vec[1].type = aux;
                connect_vec[0].id_dest = _item0->get_id();
                connect_vec[1].id_dest = _item1->get_id();
                return ( is_connected = (connect_vec[0].type != connect_vec[1].type) );
index 3ba3ab6ee072b122bd2d8f5851f64256e4a6cbd4..10d4270c25d76f61d1e303ee7e1442151a3bb3fb 100644 (file)
@@ -5,16 +5,24 @@
 
 class Conduct : public CItem {
        public:
+               ///Constructor
                Conduct();
+               ///Destructor
                virtual ~Conduct();
+               ///Funciones redefinidas de CItem
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               ///El item se guarda en formato xml en el archivo pasado por parametro
                virtual void save(FILE *archivo);
+               ///Verifica sus conectores, evaluando si son compatibles con los del item conectado
                virtual bool check_connection();
+               ///Pone sus conectores en el valor por defecto
                virtual void set_default_connector();
+               ///Devuelve el tipo de conector que posee en las coordenadas (_a,_b) segun su orientacion
                virtual ConnectorType get_connector_type(int _a, int _b);
        private:
+               ///Imagenes en sus 2 posiciones
                Glib::RefPtr<Gdk::Pixbuf> imageN; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
                Glib::RefPtr<Gdk::Pixbuf> null; 
index 4b26ee4364ff3fb9666d8cb63ff4f3da3cd6bbed..241abdb3f2d6f1627e74da12df3fec259901fe96 100644 (file)
@@ -387,6 +387,7 @@ void Constructor::on_btn_check_clicked()
        if ( !listaItems.empty() ) {
                while ( i != listaItems.end() ) {
                        CItem *temp = *i;
+                       std::cout<< "item="<<temp->get_name()<<" "<<"check= "<<temp->check_connection()<<std::endl;
                        if ( !temp->check_connection() ) {
                                dlg_connect->set_title("Error");
                                dlg_label->set_text("Los elementos no estan conectados\n\t\tcorrectamente");
index aa15f54020d5df1cc99bda0d8b0845fbd2b62365..64f8a06de5f81665af89df9e3def106f5f047d15 100644 (file)
@@ -1,4 +1,3 @@
-// ventana principal
 #ifndef  _CONSTRUCTOR_H_
 #define _CONSTRUCTOR_H_
 
index 76f15a28a45782362013fa13bfe257b4fa496491..3625677a1638db537e082d23fce42d4e6f703366 100644 (file)
@@ -122,6 +122,7 @@ bool Drain::check_connection()
                connect_vec[0].id_dest = _item0->get_id();
                return is_connected;
        }
+       std::cout<<"conector dest ="<<temp<<std::endl;
        return is_connected;
 }
 
index 4035ad704609d055cad2e96d9919ee3e4bda6c50..f615e4de0ada37a269ab2cae145ae6d366ae7d81 100644 (file)
@@ -122,17 +122,21 @@ void Exclusa::save(FILE *archivo)
 
 bool Exclusa::check_connection()
 {
+       ConnectorType aux;
        CItem *_item0, *_item1;
        switch (get_img_actual()) {
                        case 0:
-                               connect_vec[0].type =  is_other_connection_area( get_position_x()+16, get_position_y()-5, &_item0);
-                               connect_vec[1].type = is_other_connection_area( get_position_x()+16, get_position_y()+get_image()->get_height() +5, &_item1);
+                               connect_vec[0].type = is_other_connection_area( get_position_x()-5, get_position_y()+16, &_item0); //izquierda
+                               connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+16,& _item1); //derecha
                        break;          
                        case 1:
-                               connect_vec[0].type = is_other_connection_area( get_position_x()-5, get_position_y()+16, &_item0);
-                               connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+16,& _item1);
+                               connect_vec[0].type =  is_other_connection_area( get_position_x()+16, get_position_y()-5, &_item0); // arriba
+                               connect_vec[1].type = is_other_connection_area( get_position_x()+16, get_position_y()+get_image()->get_height() +5, &_item1); //abajo
        }
        if ( connect_vec[0].type != UNDEF && connect_vec[1].type != UNDEF ) {
+               aux = connect_vec[0].type; 
+               connect_vec[0].type = connect_vec[1].type;
+               connect_vec[1].type = aux;
                connect_vec[0].id_dest = _item0->get_id();
                connect_vec[1].id_dest = _item1->get_id();
                return ( is_connected = (connect_vec[0].type != connect_vec[1].type) );
@@ -146,29 +150,29 @@ ConnectorType Exclusa::get_connector_type(int _a, int _b)
        if ( ! is_connected ) {
                switch (imgActual) {
                        case 0:
-                               if ( (_a <= x+image->get_width()-10 )&&(_a >= x + 10) && (_b <= y+10) &&(_b > 0 ) )  //arriba
-                                       return is_other_connection_area(get_position_x()+16, get_position_y()+get_image()->get_height() +5, &_item); //pregunto que hay abajo
-                               if ((_a <= x+22 )&&(_a >= x + 10) && (_b <= y+image->get_height()-1) &&(_b >= y+image->get_height()-10 ))//abajo
-                                       return is_other_connection_area( get_position_x()+16, get_position_y()-5, &_item);//pregunto que hay arriba.
-                               break;
-                       case 1: 
                                if ((_a <= x+10 )&&(_a > 0) && (_b <= y+image->get_height()-10) &&(_b >= y+10 )) //izquierda
                                        return is_other_connection_area(get_position_x()+get_image()->get_width()+5, get_position_y()+16, &_item);//pregunto por la derecha
                                if ((_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <= y+image->get_height()-10) &&(_b >= y +10 )) //derecha
                                        return is_other_connection_area(get_position_x()-5, get_position_y()+16, &_item); //pregunto por la izquierda.
+                               break;
+                       case 1: 
+                               if ( (_a <= x+image->get_width()-10 )&&(_a >= x + 10) && (_b <= y+10) &&(_b > 0 ) )  //arriba
+                                       return is_other_connection_area(get_position_x()+16, get_position_y()+get_image()->get_height() +5, &_item); //pregunto que hay abajo
+                               if ((_a <= x+22 )&&(_a >= x + 10) && (_b <= y+image->get_height()-1) &&(_b >= y+image->get_height()-10 ))//abajo
+                                       return is_other_connection_area( get_position_x()+16, get_position_y()-5, &_item);//pregunto que hay arriba.
                }
        } else {
                switch (imgActual) {
                        case 0: 
-                               if ( (_a <= x+image->get_width()-10 )&&(_a >= x + 10) && (_b <= y+10) &&(_b > 0 ) ) //arriba
+                               if ((_a <= x+10 )&&(_a > 0) && (_b <= y+image->get_height()-10) &&(_b >= y+10 )) //izquierda
                                        return connect_vec[0].type;
-                               if ((_a <= x+22 )&&(_a >= x + 10) && (_b <= y+image->get_height()-1) &&(_b >= y+image->get_height()-10 )) //abajo
+                               if ((_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <= y+image->get_height()-10) &&(_b >= y +10 )) //derecha
                                        return connect_vec[1].type;
                                break;
                        case 1:
-                               if ((_a <= x+10 )&&(_a > 0) && (_b <= y+image->get_height()-10) &&(_b >= y+10 )) //izquierda
+                               if ( (_a <= x+image->get_width()-10 )&&(_a >= x + 10) && (_b <= y+10) &&(_b > 0 ) ) //arriba
                                        return connect_vec[0].type;
-                               if ((_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <= y+image->get_height()-10) &&(_b >= y +10 )) //derecha
+                               if ((_a <= x+22 )&&(_a >= x + 10) && (_b <= y+image->get_height()-1) &&(_b >= y+image->get_height()-10 )) //abajo
                                        return connect_vec[1].type;
                }
        }
index 5ea2ddd64fffe33298ccc7ea9177a68a2866f9c8..a34704a5f9eaff3cd756ffdad543eea13487d49c 100644 (file)
@@ -7,22 +7,44 @@ class ExclusaPtyWnd;
 
 class Exclusa : public CItem {
        public:
+               /**Constructor
+               */
                Exclusa();
+               /**Destructor
+               */
                virtual ~Exclusa();
+               /**Funciones redefinidas de CItem
+               */
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               /**El item se guarda en formato xml en el archivo pasado por parametro
+               */
                virtual void save(FILE *archivo);
+               /**Verifica sus conectores, y pregunta en sus extremos para saber como setearse.
+               */              
                virtual bool check_connection();
+               /**Pone sus conectores por defecto
+               */
                virtual void set_default_connector();
+               /**Devuelve el tipo de conector que posee en las coordenadas (_a, _b) segun su orientacion
+               */
                virtual ConnectorType get_connector_type(int _a, int _b);
+               /**Funciones para obtener y setear sus propiedades
+               */
                void set_estado(bool _state);
                bool get_estado();
        private:
+               /**Imagenes en sus 2 posiciones
+               */
                Glib::RefPtr<Gdk::Pixbuf> imageN; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
                Glib::RefPtr<Gdk::Pixbuf> null; 
+               /**Puntero a la ventana de propiedades
+               */
                ExclusaPtyWnd *exclusa_pty_wnd;
+               /** Abierto = true, Cerrado = false.
+               */
                bool estado;
 };
 #endif
index 4bec05d93d57dcc623d4e12b1152914f63075e93..cd53614c6eb486539519bc0374fecf076217eb47 100644 (file)
@@ -20,11 +20,10 @@ CItem::CItem()
        menu_image_delete.set(Gtk::Stock::CANCEL, Gtk::ICON_SIZE_MENU);
        menu_image_rotar.set(Gtk::Stock::REFRESH, Gtk::ICON_SIZE_MENU);
        menu_image_linea.set(Gtk::Stock::CONVERT, Gtk::ICON_SIZE_MENU);
-       Gtk::Menu::MenuList& menulist = menu_popup.items();
+       menulist = menu_popup.items();
     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Propiedades",menu_image_propiedades, SigC::slot(*this, &CItem::on_menu_popup_propiedades) ) );
     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Rotar", menu_image_rotar ,SigC::slot(*this, &CItem::on_menu_popup_rotar) ) );
     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Eliminar", menu_image_delete,SigC::slot(*this, &CItem::on_menu_popup_eliminar) ) ) ;
-       menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Conectar", menu_image_linea,SigC::slot(*this, &CItem::on_menu_popup_conectar) ) ) ;
        menu_popup.accelerate(*this);
 }
 
index 64c504904e67d292e48c20d78f0762cb0fe2e018..87ddb0190000cb8ef538ca3d7af7b5c20d56b96a 100644 (file)
 #include <gtkmm/entry.h>
 #include "itemptywnd.h"
 
-typedef enum { NONE, RIGHT, LEFT, MIDDLE } ConnectorSide;
+///Tipo de estado en el que pueden estar los conectores de un item
 typedef enum { UNDEF, IN, OUT } ConnectorType;
 
+///Clase que define un conector del item
 class Connector {
        public: 
+               ///Numero que identifica con quien esta conectado
                int id_dest;
+               ///Tipo de conector
                ConnectorType type;
+               ///Sobrecarga del operador = para poder realizar asignaciones entre dos instancias de Connector
                Connector& operator= (Connector & c) {
                        id_dest = c.id_dest;
                        type = c.type;
@@ -29,15 +33,33 @@ class WorkPlace;
        
 class CItem:public Gtk::DrawingArea {
 public:
+       ///Constructor
        CItem();
+
+       ///Constructor, crea el item indicando cual es la imagen que le corresponde
        CItem(const char *filename);
+       ///Destructor
        virtual ~CItem();
+       
+       ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene.
        virtual bool on_expose_event(GdkEventExpose* event);
+
+       ///Muestra la ventana de propiedades al seleccionarse la opcion en el menu flotante.
        virtual void on_menu_popup_propiedades();
+       
+       ///Rota el item al seleccionarse la opcion en el menu flotante
        virtual void on_menu_popup_rotar();
+       
+       ///Elimina el Item al seleccionarse la opcion en el menu flotante
        virtual void on_menu_popup_eliminar();
+       
+       ///TODO: conectar los items con lineas!!!
        virtual void on_menu_popup_conectar();
+               
+       ///Retorna un puntero a la imagen actual.
        Glib::RefPtr<Gdk::Pixbuf> get_image() { return image; }
+       
+       ///Funciones para setear y obtener los atributos privados
        int get_position_x();
        int get_position_y();
        int get_id();
@@ -49,29 +71,75 @@ public:
        void set_id(int _id);
        void set_caudal(double _caudal);
        void set_name(Glib::ustring _name);
+       
+       ///Retorna true si las coordenadas (_a, _b) pertenecen a otro item que ya fue colocado en el area de trabajo
        bool is_occupied_area(int _a, int _b);
+       
+       ///Devuelve el tipo de conector de el item que este en (_a, _b) y un puntero a este. Devolvera UNDEF si no hay nada. 
        ConnectorType is_other_connection_area(int _a, int _b, CItem ** _item);
+       
+       /**Funcion abstracta que debe ser redefinida en cada clase descendiente. 
+         * Cada clase descendiente debe implementar su manera de guardarse en 
+         * en el archivo que se pasa por parametro.
+       */
        virtual void save(FILE *archivo) = 0;
+       
+       /**Funcion abstracta que debe ser implementada en las clases descendientes
+         * ya que cada item verifica sus conexione de manera difenrente y todos deben
+         * hacerlo.
+       */
        virtual bool check_connection()=0;
+       
+       ///TODO: hacer abstractas estas funciones... en item no hacen nada....
        virtual void set_default_connector();   
        virtual ConnectorType get_connector_type( int _a, int _b );
+       
+       ///Puntero al area de trabajo de la ventana principal
        WorkPlace *workplace;
+       
+       ///Puntero al cuadro de texto de la ventana principal
        Gtk::Entry *combo_entry;
+       
+       ///Puntero a la lista de items
        std::list<CItem *> *listaItems;
+       
+       ///TODO poner esto en Union y crear una ventana nueva de propiedades
        bool is_union;
+       
+       ///indica si el item ya esta conectado con sus conectores bien definidos
        bool is_connected;
-       //  Hay que ocultarlo --- problemas con el get y el set!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-       //  0 = izquierda/arriba , 1 = derecha/abajo , 2 = medio.   tomando como referencia la imagen inicial de cada item cuando corresponda
+       
+       /**Vector de connectores donde se mantiene la siguiente referencia:
+        * indice 0 = "arriba/izquierda" para la exclusa, el tubo, el codo, el empalme y el tanque.
+        *                                      "derecha" para la bomba.
+        *                                      es unico para el drenaje.
+        * indice 1 = "abajo/derecha" para la exclusa, el tubo, el codo, el empalme y el tanque.
+        *                                      "izquierda" para el tanque
+        * indice 2 = "medio" para el empalme.
+        *La referencia se toma para las imagenes iniciales en el orden izquierda-derecha-medio, 
+        *excepto el tanque que seria derecha-izquierda.
+        */                                                             
        std::vector<Connector> connect_vec;
 protected:
+       ///Indica el numero que le corresponde a la imagen actual del item.
        int imgActual;
+       ///Numero "unico" que identifica al item.
        int ID;
+       ///Nombre del item
        Glib::ustring name;
+       ///Caudal maximo que puede contener un item.
        double caudal_max;
+       ///Menu flotante del item
        Gtk::Menu menu_popup;
+       ///Lista de opciones del menu flotante
+       Gtk::Menu::MenuList menulist;
+       ///Imagenes del menu flotante
        Gtk::Image menu_image_delete, menu_image_rotar, menu_image_propiedades, menu_image_linea;
+       ///Puntero a la imagen del item
        Glib::RefPtr<Gdk::Pixbuf> image;
+       ///Puntero a la ventana de propiedades del item
        ItemPtyWnd *property_wnd;
+       ///Posicion del item en el area de trabajo
        int x, y;
 };
 
index cd86e235c792a484b810b5bf6e200ce83523b0b3..b4801881aedf08cc48a82a9ab4bd358cec548ff9 100644 (file)
@@ -11,6 +11,7 @@ Or::Or()
        image = imageE;
        set_size_request(image->get_width(), image->get_height());
        name = "or";
+       menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Conectar", menu_image_linea,SigC::slot(*this, &CItem::on_menu_popup_conectar) ) ) ;
 }
 
 Or::~Or()
@@ -57,13 +58,13 @@ void Or::on_menu_popup_rotar()
        Or::on_button_press_event(&event);
 }
 
+
+
 void Or::save(FILE *archivo)
 {
 
 }
 
-
-// CAMBIAR TODO ESTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 bool Or::check_connection()
 {
        return true;
index cdf8bba06573cb6257a19416f8765726fd7c2e06..488d4953e7e8e581cd0f525e5760fc95f3d4aa96 100644 (file)
@@ -8,25 +8,37 @@ class PumpPtyWnd;
        
 class Pump : public CItem {
        public:
+               ///Constructor
                Pump();
+               ///Destructor
                virtual ~Pump();
+               ///Funciones redefinidas de CItem
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               ///Funciones para obtener y setear los atributos
                void set_entrega(double _cap);
                void set_liquid_color(Gdk::Color _color);
                double get_entrega();
                Gdk::Color get_liquid_color();
+               ///El item se guarda en formato xml en el archivo pasado por parametro
                virtual void save(FILE *archivo);
+               ///Verifica sus conectores, evaluando si son compatibles con los del item conectado
                virtual bool check_connection();
+               ///Pone sus conectores en el valor por defecto
                virtual void set_default_connector();
+               ///Devuelve el tipo de conector que posee en las coordenadas (_a,_b) segun su orientacion
                virtual ConnectorType get_connector_type(int _a, int _b);
        protected:
+               ///Indica la maxima capacidad de entrega de la bomba
                double entrega;
+               /// Indica el color del liquido que entrega
+               Gdk::Color liquid_color;        
+               /// Imagenes en sus 2 posiciones
                Glib::RefPtr<Gdk::Pixbuf> imageE; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageO; // 1
                Glib::RefPtr<Gdk::Pixbuf> null; 
-               Gdk::Color liquid_color;
+               ///Puntero a la ventana de propiedades
                PumpPtyWnd *pump_pty_wnd;
 };
 #endif
index 32b32804eda2f8b144d356b98c6d2fa4c967552e..c228db6c51d51dc4ae702c58b27dd8857144e6d5 100644 (file)
@@ -109,6 +109,7 @@ void Splitter::save(FILE *archivo)
 
 bool Splitter::check_connection()
 {
+       ConnectorType aux;
        CItem *_item0, *_item1;
        switch (get_img_actual()) {
                        case 0:
@@ -128,9 +129,12 @@ bool Splitter::check_connection()
                                connect_vec[0].type = is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5, &_item0); //abajo-izquierda v
        }
        if (connect_vec[0].type != UNDEF && connect_vec[1].type != UNDEF) {
+               aux = connect_vec[0].type; 
+               connect_vec[0].type = connect_vec[1].type;
+               connect_vec[1].type = aux;
                connect_vec[0].id_dest = _item0->get_id();
                connect_vec[1].id_dest = _item1->get_id();
-               return ( is_connected = (connect_vec[0].type == connect_vec[1].type) );
+               return ( is_connected = (connect_vec[0].type != connect_vec[1].type) );
        }
        else return is_connected;
 }
index ef526d50a50a82e31bf24b8b8e2bd20958e3c159..500aaca3d0a6f978ae839822486cc386f48e00b1 100644 (file)
@@ -5,16 +5,32 @@
 
 class Splitter : public CItem {
        public:
+               /**Constructor
+               */
                Splitter();
+               /**Destructor
+               */
                virtual ~Splitter();
+               /**Funciones redefinidas de CItem
+               */
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               /**El item se guarda en formato xml en el archivo pasado por parametro
+               */      
                virtual void save(FILE *archivo);
+               /**Verifica sus conectores, y pregunta en sus extremos para saber como setearse.
+               */      
                virtual bool check_connection();
+               /**Pone sus conectores por defecto
+               */
                virtual void set_default_connector();
+               /**Devuelve el tipo de conector que posee en las coordenadas (_a, _b) segun su orientacion
+               */      
                virtual ConnectorType get_connector_type(int _a, int _b);
        private:
+               /**Imagenes en sus 4 posiciones
+               */
                Glib::RefPtr<Gdk::Pixbuf> imageN; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
                Glib::RefPtr<Gdk::Pixbuf> imageE; // 2
index 4508b89cf792f8182280dc8905677c9f52182492..c2bef0c32f9ad2e89b52ad1acd692715f6e743ca 100644 (file)
@@ -151,8 +151,12 @@ bool Union::check_connection()
                        return (is_connected = true);
                }
        } else {
-               if ( temp0 == IN && temp1 == IN && temp2 == OUT )
+               if ( temp0 == IN && temp1 == IN && temp2 == OUT ) {
+                       connect_vec[0].id_dest = _item0->get_id();
+                       connect_vec[1].id_dest = _item1->get_id();
+                       connect_vec[2].id_dest = _item2->get_id();
                        return (is_connected = true);
+               }
        }
        return is_connected;
 }
index e58a5d0babbd569927646ccb29009a2eb617f23c..e7975b18d70cf2d5245acfe05f35a0f79f223737 100644 (file)
@@ -6,16 +6,32 @@
 
 class Union : public CItem {
        public:
+               /**Constructor
+               */
                Union();
+               /**Destructor
+               */
                virtual ~Union();
+               /**Funciones redefinidas de CItem
+               */
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               /**El item se guarda en formato xml en el archivo pasado por parametro
+               */
                virtual void save(FILE *archivo);
+               /**Verifica si en sus conectores hay alguien conectado, y que tipo de conexion tiene para ver si es compatible con El. 
+               */
                virtual bool check_connection();
+               /**Pone sus conectores por defecto
+               */
                virtual void set_default_connector();
+               /**Devuelve el tipo de conector que posee en las coordenadas (_a, _b) segun su orientacion
+               */
                virtual ConnectorType get_connector_type(int _a, int _b);
        private:
+               /**Imagenes en sus 4 posiciones
+               */      
                Glib::RefPtr<Gdk::Pixbuf> imageN; // 0 
                Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
                Glib::RefPtr<Gdk::Pixbuf> imageE; // 2