X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/c8b8148848e31e0e39a01ed45c19ccc0d0702a34..eabe0084451a515b80a7fd462c71b4bb2f8dd7bd:/viewer/view_node.cpp?ds=sidebyside diff --git a/viewer/view_node.cpp b/viewer/view_node.cpp index 0092dc0..6dc6649 100644 --- a/viewer/view_node.cpp +++ b/viewer/view_node.cpp @@ -1,19 +1,21 @@ #include "view_node.h" -ViewNode::ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list &keys) +ViewNode::ViewNode (Canvas::Group *parent, uint num, uint padre, BTreeNodeHeader &header, std::list &keys) : Canvas::Group (*parent) { + last_selected = NULL; double header_w = ViewBTree::byte_to_pixels * sizeof (BTreeNodeHeader); this->num = num; + this->padre = padre; /* Fondo */ - Canvas::Rect *fondo = new Canvas::Rect (*this, 0, 0, NODE_WIDTH, NODE_HEIGHT); + fondo = new Canvas::Rect (*this, 0, 0, ViewBTree::node_width, ViewBTree::node_height); fondo->property_fill_color() = "gray"; fondo->property_outline_color() = "black"; /* Header */ - Canvas::Rect *h = new Canvas::Rect (*this, 0, 0, header_w, NODE_HEIGHT); + Canvas::Rect *h = new Canvas::Rect (*this, 0, 0, header_w, ViewBTree::node_height); h->property_fill_color() = "blue"; h->property_outline_color() = "black"; @@ -22,7 +24,7 @@ ViewNode::ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, st std::stringstream ss; ss << num; ss >> node_num; - new Canvas::Text (*this, header_w/2, NODE_HEIGHT/2, node_num); + new Canvas::Text (*this, header_w/2, ViewBTree::node_height/2, node_num); double x = header_w; @@ -31,21 +33,33 @@ ViewNode::ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, st BTreeData *data = (*it); double w = ViewBTree::byte_to_pixels * data->Size (); - ViewBTreeData *v = ViewBTreeData::Create (data, this, x, 0, w+x, NODE_HEIGHT); + ViewBTreeData *v = ViewBTreeData::Create (data, this, x, 0, w+x, ViewBTree::node_height); v->signal_clicked ().connect ( sigc::mem_fun (this , &ViewNode::on_item_clicked )); + v->signal_double_clicked ().connect ( sigc::mem_fun (this , &ViewNode::on_item_activated )); x += w; it++; if (!dynamic_cast(data)) { /* Si no es un dato de una hoja, tiene hijos */ - hijos.push_back (data->getChild ()); + hijos.push_back (data->GetChild ()); } } } -void ViewNode::on_item_clicked (BTreeData *data) +void ViewNode::on_item_clicked (BTreeData *data, ViewBTreeData *s) { - m_signal_selected (data, num); + if (last_selected) + if (s != last_selected) + last_selected->SetSelected (false); + last_selected = s; + m_signal_selected (data, num, this); +} + +void ViewNode::on_item_activated (BTreeData *data, ViewBTreeData *s) +{ + /* Solo activo los que tienen hijos */ + if (dynamic_cast (data) == NULL) + m_signal_activated (data, num, this); } ViewNode::type_signal_selected ViewNode::signal_selected () @@ -53,3 +67,15 @@ ViewNode::type_signal_selected ViewNode::signal_selected () return m_signal_selected; } +ViewNode::type_signal_activated ViewNode::signal_activated () +{ + return m_signal_activated; +} + +void ViewNode::SetSelected (bool b) +{ + if (last_selected) { + last_selected->SetSelected (b); + } +} +