X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/1f2e83ab78a55bc0730bdd507c4fd64482fb0846..d7d5d64acf8b4483b20594f78dc07e27fdaa5b34:/viewer/view_node.cpp?ds=sidebyside diff --git a/viewer/view_node.cpp b/viewer/view_node.cpp index 122ebc6..c29d43f 100644 --- a/viewer/view_node.cpp +++ b/viewer/view_node.cpp @@ -10,9 +10,10 @@ ViewNode::ViewNode (Canvas::Group *parent, uint num, uint padre, BTreeNodeHeader this->padre = padre; /* Fondo */ - fondo = new Canvas::Rect (*this, 0, 0, ViewBTree::node_width, ViewBTree::node_height); - fondo->property_fill_color() = "gray"; - fondo->property_outline_color() = "black"; + int w1 = (int)(ViewBTree::node_width / 512.0f); + int used_width = 0; + + double y = 0; /* Header */ Canvas::Rect *h = new Canvas::Rect (*this, 0, 0, header_w, ViewBTree::node_height); @@ -27,23 +28,37 @@ ViewNode::ViewNode (Canvas::Group *parent, uint num, uint padre, BTreeNodeHeader new Canvas::Text (*this, header_w/2, ViewBTree::node_height/2, node_num); double x = header_w; + y = 0; std::list::iterator it = keys.begin (); while (it != keys.end ()) { BTreeData *data = (*it); double w = ViewBTree::byte_to_pixels * data->Size (); - ViewBTreeData *v = ViewBTreeData::Create (data, this, x, 0, w+x, ViewBTree::node_height); + ViewBTreeData *v = ViewBTreeData::Create (data, this, x, y, w+x, y+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; + used_width += w; + if (x >= 512) { + x = 0; + y += ViewBTree::node_height + 5; + } it++; + datas.push_back (v); + if (!dynamic_cast(data)) { /* Si no es un dato de una hoja, tiene hijos */ - hijos.push_back (data->getChild ()); + hijos.push_back (data->GetChild ()); } } + w1 = ViewBTree::node_width - used_width; + if (w1 > 0) { + fondo = new Canvas::Rect (*this, x, y, x+w1, ViewBTree::node_height+y); + fondo->property_fill_color() = "gray"; + fondo->property_outline_color() = "black"; + } } void ViewNode::on_item_clicked (BTreeData *data, ViewBTreeData *s) @@ -79,3 +94,19 @@ void ViewNode::SetSelected (bool b) } } +void ViewNode::HighliteKey (Clave &k) +{ + std::list::iterator it; + + it = datas.begin (); + while (it != datas.end ()) { + if ((*(*it)) == k) { + if (last_selected) + last_selected->SetSelected (false); + last_selected = *it; + last_selected->SetSelected (true); + } + it++; + } +} +