-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.
{
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());
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();
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;
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
bool Conduct::check_connection()
{
+ ConnectorType aux;
CItem *_item0, *_item1;
switch (get_img_actual()) {
case 0:
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) );
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;
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");
-// ventana principal
#ifndef _CONSTRUCTOR_H_
#define _CONSTRUCTOR_H_
connect_vec[0].id_dest = _item0->get_id();
return is_connected;
}
+ std::cout<<"conector dest ="<<temp<<std::endl;
return is_connected;
}
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) );
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;
}
}
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
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);
}
#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;
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();
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;
};
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()
Or::on_button_press_event(&event);
}
+
+
void Or::save(FILE *archivo)
{
}
-
-// CAMBIAR TODO ESTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bool Or::check_connection()
{
return true;
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
bool Splitter::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()+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;
}
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
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;
}
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