]> 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 0b51b305cd155333ca0a8c287b034ac192aab89a..34f9ecd770831ea1008528f713178399a95c21cb 100644 (file)
+#ifndef _ITEM_H_
+#define _ITEM_H_
 
 
-
-#ifndef GTKMM_EXAMPLE_DRAWINGAREALINES_H
-#define GTKMM_EXAMPLE_DRAWINGAREALINES_H
-
+#include <iostream>
 #include <gtkmm/drawingarea.h>
 #include <gtkmm/drawingarea.h>
+#include <gtkmm/spinbutton.h>
 #include <gtkmm/stock.h>
 #include <gtkmm.h>
 #include <gdkmm.h>
 #include <gtkmm/stock.h>
 #include <gtkmm.h>
 #include <gdkmm.h>
+#include <libglademm.h>
+#include <gtkmm/entry.h>
+#include "itemptywnd.h"
+#include "workplace.h"
 
 
+///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);
-       ~CItem();
+       ///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);
        virtual bool on_expose_event(GdkEventExpose* event);
-       virtual void on_menu_popup_generic();
+
+       ///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; }
        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();
+       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);
+       
+       ///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;
+       
+       ///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;
+       
+       ///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;
+
+       ///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;
        Gtk::Menu menu_popup;
-       Gtk::Image menu_image;
+       
+       ///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;
        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;
 };
 
 #endif
 };
 
 #endif