7 int WorkPlace::pointed = -1;
9 WorkPlace::WorkPlace(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml> &refGlade):Gtk::Fixed(cobject)
11 gc = Gdk::GC::create(get_window());
12 Glib::RefPtr<Gdk::Colormap> colormap = gc->get_colormap();
13 color_in = Gdk::Color("red");
14 color_out = Gdk::Color("blue");
15 color_dot = Gdk::Color("black");
16 colormap->alloc_color(color_in);
17 colormap->alloc_color(color_out);
18 colormap->alloc_color(color_dot);
21 WorkPlace::~WorkPlace()
25 void WorkPlace::on_realize()
27 Gtk::Fixed::on_realize();
28 gc = Gdk::GC::create(get_window());
29 Glib::RefPtr<Gdk::Colormap> colormap = gc->get_colormap();
30 color_in = Gdk::Color("red");
31 color_out = Gdk::Color("blue");
32 colormap->alloc_color(color_in);
33 colormap->alloc_color(color_out);
36 bool WorkPlace::on_expose_event(GdkEventExpose *event)
39 gc->set_foreground(color_dot);
40 for(x=0; x<get_width(); x+=32)
41 for (y=0; y<get_height();y+=32){
42 get_window()->draw_point (gc, x,y);
43 get_window()->draw_point (gc, x,y+1);
44 get_window()->draw_point (gc, x,y-1);
45 get_window()->draw_point (gc, x+1,y);
46 get_window()->draw_point (gc, x-1,y);
50 std::list<CItem *>::iterator j = listaItems->begin();
51 while ( j != listaItems->end() ) {
52 (*j)->update_logic_position();
57 int a, b, w, z, x_offset, y_offset, img;
58 int item_x_offset, item_y_offset;
59 std::list<t_line>::iterator i = lista_lineas_in.begin();
60 while ( i != lista_lineas_in.end() ) {
62 if ( get_item(temp.store_id) != NULL && get_logic_item(temp.logic_id) != NULL ) {
63 img = get_logic_item(temp.logic_id)->get_img_actual();
64 item_y_offset = item_x_offset = 0;
65 x_offset = y_offset = 0;
66 if (dynamic_cast<Pump *>(get_item(temp.store_id))) {
68 } else if (dynamic_cast<Exclusa *>(get_item(temp.store_id))) {
69 if (get_item(temp.store_id)->get_img_actual()==0) {
88 get_logic_item(temp.logic_id)->get_out_logic_connect_position(a, b);
89 get_item(temp.store_id)->get_in_logic_connect_position(w,z);
90 draw_line(a+x_offset, b+y_offset, w+item_x_offset, z+item_y_offset, color_in);
91 get_window()->draw_line(gc, a, b, a+x_offset, b+y_offset);
92 get_window()->draw_line(gc, w, z, w+item_x_offset, z+item_y_offset);
96 i = lista_lineas_out.begin();
97 while ( i != lista_lineas_out.end() ) {
99 if ( get_item(temp.store_id) != NULL && get_logic_item(temp.logic_id) != NULL ) {
100 img = get_logic_item(temp.logic_id)->get_img_actual();
101 item_y_offset = item_x_offset = 0;
102 x_offset = y_offset = 0;
116 if ( temp.cistern_out1 )
117 get_item(temp.store_id)->get_in_logic_connect_position(w,z);
119 get_item(temp.store_id)->get_out_logic_connect_position(w,z);
120 get_logic_item(temp.logic_id)->get_in_logic_connect_position(a, b);
121 draw_line(w+item_y_offset, z+item_y_offset, a+x_offset, b+y_offset,color_out);
122 get_window()->draw_line(gc, a, b, a+x_offset, b+y_offset);
127 i = lista_lineas_logic.begin();
128 while ( i != lista_lineas_logic.end() ) {
130 if ( get_logic_item(temp.store_id) != NULL && get_logic_item(temp.logic_id) != NULL ) {
131 get_logic_item(temp.logic_id)->get_out_logic_connect_position(w,z);
132 get_logic_item(temp.store_id)->get_in_logic_connect_position(a, b);
133 get_window()->draw_line(gc, a, b, w,z);
140 void WorkPlace::delete_item(int _id)
143 std::list<CItem*>::iterator i = listaItems->begin();
144 while ( i != listaItems->end() ){
146 if ( temp->get_id() == _id ){
147 listaItems->erase(i);
153 i = lista_logic_Items->begin();
154 while ( i != lista_logic_Items->end() ){
156 if ( temp->get_id() == _id ){
157 lista_logic_Items->erase(i);
166 CItem* WorkPlace::get_logic_item(int _id)
168 std::list<CItem *>::iterator i = lista_logic_Items->begin();
169 while ( i != lista_logic_Items->end() ){
170 if ( (*i)->get_id() == _id )
177 CItem *WorkPlace::get_item(int _id)
179 std::list<CItem *>::iterator i = listaItems->begin();
180 while ( i != listaItems->end() ){
181 if ( (*i)->get_id() == _id )
188 int WorkPlace::get_logic_id(const std::string &_s)
190 std::list<CItem *>::iterator i = lista_logic_Items->begin();
191 while ( i != lista_logic_Items->end() ){
192 if ( (*i)->get_name() == _s )
193 return (*i)->get_id();
199 int WorkPlace::get_item_id(const std::string &_s)
201 std::list<CItem *>::iterator i = listaItems->begin();
202 while ( i != listaItems->end() ){
203 if ( (*i)->get_name() == _s )
204 return (*i)->get_id();
210 void WorkPlace::delete_line(int _id)
212 /* LINEAS A LAS ENTRADAS DE LOS ITEMS */
213 /* Borro la linea desde el item eliminado hasta el que este conectado */
214 std::list<t_line>::iterator i = lista_lineas_in.begin();
215 while ( i != lista_lineas_in.end() ){
216 if (get_item( (*i).store_id ) != NULL)
217 if ( get_item( (*i).store_id )->get_id() == _id ) {
218 get_logic_item((*i).logic_id)->set_out_connected(false);
219 lista_lineas_in.erase(i);
220 i = lista_lineas_in.begin();
225 /* Borra la linea desde la compuerta eliminada hasta el item conectado a ella */
226 i = lista_lineas_in.begin();
227 while ( i != lista_lineas_in.end() ){
228 if ( get_logic_item((*i).logic_id) != NULL)
229 if ( get_logic_item((*i).logic_id)->get_id() == _id) {
230 lista_lineas_in.erase(i);
231 i = lista_lineas_in.begin();
236 /* LINEAS A LAS SALIDAS DE LOS ITEMS */
237 /* Borro la linea desde el item eliminado hasta el que este conectado */
238 std::list<t_line>::iterator j = lista_lineas_out.begin();
239 while ( j != lista_lineas_out.end() ){
240 if ( get_item((*j).store_id) != NULL )
241 if ( get_item((*j).store_id)->get_id() == _id ) {
242 if (dynamic_cast<Not *>(get_logic_item((*j).logic_id)))
243 get_logic_item((*j).logic_id)->set_in_connected(false);
244 lista_lineas_out.erase(j);
245 j = lista_lineas_out.begin();
250 /* Borra la linea desde la compuerta eliminada hasta el item conectado a ella */
251 j = lista_lineas_out.begin();
252 while ( j != lista_lineas_out.end() ){
253 if ( get_logic_item((*j).logic_id) != NULL )
254 if ( get_logic_item((*j).logic_id)->get_id() == _id ) {
255 lista_lineas_out.erase(j);
256 j = lista_lineas_out.begin();
261 /* LINEAS ENTRE COMPUERTAS */
262 /* Borra la linea entre al compuerta eliminada y la que esta conectada a ella en su entrada */
263 std::list<t_line>::iterator k = lista_lineas_logic.begin();
264 while ( k != lista_lineas_logic.end() ){
265 if ( get_logic_item((*k).store_id) != NULL )
266 if ( get_logic_item((*k).store_id)->get_id() == _id ) {
267 get_logic_item((*k).logic_id)->set_out_connected(false);
268 std::cout<< get_logic_item((*k).logic_id)->get_name() <<std::endl;
269 lista_lineas_logic.erase(k);
270 k = lista_lineas_logic.begin();
275 /* Borra la linea entre al compuerta eliminada y la que esta conectada a ella en su salida*/
276 k = lista_lineas_logic.begin();
277 while ( k != lista_lineas_logic.end() ){
278 if ( get_logic_item((*k).logic_id) != NULL )
279 if ( get_logic_item((*k).logic_id)->get_id() == _id ) {
280 if (dynamic_cast<Not *>(get_logic_item((*k).store_id)))
281 get_logic_item((*k).store_id)->set_in_connected(false);
282 lista_lineas_logic.erase(k);
283 k = lista_lineas_logic.begin();
289 void WorkPlace::update_logic_position()
291 std::list<CItem*>::iterator i = listaItems->begin();
292 while ( i != listaItems->end() ){
293 (*i)->update_logic_position();
296 i = lista_logic_Items->begin();
297 while ( i != lista_logic_Items->end() ){
298 (*i)->update_logic_position();
303 void WorkPlace::draw_line(int x1, int y1, int x2, int y2, Gdk::Color &color)
305 gc->set_foreground(color);
306 gc->set_line_attributes(3, Gdk::LINE_SOLID, Gdk::CAP_NOT_LAST, Gdk::JOIN_MITER);
307 get_window()->draw_line (gc, x1, y1, x1, y2);
308 get_window()->draw_line (gc, x1, y2, x2, y2);
312 bool WorkPlace::chek_name(Glib::ustring _name, int _id)
314 std::list<CItem *>::iterator i;
315 i = listaItems->begin();
316 while ( i != listaItems->end() ) {
317 if ( (*i)->get_name() == _name && (*i)->get_id() != _id )