X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/667418327423ba116d24751926a95a2f1235849c..44617167ac216781537290dce9cc097df89dc3d2:/Constructor/include/constructor.h?ds=inline diff --git a/Constructor/include/constructor.h b/Constructor/include/constructor.h index b406ce5..bf6bc4e 100644 --- a/Constructor/include/constructor.h +++ b/Constructor/include/constructor.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include "workplace.h" #include "item.h" #include "splitter.h" @@ -24,33 +24,80 @@ #include "and.h" #include "or.h" #include "not.h" - +#include "libxml/parser.h" +/** + * Clase principal de esta aplicación. + * Esta clase se encargada de obtener e + * inicializar todos los elementos de la ventana + * principal, ya sean botones, cuadros de diálogo, barras + * de herramientas, etc. + * + * Para cada botón referenciado por esta clase, es + * conectado a ellos una señal, que será el método que + * deben invocar al ser presionados. + * + * Uno de los métodos mas importantes de esta clase es + * on_item_drop_drag_recived() que es la encargada de + * crear un nuevo elemento si es arrastrado desde la barra + * de elementos, o de moverlo dentro del + * \ref WorkPlace "área de trabajo" si este ya estaba creado. + * + * Para facilitar el diseño y disminuir la complejidad, la + * grilla fue dividida en sectores de 32x32 píxels, lo que + * permite que el usuario no tenga que ser muy preciso a + * la hora de soltar un item en el + * \ref WorkPlace "área de trabajo". + * + * Cada nuevo elemento creado es almacenado en una + * \ref listaItems "lista de elementos de transporte o almacenamiento de fluido", + * o en una \ref lista_logic_Items "lista de elementos lógicos". + * + * Otra de las funciones principales es check_connection() + * que recorre todos los items de ambas listas y verifica + * que se haya formado en el momento del diseño un + * circuito posible. + * + * Esta clase contiene los métodos necesarios para guardar + * y cargar un archivo XML cuyo formato se explica más adelante. + */ class Constructor : public Gtk::Window { public: Constructor(BaseObjectType* cobject, const Glib::RefPtr& refGlade); virtual ~Constructor(); private: + ///Archivo donde se guarda el trabajo. FILE *archivo; + + ///Variable que indica si el trabajo fue guardado. + bool saved; + + ///Ruta al archivo. + std::string file_name; protected: + /// Contador para los id de los items. int id; - // / defino los elementos de la ventana. + /// Defino los elementos de la ventana. 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, - *btn_and, *btn_or, *btn_not; - Gtk::ImageMenuItem *main_menu_quit, *edit_menu_del, *main_menu_save; + *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, + *btn_dlg_quit_ok, *btn_dlg_quit_cancel; + Gtk::ImageMenuItem *main_menu_quit,*main_menu_new, *edit_menu_del, *edit_menu_delete_all, *main_menu_save, *main_menu_open; Gtk::CheckButton *chk_btn_logica; - Gtk::FileSelection *file_selection; - Gtk::Entry *combo_entry; - Gtk::Dialog *dlg_connect; + Gtk::FileSelection *file_selection, *file_open_selection; + Gtk::Combo *combo_entry; + Gtk::Dialog *dlg_connect, *dlg_about, *dlg_quit; Gtk::Label *dlg_label; + Gtk::Statusbar *status_bar; Glib::RefPtr ico_canio, ico_y, ico_codo, ico_tanque, ico_bomba, ico_exclusa, ico_drain, ico_and, ico_or, ico_not; Glib::RefPtr ico_last; std::list listTargets; std::list listaItems, lista_logic_Items; + std::list list_pointed; WorkPlace *workplace; bool logica; bool can_drop(CItem *, int , int); + // Sobrecarga del evento cerrar + virtual bool on_delete_event(GdkEventAny *e); // /señales de control para los elementos de la ventana. - virtual void on_btn_canio_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_btn_y_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_btn_codo_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); @@ -62,14 +109,27 @@ class Constructor : public Gtk::Window { virtual void on_btn_or_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_btn_not_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_main_menu_quit(); + virtual void on_main_menu_open(); virtual void on_main_menu_save(); virtual void on_edit_menu_del(); - virtual void on_chk_btn_clicked(); + virtual void on_edit_menu_delete_all(); + virtual void on_chk_btn_logica_clicked(); + virtual void on_btn_open_cancel_clicked(); virtual void on_btn_file_ok_clicked(); virtual void on_btn_file_cancel_clicked(); virtual void on_btn_check_clicked(); virtual void on_btn_dlg_connect_clicked(); - + virtual void on_load_from_xml(); + virtual void on_quick_btn_delete_all_clicked(); + virtual void on_quick_btn_save_clicked(); + virtual void on_quick_btn_new_clicked(); + virtual void on_btn_find_clicked(); + virtual void on_btn_dlg_quit_ok_clicked(); + virtual void on_btn_dlg_quit_cancel_clicked(); + + ///Verifica la conexion de todos los items iterando en la listaItems. + bool check_connection(Glib::ustring& name); + // señales para cambiar el icono. virtual void on_canio_drag_begin(const Glib::RefPtr& context); virtual void on_y_drag_begin(const Glib::RefPtr& context); @@ -86,5 +146,20 @@ class Constructor : public Gtk::Window { virtual void on_item_drag_data_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); virtual void on_item_drop_drag_received(const Glib::RefPtr& context, int x, int y, GtkSelectionData* selection_data, guint info, guint time); + + // Carga desde un XML + void create_lines(xmlNodePtr nodo); + void create_line(xmlNodePtr nodo, int logic_id); + Pump *loadBomba(xmlNodePtr nodo); + Conduct *loadConduct(xmlNodePtr nodo); + Exclusa *loadExclusa(xmlNodePtr nodo); + Cistern *loadTank(xmlNodePtr nodo); + Union *loadUnion(xmlNodePtr nodo); + Drain *loadDrain(xmlNodePtr nodo); + Splitter *loadCodo(xmlNodePtr nodo); + And *loadAnd(xmlNodePtr nodo); + Not *loadNot(xmlNodePtr nodo); + Or *loadOr(xmlNodePtr nodo); + Gdk::Color loadColor(xmlNodePtr nodo); }; #endif