#include <gtkmm/scrolledwindow.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/fileselection.h>
-#include <gtkmm/entry.h>
+#include <gtkmm/combo.h>
#include "workplace.h"
#include "item.h"
#include "splitter.h"
#include "or.h"
#include "not.h"
#include "libxml/parser.h"
-
+/**La clase principal de esta aplicación es la clase
+ * Constructor. Ella es la 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 á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 pixels, lo que
+ * permite que el usuario no tenga que ser muy preciso a
+ * la hora de soltar un item en el área de trabajo.
+ *
+ * Cada nuevo elemento creado es almacenado en una lista
+ * de elementos ( listaItems ) de transporte o
+ * almacenamiento de fluido, o de elementos lógicos, según
+ * cual sea ( lista_logic_items).
+ *
+ * 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 mas adelante.
+ */
class Constructor : public Gtk::Window {
public:
Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
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, *file_open_selection;
- Gtk::Entry *combo_entry;
+ Gtk::Combo *combo_entry;
Gtk::Dialog *dlg_connect;
Gtk::Label *dlg_label;
+ Gtk::Statusbar *status_bar;
Glib::RefPtr<Gdk::Pixbuf> ico_canio, ico_y, ico_codo, ico_tanque, ico_bomba, ico_exclusa, ico_drain, ico_and, ico_or, ico_not;
Glib::RefPtr<Gdk::Pixbuf> ico_last;
std::list<Gtk::TargetEntry> listTargets;
std::list<CItem *> listaItems, lista_logic_Items;
+ std::list<Glib::ustring> list_pointed;
WorkPlace *workplace;
bool logica;
bool can_drop(CItem *, int , int);
virtual void on_item_drop_drag_received(const Glib::RefPtr<Gdk::DragContext>& 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);
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