# HG changeset patch
# User hegyi
# Date 1136309422 0
# Node ID 3a263e57e1d939f36ac25e649d04035d7586f8a9
# Parent  25a4698cbe0c15b7026c28e31f0642c90a9f006d
Coding of Algorithms has begun, but code is really-really ugly yet.

diff -r 25a4698cbe0c -r 3a263e57e1d9 algobox.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/algobox.h	Tue Jan 03 17:30:22 2006 +0000
@@ -0,0 +1,62 @@
+// -*- C++ -*- //
+
+#ifndef ALGOBOX_H
+#define ALGOBOX_H
+
+class AlgoBox;
+
+#include <all_include.h>
+#include <libgnomecanvasmm.h>
+#include <libgnomecanvasmm/polygon.h>
+
+class AlgoBox : public Gtk::VBox
+{
+  
+  Gtk::Label * label;
+  Gtk::ComboBoxText cbt;
+  
+ 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);
+	}
+    }
+
+};
+#endif //ALGOBOX_H
diff -r 25a4698cbe0c -r 3a263e57e1d9 algowin.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/algowin.h	Tue Jan 03 17:30:22 2006 +0000
@@ -0,0 +1,53 @@
+// -*- C++ -*- //
+
+#ifndef ALGOWIN_H
+#define ALGOWIN_H
+
+class AlgoWin;
+
+#include <all_include.h>
+#include <algobox.h>
+#include <libgnomecanvasmm.h>
+#include <libgnomecanvasmm/polygon.h>
+
+enum {GENERAL, ALGO_NUM}; // algorithm IDs;
+
+class AlgoWin : public Gtk::Dialog
+{
+private:
+  AlgoBox * ab;
+
+protected:
+  sigc::signal<void, AlgoWin *> signal_closed;  
+
+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();
+  }
+};
+#endif //ALGOWIN_H
diff -r 25a4698cbe0c -r 3a263e57e1d9 main_win.cc
--- a/main_win.cc	Tue Jan 03 14:56:45 2006 +0000
+++ b/main_win.cc	Tue Jan 03 17:30:22 2006 +0000
@@ -101,6 +101,10 @@
   ag->add( Gtk::Action::create("ShowMaps", "_Maps"),
 	   sigc::mem_fun(*this, &MainWin::createMapWin));
 
+  ag->add( Gtk::Action::create("AlgoMenu", "_Algorithms") );
+  ag->add( Gtk::Action::create("AlgoGeneral", "_General"),
+	   sigc::bind( sigc::mem_fun ( *this, &MainWin::createAlgoWin ), 0) );
+
   Gtk::RadioAction::Group tool_group;
   ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::StockID("gd-move"), "Move"),
       sigc::bind( sigc::mem_fun ( *this, &MainWin::changeEditorialTool ), 0) );
@@ -147,6 +151,9 @@
       "    <menu action='ShowMenu'>"
       "      <menuitem action='ShowMaps'/>"
       "    </menu>"
+      "    <menu action='AlgoMenu'>"
+      "      <menuitem action='AlgoGeneral'/>"
+      "    </menu>"
       "  </menubar>"
       "  <toolbar name='ToolBar'>"
       "    <toolitem action='FileNew' />"
@@ -206,6 +213,7 @@
   tabnames[active_tab]=name;
   set_title(tabnames[active_tab] + " - " + prog_name);
   notebook.set_tab_label_text((Widget&)*(tabs[active_tab]), tabnames[active_tab]);
+  updateAlgoWins();
 }
 
 void MainWin::readFile(const std::string & filename)
@@ -228,6 +236,7 @@
   notebook.append_page((Gtk::Widget&)(*(tabs[active_tab])));
   notebook.set_current_page(size);
   set_tabtitle(tabnames[active_tab]);
+  updateAlgoWins();
 }
 
 void MainWin::closeTab()
@@ -258,12 +267,13 @@
 	{
 	  for(int i=active_tab+1;i<size;i++)
 	    {
+	      tabnames[i-1]=tabnames[i];
 	      tabs[i-1]=tabs[i];
 	    }
 	}
-
       //if size==1 resize will delete the only element
       tabs.resize(size-1);
+      tabnames.resize(size-1);
 
       int old_active_tab=active_tab;
       notebook.remove_page(active_tab);
@@ -274,17 +284,21 @@
       //But after deletion it will become the first tab,
       //and this should be registrated in tabs vector,
       //as well.
-      if(old_active_tab==0)
+      if((old_active_tab==0)&&(size!=1))
 	{
 	  onChangeTab(NULL,0);
 	}
 
+      std::cout << "NAAAA" << std::endl;
+
       //if this was the last page in notebook, there is
       //no active_tab now
       if(size==1)
 	{
 	  active_tab=-1;
 	}
+
+      updateAlgoWins();
     }
 }
 
@@ -380,6 +394,28 @@
     }
 }
 
+void MainWin::createAlgoWin(int algoid)
+{
+  AlgoWin * aw=new AlgoWin(algoid, tabnames);
+  aw->signal_closing().connect(sigc::mem_fun(*this, &MainWin::deRegisterAlgoWin));
+  aws.insert(aw);
+  aw->show();
+}
+
+void MainWin::deRegisterAlgoWin(AlgoWin * awp)
+{
+  aws.erase(awp);
+}
+
+void MainWin::updateAlgoWins()
+{
+  std::set< AlgoWin* >::iterator awsi=aws.begin();
+  for(;awsi!=aws.end();awsi++)
+    {
+      (*awsi)->update_tablist(tabnames);
+    }
+}
+
 void MainWin::changeEditorialTool(int tool)
 {
   active_tool=tool;
diff -r 25a4698cbe0c -r 3a263e57e1d9 main_win.h
--- a/main_win.h	Tue Jan 03 14:56:45 2006 +0000
+++ b/main_win.h	Tue Jan 03 17:30:22 2006 +0000
@@ -4,6 +4,7 @@
 #define MAIN_WIN_H
 
 #include "all_include.h"
+#include "algowin.h"
 #include "map_win.h"
 #include "new_map_win.h"
 #include "nbtab.h"
@@ -26,6 +27,8 @@
   std::vector<NoteBookTab *> tabs;
   std::vector<std::string> tabnames;
 
+  std::set< AlgoWin* > aws;
+
 public:
   
   ///Constructor of the \ref NoteBookTab. It creates the menu and the \ref GraphDisplayerCanvas on which the graph will be drawn.
@@ -66,6 +69,10 @@
 
   virtual void createMapWin();
 
+  virtual void createAlgoWin(int);
+  virtual void deRegisterAlgoWin(AlgoWin *);
+  virtual void updateAlgoWins();
+
   virtual void changeEditorialTool(int);
 
   virtual void createNewMapWinAfterSignal(NoteBookTab *, bool);