]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Constructor/item.h
para que lo vean
[z.facultad/75.42/plaqui.git] / Constructor / item.h
index facb96d12b4be43b88125447a53fb380f9c43236..34f9ecd770831ea1008528f713178399a95c21cb 100644 (file)
 #include <libglademm.h>
 #include <gtkmm/entry.h>
 #include "itemptywnd.h"
 #include <libglademm.h>
 #include <gtkmm/entry.h>
 #include "itemptywnd.h"
+#include "workplace.h"
 
 
-class WorkPlace;
+///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;
+                       return *this;
+               }
+};
+
+//class WorkPlace;
        
 class CItem:public Gtk::DrawingArea {
 public:
        
 class CItem:public Gtk::DrawingArea {
 public:
+       ///Constructor
        CItem();
        CItem();
+
+       ///Constructor, crea el item indicando cual es la imagen que le corresponde
        CItem(const char *filename);
        CItem(const char *filename);
+       ///Destructor
        virtual ~CItem();
        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);
        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();
        virtual void on_menu_popup_propiedades();
+       
+       ///Rota el item al seleccionarse la opcion en el menu flotante
        virtual void on_menu_popup_rotar();
        virtual void on_menu_popup_rotar();
+       
+       ///Elimina el Item al seleccionarse la opcion en el menu flotante
        virtual void on_menu_popup_eliminar();
        virtual void on_menu_popup_eliminar();
+       
+       ///TODO: conectar los items con lineas!!!
        virtual void on_menu_popup_conectar();
        virtual void on_menu_popup_conectar();
+               
+       ///Retorna un puntero a la imagen actual.
        Glib::RefPtr<Gdk::Pixbuf> get_image() { return image; }
        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();
        int get_position_x();
        int get_position_y();
        int get_id();
-       int get_conector_in();
-       int get_conector_out();
        int get_img_actual();
        double get_caudal();
        int get_img_actual();
        double get_caudal();
+       Glib::ustring get_name();
+       Glib::ustring get_other_name(int _id);
        void set_position(int _x, int _y);
        void set_id(int _id);
        void set_caudal(double _caudal);
        void set_name(Glib::ustring _name);
        void set_position(int _x, int _y);
        void set_id(int _id);
        void set_caudal(double _caudal);
        void set_name(Glib::ustring _name);
-       void set_conector_in(int _in);
-       void set_conector_out(int _out);
+       
+       ///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);
        bool is_occupied_area(int _a, int _b);
-       bool is_other_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;
        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;
        virtual bool check_connection()=0;
-       Glib::ustring get_name();
+       
+       ///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;
        WorkPlace *workplace;
+       
+       ///Puntero al cuadro de texto de la ventana principal
        Gtk::Entry *combo_entry;
        Gtk::Entry *combo_entry;
+       
+       ///Puntero a la lista de items
        std::list<CItem *> *listaItems;
        std::list<CItem *> *listaItems;
+       
+       ///Puntero a la lista de Items logicos
+       std::list<CItem *> *lista_logic_Items;
+       
+       ///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;
+       
+       ///Indica si es una compuerta logica
+       bool is_logic;
+       
+       ///Indica si puede realizarse la conexion logica con una compuerta
+       static bool logic_connect;
+       static int quien;
+       
+       /**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:
 protected:
+       ///Indica el numero que le corresponde a la imagen actual del item.
        int imgActual;
        int imgActual;
-       int ID, conector_in, conector_out; 
+
+       ///Numero "unico" que identifica al item.
+       int ID;
+
+       ///Nombre del item
        Glib::ustring name;
        Glib::ustring name;
+       
+       ///Caudal maximo que puede contener un item.
        double caudal_max;
        double caudal_max;
+       
+       ///Menu flotante del item
        Gtk::Menu menu_popup;
        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;
        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;
        Glib::RefPtr<Gdk::Pixbuf> image;
+       
+       ///Puntero a la ventana de propiedades del item
        ItemPtyWnd *property_wnd;
        ItemPtyWnd *property_wnd;
+       
+       ///Posicion del item en el area de trabajo
        int x, y;
 };
 
        int x, y;
 };