]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Client/src/principal.cpp
* Simulador ==> Simulator fixed
[z.facultad/75.42/plaqui.git] / Client / src / principal.cpp
1
2
3
4 #include "principal.h"
5 #include <iostream>
6 #include <sstream>
7 #include <string>
8 #include "item_codo.h"
9 #include "item_conduct.h"
10 #include "item_exclusa.h"
11 #include "item_tank.h"
12 #include "item_pump.h"
13 #include "item_union.h"
14
15 Principal::Principal(BaseObjectType *co, const Glib::RefPtr<Gnome::Glade::Xml> &rg):Gtk::Window(co),refXml(rg)
16 {
17         Gtk::MenuItem *conect=0, *exit=0, *about=0, *mnu_prop=0;
18         Gtk::Button *btn_get=0, *bar_connect=0;
19         txt_view = 0;
20         txt_target = txt_command = txt_args = 0;
21         work_place = 0;
22         lbl_nombre = lbl_color = lbl_flujo = 0;
23
24         rg->get_widget("lbl_nombre", lbl_nombre);
25         rg->get_widget("mnu_file_connect", conect);
26         rg->get_widget("mnu_file_exit", exit);
27         rg->get_widget("mnu_help_about", about);
28         rg->get_widget("mnu_prop", mnu_prop);
29         rg->get_widget_derived("dlgConectar", dlg_conectar);
30         rg->get_widget("btn_get", btn_get);
31         rg->get_widget("txt_view", txt_view);
32         rg->get_widget("txt_target", txt_target);
33         rg->get_widget("txt_command", txt_command);
34         rg->get_widget("txt_args", txt_args);
35         rg->get_widget("bar_connect", bar_connect);
36         rg->get_widget("work_place", work_place);
37         rg->get_widget("ico_conected", ico_conected);
38
39         dlg_conectar->get_ok_button()->signal_clicked().connect( SigC::slot(*this, &Principal::on_dlg_connect_ok) );
40         mnu_prop->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_prop));
41         conect->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_file_connect));
42         bar_connect->signal_clicked().connect( SigC::slot(*this, &Principal::on_mnu_file_connect));
43         exit->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_file_exit));
44         about->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_help_about));
45         btn_get->signal_clicked().connect( SigC::slot(*this, &Principal::on_get_clicked) );
46
47         conexion = NULL;
48 }
49
50 Principal::~Principal()
51 {
52         delete conexion;
53 }
54
55 void Principal::on_dlg_connect_ok()
56 {
57         if (conexion == NULL) {
58                 // Creo la conexion
59                 try {
60                         conexion = new PlaQui::Server::ControlClient(dlg_conectar->get_server_name(), dlg_conectar->get_server_port());
61                 }
62                 catch (...) {
63                         txt_view->get_buffer()->insert_at_cursor("NO SE PUDO CREAR OBJETO\n");
64                         delete conexion;
65                         conexion == NULL;
66                         return;
67                 }
68
69                 // Conecto las señales
70                 conexion->signal_ok_received().connect( SigC::slot(*this, &Principal::on_conexion_ok) );
71                 conexion->signal_error_received().connect( SigC::slot(*this, &Principal::on_conexion_error) );
72                 conexion->signal_connected().connect( SigC::slot(*this, &Principal::on_conexion_connected) );
73                 conexion->signal_finished().connect( SigC::slot(*this, &Principal::on_conexion_finished) );
74                 // Lanzo la conexion!
75                 try {
76                         conexion->run();
77                 }
78                 catch (...) {
79                         txt_view->get_buffer()->insert_at_cursor("no se puede correr conexion->run()!!!\n");
80                 }
81         } else {
82                 txt_view->get_buffer()->insert_at_cursor("YA ESTAS CONECTADO\n");
83         }
84         dlg_conectar->hide();
85 }
86
87 void Principal::on_mnu_file_exit()
88 {
89         Gtk::Main::quit();
90 }
91
92 void Principal::on_mnu_file_connect()
93 {
94         dlg_conectar->show();
95 }
96
97 void Principal::on_mnu_help_about()
98 {
99         // preparo para leer el archivo ChangeLog
100 /*      Glib::RefPtr<Gnome::Glade::Xml> xml;
101         Glib::ustring line;
102         Glib::RefPtr<Gtk::TextBuffer> log_buffer;
103         Glib::RefPtr<Glib::IOChannel> log_io;
104
105         log_buffer = Gtk::TextBuffer::create();
106         log_io = Glib::IOChannel::create_from_file("../ChangeLog", "r");
107         while (log_io->read_line(line) != Glib::IO_STATUS_EOF) {
108                 log_buffer->insert_at_cursor(line);
109         }
110
111         try {
112                 xml = Gnome::Glade::Xml::create("client.glade", "dlgAbout");
113         }
114         catch(const Gnome::Glade::XmlError &ex) {
115                 std::cerr << ex.what() << std::endl;
116                 return;
117         }
118         Gtk::Window *dlg = 0;
119         Gtk::Button *btn_cerrar = 0;
120         Gtk::TextView *txt_changelog = 0;
121         xml->get_widget("dlgAbout", dlg);
122         xml->get_widget("btn_close", btn_cerrar);
123         xml->get_widget("txt_changelog", txt_changelog);
124         btn_cerrar->signal_clicked().connect(SigC::slot(*dlg, &Gtk::Dialog::hide));
125         txt_changelog->set_buffer(log_buffer);
126         dlg->show();*/
127 }
128
129 bool Principal::on_item_clicked(GdkEventButton *e, ViewItem *i)
130 {
131         lbl_nombre->set_text(i->get_name());
132         txt_view->get_buffer()->insert_at_cursor("Selecciono ");
133         txt_view->get_buffer()->insert_at_cursor(i->get_name());
134         txt_view->get_buffer()->insert_at_cursor("\n");
135 }
136
137 void Principal::on_conexion_connected()
138 {
139         txt_view->get_buffer()->insert_at_cursor("CONNECTED\n");
140         ico_conected->set( Gtk::Stock::YES , Gtk::IconSize(Gtk::ICON_SIZE_LARGE_TOOLBAR));
141 }
142
143 void Principal::on_conexion_finished()
144 {
145         txt_view->get_buffer()->insert_at_cursor("HANG UP\n");
146         ico_conected->set( Gtk::Stock::NO , Gtk::IconSize(Gtk::ICON_SIZE_LARGE_TOOLBAR));
147         conexion = NULL;
148 }
149
150 void Principal::on_conexion_ok()
151 {
152         txt_view->get_buffer()->insert_at_cursor("El server dice que ta' todo ok!\n");
153 }
154
155 void Principal::on_conexion_error(unsigned code)
156 {
157         std::stringstream a;
158         std::string s;
159         a << code;
160         a >> s;
161         txt_view->get_buffer()->insert_at_cursor("El server dice que hay error : ");
162         txt_view->get_buffer()->insert_at_cursor(s);
163         txt_view->get_buffer()->insert_at_cursor("\n");
164         
165 }
166
167 void Principal::on_get_clicked()
168 {
169         if (conexion == NULL) {
170                 txt_view->get_buffer()->insert_at_cursor("SIN CONEXION\n");
171         }
172
173         
174         PlaQui::Server::Command command(txt_target->get_text(), txt_command->get_text());
175         command.add_arg( txt_args->get_text() );
176         txt_view->get_buffer()->insert_at_cursor("Enviando comando\n");
177         try {
178                 conexion->send(command);
179         }
180         catch (...) {
181                 txt_view->get_buffer()->insert_at_cursor("EXCEPTION EN conexion->send !!\n");
182         }
183
184 }
185
186 void Principal::on_mnu_prop()
187 {
188         /* Parseo de ejemplo de un XML desde archivo */
189         xmlDocPtr document;
190         document = xmlParseFile("test.xml");
191         if (document == NULL) {
192                 return;
193         }
194
195         /* bien, el archivo se parseo bien! */
196         xmlNodePtr nodo, items;
197         nodo = document->children;
198
199         if (strcmp((char *)nodo->name, "planta") == 0) {
200                 items = nodo->children;
201                 while (items != NULL) {
202                         if (items->type == XML_ELEMENT_NODE) {
203                                 if (xmlStrcmp(items->name, BAD_CAST"bomba")==0) {
204                                         loadBomba(items);
205                                 } else if (xmlStrcmp(items->name, BAD_CAST"codo")==0) {
206                                         loadCodo(items);
207                                 } else if (xmlStrcmp(items->name, BAD_CAST"tubo")==0) {
208                                         loadConduct(items);
209                                 } else if (xmlStrcmp(items->name, BAD_CAST"exclusa")==0) {
210                                         loadExclusa(items);
211                                 } else if (xmlStrcmp(items->name, BAD_CAST"tanque")==0) {
212                                         loadTank(items);
213                                 } else if (xmlStrcmp(items->name, BAD_CAST"empalme")==0) {
214                                         loadUnion(items);
215                                 }
216                         }
217                         items = items->next;
218                 }
219         }
220 }
221
222 void Principal::loadBomba(xmlNodePtr nodo)
223 {
224         Glib::ustring name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
225         int orientacion=0, x, y;
226
227         nodo = nodo->children;
228         while (nodo != NULL) {
229                 if (nodo->type == XML_ELEMENT_NODE) {
230                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
231                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
232                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
233                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
234                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
235                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
236                         }
237                 }
238                 nodo = nodo->next;
239         }
240
241         // listo, ya recolecte todos los datos, ahora creo el objeto!
242         ViewPump *b = Gtk::manage( new ViewPump(name, orientacion) );
243         b->signal_button_press_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
244         b->set_position(x,y);
245         work_place->put(*b, x, y);
246         b->show();
247         // los agrego al hash
248         mapItems[name] = b;
249 }
250
251 void Principal::loadCodo(xmlNodePtr nodo)
252 {
253         std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
254         int orientacion=0, x, y;
255
256         nodo = nodo->children;
257         while (nodo != NULL) {
258                 if (nodo->type == XML_ELEMENT_NODE) {
259                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
260                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
261                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
262                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
263                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
264                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
265                         }
266                 }
267                 nodo = nodo->next;
268         }
269
270         // listo, ya recolecte todos los datos, ahora creo el objeto!
271         ViewItem *b = Gtk::manage( new ViewCodo(name, orientacion) );
272         b->signal_button_press_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
273         b->set_position(x,y);
274         work_place->put(*b, x, y);
275         b->show();
276         // los agrego al hash
277         mapItems[name] = b;
278 }
279
280 void Principal::loadConduct(xmlNodePtr nodo)
281 {
282         Glib::ustring name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
283         int orientacion=0, x, y;
284
285         nodo = nodo->children;
286         while (nodo != NULL) {
287                 if (nodo->type == XML_ELEMENT_NODE) {
288                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
289                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
290                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
291                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
292                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
293                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
294                         }
295                 }
296                 nodo = nodo->next;
297         }
298
299         // listo, ya recolecte todos los datos, ahora creo el objeto!
300         ViewConduct *b = Gtk::manage( new ViewConduct(name, orientacion) );
301         b->signal_button_press_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
302         b->set_position(x,y);
303         work_place->put(*b, x, y);
304         b->show();
305         // los agrego al hash
306         mapItems[name] = b;
307 }
308
309 void Principal::loadExclusa(xmlNodePtr nodo)
310 {
311         Glib::ustring name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
312         int orientacion=0, x, y;
313
314         nodo = nodo->children;
315         while (nodo != NULL) {
316                 if (nodo->type == XML_ELEMENT_NODE) {
317                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
318                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
319                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
320                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
321                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
322                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
323                         }
324                 }
325                 nodo = nodo->next;
326         }
327
328         // listo, ya recolecte todos los datos, ahora creo el objeto!
329         ViewExclusa *b = Gtk::manage( new ViewExclusa(name, orientacion) );
330         b->signal_button_press_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
331         b->set_position(x,y);
332         work_place->put(*b, x, y);
333         b->show();
334         // los agrego al hash
335         mapItems[name] = b;
336 }
337
338 void Principal::loadTank(xmlNodePtr nodo)
339 {
340         Glib::ustring name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
341         int orientacion=0, x, y;
342
343         nodo = nodo->children;
344         while (nodo != NULL) {
345                 if (nodo->type == XML_ELEMENT_NODE) {
346                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
347                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
348                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
349                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
350                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
351                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
352                         }
353                 }
354                 nodo = nodo->next;
355         }
356
357         // listo, ya recolecte todos los datos, ahora creo el objeto!
358         ViewTank *b = Gtk::manage( new ViewTank(name, orientacion) );
359         b->signal_button_press_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
360         b->set_position(x,y);
361         work_place->put(*b, x, y);
362         b->show();
363         // los agrego al hash
364         mapItems[name] = b;
365 }
366
367 void Principal::loadUnion(xmlNodePtr nodo)
368 {
369         Glib::ustring name = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
370         int orientacion=0, x, y;
371
372         nodo = nodo->children;
373         while (nodo != NULL) {
374                 if (nodo->type == XML_ELEMENT_NODE) {
375                         if (xmlStrcmp(nodo->name, BAD_CAST"orientacion") == 0) {
376                                 orientacion = atoi( (char *)XML_GET_CONTENT(nodo->children) );
377                         } else if (xmlStrcmp(nodo->name, BAD_CAST"x") == 0) {
378                                 x = atoi( (char *)XML_GET_CONTENT(nodo->children) );
379                         } else if (xmlStrcmp(nodo->name, BAD_CAST"y") == 0) {
380                                 y = atoi( (char *)XML_GET_CONTENT(nodo->children) );
381                         }
382                 }
383                 nodo = nodo->next;
384         }
385
386         // listo, ya recolecte todos los datos, ahora creo el objeto!
387         ViewUnion *b = Gtk::manage( new ViewUnion(name, orientacion) );
388         b->signal_button_release_event().connect(SigC::bind( SigC::slot(*this, &Principal::on_item_clicked), b) );
389         b->set_position(x,y);
390         work_place->put(*b, x, y);
391         b->show();
392         // los agrego al hash
393         mapItems[name] = b;
394 }
395