]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/item.h
87ddb0190000cb8ef538ca3d7af7b5c20d56b96a
[z.facultad/75.42/plaqui.git] / Constructor / item.h
1 #ifndef _ITEM_H_
2 #define _ITEM_H_
3
4 #include <iostream>
5 #include <gtkmm/drawingarea.h>
6 #include <gtkmm/spinbutton.h>
7 #include <gtkmm/stock.h>
8 #include <gtkmm.h>
9 #include <gdkmm.h>
10 #include <libglademm.h>
11 #include <gtkmm/entry.h>
12 #include "itemptywnd.h"
13
14 ///Tipo de estado en el que pueden estar los conectores de un item
15 typedef enum { UNDEF, IN, OUT } ConnectorType;
16
17 ///Clase que define un conector del item
18 class Connector {
19         public: 
20                 ///Numero que identifica con quien esta conectado
21                 int id_dest;
22                 ///Tipo de conector
23                 ConnectorType type;
24                 ///Sobrecarga del operador = para poder realizar asignaciones entre dos instancias de Connector
25                 Connector& operator= (Connector & c) {
26                         id_dest = c.id_dest;
27                         type = c.type;
28                         return *this;
29                 }
30 };
31
32 class WorkPlace;
33         
34 class CItem:public Gtk::DrawingArea {
35 public:
36         ///Constructor
37         CItem();
38
39         ///Constructor, crea el item indicando cual es la imagen que le corresponde
40         CItem(const char *filename);
41         ///Destructor
42         virtual ~CItem();
43         
44         ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene.
45         virtual bool on_expose_event(GdkEventExpose* event);
46
47         ///Muestra la ventana de propiedades al seleccionarse la opcion en el menu flotante.
48         virtual void on_menu_popup_propiedades();
49         
50         ///Rota el item al seleccionarse la opcion en el menu flotante
51         virtual void on_menu_popup_rotar();
52         
53         ///Elimina el Item al seleccionarse la opcion en el menu flotante
54         virtual void on_menu_popup_eliminar();
55         
56         ///TODO: conectar los items con lineas!!!
57         virtual void on_menu_popup_conectar();
58                 
59         ///Retorna un puntero a la imagen actual.
60         Glib::RefPtr<Gdk::Pixbuf> get_image() { return image; }
61         
62         ///Funciones para setear y obtener los atributos privados
63         int get_position_x();
64         int get_position_y();
65         int get_id();
66         int get_img_actual();
67         double get_caudal();
68         Glib::ustring get_name();
69         Glib::ustring get_other_name(int _id);
70         void set_position(int _x, int _y);
71         void set_id(int _id);
72         void set_caudal(double _caudal);
73         void set_name(Glib::ustring _name);
74         
75         ///Retorna true si las coordenadas (_a, _b) pertenecen a otro item que ya fue colocado en el area de trabajo
76         bool is_occupied_area(int _a, int _b);
77         
78         ///Devuelve el tipo de conector de el item que este en (_a, _b) y un puntero a este. Devolvera UNDEF si no hay nada. 
79         ConnectorType is_other_connection_area(int _a, int _b, CItem ** _item);
80         
81         /**Funcion abstracta que debe ser redefinida en cada clase descendiente. 
82           * Cada clase descendiente debe implementar su manera de guardarse en 
83           * en el archivo que se pasa por parametro.
84         */
85         virtual void save(FILE *archivo) = 0;
86         
87         /**Funcion abstracta que debe ser implementada en las clases descendientes
88           * ya que cada item verifica sus conexione de manera difenrente y todos deben
89           * hacerlo.
90         */
91         virtual bool check_connection()=0;
92         
93         ///TODO: hacer abstractas estas funciones... en item no hacen nada....
94         virtual void set_default_connector();   
95         virtual ConnectorType get_connector_type( int _a, int _b );
96         
97         ///Puntero al area de trabajo de la ventana principal
98         WorkPlace *workplace;
99         
100         ///Puntero al cuadro de texto de la ventana principal
101         Gtk::Entry *combo_entry;
102         
103         ///Puntero a la lista de items
104         std::list<CItem *> *listaItems;
105         
106         ///TODO poner esto en Union y crear una ventana nueva de propiedades
107         bool is_union;
108         
109         ///indica si el item ya esta conectado con sus conectores bien definidos
110         bool is_connected;
111         
112         /**Vector de connectores donde se mantiene la siguiente referencia:
113          * indice 0 = "arriba/izquierda" para la exclusa, el tubo, el codo, el empalme y el tanque.
114          *                                      "derecha" para la bomba.
115          *                                      es unico para el drenaje.
116          * indice 1 = "abajo/derecha" para la exclusa, el tubo, el codo, el empalme y el tanque.
117          *                                      "izquierda" para el tanque
118          * indice 2 = "medio" para el empalme.
119          *La referencia se toma para las imagenes iniciales en el orden izquierda-derecha-medio, 
120          *excepto el tanque que seria derecha-izquierda.
121          */                                                             
122         std::vector<Connector> connect_vec;
123 protected:
124         ///Indica el numero que le corresponde a la imagen actual del item.
125         int imgActual;
126         ///Numero "unico" que identifica al item.
127         int ID;
128         ///Nombre del item
129         Glib::ustring name;
130         ///Caudal maximo que puede contener un item.
131         double caudal_max;
132         ///Menu flotante del item
133         Gtk::Menu menu_popup;
134         ///Lista de opciones del menu flotante
135         Gtk::Menu::MenuList menulist;
136         ///Imagenes del menu flotante
137         Gtk::Image menu_image_delete, menu_image_rotar, menu_image_propiedades, menu_image_linea;
138         ///Puntero a la imagen del item
139         Glib::RefPtr<Gdk::Pixbuf> image;
140         ///Puntero a la ventana de propiedades del item
141         ItemPtyWnd *property_wnd;
142         ///Posicion del item en el area de trabajo
143         int x, y;
144 };
145
146 #endif