X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/ee2cb3d6c26ae319d20bde28f415393e96611ece..663eccb7e27110aba6c79648c38254a7a5737bca:/Constructor/include/item.h?ds=sidebyside diff --git a/Constructor/include/item.h b/Constructor/include/item.h index c7a4d47..845bd64 100644 --- a/Constructor/include/item.h +++ b/Constructor/include/item.h @@ -12,9 +12,21 @@ #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 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: @@ -42,6 +54,9 @@ public: ///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); @@ -94,13 +109,35 @@ public: ///TODO: hacer abstractas estas funciones... en item no hacen nada.... virtual void set_default_connector(); virtual ConnectorType get_connector_type( int _a, int _b ); - virtual void get_logic_connect_position(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 - 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 *listaItems; @@ -119,7 +156,9 @@ public: ///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. @@ -134,6 +173,9 @@ public: std::vector connect_vec; void set_img_actual(int i) { imgActual = i; } + + ///Puntero al cuadro de texo de la ventana principal. + std::list *list_pointed; protected: ///Indica el numero que le corresponde a la imagen actual del item. int imgActual; @@ -141,6 +183,10 @@ protected: ///Numero "unico" que identifica al item. int ID; + Glib::RefPtr gc; + + Gdk::Color blue, red; + ///Nombre del item Glib::ustring name; @@ -161,9 +207,12 @@ protected: ///Puntero a la ventana de propiedades del item ItemPtyWnd *property_wnd; - + ///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