#include <sigc++/slot.h>
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)
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<uint> childs = vnode->getChilds ();
}
}
-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;
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);
}
#include "view_btree_data.h"
+#define NODE_PTR_WIDTH 5
ViewBTreeData::ViewBTreeData (BTreeData *data, Canvas::Group *parent, double x1, double y1, double x2, double y2):
Canvas::Rect (*parent, x1, y1, x2, y2)
this->data = data;
property_fill_color () = "red";
property_outline_color () = "black";
-
- init (parent);
}
void ViewBTreeData::init (Canvas::Group *parent)
double w = property_x2() - property_x1();
double h = property_y2() - property_y1();
- std::string s = *data;
- new Canvas::Text (*parent, property_x1()+w/2, h/2, s);
+ Canvas::Rect *ptr = new Canvas::Rect (*parent, property_x1()+w-NODE_PTR_WIDTH, h-NODE_PTR_WIDTH, property_x1()+w-1, h-1);
+ ptr->property_fill_color () = "green";
+ ptr->property_outline_color () = "black";
}
bool ViewBTreeData::on_event (GdkEvent *p1)
{
switch (p1->type) {
case GDK_BUTTON_PRESS:
- m_signal_clicked(data);
+ m_signal_clicked(data, this);
}
return Canvas::Rect::on_event (p1);
ViewBTreeData*
ViewBTreeData::Create (BTreeData *data, Canvas::Group *parent, double x1, double y1, double x2, double y2)
{
+ ViewBTreeData *ret;
if (dynamic_cast<BTreeChildData *>(data))
- return new ViewBTreeChildData (data, parent, x1, y1, x2, y2);
-
- return new ViewBTreeData (data, parent, x1, y1, x2, y2);
+ ret = new ViewBTreeChildData (data, parent, x1, y1, x2, y2);
+ else
+ ret = new ViewBTreeData (data, parent, x1, y1, x2, y2);
+ ret->init (parent);
+ return ret;
}
ViewBTreeChildData::ViewBTreeChildData (BTreeData *data, Canvas::Group *parent, double x1, double y1, double x2, double y2):
void ViewBTreeChildData::init (Canvas::Group *parent)
{
- property_fill_color () = "yellow";
property_outline_color () = "black";
+}
- double w = property_x2() - property_x1();
- double h = property_y2() - property_y1();
-
- std::string s = *data;
- Canvas::Text *text = new Canvas::Text (*parent, property_x1()+w/2, h/2, s);
+void ViewBTreeData::SetSelected (bool b)
+{
+ if (b) {
+ property_fill_color () = "yellow";
+ } else {
+ property_fill_color () = "red";
+ }
}