X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/84820a0fe02b9fdd63fb7c28d5a823bfa065c259..ee619d18f5d688c5ea2f630a80a3560de36a99ed:/viewer/view_btree.cpp?ds=sidebyside diff --git a/viewer/view_btree.cpp b/viewer/view_btree.cpp index 4fb0839..1180c93 100644 --- a/viewer/view_btree.cpp +++ b/viewer/view_btree.cpp @@ -4,22 +4,16 @@ #include double ViewBTree::byte_to_pixels = 0; +double ViewBTree::node_width = 0; -ViewBTree::ViewBTree (Canvas::Group *parent, std::string filename):Canvas::Group (*parent, 0, 0), - BTree (filename, 64) +ViewBTree::ViewBTree (Canvas::Group *parent, std::string filename, uint block_size):Canvas::Group (*parent, 0, 0), + BTree (filename, block_size) { - /* TODO : hace que el arbol se abra de un archivo ya creado o que se - * cree afuera - */ - for (int i=0; i<=64; i++) { - ClaveFija c(i); + /* Cada bytes lo hago de 5 units de ancho */ + node_width = 3 * block_size; // 64 == blocksize + byte_to_pixels = node_width/block_size; // TODO : 64 == BlockSize - AddKey (c); - } - - byte_to_pixels = NODE_WIDTH/64; // TODO : 64 == BlockSize - - AddNode (0); + last_selected = NULL; } void ViewBTree::AddNode (uint num) @@ -48,7 +42,7 @@ void ViewBTree::AddNode (uint num) ViewNode *vnode = new ViewNode (this, num, node_h, keys); vnode->property_y () = y; vnode->property_x () = pos_x[node_h.level]; - pos_x[node_h.level] += NODE_WIDTH+10; + pos_x[node_h.level] += ViewBTree::node_width+10; vnode->signal_selected().connect ( sigc::mem_fun (*this, &ViewBTree::on_item_selected) ); std::list childs = vnode->getChilds (); @@ -64,7 +58,7 @@ void ViewBTree::AddNode (uint num) } } -void ViewBTree::on_item_selected (BTreeData *data, uint num) +void ViewBTree::on_item_selected (BTreeData *data, uint num, ViewNode *vnode) { BTreeNodeHeader node_h; uchar *node; @@ -73,7 +67,11 @@ void ViewBTree::on_item_selected (BTreeData *data, uint num) ReadNodoHeader (node, &node_h); delete [] node; - std::cout << "Emit SignalSelected" << std::endl; + if (last_selected) + if (vnode != last_selected) + last_selected->SetSelected (false); + last_selected = vnode; + vnode->SetSelected (true); m_signal_selected (data, node_h); } @@ -82,55 +80,3 @@ ViewBTree::type_signal_selected ViewBTree::signal_selected () return m_signal_selected; } -ViewNode::ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list &keys) - : Canvas::Group (*parent) -{ - double header_w = ViewBTree::byte_to_pixels * sizeof (BTreeNodeHeader); - this->num = num; - - /* Fondo */ - Canvas::Rect *fondo = new Canvas::Rect (*this, 0, 0, NODE_WIDTH, 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); - h->property_fill_color() = "blue"; - h->property_outline_color() = "black"; - - /* Numero de nodo */ - std::string node_num; - std::stringstream ss; - ss << num; - ss >> node_num; - new Canvas::Text (*this, header_w/2, NODE_HEIGHT/2, node_num); - - double x = header_w; - - 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, NODE_HEIGHT); - v->signal_clicked ().connect ( sigc::mem_fun (this , &ViewNode::on_item_clicked )); - x += w; - it++; - - if (!dynamic_cast(data)) { - /* Si no es un dato de una hoja, tiene hijos */ - hijos.push_back (data->getChild ()); - } - } -} - -void ViewNode::on_item_clicked (BTreeData *data) -{ - m_signal_selected (data, num); -} - -ViewNode::type_signal_selected ViewNode::signal_selected () -{ - return m_signal_selected; -} -