]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/src/item.cpp
se corrige el bug de la primera tirada de cables
[z.facultad/75.42/plaqui.git] / Constructor / src / item.cpp
1 #include "item.h"
2
3 bool CItem::logic_connect = false;
4 int CItem::gate_id = -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 }
66
67 int CItem::get_position_x()
68 {
69         return x;
70 }
71
72 int CItem::get_position_y()
73 {
74         return y;
75 }
76
77 int CItem::get_id()
78 {
79         return ID;
80 }
81
82 double CItem::get_caudal()
83 {
84         return caudal_max;
85 }
86
87
88 Glib::ustring CItem::get_name()
89 {
90         return name;
91 }
92
93 Glib::ustring CItem::get_other_name(int _id)
94 {
95         std::list<CItem *>::iterator i = listaItems->begin();
96         while ( i != listaItems->end() ) {
97                 if ( (*i)->get_id() == _id ) 
98                         return (*i)->get_name();
99                 i++;
100         }
101         return name;
102 }
103
104 int CItem::get_img_actual()
105 {
106         return imgActual;
107 }
108
109 void CItem::set_position(int _x, int _y)
110 {
111         this->x = _x;
112         this->y = _y;
113 }
114
115 void CItem::set_id(int _id)
116 {
117         ID = _id;
118 }
119
120 void CItem::set_caudal(double _caudal)
121 {
122          caudal_max = _caudal;
123 }
124
125 void CItem::set_name(Glib::ustring _name)
126 {
127         name = _name;
128 }
129
130 bool CItem::is_occupied_area(int _a, int _b)
131 {       
132         if ( ( _a >= x ) && ( _a < x+image->get_width()) && (_b >= y) && (_b < y+image->get_height()) )  
133                         return true;
134                 else return false;
135 }
136
137 ConnectorType CItem::is_other_connection_area(int _a, int _b, CItem **_item)
138 {
139         ConnectorType temp2;
140         std::list<CItem *>::iterator i = listaItems->begin();
141         while ( i != listaItems->end() ) {
142                 CItem *temp = *i;
143                 if (temp != this) 
144                         if ( (temp2 = temp->get_connector_type(_a,_b)) != UNDEF ) {
145                                 *_item = temp;
146                                 return temp2;
147                         }
148                 i++;
149         }
150         return UNDEF;
151 }
152 ConnectorType CItem::get_connector_type( int _a, int _b )
153 {
154         return UNDEF;
155 }
156 void CItem::set_default_connector()
157 {
158 }
159
160 void CItem::get_in_logic_connect_position(int& _a, int& _b)
161 {
162         _a = x;
163         _b = y;
164 }
165
166 void CItem::get_out_logic_connect_position(int& _a, int& _b)
167 {
168         _a = x;
169         _b = y;
170 }
171
172 void CItem::update_logic_position()
173 {
174 }