From: Ricardo Markiewicz Date: Sun, 25 Sep 2005 23:17:45 +0000 (+0000) Subject: Muevo ViewNode a su propio archivo. X-Git-Tag: 1_0-pre1~103 X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/commitdiff_plain/c8b8148848e31e0e39a01ed45c19ccc0d0702a34?ds=sidebyside Muevo ViewNode a su propio archivo. --- diff --git a/viewer/Makefile b/viewer/Makefile index 4f9fa9d..af96ee2 100644 --- a/viewer/Makefile +++ b/viewer/Makefile @@ -1,6 +1,6 @@ TARGET=viewer CXXFLAGS=-Wall -g `pkg-config gtkmm-2.4 libgnomecanvasmm-2.6 --cflags` -I../src -OBJECTS=main.o view_btree.o view_btree_data.o view_properties.o +OBJECTS=main.o view_btree.o view_btree_data.o view_properties.o view_node.o all: $(TARGET) diff --git a/viewer/view_btree.cpp b/viewer/view_btree.cpp index 4fb0839..d8bc219 100644 --- a/viewer/view_btree.cpp +++ b/viewer/view_btree.cpp @@ -82,55 +82,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; -} - diff --git a/viewer/view_btree.h b/viewer/view_btree.h index 8227609..d8e585a 100644 --- a/viewer/view_btree.h +++ b/viewer/view_btree.h @@ -6,6 +6,7 @@ #include #include "btree.h" +#include "view_node.h" #define NODE_WIDTH 500 #define NODE_HEIGHT 50 @@ -34,20 +35,5 @@ class ViewBTree : public Canvas::Group, public BTree { }; -class ViewNode : public Canvas::Group { - public: - ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list &keys); - - std::list& getChilds () { return hijos; } - - typedef SigC::Signal2 type_signal_selected; - type_signal_selected signal_selected (); - private: - void on_item_clicked (BTreeData *data); - std::list hijos; - type_signal_selected m_signal_selected; - uint num; -}; - #endif diff --git a/viewer/view_node.cpp b/viewer/view_node.cpp new file mode 100644 index 0000000..0092dc0 --- /dev/null +++ b/viewer/view_node.cpp @@ -0,0 +1,55 @@ + +#include "view_node.h" + +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; +} + diff --git a/viewer/view_node.h b/viewer/view_node.h new file mode 100644 index 0000000..dcd786b --- /dev/null +++ b/viewer/view_node.h @@ -0,0 +1,28 @@ + +#ifndef _VIEW_NODE_H_ +#define _VIEW_NODE_H_ + +#include +#include "view_btree.h" +#include "view_btree_data.h" +#include "btree.h" + +using namespace Gnome; + +class ViewNode : public Canvas::Group { + public: + ViewNode (Canvas::Group *parent, uint num, BTreeNodeHeader &header, std::list &keys); + + std::list& getChilds () { return hijos; } + + typedef SigC::Signal2 type_signal_selected; + type_signal_selected signal_selected (); + private: + void on_item_clicked (BTreeData *data); + std::list hijos; + type_signal_selected m_signal_selected; + uint num; +}; + +#endif +