]> 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 1654bf3dfda7171931e50136542f1e25da359ecd..34f9ecd770831ea1008528f713178399a95c21cb 100644 (file)
 #include <libglademm.h>
 #include <gtkmm/entry.h>
 #include "itemptywnd.h"
+#include "workplace.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;
@@ -25,52 +30,136 @@ class Connector {
                }
 };
 
-class WorkPlace;
+//class WorkPlace;
        
 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();
        int get_img_actual();
-       Glib::ustring get_name();
        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);
+       
+       ///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);
-       ConnectorType is_other_connection_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;
-//     virtual ConnectorType is_connection_area(int _a, int _b)=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;
+       
+       ///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;
-       //  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
+       
+       ///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:
+       ///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;
 };