]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/include/constructor.h
6f162373f356c80981145a60a078fd309067357c
[z.facultad/75.42/plaqui.git] / Constructor / include / constructor.h
1 #ifndef  _CONSTRUCTOR_H_
2 #define _CONSTRUCTOR_H_
3
4 #include <iostream>
5 #include <libglademm.h>
6 #include <gtkmm.h>
7 #include <gtkmm/window.h>
8 #include <gtkmm/box.h>
9 #include <gtkmm/button.h>
10 #include <gtkmm/fixed.h>
11 #include <gtkmm/scrolledwindow.h>
12 #include <gtkmm/checkbutton.h>
13 #include <gtkmm/fileselection.h>
14 #include <gtkmm/combo.h>
15 #include "workplace.h"
16 #include "item.h"
17 #include "splitter.h"
18 #include "conduct.h"
19 #include "union.h"
20 #include "cistern.h"
21 #include "exclusa.h"
22 #include "pump.h"
23 #include "drain.h"
24 #include "and.h"
25 #include "or.h"
26 #include "not.h"
27 #include "libxml/parser.h"
28 /**
29  * Clase principal de esta aplicación.
30  * Esta clase se encargada de obtener e 
31  * inicializar todos los elementos de la ventana 
32  * principal, ya sean botones, cuadros de diálogo, barras 
33  * de herramientas, etc.
34  * 
35  * Para cada botón referenciado por esta clase, es 
36  * conectado a ellos una señal, que será el método que 
37  * deben invocar al ser presionados.
38  * 
39  * Uno de los métodos mas importantes de esta clase es 
40  * on_item_drop_drag_recived() que es la encargada de 
41  * crear un nuevo elemento si es arrastrado desde la barra 
42  * de elementos, o de moverlo dentro del
43  * \ref WorkPlace "área de trabajo" si este ya estaba creado.
44  * 
45  * Para facilitar el diseño y disminuir la complejidad, la 
46  * grilla fue dividida en sectores de 32x32 píxels, lo que 
47  * permite que el usuario no tenga que ser muy preciso a 
48  * la hora de soltar un item en el
49  * \ref WorkPlace "área de trabajo".
50  * 
51  * Cada nuevo elemento creado es almacenado en una
52  * \ref listaItems "lista de elementos de transporte o almacenamiento de fluido",
53  * o en una \ref lista_logic_items "lista de elementos lógicos".
54  * 
55  * Otra de las funciones principales es check_connection()
56  * que recorre todos los items de ambas listas y verifica 
57  * que se haya formado en el momento del diseño un 
58  * circuito posible. 
59  *
60  * Esta clase contiene los métodos necesarios para guardar 
61  * y cargar un archivo XML cuyo formato se explica más adelante.
62  */
63 class Constructor : public Gtk::Window {
64         public: 
65                 Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
66                 virtual ~Constructor();
67         private:
68                 ///Archivo donde se guarda el trabajo.
69                 FILE *archivo;
70         
71                 ///Variable que indica si el trabajo fue guardado.
72                 bool saved;
73         
74                 ///Ruta al archivo.
75                 std::string file_name;
76         protected: 
77         /// Contador para los id de los items.
78         int id;
79         /// Defino los elementos de la ventana.
80         Gtk::Button *btn_canio, *btn_codo, *btn_y, *btn_tanque, *btn_bomba, *btn_exclusa, *btn_drain, *btn_file_ok, *btn_file_cancel, *btn_check, *btn_dlg_close,
81                                                 *btn_and, *btn_or, *btn_not, *btn_open_ok, *btn_open_cancel, *quick_btn_clear, *quick_btn_save, *quick_btn_open, *quick_btn_new, *btn_find;
82         Gtk::ImageMenuItem *main_menu_quit,*main_menu_new, *edit_menu_del, *edit_menu_delete_all, *main_menu_save, *main_menu_open;
83         Gtk::CheckButton *chk_btn_logica;
84         Gtk::FileSelection *file_selection, *file_open_selection;
85         Gtk::Combo *combo_entry;
86         Gtk::Dialog *dlg_connect;
87         Gtk::Label *dlg_label;
88         Gtk::Statusbar *status_bar;
89         Glib::RefPtr<Gdk::Pixbuf> ico_canio, ico_y, ico_codo, ico_tanque, ico_bomba, ico_exclusa, ico_drain, ico_and, ico_or, ico_not;
90         Glib::RefPtr<Gdk::Pixbuf> ico_last;
91         std::list<Gtk::TargetEntry> listTargets;
92         std::list<CItem *> listaItems, lista_logic_Items;
93         std::list<Glib::ustring> list_pointed;
94         WorkPlace *workplace;
95         bool logica;
96         bool can_drop(CItem *, int , int);
97         
98         // /señales de control para los elementos de la ventana.
99         virtual void on_btn_canio_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
100         virtual void on_btn_y_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
101         virtual void on_btn_codo_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
102         virtual void on_btn_tanque_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
103         virtual void on_btn_bomba_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
104         virtual void on_btn_exclusa_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
105         virtual void on_btn_drain_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
106         virtual void on_btn_and_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
107         virtual void on_btn_or_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
108         virtual void on_btn_not_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
109         virtual void on_main_menu_quit();
110         virtual void on_main_menu_open();
111         virtual void on_main_menu_save();
112         virtual void on_edit_menu_del();
113         virtual void on_edit_menu_delete_all();
114         virtual void on_chk_btn_logica_clicked();
115         virtual void on_btn_open_cancel_clicked();
116         virtual void on_btn_file_ok_clicked();
117         virtual void on_btn_file_cancel_clicked();
118         virtual void on_btn_check_clicked();
119         virtual void on_btn_dlg_connect_clicked();
120         virtual void on_load_from_xml();
121         virtual void on_quick_btn_delete_all_clicked();
122         virtual void on_quick_btn_save_clicked();
123         virtual void on_quick_btn_new_clicked();
124         virtual void on_btn_find_clicked();
125         
126         ///Verifica la conexion de todos los items iterando en la listaItems.
127         bool check_connection(Glib::ustring& name);
128         
129         // señales para cambiar el icono.
130         virtual void on_canio_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
131         virtual void on_y_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
132         virtual void on_codo_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
133         virtual void on_tanque_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
134         virtual void on_bomba_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
135         virtual void on_exclusa_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
136         virtual void on_drain_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
137         virtual void on_and_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
138         virtual void on_or_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
139         virtual void on_not_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
140         
141         virtual void on_item_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context, CItem *);
142         virtual void on_item_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
143
144         virtual void on_item_drop_drag_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, GtkSelectionData* selection_data, guint info, guint time);
145
146         // Carga desde un XML
147         void create_lines(xmlNodePtr nodo);
148         void create_line(xmlNodePtr nodo, int logic_id);
149         Pump *loadBomba(xmlNodePtr nodo);
150         Conduct *loadConduct(xmlNodePtr nodo);
151         Exclusa *loadExclusa(xmlNodePtr nodo);
152         Cistern *loadTank(xmlNodePtr nodo);
153         Union *loadUnion(xmlNodePtr nodo);
154         Drain *loadDrain(xmlNodePtr nodo);
155         Splitter *loadCodo(xmlNodePtr nodo);
156         And *loadAnd(xmlNodePtr nodo);
157         Not *loadNot(xmlNodePtr nodo);
158         Or *loadOr(xmlNodePtr nodo);
159         Gdk::Color loadColor(xmlNodePtr nodo);
160 };
161 #endif