X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/2bfad376fbc5a10a08ee8f18267234126d34e0bc..212f9ae5dc8899bab8b23ed13d81c28c510db3c3:/Client/src/principal.cpp diff --git a/Client/src/principal.cpp b/Client/src/principal.cpp index 868e050..1b42b2b 100644 --- a/Client/src/principal.cpp +++ b/Client/src/principal.cpp @@ -1,6 +1,4 @@ - - #include "principal.h" #include #include @@ -17,13 +15,15 @@ Principal::Principal(BaseObjectType *co, const Glib::RefPtr &rg):Gtk::Window(co),refXml(rg) { - Gtk::MenuItem *conect=0, *exit=0, *about=0, *mnu_prop=0, *mnu_disconnect; + Gtk::MenuItem *conect=0, *exit=0, *about=0, *mnu_prop=0, *mnu_disconnect=0; Gtk::Button *btn_get=0, *bar_connect=0; txt_view = 0; txt_target = txt_command = txt_args = 0; work_place = 0; lbl_cap_flujo = lbl_cap_extra = lbl_extra = lbl_nombre = lbl_color = lbl_flujo = 0; + rg->get_widget("btn_activar", btn_activar); + rg->get_widget("color_preview", color_preview); rg->get_widget("lbl_nombre", lbl_nombre); rg->get_widget("lbl_extra", lbl_extra); rg->get_widget("lbl_cap_extra", lbl_cap_extra); @@ -51,6 +51,7 @@ Principal::Principal(BaseObjectType *co, const Glib::RefPtr & exit->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_file_exit)); about->signal_activate().connect( SigC::slot(*this, &Principal::on_mnu_help_about)); btn_get->signal_clicked().connect( SigC::slot(*this, &Principal::on_get_clicked) ); + btn_activar->signal_clicked().connect( SigC::slot(*this, &Principal::on_btn_activar_clicked) ); conexion = NULL; is_xml_loaded = false; @@ -61,8 +62,13 @@ Principal::Principal(BaseObjectType *co, const Glib::RefPtr & Principal::~Principal() { - if (conexion != NULL) - delete conexion; + if (conexion) { + conexion->finish(); + } + // Espera a que termine realmente. + while (conexion) { + Glib::usleep(10000); // 10 milisegundos + } } void Principal::on_dlg_connect_ok() @@ -74,8 +80,9 @@ void Principal::on_dlg_connect_ok() } catch (...) { txt_view->get_buffer()->insert_at_cursor("NO SE PUDO CREAR OBJETO\n"); - delete conexion; - conexion == NULL; + //delete conexion; XXX Si no me equivoco, si falla el + //constructor, no se reserva la memoria (el delete no va). + conexion = NULL; return; } @@ -98,15 +105,31 @@ void Principal::on_mnu_file_exit() Gtk::Main::quit(); } +void Principal::on_btn_activar_clicked() +{ + if ((conexion == NULL) || (last_selected == NULL)) return; + + PlaQui::Server::Command c("plant", "set"); + c.add_arg("default"); + c.add_arg(last_selected->get_name()); + c.add_arg("open"); + + if (last_selected->get_open()) + c.add_arg("false"); + else + c.add_arg("true"); + + conexion->send(c); +} + void Principal::on_mnu_file_disconnect() { if (conexion == NULL) return; - PlaQui::Server::Command c("transmission", "stop"); + PlaQui::Server::Command c("connection", "stop"); c.add_arg(conexion->get_host()); - c.add_arg("7528"); + c.add_arg(conexion->get_port()); conexion->send(c); - conexion->finish(); } void Principal::on_mnu_file_connect() @@ -167,6 +190,9 @@ void Principal::update_items_prop() lbl_cap_flujo->set_text(last_selected->get_cap_flow()); lbl_cap_extra->set_text(last_selected->get_cap_extra()); + + color_preview->modify_bg(Gtk::STATE_NORMAL, last_selected->get_color()); + color_preview->queue_draw(); } void Principal::on_conexion_connected() @@ -528,6 +554,9 @@ void Principal::read_status_xml(const std::string &frame) tmp_b = get_bool_from_xml(items->children); item_name = (char *)xmlGetProp(items, BAD_CAST"name"); mapItems[item_name]->set_open(tmp_b); + } else if (xmlStrcmp(items->name, BAD_CAST"color")==0) { + item_name = (char *)xmlGetProp(items, BAD_CAST"name"); + mapItems[item_name]->set_color( get_rgb_from_xml(items->children) ); } else if (xmlStrcmp(items->name, BAD_CAST"tank")==0) { xmlNodePtr nodo_tmp = items->children; float cap, lit; @@ -554,6 +583,28 @@ void Principal::read_status_xml(const std::string &frame) } } +Gdk::Color Principal::get_rgb_from_xml(xmlNodePtr nodo) +{ + unsigned r,g,b; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"r")==0) + r = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + if (xmlStrcmp(nodo->name, BAD_CAST"g")==0) + g = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + if (xmlStrcmp(nodo->name, BAD_CAST"b")==0) + b = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } + nodo = nodo->next; + } + r = 65535 * r / 255; + g = 65535 * g / 255; + b = 65535 * b / 255; + Gdk::Color c; + c.set_rgb(r,g,b); + + return c; +} float Principal::get_float_from_xml(xmlNodePtr nodo) { float tmp = -1;