X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/0fd0b8da8e1e9c889282ad4cb41f4b4cf2e63838..555cf8e7b36faa768e40d09665781c468424a91c:/viewer/main.cpp diff --git a/viewer/main.cpp b/viewer/main.cpp index f73897b..1346f75 100644 --- a/viewer/main.cpp +++ b/viewer/main.cpp @@ -21,6 +21,9 @@ using namespace Gnome::Canvas; " " " " " " +" " +" " +" " " " " " " " @@ -38,13 +41,13 @@ using namespace Gnome::Canvas; void nuevo_arbol (); void agregar_clave (); void borrar_clave (); +void ir_al_padre (); void buscar_clave (); void zoom_out (); void zoom_in (); void zoom_normal (); Glib::RefPtr tree; -ViewDebug *vdebug; Gnome::Canvas::Canvas *real_canvas; ViewProperties *real_frame; @@ -55,30 +58,30 @@ int main(int argc, char *argv[]) Gnome::Canvas::init (); Gtk::Window window; - Gtk::HBox hbox; + Gtk::VBox hbox; Gtk::VBox vbox; Gtk::ScrolledWindow area; Gnome::Canvas::Canvas canvas; ViewProperties frame; - ViewDebug debug; real_canvas = &canvas; real_frame = &frame; - vdebug = &debug; canvas.set_scroll_region (0, 0, 100, 100); area.add (canvas); - hbox.pack_start (frame, false, false, 10); hbox.pack_start (area); - hbox.pack_end (debug, false, true, 10); + hbox.pack_start (frame, false, false, 10); + frame.set_size_request (200, 200); Glib::RefPtr actiongroup = Gtk::ActionGroup::create(); actiongroup->add( Gtk::Action::create("MenuFile", "_Arbol") ); actiongroup->add( Gtk::Action::create("Nuevo", Gtk::Stock::NEW), &nuevo_arbol); actiongroup->add( Gtk::Action::create("Salir", Gtk::Stock::QUIT), Gtk::AccelKey ("q"), &Gtk::Main::quit); + actiongroup->add( Gtk::Action::create("MenuNode", "_Nodo") ); + actiongroup->add( Gtk::Action::create("Ir al Padre", Gtk::Stock::ADD), Gtk::AccelKey ("b"), &ir_al_padre); actiongroup->add( Gtk::Action::create("MenuKey", "_Clave") ); actiongroup->add( Gtk::Action::create("Agregar Clave", Gtk::Stock::ADD), Gtk::AccelKey ("a"), &agregar_clave); actiongroup->add( Gtk::Action::create("Borrar Clave", Gtk::Stock::REMOVE), Gtk::AccelKey ("d"), &borrar_clave); @@ -121,9 +124,9 @@ void nuevo_arbol () double paltas = bajas / (double)altas; int type = d.getKeyType (); - tree = Glib::RefPtr(new ViewBTree (real_canvas->root(), "test.idx", d.getBlockSize (), type)); + int atype = d.getTreeType (); + tree = Glib::RefPtr(new ViewBTree (real_canvas->root(), "test.idx", d.getBlockSize (), atype, type)); tree->signal_selected ().connect ( sigc::mem_fun (*real_frame, &ViewProperties::ShowItem) ); - vdebug->SetTree (tree); if (type == BTree::KEY_FIXED) { std::list lst; std::list::iterator it; @@ -133,14 +136,17 @@ void nuevo_arbol () it = lst.begin (); uint i = 0; while (it != lst.end ()) { - ClaveFija c(*it); + ClaveFija c(*it, i); double l = Random::Double (0.0f, 1.0f); std::cout << l << " >= " << paltas << std::endl; if (l >= paltas) { - tree->AddKey (c); + try { + tree->AddKey (c); + } catch (Exception *e) { + std::cout << "====== " << (std::string)c << e->Message () << std::endl; + } i++; - vdebug->AddKey (c); } else { /* Tengo que borrar una clave entre 0 e "i" de la lista * porque son las que ya agregue. */ @@ -151,7 +157,7 @@ void nuevo_arbol () otro++; j++; } - ClaveFija c(*otro); + ClaveFija c(*otro, 0); tree->DelKey (c); std::string sss = c; @@ -168,16 +174,20 @@ void nuevo_arbol () it = lst.begin (); while (it != lst.end ()) { - ClaveVariable c(*it); + ClaveVariable c(*it, 0); - tree->AddKey (c); - vdebug->AddKey (c); + try { + tree->AddKey (c); + } catch (Exception *e) { + std::cout << "====== " << (std::string)c << e->Message () << std::endl; + } it++; } } tree->AddNode (0); double x1, x2, y1, y2; tree->get_bounds (x1, y1, x2, y2); + real_canvas->scroll_to (0, 0); } } @@ -190,22 +200,24 @@ void agregar_clave () d.run(); return; } - KeyDialog d("Agregar"); + KeyDialog d("Agregar", true); if (d.run () == Gtk::RESPONSE_OK) { Glib::ustring str_key = d.key(); + Glib::ustring str_val = d.val(); if (tree->type() == BTree::KEY_FIXED) { - ClaveFija c(atoi(str_key.c_str())); + ClaveFija c(atoi(str_key.c_str()), atoi(str_val.c_str())); tree->AddKey(c); } else { - ClaveVariable c(str_key); + ClaveVariable c(str_key, atoi(str_val.c_str())); tree->AddKey(c); } delete tree->last_selected; tree->AddNode (0); + real_canvas->scroll_to (0, 0); } } @@ -224,17 +236,30 @@ void borrar_clave () Glib::ustring str_key = d.key(); if (tree->type() == BTree::KEY_FIXED) { - ClaveFija c(atoi(str_key.c_str())); + ClaveFija c(atoi(str_key.c_str()), 0); tree->DelKey(c); } else { - ClaveVariable c(str_key); + ClaveVariable c(str_key, 0); tree->DelKey(c); } delete tree->last_selected; tree->AddNode (0); + real_canvas->scroll_to (0, 0); + } +} + +void ir_al_padre () +{ + if (!tree) + { + Gtk::MessageDialog d("No hay un arbol creado, por favor primero cree un arbol!", + false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + d.run(); + return; } + tree->GoBack (); } void buscar_clave () @@ -256,12 +281,12 @@ void buscar_clave () Glib::ustring str_key = d.key(); if (tree->type() == BTree::KEY_FIXED) { - c = new ClaveFija (atoi(str_key.c_str())); + c = new ClaveFija (atoi(str_key.c_str()), 0); result = tree->FindKey(*c); } else { - c = new ClaveVariable (str_key); + c = new ClaveVariable (str_key, 0); result = tree->FindKey(*c); } if (result) @@ -270,6 +295,8 @@ void buscar_clave () tree->AddNode(result->node); tree->HighliteKey (*c); delete result; + delete c; + real_canvas->scroll_to (0, 0); return; // Encontramos, salimos } if (c) delete c;