[Lemon-commits] [lemon_svn] hegyi: r2451 - hugo/trunk/gui
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:52:47 CET 2006
Author: hegyi
Date: Wed Jan 4 19:05:55 2006
New Revision: 2451
Added:
hugo/trunk/gui/algobox.cc
hugo/trunk/gui/algowin.cc
hugo/trunk/gui/kruskalbox.cc
hugo/trunk/gui/kruskalbox.h
Modified:
hugo/trunk/gui/Makefile.am
hugo/trunk/gui/algobox.h
hugo/trunk/gui/algowin.h
hugo/trunk/gui/main_win.cc
hugo/trunk/gui/main_win.h
Log:
Communication with algorithm window is developed.
Modified: hugo/trunk/gui/Makefile.am
==============================================================================
--- hugo/trunk/gui/Makefile.am (original)
+++ hugo/trunk/gui/Makefile.am Wed Jan 4 19:05:55 2006
@@ -7,6 +7,10 @@
glemon_SOURCES = \
all_include.h \
+ algobox.cc \
+ algobox.h \
+ algowin.cc \
+ algowin.h \
gdc-broken_edge.cc \
graph_displayer_canvas.cc \
graph_displayer_canvas.h \
@@ -15,6 +19,8 @@
graph_displayer_canvas-node.cc \
graph_displayer_canvas-zoom.cc \
graph-displayer.cc \
+ kruskalbox.cc \
+ kruskalbox.h \
main_win.cc \
main_win.h \
mapstorage.cc \
Added: hugo/trunk/gui/algobox.cc
==============================================================================
--- (empty file)
+++ hugo/trunk/gui/algobox.cc Wed Jan 4 19:05:55 2006
@@ -0,0 +1,140 @@
+#include <algobox.h>
+
+enum {N_DEMO1, N_DEMO2, NODE_INPUT_NUM}; // input IDs for nodes;
+enum {E_DEMO1, EDGE_INPUT_NUM}; // input IDs for edges;
+
+AlgoBox::AlgoBox(std::vector<std::string> tabnames, std::vector<std::string> nodemapnames, std::vector<std::string> edgemapnames)
+{
+ init(tabnames, nodemapnames, edgemapnames);
+}
+
+void AlgoBox::init(std::vector<std::string> tabnames, std::vector<std::string> nodemapnames, std::vector<std::string> edgemapnames)
+{
+ set_spacing(5);
+
+ update_tablist(tabnames);
+
+ //if active tab is changed, the map names in cbt/s have to be updated
+ tabcbt.signal_changed().connect(sigc::mem_fun(*this, &AlgoBox::emit_tab_change));
+
+ pack_start(tabcbt);
+
+ build_box();
+
+ update_maplist(nodemapnames, edgemapnames);
+
+ show_all_children();
+};
+
+void AlgoBox::update_cbt(std::vector< std::string > stringlist, Gtk::ComboBoxText & cbt)
+{
+ std::string actname=cbt.get_active_text();
+ int prev_act=-1;
+
+ cbt.clear();
+ int actptr=0;
+
+ std::vector< std::string >::iterator emsi=stringlist.begin();
+ for(;emsi!=stringlist.end();emsi++)
+ {
+ if(actname==*emsi)
+ {
+ prev_act=actptr;
+ }
+
+ cbt.append_text(*emsi);
+ actptr++;
+ }
+
+ if(prev_act!=-1)
+ {
+ cbt.set_active(prev_act);
+ }
+ else if(actptr>0) //so there is item in the list
+ {
+ cbt.set_active(0);
+ }
+}
+
+void AlgoBox::update_tablist( std::vector< std::string > tl )
+{
+ update_cbt(tl, tabcbt);
+ emit_tab_change();
+}
+
+void AlgoBox::update_maplist( std::vector< std::string > nml, std::vector< std::string > eml )
+{
+ for(int i=0;i<(int)nodemapcbts.size();i++)
+ {
+ update_cbt(nml, *(nodemapcbts[i]));
+ }
+ for(int i=0;i<(int)edgemapcbts.size();i++)
+ {
+ update_cbt(eml, *(edgemapcbts[i]));
+ }
+}
+
+void AlgoBox::run()
+{
+ std::cout << "Start algorithm." << std::endl;
+}
+
+void AlgoBox::build_box()
+{
+ pack_start(*(new Gtk::HSeparator()));
+
+ label=new Gtk::Label("Specific part for each algorithm.");
+
+ pack_start(*label);
+ pack_start(*(new Gtk::HSeparator()));
+
+ label=new Gtk::Label("Maps in chosen tab:");
+
+ pack_start(*label);
+
+ nodemapcbts.resize(NODE_INPUT_NUM);
+ for(int i=0;i<(int)nodemapcbts.size();i++)
+ {
+ Gtk::HBox * hbox=new Gtk::HBox();
+
+ std::ostringstream o;
+ o << "NodeInput " << i+1 << ":";
+ label=new Gtk::Label(o.str());
+
+ nodemapcbts[i]=new Gtk::ComboBoxText();
+
+ hbox->pack_start(*label);
+ hbox->pack_start(*(nodemapcbts[i]));
+ pack_start(*hbox);
+ }
+
+ pack_start(*(new Gtk::HSeparator()));
+
+ edgemapcbts.resize(EDGE_INPUT_NUM);
+ for(int i=0;i<(int)edgemapcbts.size();i++)
+ {
+ Gtk::HBox * hbox=new Gtk::HBox();
+
+ std::ostringstream o;
+ o << "EdgeInput " << i+1 << ":";
+ label=new Gtk::Label(o.str());
+
+ edgemapcbts[i]=new Gtk::ComboBoxText();
+
+ hbox->pack_start(*label);
+ hbox->pack_start(*(edgemapcbts[i]));
+ pack_start(*hbox);
+ }
+
+ pack_start(*(new Gtk::HSeparator()));
+}
+
+sigc::signal<void, std::string> AlgoBox::signal_maplist_needed()
+{
+ return signal_maplist_need;
+}
+
+void AlgoBox::emit_tab_change()
+{
+ signal_maplist_need.emit(tabcbt.get_active_text());
+}
Modified: hugo/trunk/gui/algobox.h
==============================================================================
--- hugo/trunk/gui/algobox.h (original)
+++ hugo/trunk/gui/algobox.h Wed Jan 4 19:05:55 2006
@@ -11,52 +11,31 @@
class AlgoBox : public Gtk::VBox
{
+ sigc::signal<void, std::string> signal_maplist_need;
+ Gtk::ComboBoxText tabcbt;
+
+protected:
Gtk::Label * label;
- Gtk::ComboBoxText cbt;
+ std::vector<Gtk::ComboBoxText *> nodemapcbts;
+ std::vector<Gtk::ComboBoxText *> edgemapcbts;
- public:
- AlgoBox(std::vector<std::string> tabnames)
- {
- update_tablist(tabnames);
-
- label=new Gtk::Label("Haliho");
-
- pack_start(*label);
- pack_start(cbt);
-
- show_all_children();
- };
-
- void update_tablist( std::vector< std::string > tl )
- {
- std::string actname=cbt.get_active_text();
- int prev_act=-1;
-
- cbt.clear();
- int actptr=0;
-
- std::vector< std::string >::iterator emsi=tl.begin();
- for(;emsi!=tl.end();emsi++)
- {
- if(actname==*emsi)
- {
- prev_act=actptr;
- }
-
- cbt.append_text(*emsi);
- actptr++;
- }
-
- if(prev_act!=-1)
- {
- cbt.set_active(prev_act);
- }
- else if(actptr>0) //so there is item in the list
- {
- cbt.set_active(0);
- }
- }
+public:
+ AlgoBox(){};
+ AlgoBox(std::vector<std::string>, std::vector<std::string>, std::vector<std::string>);
+
+ virtual void init(std::vector<std::string>, std::vector<std::string>, std::vector<std::string>);
+
+ sigc::signal<void, std::string> signal_maplist_needed();
+ void emit_tab_change();
+ void update_tablist( std::vector< std::string > tl );
+ void update_maplist( std::vector< std::string >, std::vector< std::string >);
+
+ void update_cbt( std::vector< std::string > tl, Gtk::ComboBoxText &);
+
+ virtual void run();
+
+ virtual void build_box();
};
#endif //ALGOBOX_H
Added: hugo/trunk/gui/algowin.cc
==============================================================================
--- (empty file)
+++ hugo/trunk/gui/algowin.cc Wed Jan 4 19:05:55 2006
@@ -0,0 +1,88 @@
+#include <algowin.h>
+#include <kruskalbox.h>
+
+sigc::signal<void, AlgoWin *> AlgoWin::signal_closing()
+{
+ return signal_closed;
+}
+
+sigc::signal<void, AlgoWin *, std::string> AlgoWin::signal_maplist_needed()
+{
+ return signal_maplist_need;
+}
+
+bool AlgoWin::closeIfEscapeIsPressed(GdkEventKey* e)
+{
+ if(e->keyval==GDK_Escape)
+ {
+ on_hide();
+ }
+ return true;
+}
+
+AlgoWin::AlgoWin(int algoid, std::vector<std::string> tabnames, std::vector<std::string> nodemapnames,std::vector<std::string> edgemapnames)
+{
+ signal_key_press_event().connect(sigc::mem_fun(*this, &AlgoWin::closeIfEscapeIsPressed));
+
+ Gtk::VBox * vbox=new Gtk::VBox();
+ vbox->set_spacing(5);
+
+ Gtk::Label * label=new Gtk::Label("Select graph:");
+
+ switch(algoid)
+ {
+ case 0:
+ ab=new AlgoBox(tabnames, nodemapnames, edgemapnames);
+ set_title("Algo Win Demo");
+ break;
+ case 1:
+ ab=new KruskalBox(tabnames, nodemapnames, edgemapnames);
+ set_title("Kruskal Algorithm");
+ break;
+ default:
+ break;
+ }
+ ab->signal_maplist_needed().connect(sigc::mem_fun(*this, &AlgoWin::emit_tab_change));
+
+ runbutton=new Gtk::Button("Run");
+ runbutton->signal_released().connect(sigc::mem_fun(*ab,&AlgoBox::run));
+ runbutton->signal_activate().connect(sigc::mem_fun(*ab,&AlgoBox::run));
+
+ closebutton=new Gtk::Button("Close");
+ closebutton->signal_released().connect(sigc::mem_fun(*this,&AlgoWin::on_hide));
+ closebutton->signal_activate().connect(sigc::mem_fun(*this,&AlgoWin::on_hide));
+
+ Gtk::HBox * hbox=new Gtk::HBox();
+
+ hbox->pack_start(*runbutton);
+ hbox->pack_start(*closebutton);
+
+ vbox->pack_start(*label);
+ vbox->pack_start(*ab);
+ vbox->pack_start(*hbox);
+
+ add(*vbox);
+
+ show_all_children();
+};
+
+void AlgoWin::update_tablist(std::vector<std::string> tabnames)
+{
+ ab->update_tablist(tabnames);
+}
+
+void AlgoWin::update_maplist(std::vector<std::string> nodemapnames, std::vector<std::string> edgemapnames)
+{
+ ab->update_maplist(nodemapnames, edgemapnames);
+}
+
+void AlgoWin::on_hide()
+{
+ signal_closed.emit(this);
+ Gtk::Window::on_hide();
+}
+
+void AlgoWin::emit_tab_change(std::string newtab)
+{
+ signal_maplist_need.emit(this, newtab);
+}
Modified: hugo/trunk/gui/algowin.h
==============================================================================
--- hugo/trunk/gui/algowin.h (original)
+++ hugo/trunk/gui/algowin.h Wed Jan 4 19:05:55 2006
@@ -10,44 +10,32 @@
#include <libgnomecanvasmm.h>
#include <libgnomecanvasmm/polygon.h>
-enum {GENERAL, ALGO_NUM}; // algorithm IDs;
+enum {GENERAL, KRUSKAL, ALGO_NUM}; // algorithm IDs;
-class AlgoWin : public Gtk::Dialog
+class AlgoWin : public Gtk::Window
{
private:
AlgoBox * ab;
+ Gtk::Button * runbutton;
+ Gtk::Button * closebutton;
protected:
sigc::signal<void, AlgoWin *> signal_closed;
+ sigc::signal<void, AlgoWin *, std::string> signal_maplist_need;
public:
- sigc::signal<void, AlgoWin *> signal_closing()
- {
- return signal_closed;
- }
-
- AlgoWin(int algoid, std::vector<std::string> tabnames)
- {
- Gtk::VBox * vbox=get_vbox();
-
- ab=new AlgoBox(tabnames);
-
- vbox->pack_start(*ab);
-
- add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
-
- show_all_children();
- };
-
- void update_tablist(std::vector<std::string> tabnames)
- {
- ab->update_tablist(tabnames);
- }
-
- void on_hide()
- {
- signal_closed.emit(this);
- Gtk::Dialog::on_hide();
- }
+ bool closeIfEscapeIsPressed(GdkEventKey* e);
+
+ sigc::signal<void, AlgoWin *> signal_closing();
+ sigc::signal<void, AlgoWin *, std::string> signal_maplist_needed();
+
+ void emit_tab_change(std::string);
+
+ AlgoWin(int, std::vector<std::string>, std::vector<std::string>, std::vector<std::string>);
+
+ void update_tablist(std::vector<std::string> tabnames);
+ void update_maplist(std::vector<std::string>, std::vector<std::string>);
+
+ void on_hide();
};
#endif //ALGOWIN_H
Added: hugo/trunk/gui/kruskalbox.cc
==============================================================================
--- (empty file)
+++ hugo/trunk/gui/kruskalbox.cc Wed Jan 4 19:05:55 2006
@@ -0,0 +1,27 @@
+#include <kruskalbox.h>
+
+KruskalBox::KruskalBox(std::vector<std::string> t, std::vector<std::string> nm, std::vector<std::string> em):AlgoBox()
+{
+ init(t, nm, em);
+}
+
+void KruskalBox::run()
+{
+ std::cout << "Kruskal inditasa, de meg nincsen keszen." << std::endl;
+}
+
+void KruskalBox::build_box()
+{
+ edgemapcbts.resize(1);
+ Gtk::HBox * hbox=new Gtk::HBox();
+
+ std::ostringstream o;
+ o << "Edgecosts: ";
+ label=new Gtk::Label(o.str());
+
+ edgemapcbts[0]=new Gtk::ComboBoxText();
+
+ hbox->pack_start(*label);
+ hbox->pack_start(*(edgemapcbts[0]));
+ pack_start(*hbox);
+}
Added: hugo/trunk/gui/kruskalbox.h
==============================================================================
--- (empty file)
+++ hugo/trunk/gui/kruskalbox.h Wed Jan 4 19:05:55 2006
@@ -0,0 +1,23 @@
+// -*- C++ -*- //
+
+#ifndef KRUSKALBOX_H
+#define KRUSKALBOX_H
+
+class KruskalBox;
+
+#include <all_include.h>
+#include <algobox.h>
+#include <lemon/kruskal.h>
+#include <libgnomecanvasmm.h>
+#include <libgnomecanvasmm/polygon.h>
+
+class KruskalBox : public AlgoBox
+{
+public:
+ KruskalBox(std::vector<std::string> t, std::vector<std::string> nm, std::vector<std::string> em);
+
+ void run();
+
+ void build_box();
+};
+#endif //KRUSKALBOX_H
Modified: hugo/trunk/gui/main_win.cc
==============================================================================
--- hugo/trunk/gui/main_win.cc (original)
+++ hugo/trunk/gui/main_win.cc Wed Jan 4 19:05:55 2006
@@ -104,6 +104,8 @@
ag->add( Gtk::Action::create("AlgoMenu", "_Algorithms") );
ag->add( Gtk::Action::create("AlgoGeneral", "_General"),
sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 0) );
+ ag->add( Gtk::Action::create("AlgoKruskal", "_Kruskal"),
+ sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 1) );
Gtk::RadioAction::Group tool_group;
ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::StockID("gd-move"), "Move"),
@@ -153,6 +155,7 @@
" </menu>"
" <menu action='AlgoMenu'>"
" <menuitem action='AlgoGeneral'/>"
+ " <menuitem action='AlgoKruskal'/>"
" </menu>"
" </menubar>"
" <toolbar name='ToolBar'>"
@@ -224,7 +227,7 @@
}
set_title(tabnames[active_tab] + " - " + prog_name);
notebook.set_tab_label_text((Widget&)*(tabs[active_tab]), tabnames[active_tab]);
- updateAlgoWins();
+ updateAlgoWinTabs();
}
void MainWin::readFile(const std::string & filename)
@@ -246,7 +249,7 @@
notebook.append_page((Gtk::Widget&)(*(tabs[active_tab])));
notebook.set_current_page(size);
set_tabtitle("unsaved file");
- updateAlgoWins();
+ updateAlgoWinTabs();
}
void MainWin::closeTab()
@@ -306,7 +309,7 @@
active_tab=-1;
}
- updateAlgoWins();
+ updateAlgoWinTabs();
}
}
@@ -404,18 +407,28 @@
void MainWin::createAlgoWin(int algoid)
{
- AlgoWin * aw=new AlgoWin(algoid, tabnames);
+ AlgoWin * aw=new AlgoWin(algoid, tabnames, tabs[0]->mapstorage.getNodeMapList(),tabs[0]->mapstorage.getEdgeMapList());
aw->signal_closing().connect(sigc::mem_fun(*this, &MainWin::deRegisterAlgoWin));
+ aw->signal_maplist_needed().connect(sigc::mem_fun(*this, &MainWin::updateAlgoWinMaps));
aws.insert(aw);
aw->show();
}
+void MainWin::updateAlgoWinMaps(AlgoWin * awp, std::string tabname)
+{
+ int i=0;
+ for(;(i<(int)tabnames.size())&&(tabnames[i]!=tabname);i++)
+ {
+ }
+ awp->update_maplist(tabs[i]->mapstorage.getNodeMapList(),tabs[i]->mapstorage.getEdgeMapList());
+}
+
void MainWin::deRegisterAlgoWin(AlgoWin * awp)
{
aws.erase(awp);
}
-void MainWin::updateAlgoWins()
+void MainWin::updateAlgoWinTabs()
{
std::set< AlgoWin* >::iterator awsi=aws.begin();
for(;awsi!=aws.end();awsi++)
Modified: hugo/trunk/gui/main_win.h
==============================================================================
--- hugo/trunk/gui/main_win.h (original)
+++ hugo/trunk/gui/main_win.h Wed Jan 4 19:05:55 2006
@@ -73,7 +73,8 @@
virtual void createAlgoWin(int);
virtual void deRegisterAlgoWin(AlgoWin *);
- virtual void updateAlgoWins();
+ virtual void updateAlgoWinTabs();
+ virtual void updateAlgoWinMaps(AlgoWin *, std::string);
virtual void changeEditorialTool(int);
More information about the Lemon-commits
mailing list