1 #ifndef _CONSTRUCTOR_H_
2 #define _CONSTRUCTOR_H_
5 #include <libglademm.h>
7 #include <gtkmm/window.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"
27 #include "libxml/parser.h"
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.
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.
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.
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".
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".
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
60 * Esta clase contiene los métodos necesarios para guardar
61 * y cargar un archivo XML cuyo formato se explica más adelante.
63 class Constructor : public Gtk::Window {
65 Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
66 virtual ~Constructor();
68 ///Archivo donde se guarda el trabajo.
71 ///Variable que indica si el trabajo fue guardado.
75 std::string file_name;
77 /// Contador para los id de los items.
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 *btn_dlg_quit_ok, *btn_dlg_quit_cancel;
83 Gtk::ImageMenuItem *main_menu_quit,*main_menu_new, *edit_menu_del, *edit_menu_delete_all, *main_menu_save, *main_menu_open;
84 Gtk::CheckButton *chk_btn_logica;
85 Gtk::FileSelection *file_selection, *file_open_selection;
86 Gtk::Combo *combo_entry;
87 Gtk::Dialog *dlg_connect, *dlg_about, *dlg_quit;
88 Gtk::Label *dlg_label;
89 Gtk::Statusbar *status_bar;
90 Glib::RefPtr<Gdk::Pixbuf> ico_canio, ico_y, ico_codo, ico_tanque, ico_bomba, ico_exclusa, ico_drain, ico_and, ico_or, ico_not;
91 Glib::RefPtr<Gdk::Pixbuf> ico_last;
92 std::list<Gtk::TargetEntry> listTargets;
93 std::list<CItem *> listaItems, lista_logic_Items;
94 std::list<Glib::ustring> list_pointed;
97 bool can_drop(CItem *, int , int);
98 // Sobrecarga del evento cerrar
99 virtual bool on_delete_event(GdkEventAny *e);
100 // /señales de control para los elementos de la ventana.
101 virtual void on_btn_canio_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
102 virtual void on_btn_y_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
103 virtual void on_btn_codo_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
104 virtual void on_btn_tanque_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
105 virtual void on_btn_bomba_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
106 virtual void on_btn_exclusa_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
107 virtual void on_btn_drain_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
108 virtual void on_btn_and_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
109 virtual void on_btn_or_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
110 virtual void on_btn_not_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
111 virtual void on_main_menu_quit();
112 virtual void on_main_menu_open();
113 virtual void on_main_menu_save();
114 virtual void on_edit_menu_del();
115 virtual void on_edit_menu_delete_all();
116 virtual void on_chk_btn_logica_clicked();
117 virtual void on_btn_open_cancel_clicked();
118 virtual void on_btn_file_ok_clicked();
119 virtual void on_btn_file_cancel_clicked();
120 virtual void on_btn_check_clicked();
121 virtual void on_btn_dlg_connect_clicked();
122 virtual void on_load_from_xml();
123 virtual void on_quick_btn_delete_all_clicked();
124 virtual void on_quick_btn_save_clicked();
125 virtual void on_quick_btn_new_clicked();
126 virtual void on_btn_find_clicked();
127 virtual void on_btn_dlg_quit_ok_clicked();
128 virtual void on_btn_dlg_quit_cancel_clicked();
130 ///Verifica la conexion de todos los items iterando en la listaItems.
131 bool check_connection(Glib::ustring& name);
133 // señales para cambiar el icono.
134 virtual void on_canio_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
135 virtual void on_y_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
136 virtual void on_codo_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
137 virtual void on_tanque_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
138 virtual void on_bomba_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
139 virtual void on_exclusa_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
140 virtual void on_drain_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
141 virtual void on_and_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
142 virtual void on_or_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
143 virtual void on_not_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
145 virtual void on_item_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context, CItem *);
146 virtual void on_item_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
148 virtual void on_item_drop_drag_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, GtkSelectionData* selection_data, guint info, guint time);
150 // Carga desde un XML
151 void create_lines(xmlNodePtr nodo);
152 void create_line(xmlNodePtr nodo, int logic_id);
153 Pump *loadBomba(xmlNodePtr nodo);
154 Conduct *loadConduct(xmlNodePtr nodo);
155 Exclusa *loadExclusa(xmlNodePtr nodo);
156 Cistern *loadTank(xmlNodePtr nodo);
157 Union *loadUnion(xmlNodePtr nodo);
158 Drain *loadDrain(xmlNodePtr nodo);
159 Splitter *loadCodo(xmlNodePtr nodo);
160 And *loadAnd(xmlNodePtr nodo);
161 Not *loadNot(xmlNodePtr nodo);
162 Or *loadOr(xmlNodePtr nodo);
163 Gdk::Color loadColor(xmlNodePtr nodo);