#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:
///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);
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
- 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;
///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.
*excepto el tanque que seria derecha-izquierda.
*/
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;
///Numero "unico" que identifica al item.
int ID;
+ Glib::RefPtr<Gdk::GC> gc;
+
+ Gdk::Color blue, red;
+
///Nombre del item
Glib::ustring name;
///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