hegyi@1: /* -*- C++ -*- hegyi@1: * hegyi@1: * This file is a part of LEMON, a generic C++ optimization library hegyi@1: * hegyi@1: * Copyright (C) 2003-2006 hegyi@1: * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport hegyi@1: * (Egervary Research Group on Combinatorial Optimization, EGRES). hegyi@1: * hegyi@1: * Permission to use, modify and distribute this software is granted hegyi@1: * provided that this copyright notice appears in all copies. For hegyi@1: * precise terms see the accompanying LICENSE file. hegyi@1: * hegyi@1: * This software is provided "AS IS" with no warranty of any kind, hegyi@1: * express or implied, and with no claim as to its suitability for any hegyi@1: * purpose. hegyi@1: * hegyi@1: */ hegyi@1: hegyi@1: #include hegyi@1: #include hegyi@1: #include hegyi@1: #include hegyi@1: hegyi@1: sigc::signal AlgoWin::signal_closing() hegyi@1: { hegyi@1: return signal_closed; hegyi@1: } hegyi@1: hegyi@1: sigc::signal AlgoWin::signal_maplist_needed() hegyi@1: { hegyi@1: return signal_maplist_need; hegyi@1: } hegyi@1: hegyi@1: bool AlgoWin::closeIfEscapeIsPressed(GdkEventKey* e) hegyi@1: { hegyi@1: if(e->keyval==GDK_Escape) hegyi@1: { hegyi@1: on_hide(); hegyi@1: } hegyi@1: return true; hegyi@1: } hegyi@1: hegyi@1: AlgoWin::AlgoWin(int algoid, std::vector tabnames) hegyi@1: { hegyi@1: signal_key_press_event().connect(sigc::mem_fun(*this, &AlgoWin::closeIfEscapeIsPressed)); hegyi@1: hegyi@1: Gtk::VBox * vbox=new Gtk::VBox(); hegyi@1: vbox->set_spacing(5); hegyi@1: hegyi@1: Gtk::Label * label=new Gtk::Label("Select digraph:"); hegyi@1: hegyi@1: switch(algoid) hegyi@1: { hegyi@1: case 0: hegyi@1: ab=new AlgoBox(tabnames); hegyi@1: set_title("Algo Win Demo"); hegyi@1: break; hegyi@1: case 1: hegyi@1: ab=new KruskalBox(tabnames); hegyi@1: set_title("Kruskal Algorithm"); hegyi@1: break; hegyi@1: case 2: hegyi@1: ab=new DijkstraBox(tabnames); hegyi@1: set_title("Dijkstra Algorithm"); hegyi@1: break; hegyi@1: case 3: hegyi@1: ab=new SuurballeBox(tabnames); hegyi@1: set_title("Suurballe Algorithm"); hegyi@1: break; hegyi@1: default: hegyi@1: break; hegyi@1: } hegyi@1: ab->signal_maplist_needed().connect(sigc::mem_fun(*this, &AlgoWin::emit_tab_change)); hegyi@1: ab->signal_newmapwin_needed().connect(sigc::mem_fun(*this, &AlgoWin::emit_new_map_signal)); hegyi@1: hegyi@1: runbutton=new Gtk::Button("Run"); hegyi@1: runbutton->signal_released().connect(sigc::mem_fun(*ab,&AlgoBox::run)); hegyi@1: runbutton->signal_activate().connect(sigc::mem_fun(*ab,&AlgoBox::run)); hegyi@1: hegyi@1: closebutton=new Gtk::Button("Close"); hegyi@1: closebutton->signal_released().connect(sigc::mem_fun(*this,&AlgoWin::on_hide)); hegyi@1: closebutton->signal_activate().connect(sigc::mem_fun(*this,&AlgoWin::on_hide)); hegyi@1: hegyi@1: Gtk::HBox * hbox=new Gtk::HBox(); hegyi@1: hegyi@1: hbox->pack_start(*runbutton); hegyi@1: hbox->pack_start(*closebutton); hegyi@1: hegyi@1: vbox->pack_start(*label); hegyi@1: vbox->pack_start(*ab); hegyi@1: vbox->pack_start(*hbox); hegyi@1: hegyi@1: add(*vbox); hegyi@1: hegyi@1: show_all_children(); hegyi@1: }; hegyi@1: hegyi@1: void AlgoWin::update_tablist(std::vector tabnames) hegyi@1: { hegyi@1: ab->update_tablist(tabnames); hegyi@1: } hegyi@1: hegyi@1: void AlgoWin::update_maplist(MapStorage * mapstorage) hegyi@1: { hegyi@1: ab->update_maplist(mapstorage); hegyi@1: } hegyi@1: hegyi@1: void AlgoWin::on_hide() hegyi@1: { hegyi@1: signal_closed.emit(this); hegyi@1: Gtk::Window::on_hide(); hegyi@1: } hegyi@1: hegyi@1: void AlgoWin::emit_tab_change(std::string newtab) hegyi@1: { hegyi@1: signal_maplist_need.emit(this, newtab); hegyi@1: }