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_logic_item(temp.logic_id)->set_out_connected(true);
90 get_item(temp.store_id)->get_in_logic_connect_position(w,z);
91 draw_line(a+x_offset, b+y_offset, w+item_x_offset, z+item_y_offset, color_in);
92 get_window()->draw_line(gc, a, b, a+x_offset, b+y_offset);
93 get_window()->draw_line(gc, w, z, w+item_x_offset, z+item_y_offset);
97 i = lista_lineas_out.begin();
98 while ( i != lista_lineas_out.end() ) {
100 if ( get_item(temp.store_id) != NULL && get_logic_item(temp.logic_id) != NULL ) {
101 img = get_logic_item(temp.logic_id)->get_img_actual();
102 item_y_offset = item_x_offset = 0;
103 x_offset = y_offset = 0;
117 get_item(temp.store_id)->get_out_logic_connect_position(w,z);
118 if (dynamic_cast<Not *>(get_logic_item(temp.logic_id)))
119 get_logic_item(temp.logic_id)->set_in_connected(true);
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);
129 void WorkPlace::delete_item(int _id)
132 std::list<CItem*>::iterator i = listaItems->begin();
133 while ( i != listaItems->end() ){
135 if ( temp->get_id() == _id ){
136 listaItems->erase(i);
142 i = lista_logic_Items->begin();
143 while ( i != lista_logic_Items->end() ){
145 if ( temp->get_id() == _id ){
146 lista_logic_Items->erase(i);
155 CItem* WorkPlace::get_logic_item(int _id)
157 std::list<CItem *>::iterator i = lista_logic_Items->begin();
158 while ( i != lista_logic_Items->end() ){
159 if ( (*i)->get_id() == _id )
166 CItem *WorkPlace::get_item(int _id)
168 std::list<CItem *>::iterator i = listaItems->begin();
169 while ( i != listaItems->end() ){
170 if ( (*i)->get_id() == _id )
177 int WorkPlace::get_logic_id(const std::string &_s)
179 std::list<CItem *>::iterator i = lista_logic_Items->begin();
180 while ( i != lista_logic_Items->end() ){
181 if ( (*i)->get_name() == _s )
182 return (*i)->get_id();
188 int WorkPlace::get_item_id(const std::string &_s)
190 std::list<CItem *>::iterator i = listaItems->begin();
191 while ( i != listaItems->end() ){
192 if ( (*i)->get_name() == _s )
193 return (*i)->get_id();
199 void WorkPlace::delete_line(int _id)
201 std::list<t_line>::iterator i = lista_lineas_in.begin();
202 while ( i != lista_lineas_in.end() ){
203 if (get_item( (*i).store_id ) != NULL)
204 if ( get_item( (*i).store_id )->get_id() == _id ) {
205 lista_lineas_in.erase(i);
206 i = lista_lineas_in.begin();
211 i = lista_lineas_in.begin();
212 while ( i != lista_lineas_in.end() ){
213 if ( get_logic_item((*i).logic_id) != NULL)
214 if ( get_logic_item((*i).logic_id)->get_id() == _id) {
215 get_logic_item((*i).logic_id)->set_out_connected(false);
216 lista_lineas_in.erase(i);
217 i = lista_lineas_in.begin();
222 std::list<t_line>::iterator j = lista_lineas_out.begin();
223 while ( j != lista_lineas_out.end() ){
224 if ( get_item((*j).store_id) != NULL )
225 if ( get_item((*j).store_id)->get_id() == _id ) {
226 lista_lineas_out.erase(j);
227 j = lista_lineas_out.begin();
232 j = lista_lineas_out.begin();
233 while ( j != lista_lineas_out.end() ){
234 if ( get_logic_item((*j).logic_id) != NULL )
235 if ( get_logic_item((*j).logic_id)->get_id() == _id ) {
236 if (dynamic_cast<Not *>(get_logic_item((*i).logic_id)))
237 get_logic_item((*j).logic_id)->set_in_connected(false);
238 lista_lineas_out.erase(j);
239 j = lista_lineas_out.begin();
245 void WorkPlace::update_logic_position()
247 std::list<CItem*>::iterator i = listaItems->begin();
248 while ( i != listaItems->end() ){
249 (*i)->update_logic_position();
252 i = lista_logic_Items->begin();
253 while ( i != lista_logic_Items->end() ){
254 (*i)->update_logic_position();
259 void WorkPlace::draw_line(int x1, int y1, int x2, int y2, Gdk::Color &color)
261 gc->set_foreground(color);
262 gc->set_line_attributes(3, Gdk::LINE_SOLID, Gdk::CAP_NOT_LAST, Gdk::JOIN_MITER);
263 get_window()->draw_line (gc, x1, y1, x1, y2);
264 get_window()->draw_line (gc, x1, y2, x2, y2);