From 4ac79a1d1914c71cd3d15853f4b15f5646885412 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Tue, 28 Oct 2003 21:03:34 +0000 Subject: [PATCH] bueno, hice que el doble click abra una ventanita de propiedades, pero solo lo implemente para el tanque y el tubo porque queria que me digan que les parece. Ademas no se si me estoy enquilombando demasiado, porque como lo pense me parcecio mejor crear una clase para cada tipo de ventana de propiedades, --ya que no van a ser todas iguales-- ademas todas descienden de uan ventana de propiedades que seria la que contiene las seniales de los botones y esas cosas que si tienen todas... La cuestion es que me parece que se me esta armando bardo con todas las clases que estoy creando... diganme si se debe simplificar un poco o asi esta bien... El make hizo que mi estilo de vida suba en un 300%, gracias por existir.!!! --- Constructor/cistern.cpp | 25 ++++ Constructor/cistern.h | 3 +- Constructor/cisternptywnd.cpp | 11 ++ Constructor/cisternptywnd.h | 17 +++ Constructor/conduct.cpp | 25 ++++ Constructor/conduct.h | 1 + Constructor/conductptywnd.cpp | 11 ++ Constructor/conductptywnd.h | 17 +++ Constructor/constructor.cpp | 4 +- Constructor/constructor.glade | 251 ++++++++++++++++++++++++++++++++-- Constructor/constructor.h | 2 +- Constructor/item.cpp | 12 +- Constructor/item.h | 8 +- Constructor/propertywnd.cpp | 39 ++++++ Constructor/propertywnd.h | 27 ++++ 15 files changed, 432 insertions(+), 21 deletions(-) create mode 100644 Constructor/cisternptywnd.cpp create mode 100644 Constructor/cisternptywnd.h create mode 100644 Constructor/conductptywnd.cpp create mode 100644 Constructor/conductptywnd.h create mode 100644 Constructor/propertywnd.cpp create mode 100644 Constructor/propertywnd.h diff --git a/Constructor/cistern.cpp b/Constructor/cistern.cpp index ef12915..c71b849 100644 --- a/Constructor/cistern.cpp +++ b/Constructor/cistern.cpp @@ -8,6 +8,15 @@ Cistern::Cistern() imgActual = 0; image = imageE; set_size_request(image->get_width(), image->get_height()); + + Glib::RefPtr ref; + try { + ref = Gnome::Glade::Xml::create("constructor.glade", "cistern_pty_wnd"); + } + catch(const Gnome::Glade::XmlError &ex) { + std::cerr << ex.what() << std::endl; + } + ref->get_widget_derived("cistern_pty_wnd",property_wnd); } Cistern::~Cistern() @@ -31,10 +40,18 @@ bool Cistern::on_button_press_event(GdkEventButton *event) set_size_request(image->get_width(),image->get_height()); image->render_to_drawable(get_window(),get_style()->get_black_gc(),0,0,0,0,image->get_width(),image->get_height(),Gdk::RGB_DITHER_NONE,0,0); } + if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 3)){ menu_popup.popup(event->button, event->time); return true; //It has been handled. } + + if ((event->type == GDK_2BUTTON_PRESS) && (event->button ==1)){ + if( property_wnd->is_open() == false ){ + property_wnd->show(); + property_wnd->set_open (true); + } + } return true; } @@ -45,3 +62,11 @@ void Cistern::on_menu_popup_rotar() event.button = 2; Cistern::on_button_press_event(&event); } + +void Cistern::on_menu_popup_propiedades() +{ + GdkEventButton event; + event.type = GDK_2BUTTON_PRESS; + event.button = 1; + Cistern::on_button_press_event(&event); +} diff --git a/Constructor/cistern.h b/Constructor/cistern.h index 3fb32ba..f4affb5 100644 --- a/Constructor/cistern.h +++ b/Constructor/cistern.h @@ -3,13 +3,14 @@ #define _CISTERN_H_ #include "item.h" - +#include "cisternptywnd.h" class Cistern : public CItem { public: Cistern(); virtual ~Cistern(); virtual bool on_button_press_event(GdkEventButton *event); virtual void on_menu_popup_rotar(); + virtual void on_menu_popup_propiedades(); private: int imgActual; diff --git a/Constructor/cisternptywnd.cpp b/Constructor/cisternptywnd.cpp new file mode 100644 index 0000000..98acbd6 --- /dev/null +++ b/Constructor/cisternptywnd.cpp @@ -0,0 +1,11 @@ +//cisternptywnd.cpp + +#include "cisternptywnd.h" + +CisternPtyWnd::CisternPtyWnd():PropertyWnd() +{ +} + +CisternPtyWnd::~CisternPtyWnd() +{ +} diff --git a/Constructor/cisternptywnd.h b/Constructor/cisternptywnd.h new file mode 100644 index 0000000..2429af4 --- /dev/null +++ b/Constructor/cisternptywnd.h @@ -0,0 +1,17 @@ +//cisternptywnd.h + +#ifndef _CISTERNPTYWND_H_ +#define _CISTERNPTYWND_H_ + +#include "propertywnd.h" + +class CisternPtyWnd : public PropertyWnd{ + public: + CisternPtyWnd(); + virtual ~CisternPtyWnd(); + protected: + + +}; + +#endif diff --git a/Constructor/conduct.cpp b/Constructor/conduct.cpp index 075f645..4b7fa17 100644 --- a/Constructor/conduct.cpp +++ b/Constructor/conduct.cpp @@ -8,6 +8,16 @@ Conduct::Conduct() imgActual = 0; image = imageN; set_size_request(image->get_width(), image->get_height()); + + Glib::RefPtr ref; + try { + ref = Gnome::Glade::Xml::create("constructor.glade", "conduct_pty_wnd"); + } + catch(const Gnome::Glade::XmlError &ex) { + std::cerr << ex.what() << std::endl; + } + //tengo que crear una clase para esta ventana..!!! + ref->get_widget_derived("conduct_pty_wnd",property_wnd); } Conduct::~Conduct() @@ -37,6 +47,13 @@ bool Conduct::on_button_press_event(GdkEventButton *event) menu_popup.popup(event->button, event->time); return true; //It has been handled. } + + if ((event->type == GDK_2BUTTON_PRESS) && (event->button ==1)){ + if( property_wnd->is_open() == false ){ + property_wnd->show(); + property_wnd->set_open (true); + } + } return true; } @@ -47,3 +64,11 @@ void Conduct::on_menu_popup_rotar() event.button = 2; Conduct::on_button_press_event(&event); } + +void Conduct::on_menu_popup_propiedades() +{ + GdkEventButton event; + event.type = GDK_2BUTTON_PRESS; + event.button = 1; + Conduct::on_button_press_event(&event); +} diff --git a/Constructor/conduct.h b/Constructor/conduct.h index 2a44ce1..4735d82 100644 --- a/Constructor/conduct.h +++ b/Constructor/conduct.h @@ -10,6 +10,7 @@ class Conduct : public CItem { virtual ~Conduct(); virtual bool on_button_press_event(GdkEventButton *event); virtual void on_menu_popup_rotar(); + virtual void on_menu_popup_propiedades(); private: int imgActual; diff --git a/Constructor/conductptywnd.cpp b/Constructor/conductptywnd.cpp new file mode 100644 index 0000000..f1650d3 --- /dev/null +++ b/Constructor/conductptywnd.cpp @@ -0,0 +1,11 @@ +//conductptywnd.cpp + +#include "conductptywnd.h" + +ConductPtyWnd::ConductPtyWnd():PropertyWnd() +{ +} + +ConductPtyWnd::~ConductPtyWnd() +{ +} diff --git a/Constructor/conductptywnd.h b/Constructor/conductptywnd.h new file mode 100644 index 0000000..3afb970 --- /dev/null +++ b/Constructor/conductptywnd.h @@ -0,0 +1,17 @@ +//conductptywnd.h + +#ifndef _CONDUCTPTYWND_H_ +#define _CONDUCTPTYWND_H_ + +#include "propertywnd.h" + +class ConductPtyWnd : public PropertyWnd{ + public: + ConductPtyWnd(); + virtual ~ConductPtyWnd(); + protected: + + +}; + +#endif diff --git a/Constructor/constructor.cpp b/Constructor/constructor.cpp index ca97953..caa74f8 100644 --- a/Constructor/constructor.cpp +++ b/Constructor/constructor.cpp @@ -21,7 +21,7 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtr& c gtk_selection_data_set(selection_data, selection_data->target, 8,(const guchar*)"item_tanque.png",15); } -void Constructor::on_main_menu_quit(void) +void Constructor::on_main_menu_quit() { Gtk::Main::quit(); } diff --git a/Constructor/constructor.glade b/Constructor/constructor.glade index cf3c90b..e1d757d 100644 --- a/Constructor/constructor.glade +++ b/Constructor/constructor.glade @@ -29,7 +29,7 @@ 1 - + True @@ -507,10 +507,10 @@ Empalme - - 271 + + 354 194 - Propiedades + Propiedades del Tanque GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False @@ -527,10 +527,10 @@ Empalme True - GTK_BUTTONBOX_END + GTK_BUTTONBOX_SPREAD - + True True True @@ -542,7 +542,7 @@ Empalme - + True True True @@ -552,6 +552,18 @@ Empalme -5 + + + + True + True + True + gtk-apply + True + GTK_RELIEF_NORMAL + -10 + + 0 @@ -630,7 +642,7 @@ Empalme 104 24 True - Fluido Máximo + Capacidad False False GTK_JUSTIFY_LEFT @@ -652,7 +664,7 @@ Empalme 120 24 True - Fluido Mínimo + Fluido Máximo False False GTK_JUSTIFY_LEFT @@ -674,7 +686,7 @@ Empalme 96 24 True - otra cosa + Otra propiedad False False GTK_JUSTIFY_LEFT @@ -701,4 +713,223 @@ Empalme + + Propiedades del Tubo + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + False + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + -6 + + + + + + True + True + True + gtk-apply + True + GTK_RELIEF_NORMAL + -10 + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + -5 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + 3 + 2 + True + 0 + 0 + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 1 0 100 1 10 10 + + + 1 + 2 + 0 + 1 + + + + + + + True + Flujo Máximo + False + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 1 0 100 1 10 10 + + + 1 + 2 + 1 + 2 + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 1 0 100 1 10 10 + + + 1 + 2 + 2 + 3 + + + + + + + True + Longitud + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + Otro + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + 10 + True + False + GTK_PACK_END + + + + + + diff --git a/Constructor/constructor.h b/Constructor/constructor.h index 1bb5013..fe959fe 100644 --- a/Constructor/constructor.h +++ b/Constructor/constructor.h @@ -36,7 +36,7 @@ class Constructor : public Gtk::Window { 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); virtual void on_btn_tanque_drag_get(const Glib::RefPtr& context, GtkSelectionData* selection_data, guint info, guint time); - virtual void on_main_menu_quit(void); + virtual void on_main_menu_quit(); // señales para cambiar el icono. virtual void on_canio_drag_begin(const Glib::RefPtr& context); diff --git a/Constructor/item.cpp b/Constructor/item.cpp index 720a86c..4caba43 100644 --- a/Constructor/item.cpp +++ b/Constructor/item.cpp @@ -5,15 +5,17 @@ CItem::CItem(const char *filename):Gtk::DrawingArea() { image = Gdk::Pixbuf::create_from_file(filename); set_size_request(image->get_width(), image->get_height()); + } CItem::CItem() { - menu_image.set(Gtk::Stock::CANCEL, Gtk::ICON_SIZE_MENU); + menu_image_delete.set(Gtk::Stock::CANCEL, Gtk::ICON_SIZE_MENU); + menu_image_rotar.set(Gtk::Stock::REFRESH, Gtk::ICON_SIZE_MENU); Gtk::Menu::MenuList& menulist = menu_popup.items(); - menulist.push_back( Gtk::Menu_Helpers::MenuElem("Opcion", SigC::slot(*this, &CItem::on_menu_popup_opcion) ) ); - menulist.push_back( Gtk::Menu_Helpers::MenuElem("Rotar", Gtk::Menu::AccelKey("r"),SigC::slot(*this, &CItem::on_menu_popup_rotar) ) ); - menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Eliminar", menu_image,SigC::slot(*this, &CItem::on_menu_popup_eliminar) ) ) ; + menulist.push_back( Gtk::Menu_Helpers::MenuElem("Propiedades", SigC::slot(*this, &CItem::on_menu_popup_propiedades) ) ); + menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Rotar",Gtk::Menu::AccelKey("r"), menu_image_rotar ,SigC::slot(*this, &CItem::on_menu_popup_rotar) ) ); + menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Eliminar", menu_image_delete,SigC::slot(*this, &CItem::on_menu_popup_eliminar) ) ) ; menu_popup.accelerate(*this); } @@ -32,7 +34,7 @@ bool CItem::on_expose_event(GdkEventExpose* event) return true; } -void CItem::on_menu_popup_opcion() +void CItem::on_menu_popup_propiedades() { } diff --git a/Constructor/item.h b/Constructor/item.h index 5aef5c6..5b28229 100644 --- a/Constructor/item.h +++ b/Constructor/item.h @@ -3,10 +3,13 @@ #ifndef GTKMM_EXAMPLE_DRAWINGAREALINES_H #define GTKMM_EXAMPLE_DRAWINGAREALINES_H +#include #include #include #include #include +#include +#include "propertywnd.h" class CItem:public Gtk::DrawingArea { public: @@ -14,14 +17,15 @@ public: CItem(const char *filename); ~CItem(); virtual bool on_expose_event(GdkEventExpose* event); - virtual void on_menu_popup_opcion(); + virtual void on_menu_popup_propiedades(); virtual void on_menu_popup_rotar(); virtual void on_menu_popup_eliminar(); Glib::RefPtr get_image() { return image; } protected: Gtk::Menu menu_popup; - Gtk::Image menu_image; + Gtk::Image menu_image_delete, menu_image_rotar; Glib::RefPtr image; + PropertyWnd *property_wnd; }; #endif diff --git a/Constructor/propertywnd.cpp b/Constructor/propertywnd.cpp new file mode 100644 index 0000000..c929c5b --- /dev/null +++ b/Constructor/propertywnd.cpp @@ -0,0 +1,39 @@ +//propertywnd.cpp + +#include "propertywnd.h" + +PropertyWnd::PropertyWnd() +{ + open = false; +} + +PropertyWnd::PropertyWnd(BaseObjectType* cobject, const Glib::RefPtr& refGlade): Gtk::Window(cobject) +{ + refGlade->get_widget("btn_cancel", btn_cancel); + refGlade->get_widget("btn_apply", btn_apply); + refGlade->get_widget("btn_accept", btn_accept); + + btn_cancel->signal_clicked().connect(SigC::slot(*this, &PropertyWnd::on_btn_cancel_clicked)); + open = false; +} + +PropertyWnd::~PropertyWnd() +{ +} + +void PropertyWnd::on_btn_cancel_clicked() +{ + open = false; + hide(); + //oculto la ventana, tengo que ver como hago para cerrarla del todo. +} + +bool PropertyWnd::is_open() +{ + return open; +} + +void PropertyWnd::set_open(bool o) +{ + open = o; +} diff --git a/Constructor/propertywnd.h b/Constructor/propertywnd.h new file mode 100644 index 0000000..bd5d40a --- /dev/null +++ b/Constructor/propertywnd.h @@ -0,0 +1,27 @@ +//propertywnd.h +#ifndef _PROPERTYWND_H_ +#define _PROPERTYWND_H_ + +#include +#include +#include + +class PropertyWnd : public Gtk::Window{ + public: + PropertyWnd(); + PropertyWnd(BaseObjectType* cobject, const Glib::RefPtr& refGlade); + virtual ~PropertyWnd(); + + bool is_open(); + void set_open(bool); + + protected: + bool open; + Gtk::Button *btn_cancel, *btn_accept, *btn_apply; + virtual void on_btn_cancel_clicked(); + + +}; + + +#endif -- 2.43.0