]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/src/item.cpp
* Se agrega carga de una planta desde un XML (Archivo->Abrir)
[z.facultad/75.42/plaqui.git] / Constructor / src / item.cpp
1 #include "item.h"
2
3 bool CItem::    logic_connect = false;
4 int CItem::quien = -1;
5
6
7 CItem::CItem(const char *filename):Gtk::DrawingArea()
8 {
9         image = Gdk::Pixbuf::create_from_file(filename);
10         set_size_request(image->get_width(), image->get_height());
11 }
12
13 CItem::CItem()
14 {
15         Glib::RefPtr<Gnome::Glade::Xml> ref;
16         ref = Gnome::Glade::Xml::create(PACKAGE_DATA_DIR"/plaqui-constructor/dialogs/constructor.glade", "item_pty_wnd");
17         ref->get_widget_derived("item_pty_wnd",property_wnd);
18         caudal_max = 0.0;
19         is_union = true;
20         is_connected = false;
21         is_logic =false;
22         property_wnd->item = this;
23         menu_image_propiedades.set(Gtk::Stock::PREFERENCES, Gtk::ICON_SIZE_MENU);
24         menu_image_delete.set(Gtk::Stock::CANCEL, Gtk::ICON_SIZE_MENU);
25         menu_image_rotar.set(Gtk::Stock::REFRESH, Gtk::ICON_SIZE_MENU);
26         menu_image_linea.set(Gtk::Stock::CONVERT, Gtk::ICON_SIZE_MENU);
27         menulist = menu_popup.items();
28     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Propiedades",menu_image_propiedades, SigC::slot(*this, &CItem::on_menu_popup_propiedades) ) );
29     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Rotar", menu_image_rotar ,SigC::slot(*this, &CItem::on_menu_popup_rotar) ) );
30     menulist.push_back( Gtk::Menu_Helpers::ImageMenuElem("Eliminar", menu_image_delete,SigC::slot(*this, &CItem::on_menu_popup_eliminar) ) ) ;
31         menu_popup.accelerate(*this);
32 }
33
34 CItem::~CItem()
35 {
36         std::cout << "Item Die" << std::endl;
37 }
38
39 bool CItem::on_expose_event(GdkEventExpose* event)
40 {
41         image->render_to_drawable ( get_window(),  get_style()->get_black_gc(), 0,  0,  0,  0,  image->get_width() ,image->get_height() , 
42                                                                                                                                 Gdk::RGB_DITHER_NONE, 0, 0);
43
44         // XXX Esto no deberia ser necesario! en todo caso devolves false en
45         // vez de true para que siga llamando a los otros handlers :)
46         //Gtk::DrawingArea::on_expose_event(event);
47         return true;
48 }
49
50 void CItem::on_menu_popup_propiedades()
51 {
52 }
53
54 void CItem::on_menu_popup_rotar()
55 {
56 }
57
58 void CItem::on_menu_popup_eliminar()
59 {
60         workplace->delete_item(ID);
61 }
62
63 void CItem::on_menu_popup_conectar()
64 {
65         CItem::logic_connect = true;
66         CItem::quien = ID;      
67 }
68
69 int CItem::get_position_x()
70 {
71         return x;
72 }
73
74 int CItem::get_position_y()
75 {
76         return y;
77 }
78
79 int CItem::get_id()
80 {
81         return ID;
82 }
83
84 double CItem::get_caudal()
85 {
86         return caudal_max;
87 }
88
89
90 Glib::ustring CItem::get_name()
91 {
92         return name;
93 }
94
95 Glib::ustring CItem::get_other_name(int _id)
96 {
97         std::list<CItem *>::iterator i = listaItems->begin();
98         while ( i != listaItems->end() ) {
99                 if ( (*i)->get_id() == _id ) 
100                         return (*i)->get_name();
101                 i++;
102         }
103         return name;
104 }
105
106 int CItem::get_img_actual()
107 {
108         return imgActual;
109 }
110
111 void CItem::set_position(int _x, int _y)
112 {
113         this->x = _x;
114         this->y = _y;
115 }
116
117 void CItem::set_id(int _id)
118 {
119         ID = _id;
120 }
121
122 void CItem::set_caudal(double _caudal)
123 {
124          caudal_max = _caudal;
125 }
126
127 void CItem::set_name(Glib::ustring _name)
128 {
129         name = _name;
130 }
131
132 bool CItem::is_occupied_area(int _a, int _b)
133 {       
134         if ( ( _a >= x ) && ( _a < x+image->get_width()) && (_b >= y) && (_b < y+image->get_height()) )  
135                         return true;
136                 else return false;
137 }
138
139 ConnectorType CItem::is_other_connection_area(int _a, int _b, CItem **_item)
140 {
141         ConnectorType temp2;
142         std::list<CItem *>::iterator i = listaItems->begin();
143         while ( i != listaItems->end() ) {
144                 CItem *temp = *i;
145                 if (temp != this) 
146                         if ( (temp2 = temp->get_connector_type(_a,_b)) != UNDEF ) {
147                                 *_item = temp;
148                                 return temp2;
149                         }
150                 i++;
151         }
152         return UNDEF;
153 }
154 ConnectorType CItem::get_connector_type( int _a, int _b )
155 {
156         return UNDEF;
157 }
158 void CItem::set_default_connector()
159 {
160 }