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