5 #include <gtkmm/drawingarea.h>
6 #include <gtkmm/spinbutton.h>
7 #include <gtkmm/stock.h>
10 #include <libglademm.h>
11 #include <gtkmm/entry.h>
12 #include "itemptywnd.h"
13 #include "workplace.h"
15 ///Tipo de estado en el que pueden estar los conectores de un item
16 typedef enum { UNDEF, IN, OUT } ConnectorType;
18 ///Clase que define un conector del item
21 ///Numero que identifica con quien esta conectado
25 ///Sobrecarga del operador = para poder realizar asignaciones entre dos instancias de Connector
26 Connector& operator= (Connector & c) {
35 class CItem:public Gtk::DrawingArea {
40 ///Constructor, crea el item indicando cual es la imagen que le corresponde
41 CItem(const char *filename);
45 ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene.
46 virtual bool on_expose_event(GdkEventExpose* event);
48 ///Muestra la ventana de propiedades al seleccionarse la opcion en el menu flotante.
49 virtual void on_menu_popup_propiedades();
51 ///Rota el item al seleccionarse la opcion en el menu flotante
52 virtual void on_menu_popup_rotar();
54 ///Elimina el Item al seleccionarse la opcion en el menu flotante
55 virtual void on_menu_popup_eliminar();
57 ///TODO: conectar los items con lineas!!!
58 virtual void on_menu_popup_conectar();
60 ///Retorna un puntero a la imagen actual.
61 Glib::RefPtr<Gdk::Pixbuf> get_image() { return image; }
63 ///Funciones para setear y obtener los atributos privados
69 Glib::ustring get_name();
70 Glib::ustring get_other_name(int _id);
71 void set_position(int _x, int _y);
73 void set_caudal(double _caudal);
74 void set_name(Glib::ustring _name);
76 ///Retorna true si las coordenadas (_a, _b) pertenecen a otro item que ya fue colocado en el area de trabajo
77 bool is_occupied_area(int _a, int _b);
79 ///Devuelve el tipo de conector de el item que este en (_a, _b) y un puntero a este. Devolvera UNDEF si no hay nada.
80 ConnectorType is_other_connection_area(int _a, int _b, CItem ** _item);
82 /**Funcion abstracta que debe ser redefinida en cada clase descendiente.
83 * Cada clase descendiente debe implementar su manera de guardarse en
84 * en el archivo que se pasa por parametro.
86 virtual void save(FILE *archivo) = 0;
88 /**Funcion abstracta que debe ser implementada en las clases descendientes
89 * ya que cada item verifica sus conexione de manera difenrente y todos deben
92 virtual bool check_connection()=0;
94 ///TODO: hacer abstractas estas funciones... en item no hacen nada....
95 virtual void set_default_connector();
96 virtual ConnectorType get_connector_type( int _a, int _b );
97 virtual void get_logic_connect_position(int& _a, int& _b);
99 ///Puntero al area de trabajo de la ventana principal
100 WorkPlace *workplace;
102 ///Puntero al cuadro de texto de la ventana principal
103 Gtk::Entry *combo_entry;
105 ///Puntero a la lista de items
106 std::list<CItem *> *listaItems;
108 ///Puntero a la lista de Items logicos
109 std::list<CItem *> *lista_logic_Items;
111 ///TODO poner esto en Union y crear una ventana nueva de propiedades
114 ///indica si el item ya esta conectado con sus conectores bien definidos
117 ///Indica si es una compuerta logica
120 ///Indica si puede realizarse la conexion logica con una compuerta
121 static bool logic_connect;
124 /**Vector de connectores donde se mantiene la siguiente referencia:
125 * indice 0 = "arriba/izquierda" para la exclusa, el tubo, el codo, el empalme y el tanque.
126 * "derecha" para la bomba.
127 * es unico para el drenaje.
128 * indice 1 = "abajo/derecha" para la exclusa, el tubo, el codo, el empalme y el tanque.
129 * "izquierda" para el tanque
130 * indice 2 = "medio" para el empalme.
131 *La referencia se toma para las imagenes iniciales en el orden izquierda-derecha-medio,
132 *excepto el tanque que seria derecha-izquierda.
134 std::vector<Connector> connect_vec;
136 void set_img_actual(int i) { imgActual = i; }
138 ///Indica el numero que le corresponde a la imagen actual del item.
141 ///Numero "unico" que identifica al item.
147 ///Caudal maximo que puede contener un item.
150 ///Menu flotante del item
151 Gtk::Menu menu_popup;
153 ///Lista de opciones del menu flotante
154 Gtk::Menu::MenuList menulist;
156 ///Imagenes del menu flotante
157 Gtk::Image menu_image_delete, menu_image_rotar, menu_image_propiedades, menu_image_linea;
159 ///Puntero a la imagen del item
160 Glib::RefPtr<Gdk::Pixbuf> image;
162 ///Puntero a la ventana de propiedades del item
163 ItemPtyWnd *property_wnd;
165 ///Posicion del item en el area de trabajo