]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Constructor/include/item.h
* Ahora el modelo carga las compuertas logicas y crea las lineas necesarias
[z.facultad/75.42/plaqui.git] / Constructor / include / item.h
index 5db334182c026d25382d2b030317c08cedacf441..845bd64e6df0548f107c23b981f99d10e4218edd 100644 (file)
 #include "itemptywnd.h"
 #include "workplace.h"
 
 #include "itemptywnd.h"
 #include "workplace.h"
 
+/**Esta es la clase padre de todos los items que puedan aparecer
+  *Aca estan definidos todos los comportamientos en comun y en 
+  *algunos casos hay funciones abstractas para que cada item defina
+  * su propio comportamiento.
+*/
+
 ///Tipo de estado en el que pueden estar los conectores de un item
 typedef enum { UNDEF, IN, OUT } ConnectorType;
 
 ///Tipo de estado en el que pueden estar los conectores de un item
 typedef enum { UNDEF, IN, OUT } ConnectorType;
 
+///Tipo que indica que conector de alguna compuerta esta conectado con algun item. Usado para cargar el XML.
+typedef struct {
+       ConnectorType type;
+       Glib::ustring name_dest;
+}t_logic_connector;
+
 ///Clase que define un conector del item
 class Connector {
        public: 
 ///Clase que define un conector del item
 class Connector {
        public: 
@@ -42,6 +54,9 @@ public:
        ///Destructor
        virtual ~CItem();
        
        ///Destructor
        virtual ~CItem();
        
+       
+       virtual void on_realize();
+
        ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene.
        virtual bool on_expose_event(GdkEventExpose* event);
 
        ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene.
        virtual bool on_expose_event(GdkEventExpose* event);
 
@@ -95,11 +110,34 @@ public:
        virtual void set_default_connector();   
        virtual ConnectorType get_connector_type( int _a, int _b );
        
        virtual void set_default_connector();   
        virtual ConnectorType get_connector_type( int _a, int _b );
        
+       /**Devuelve en _a y _b la posicion de los conectores logicos del item segun su posicion.
+       */
+       virtual void get_in_logic_connect_position(int& _a, int& _b);
+       virtual void get_out_logic_connect_position(int& _a, int& _b);
+       
+       /**Actualiza las posiciones de los conectores ante un movimiento o rotacion del item.
+       */
+       virtual void update_logic_position();
+       
+       /**Funciones para no permitir mas de una conexion a la salida de las compuertas.
+         *En el caso de la compuerta NOT, tampoco puede tener mas de una conexion 
+         *a la entrada.          
+       */
+       virtual void set_out_connected(bool _o);
+       virtual void set_in_connected(bool _o);
+       
+       /**Dibuja los conectores logicos del Item, AZUL == ENTRADA, ROJO == SALIDA.
+       */
+       virtual void draw_connectors();
+       
        ///Puntero al area de trabajo de la ventana principal
        WorkPlace *workplace;
        
        ///Puntero al cuadro de texto de la ventana principal
        ///Puntero al area de trabajo de la ventana principal
        WorkPlace *workplace;
        
        ///Puntero al cuadro de texto de la ventana principal
-       Gtk::Entry *combo_entry;
+       Gtk::Combo *combo_entry;
+       
+       ///Puntero a la barra de estado
+       Gtk::Statusbar *status_bar;
        
        ///Puntero a la lista de items
        std::list<CItem *> *listaItems;
        
        ///Puntero a la lista de items
        std::list<CItem *> *listaItems;
@@ -118,7 +156,9 @@ public:
        
        ///Indica si puede realizarse la conexion logica con una compuerta
        static bool logic_connect;
        
        ///Indica si puede realizarse la conexion logica con una compuerta
        static bool logic_connect;
-       static int quien;
+       
+       ///Almacena el ID de la compuerta logica seleccionada
+       static int gate_id;
        
        /**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.
        
        /**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.
@@ -133,6 +173,9 @@ public:
        std::vector<Connector> connect_vec;
 
        void set_img_actual(int i) { imgActual = i; }
        std::vector<Connector> connect_vec;
 
        void set_img_actual(int i) { imgActual = i; }
+       
+       ///Puntero al cuadro de texo de la ventana principal.
+       std::list<Glib::ustring> *list_pointed;
 protected:
        ///Indica el numero que le corresponde a la imagen actual del item.
        int imgActual;
 protected:
        ///Indica el numero que le corresponde a la imagen actual del item.
        int imgActual;
@@ -140,6 +183,10 @@ protected:
        ///Numero "unico" que identifica al item.
        int ID;
 
        ///Numero "unico" que identifica al item.
        int ID;
 
+       Glib::RefPtr<Gdk::GC> gc;
+
+       Gdk::Color blue, red;
+
        ///Nombre del item
        Glib::ustring name;
        
        ///Nombre del item
        Glib::ustring name;
        
@@ -160,9 +207,12 @@ protected:
        
        ///Puntero a la ventana de propiedades del item
        ItemPtyWnd *property_wnd;
        
        ///Puntero a la ventana de propiedades del item
        ItemPtyWnd *property_wnd;
-       
+
        ///Posicion del item en el area de trabajo
        int x, y;
        ///Posicion del item en el area de trabajo
        int x, y;
+       
+       ///Posicion de los conectores logicos.
+       int in_x, in_y, out_x, out_y;
 };
 
 #endif
 };
 
 #endif