#include "view_btree.h"
#include "view_properties.h"
#include "new_tree_dialog.h"
+#include "key_dialog.h"
#include "view_debug.h"
using namespace Gnome::Canvas;
" <separator/>"
" <menuitem action='Salir'/>"
" </menu>"
-" <menu action='MenuZoom'>"
+" <menu action='MenuKey'>"
+" <menuitem action='Agregar Clave'/>"
+" <menuitem action='Borrar Clave'/>"
+" <menuitem action='Buscar Clave'/>"
+" </menu>"
+" <menu action='MenuZoom'>"
" <menuitem action='Alejar'/>"
" <menuitem action='Acercar'/>"
" <separator/>"
"</ui>";
void nuevo_arbol ();
+void agregar_clave ();
+void borrar_clave ();
+void buscar_clave ();
void zoom_out ();
void zoom_in ();
void zoom_normal ();
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::Main::quit);
+ actiongroup->add( Gtk::Action::create("Salir", Gtk::Stock::QUIT), Gtk::AccelKey ("<control>q"), &Gtk::Main::quit);
+ actiongroup->add( Gtk::Action::create("MenuKey", "_Clave") );
+ actiongroup->add( Gtk::Action::create("Agregar Clave", Gtk::Stock::ADD), Gtk::AccelKey ("<control>a"), &agregar_clave);
+ actiongroup->add( Gtk::Action::create("Borrar Clave", Gtk::Stock::REMOVE), Gtk::AccelKey ("<control>d"), &borrar_clave);
+ actiongroup->add( Gtk::Action::create("Buscar Clave", Gtk::Stock::FIND), Gtk::AccelKey ("<control>f"), &buscar_clave);
actiongroup->add( Gtk::Action::create("MenuZoom", "_Zoom"));
actiongroup->add( Gtk::Action::create("Alejar", Gtk::Stock::ZOOM_OUT), Gtk::AccelKey ("<control>z"), &zoom_out );
actiongroup->add( Gtk::Action::create("Acercar", Gtk::Stock::ZOOM_IN), Gtk::AccelKey ("<control>x"), &zoom_in);
}
}
+void agregar_clave ()
+{
+ 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;
+ }
+ KeyDialog d("Agregar");
+ if (d.run () == Gtk::RESPONSE_OK)
+ {
+ Glib::ustring str_key = d.key();
+ if (tree->type() == BTree::KEY_FIXED)
+ {
+ ClaveFija c(atoi(str_key.c_str()));
+ tree->AddKey(c);
+ }
+ else
+ {
+ ClaveVariable c(str_key);
+ tree->AddKey(c);
+ }
+ delete tree->last_selected;
+ tree->AddNode (0);
+ }
+}
+
+void borrar_clave ()
+{
+ 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;
+ }
+ KeyDialog d("Borrar");
+ if (d.run () == Gtk::RESPONSE_OK)
+ {
+ Glib::ustring str_key = d.key();
+ if (tree->type() == BTree::KEY_FIXED)
+ {
+ ClaveFija c(atoi(str_key.c_str()));
+ tree->DelKey(c);
+ }
+ else
+ {
+ ClaveVariable c(str_key);
+ tree->DelKey(c);
+ }
+ delete tree->last_selected;
+ tree->AddNode (0);
+ }
+}
+
+void buscar_clave ()
+{
+ 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;
+ }
+ KeyDialog d("Buscar");
+ while (true) // Repite hasta que se encuentre algo o se cancele
+ {
+ if (d.run () == Gtk::RESPONSE_OK)
+ {
+ BTreeFindResult* result = 0;
+ Clave *c = NULL;
+ Glib::ustring str_key = d.key();
+ if (tree->type() == BTree::KEY_FIXED)
+ {
+ c = new ClaveFija (atoi(str_key.c_str()));
+ result = tree->FindKey(*c);
+ }
+ else
+ {
+ c = new ClaveVariable (str_key);
+ result = tree->FindKey(*c);
+ }
+ if (result)
+ {
+ tree->Clear ();
+ tree->AddNode(result->node);
+ tree->HighliteKey (*c);
+ delete result;
+ return; // Encontramos, salimos
+ }
+ if (c) delete c;
+ Gtk::MessageDialog msg("Clave no encontrada!", false,
+ Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ msg.run();
+ // Seguimos intentando
+ }
+ else return; // Cancelaron, salimos
+ }
+}
+
void zoom_out ()
{
double r = real_canvas->get_pixels_per_unit ();