From: Nicolás Dimov Date: Mon, 17 Nov 2003 21:36:50 +0000 (+0000) Subject: -Se conectan como trompada!!!!! X-Git-Tag: svn_import~275 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/5b8bbc5a3c2db31a69a637f0e35e8435ad4d8ff3 -Se conectan como trompada!!!!! -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. --- diff --git a/Constructor/cistern.cpp b/Constructor/cistern.cpp index 198d940..433f030 100644 --- a/Constructor/cistern.cpp +++ b/Constructor/cistern.cpp @@ -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"+get_other_name(connect_vec[0].id_dest)+"\n"; - else - con0 = "\t\t\t"+get_other_name(connect_vec[0].id_dest)+"\n"; - if (connect_vec[1].type == IN) - con1 = "\t\t\t"+get_other_name(connect_vec[1].id_dest)+"\n"; - else - con1 = "\t\t\t"+get_other_name(connect_vec[1].id_dest)+"\n"; - + con0 = "\t\t\t"+get_other_name(connect_vec[0].id_dest)+"\n"; + con1 = "\t\t\t"+get_other_name(connect_vec[1].id_dest)+"\n"; sprintf(c_red,"\t\t\t%d\n",liquid_color.get_red()); sprintf(c_green,"\t\t\t%d\n",liquid_color.get_green()); sprintf(c_blue,"\t\t\t%d\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; diff --git a/Constructor/cistern.h b/Constructor/cistern.h index 330d239..84ddc20 100644 --- a/Constructor/cistern.h +++ b/Constructor/cistern.h @@ -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 imageE; // 0 Glib::RefPtr imageO; // 1 Glib::RefPtr null; - Gdk::Color liquid_color; + /**Puntero a la ventana de propiedades + */ CisternPtyWnd *cistern_pty_wnd; }; #endif diff --git a/Constructor/conduct.cpp b/Constructor/conduct.cpp index b286e68..2493f32 100644 --- a/Constructor/conduct.cpp +++ b/Constructor/conduct.cpp @@ -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) ); diff --git a/Constructor/conduct.h b/Constructor/conduct.h index 3ba3ab6..10d4270 100644 --- a/Constructor/conduct.h +++ b/Constructor/conduct.h @@ -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 imageN; // 0 Glib::RefPtr imageS; // 1 Glib::RefPtr null; diff --git a/Constructor/constructor.cpp b/Constructor/constructor.cpp index 4b26ee4..241abdb 100644 --- a/Constructor/constructor.cpp +++ b/Constructor/constructor.cpp @@ -387,6 +387,7 @@ void Constructor::on_btn_check_clicked() if ( !listaItems.empty() ) { while ( i != listaItems.end() ) { CItem *temp = *i; + std::cout<< "item="<get_name()<<" "<<"check= "<check_connection()<check_connection() ) { dlg_connect->set_title("Error"); dlg_label->set_text("Los elementos no estan conectados\n\t\tcorrectamente"); diff --git a/Constructor/constructor.h b/Constructor/constructor.h index aa15f54..64f8a06 100644 --- a/Constructor/constructor.h +++ b/Constructor/constructor.h @@ -1,4 +1,3 @@ -// ventana principal #ifndef _CONSTRUCTOR_H_ #define _CONSTRUCTOR_H_ diff --git a/Constructor/drain.cpp b/Constructor/drain.cpp index 76f15a2..3625677 100644 --- a/Constructor/drain.cpp +++ b/Constructor/drain.cpp @@ -122,6 +122,7 @@ bool Drain::check_connection() connect_vec[0].id_dest = _item0->get_id(); return is_connected; } + std::cout<<"conector dest ="<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; } } diff --git a/Constructor/exclusa.h b/Constructor/exclusa.h index 5ea2ddd..a34704a 100644 --- a/Constructor/exclusa.h +++ b/Constructor/exclusa.h @@ -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 imageN; // 0 Glib::RefPtr imageS; // 1 Glib::RefPtr null; + /**Puntero a la ventana de propiedades + */ ExclusaPtyWnd *exclusa_pty_wnd; + /** Abierto = true, Cerrado = false. + */ bool estado; }; #endif diff --git a/Constructor/item.cpp b/Constructor/item.cpp index 4bec05d..cd53614 100644 --- a/Constructor/item.cpp +++ b/Constructor/item.cpp @@ -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); } diff --git a/Constructor/item.h b/Constructor/item.h index 64c5049..87ddb01 100644 --- a/Constructor/item.h +++ b/Constructor/item.h @@ -11,13 +11,17 @@ #include #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 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 *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 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 image; + ///Puntero a la ventana de propiedades del item ItemPtyWnd *property_wnd; + ///Posicion del item en el area de trabajo int x, y; }; diff --git a/Constructor/or.cpp b/Constructor/or.cpp index cd86e23..b480188 100644 --- a/Constructor/or.cpp +++ b/Constructor/or.cpp @@ -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; diff --git a/Constructor/pump.h b/Constructor/pump.h index cdf8bba..488d495 100644 --- a/Constructor/pump.h +++ b/Constructor/pump.h @@ -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 imageE; // 0 Glib::RefPtr imageO; // 1 Glib::RefPtr null; - Gdk::Color liquid_color; + ///Puntero a la ventana de propiedades PumpPtyWnd *pump_pty_wnd; }; #endif diff --git a/Constructor/splitter.cpp b/Constructor/splitter.cpp index 32b3280..c228db6 100644 --- a/Constructor/splitter.cpp +++ b/Constructor/splitter.cpp @@ -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; } diff --git a/Constructor/splitter.h b/Constructor/splitter.h index ef526d5..500aaca 100644 --- a/Constructor/splitter.h +++ b/Constructor/splitter.h @@ -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 imageN; // 0 Glib::RefPtr imageS; // 1 Glib::RefPtr imageE; // 2 diff --git a/Constructor/union.cpp b/Constructor/union.cpp index 4508b89..c2bef0c 100644 --- a/Constructor/union.cpp +++ b/Constructor/union.cpp @@ -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; } diff --git a/Constructor/union.h b/Constructor/union.h index e58a5d0..e7975b1 100644 --- a/Constructor/union.h +++ b/Constructor/union.h @@ -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 imageN; // 0 Glib::RefPtr imageS; // 1 Glib::RefPtr imageE; // 2