]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Separo la vista del Nodo y pongo algo de logica de posicionamiento.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Fri, 23 Sep 2005 17:22:15 +0000 (17:22 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Fri, 23 Sep 2005 17:22:15 +0000 (17:22 +0000)
viewer/view_btree.cpp
viewer/view_btree.h

index a73f396c3bfa4ef0458a918e9e34b89df34190a5..f62e931a0f3d098f8fe880e1ce84ac6ccdd2d6b6 100644 (file)
@@ -1,6 +1,8 @@
 
 #include "view_btree.h"
 #include "view_btree_data.h"
+               
+double ViewBTree::byte_to_pixels = 0;
 
 ViewBTree::ViewBTree (Canvas::Group *parent, std::string filename):Canvas::Group (*parent, 0, 0),
        BTree (filename, 64)
@@ -14,9 +16,6 @@ ViewBTree::ViewBTree (Canvas::Group *parent, std::string filename):Canvas::Group
                AddKey (c);
        }
 
-       Canvas::Rect *rect = new Canvas::Rect (*this, 0, 0, NODE_WIDTH, NODE_HEIGHT);
-       rect->property_fill_color() = "gray";
-
        byte_to_pixels  = NODE_WIDTH/64; // TODO : 64 == BlockSize
 
        AddNode (0);
@@ -39,45 +38,57 @@ void ViewBTree::AddNode (uint num)
 
        std::list<BTreeData *> keys = ReadKeys (node, node_h);
 
-       double header_w = byte_to_pixels * sizeof (BTreeNodeHeader);
-       double x = 0;
+       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;
+
+       std::list<uint> childs = vnode->getChilds ();
+       std::list<uint>::iterator hit = childs.begin ();
+       while (hit != childs.end ()) {
+               AddNode (*hit);
+               hit++;
+       }
+}
+
+ViewNode::ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list<BTreeData *> &keys)
+       : Canvas::Group (*parent)
+{
+       double header_w = ViewBTree::byte_to_pixels * sizeof (BTreeNodeHeader);
+
+       /* Fondo */
+       Canvas::Rect *fondo = new Canvas::Rect (*this, 0, 0, NODE_WIDTH, NODE_HEIGHT);
+       fondo->property_fill_color() = "gray";
+       fondo->property_outline_color() = "black";
 
-       Canvas::Rect *view_header = new Canvas::Rect (*this, x, y, x+header_w, y+NODE_HEIGHT);
-       view_header->property_fill_color() = "blue";
+       /* 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, y+NODE_HEIGHT/2, node_num);
+       new Canvas::Text (*this, header_w/2, NODE_HEIGHT/2, node_num);
 
-       x += header_w;
+       double x = header_w;
 
-       /* Cuento los hijos para saber como centrarlos más adelante */
-       std::list<uint> hijos;
-       
        std::list<BTreeData *>::iterator it = keys.begin ();
        while (it != keys.end ()) {
                BTreeData *data = (*it);
-               double w = byte_to_pixels * data->Size ();
+               double w = ViewBTree::byte_to_pixels * data->Size ();
 
-               ViewBTreeData *v = ViewBTreeData::Create (data, this, x, y, w+x, y+NODE_HEIGHT);
+               ViewBTreeData *v = ViewBTreeData::Create (data, this, x, 0, w+x, NODE_HEIGHT);
 
                x += w;
                it++;
 
-               if (dynamic_cast<BTreeChildData *>(data)) {
-                       BTreeChildData *child = dynamic_cast<BTreeChildData *>(data);
-                       hijos.push_back (child->getChild ());
+               if (!dynamic_cast<BTreeLeafData *>(data)) {
+                       /* Si no es un dato de una hoja, tiene hijos */
+                       hijos.push_back (data->getChild ());
                }
        }
-
-
-       std::list<uint>::iterator hit = hijos.begin ();
-       while (hit != hijos.end ()) {
-               AddNode (*hit);
-               hit++;
-       }
 }
 
index a03af2bb070e43fca995b1d05c1fcb3d4ec6dd50..bd4f22cdcb53505aa2afc8d32608c900b13ed3b8 100644 (file)
@@ -16,13 +16,24 @@ class ViewBTree : public Canvas::Group, public BTree {
        public:
                ViewBTree (Canvas::Group *parent, std::string filename);
 
+               static double byte_to_pixels;
        protected:
-               int byte_to_pixels;
                int max_level; /* Lo saco de la raiz */
+               /* Posicion X por nivel */
+               std::map<uint,double> pos_x;
 
                void AddNode (uint num);
 
 };
 
+class ViewNode : public Canvas::Group {
+       public:
+               ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list<BTreeData *> &keys);
+
+               std::list<uint>& getChilds () { return hijos; } 
+       private:
+               std::list<uint> hijos;
+};
+
 #endif