class And : public CItem {
public:
+ ///Constructor. Se puede definir la orientacion de la imagen de la compuerta.
And(int orientacion=0);
+
+ ///Destructor.
virtual ~And();
+
+ ///Evento invocado al presionar un boton del mouse.
virtual bool on_button_press_event(GdkEventButton *event);
+
+ ///Rota la imagen 90 grados en sentido horario
virtual void on_menu_popup_rotar();
+
+ ///La compuerta guarda su estado en el archivo en formato XML.
virtual void save(FILE *archivo);
+
+ ///Verifica con quien esta conectada.
virtual bool check_connection();
+
+ ///Devuelve IN si el click fue en la zona de entrada, o OUT si fue en la zona de salida logica.
virtual ConnectorType detect_click_position(int _a, int _b);
+
+ ///Actualiza las posiciones de los conectores logicos ante una rotacion.
virtual void update_logic_position();
+
+ ///Devuelve la posicion del conector de entrada en _a, _b.
virtual void get_in_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve la posicion del conector de salida en _a,_b.
virtual void get_out_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve el estado del conector logico.
virtual bool get_out_logic_connect();
+
+ ///Setea el estado del conector logico.
virtual void set_out_connected(bool _o);
+
+ ///Dibuja los conectores logicos segun su orientacion.
virtual void draw_connectors();
private:
+ ///posiciones de los conectores logicos.
int in_x, in_y, out_x, out_y;
+
+ ///Estado de los conectores logicos.
bool out_connected;
+
+ ///Vector de conectores utilizados para verificar con quien esta conectado.
std::vector<t_logic_connector> vec_connector;
+
+ ///imagenes de la compuerta en sus 4 posiciones.
Glib::RefPtr<Gdk::Pixbuf> imageN; // 0
Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
Glib::RefPtr<Gdk::Pixbuf> imageE; // 2
#define _CISTERNPTYWND_H_
#include "propertywnd.h"
+/**Ventana de propiedades del TANQUE.
+*/
class Cistern;
class CisternPtyWnd : public PropertyWnd {
public:
+ ///Constructor.
CisternPtyWnd(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
+
+ ///Destructor.
virtual ~CisternPtyWnd();
+
+ ///Puntero al Tanque que se le modificaran sus propiedades.
Cistern *cistern;
+
+ ///Objetos de la ventana.
Gtk::SpinButton *spin_inicial, *spin_capacidad;
Gtk::Button *btn_select_color, *dlg_select_color_ok, *dlg_select_color_cancel;
Gtk::Entry *txt_cistern_name;
Gtk::ColorSelectionDialog *color_select_dlg;
Gtk::DrawingArea *color_preview;
+
+ ///Señales invocadas al presionarse algun boton.
virtual void on_btn_accept_clicked();
virtual void on_btn_apply_clicked();
virtual void on_btn_select_color_clicked();
#include <iostream>
#include "item.h"
-
+/**Definicion del DRENAJE.
+*/
class Drain : public CItem {
public:
+ ///Constructor.
Drain(int orientacion=0);
+
+ ///Destructor.
virtual ~Drain();
+
+ ///Metodo invocado al presionar un boton del mouse.
virtual bool on_button_press_event(GdkEventButton *event);
+
+ ///Rota la imagen 90 grados en sentido horario.
virtual void on_menu_popup_rotar();
+
+ ///Muestra la ventana de propiedades.
virtual void on_menu_popup_propiedades();
+
+ ///Devuelve el valor del atributo "contenido_inicial".
double get_contenido_inicial();
+
+ ///Devuelve el valor del atributo "capacidad".
double get_capacidad();
+
+ ///El item guarda su estado en el archivo en formato XML.
virtual void save(FILE *archivo);
+
+ ///Verifica su conexion con los items adyacentes.
virtual bool check_connection();
+
+ ///Resetea sus conectores a su estado de desconexion.
virtual void set_default_connector();
+
+ ///Devuelve el tipo de conector que posee en las coordenadas _a,_b, devuelve UNDEF si no es area de conexion.
virtual ConnectorType get_connector_type(int _a, int _b);
protected:
+ ///Imagenes del drenaje en sus 4 posiciones.
Glib::RefPtr<Gdk::Pixbuf> imageE; // 0
Glib::RefPtr<Gdk::Pixbuf> imageO; // 1
Glib::RefPtr<Gdk::Pixbuf> imageN; // 1
#include "propertywnd.h"
+/**Ventana de propiedades de la EXCLUSA.
+*/
class Exclusa;
class ExclusaPtyWnd : public PropertyWnd {
public:
+ ///Constructor.
ExclusaPtyWnd(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
+
+ ///Destructor.
virtual ~ExclusaPtyWnd();
+
+ ///Puntero a la exclusa que se le modifican las propiedades.
Exclusa *exclusa;
+
+ ///Objetos de la ventana.
Gtk::Entry *txt_exclusa_name;
Gtk::RadioButton *rd_btn_close, *rd_btn_open;
Gtk::RadioButton::Group group;
+
+ ///Señales que se invocan al presionar los botones.
virtual void on_btn_accept_clicked();
virtual void on_btn_apply_clicked();
virtual void on_rd_btn_close_clicked();
#ifndef _ITEMPTYWND_H_
#define _ITEMPTYWND_H_
-
#include "propertywnd.h"
+/**Ventana de propiedades de los items: CODO, TUBO y EMPALME.
+ */
class ItemPtyWnd : public PropertyWnd {
public:
+ ///Constructor.
ItemPtyWnd(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
+
+ ///Destructor.
virtual ~ItemPtyWnd();
+
+ ///Objetos de la ventana.
Gtk::SpinButton *spin_caudal;
Gtk::RadioButton *rd_btn_union, *rd_btn_division;
Gtk::Label *lb_type, *lb_max_fluid;
Gtk::Entry *txt_item_name;
protected:
+ ///Señales que se invocan al presionar los botones.
virtual void on_btn_cancel_clicked();
virtual void on_btn_accept_clicked();
virtual void on_btn_apply_clicked();
#define _NOT_H_
#include "item.h"
+/** Clase que implementa la compuerta logica NOT.
+*/
class Not : public CItem {
public:
+ ///Constructor. Se puede definir la orientacion de la imagen de la compuerta.
Not(int orientacion=0);
+
+ ///Destructor.
virtual ~Not();
+
+ ///Evento invocado al presionar un boton del mouse.
virtual bool on_button_press_event(GdkEventButton *event);
+
+ ///Rota la imagen 90 grados en sentido horario
virtual void on_menu_popup_rotar();
+
+ ///La compuerta guarda su estado en el archivo en formato XML.
virtual void save(FILE *archivo);
+
+ ///Verifica con quien esta conectada.
virtual bool check_connection();
+
+ ///Devuelve IN si el click fue en la zona de entrada, o OUT si fue en la zona de salida logica.
virtual ConnectorType detect_click_position(int _a, int _b);
+
+ ///Actualiza las posiciones de los conectores logicos ante una rotacion.
virtual void update_logic_position();
+
+ ///Devuelve la posicion del conector de entrada en _a, _b.
virtual void get_in_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve la posicion del conector de salida en _a,_b.
virtual void get_out_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve el estado del conector logico.
+ virtual bool get_out_logic_connect();
+ virtual bool get_in_logic_connect();
+
+ ///Setea el estado del conector logico.
virtual void set_out_connected(bool _o);
virtual void set_in_connected(bool _o);
- virtual bool get_out_logic_connect();
+
+ ///Dibuja los conectores logicos segun su orientacion.
virtual void draw_connectors();
private:
+ ///posiciones de los conectores logicos.
int in_x, in_y, out_x, out_y;
+
+ ///Estado de los conectores logicos.
bool in_connected, out_connected;
+
+ ///Vector de conectores utilizados para verificar con quien esta conectado.
std::vector<t_logic_connector> vec_connector;
+
+ ///imagenes de la compuerta en sus 4 posiciones.
Glib::RefPtr<Gdk::Pixbuf> imageN; // 0
Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
Glib::RefPtr<Gdk::Pixbuf> imageE; // 2
class Or : public CItem {
public:
+ ///Constructor. Se puede definir la orientacion de la imagen de la compuerta.
Or(int orientacion=0);
+
+ ///Destructor.
virtual ~Or();
+
+ ///Evento invocado al presionar un boton del mouse.
virtual bool on_button_press_event(GdkEventButton *event);
+
+ ///Rota la imagen 90 grados en sentido horario
virtual void on_menu_popup_rotar();
+
+ ///La compuerta guarda su estado en el archivo en formato XML.
virtual void save(FILE *archivo);
+
+ ///Verifica con quien esta conectada.
virtual bool check_connection();
+
+ ///Devuelve IN si el click fue en la zona de entrada, o OUT si fue en la zona de salida logica.
virtual ConnectorType detect_click_position(int _a, int _b);
+
+ ///Actualiza las posiciones de los conectores logicos ante una rotacion.
virtual void update_logic_position();
+
+ ///Devuelve la posicion del conector de entrada en _a, _b.
virtual void get_in_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve la posicion del conector de salida en _a,_b.
virtual void get_out_logic_connect_position(int& _a, int& _b);
+
+ ///Devuelve el estado del conector logico.
virtual bool get_out_logic_connect();
+
+ ///Setea el estado del conector logico.
virtual void set_out_connected(bool _o);
+
+ ///Dibuja los conectores logicos segun su orientacion.
virtual void draw_connectors();
private:
+ ///posiciones de los conectores logicos.
int in_x, in_y, out_x, out_y;
+
+ ///Estado de los conectores logicos.
bool out_connected;
+
+ ///Vector de conectores utilizados para verificar con quien esta conectado.
std::vector<t_logic_connector> vec_connector;
+
+ ///imagenes de la compuerta en sus 4 posiciones.
Glib::RefPtr<Gdk::Pixbuf> imageN; // 0
Glib::RefPtr<Gdk::Pixbuf> imageS; // 1
Glib::RefPtr<Gdk::Pixbuf> imageE; // 2
#include <gdkmm.h>
#include <libglademm.h>
+/**Prototipo de ventana de propiedades, la cual tiene en comun con todas sus herederas los botones
+ * Aceptar, Cancelar y Aplicar, donde la accion Cancelar es igual en todas.
+ */
+
class CItem;
class PropertyWnd : public Gtk::Window{
public:
+ ///Constructor.
PropertyWnd(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
+
+ ///Destructor.
virtual ~PropertyWnd();
+
+ ///Puntero al item que se le modifican las propiedades.
CItem *item;
+
+ ///Objetos de la ventana.
Gtk::Button *btn_cancel, *btn_accept, *btn_apply;
+
+ ///Señales que se invocan al presionar los botones.
virtual void on_btn_cancel_clicked();
virtual void on_btn_accept_clicked();
virtual void on_btn_apply_clicked();
#define _PUMPPTYWND_H_
#include "propertywnd.h"
+/**Ventana de propiedades de la BOMBA.
+*/
class Pump;
class PumpPtyWnd : public PropertyWnd{
public:
+ ///Constructor.
PumpPtyWnd(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
+
+ ///Destructor.
virtual ~PumpPtyWnd();
+
+ ///Puntero al item al cual se le modifcan las propiedades.
Pump *pump;
+
+ ///Botones y objetos de la ventana.
Gtk::SpinButton *spin_fluid;
Gtk::Entry *txt_pump_name;
Gtk::Button *btn_select_color, *dlg_select_color_cancel, *dlg_select_color_ok;
Gtk::ColorSelectionDialog *color_select_dlg;
Gtk::DrawingArea *color_preview;
+
+ ///Señales que se invocan al presionar los botones.
+ ///Almacena los valores seteados en la ventana en el item apuntado.
virtual void on_btn_accept_clicked();
virtual void on_btn_apply_clicked();
virtual void on_btn_select_color_clicked();
#define _SPLITTER_H_
#include "item.h"
+/**Define el CODO.
+*/
class Splitter : public CItem {
public:
-// Union.h
#ifndef _UNION_H_
#define _UNION_H_
#include "item.h"
+/**Define un empalme de flujo, que puede ser una UNION, o una DIVISION.
+*/
class Union : public CItem {
public:
///Esta estructura define una linea entre un item logico y uno de transporte.
typedef struct {
int logic_id, store_id;
+ bool cistern_out1;
}t_line;
class WorkPlace:public Gtk::Fixed {
if (CItem::logic_connect && CItem::gate_id != -1) {
if ( detect_click_position((int)event->x, (int)event->y) == IN && !workplace->get_logic_item(CItem::gate_id)->get_out_logic_connect()){
tmp_line.logic_id = workplace->get_logic_item(CItem::gate_id)->get_id();
- workplace->get_logic_item(CItem::gate_id)->set_out_connected(true);
+ tmp_line.cistern_out1 = true;
+ //workplace->get_logic_item(CItem::gate_id)->set_out_connected(true);
tmp_line.store_id = ID;
workplace->lista_lineas_out.push_back(tmp_line);
workplace->queue_draw();
workplace->get_logic_item(CItem::gate_id)->set_in_connected(true);
tmp_line.logic_id = CItem::gate_id;
tmp_line.store_id = ID;
+ tmp_line.cistern_out1 = false;
workplace->lista_lineas_out.push_back(tmp_line);
workplace->queue_draw();
}
case 3:
y_offset = 15;
}
- get_item(temp.store_id)->get_out_logic_connect_position(w,z);
+ if ( temp.cistern_out1 )
+ get_item(temp.store_id)->get_in_logic_connect_position(w,z);
+ else
+ get_item(temp.store_id)->get_out_logic_connect_position(w,z);
get_logic_item(temp.logic_id)->get_in_logic_connect_position(a, b);
draw_line(w+item_y_offset, z+item_y_offset, a+x_offset, b+y_offset,color_out);
get_window()->draw_line(gc, a, b, a+x_offset, b+y_offset);
void WorkPlace::delete_line(int _id)
{
+ /* LINEAS A LAS ENTRADAS DE LOS ITEMS */
+ /* Borro la linea desde el item eliminado hasta el que este conectado */
std::list<t_line>::iterator i = lista_lineas_in.begin();
while ( i != lista_lineas_in.end() ){
if (get_item( (*i).store_id ) != NULL)
}
i++;
}
-
+
+ /* Borra la linea desde la compuerta eliminada hasta el item conectado a ella */
i = lista_lineas_in.begin();
while ( i != lista_lineas_in.end() ){
if ( get_logic_item((*i).logic_id) != NULL)
}
i++;
}
-
+
+ /* LINEAS A LAS SALIDAS DE LOS ITEMS */
+ /* Borro la linea desde el item eliminado hasta el que este conectado */
std::list<t_line>::iterator j = lista_lineas_out.begin();
while ( j != lista_lineas_out.end() ){
if ( get_item((*j).store_id) != NULL )
}
j++;
}
-
+
+ /* Borra la linea desde la compuerta eliminada hasta el item conectado a ella */
j = lista_lineas_out.begin();
while ( j != lista_lineas_out.end() ){
if ( get_logic_item((*j).logic_id) != NULL )
j++;
}
+ /* LINEAS ENTRE COMPUERTAS */
+ /* Borra la linea entre al compuerta eliminada y la que esta conectada a ella en su entrada */
std::list<t_line>::iterator k = lista_lineas_logic.begin();
while ( k != lista_lineas_logic.end() ){
if ( get_logic_item((*k).store_id) != NULL )
}
k++;
}
-
+
+ /* Borra la linea entre al compuerta eliminada y la que esta conectada a ella en su salida*/
k = lista_lineas_logic.begin();
while ( k != lista_lineas_logic.end() ){
if ( get_logic_item((*k).logic_id) != NULL )