algobox.cc
author hegyi
Wed, 04 Jan 2006 18:05:55 +0000
branchgui
changeset 106 853dd852abc7
child 108 bf355fd6563e
permissions -rw-r--r--
Communication with algorithm window is developed.
     1 #include <algobox.h>
     2 
     3 enum {N_DEMO1, N_DEMO2, NODE_INPUT_NUM}; // input IDs for nodes;
     4 enum {E_DEMO1, EDGE_INPUT_NUM}; // input IDs for edges;
     5 
     6 AlgoBox::AlgoBox(std::vector<std::string> tabnames, std::vector<std::string> nodemapnames, std::vector<std::string> edgemapnames)
     7 {
     8   init(tabnames, nodemapnames, edgemapnames);
     9 }
    10 
    11 void AlgoBox::init(std::vector<std::string> tabnames, std::vector<std::string> nodemapnames, std::vector<std::string> edgemapnames)
    12 {
    13   set_spacing(5);
    14 
    15   update_tablist(tabnames);
    16 
    17   //if active tab is changed, the map names in cbt/s have to be updated
    18   tabcbt.signal_changed().connect(sigc::mem_fun(*this, &AlgoBox::emit_tab_change));
    19 
    20   pack_start(tabcbt);
    21 
    22   build_box();
    23 
    24   update_maplist(nodemapnames, edgemapnames);
    25 
    26   show_all_children();
    27 };
    28 
    29 void AlgoBox::update_cbt(std::vector< std::string > stringlist, Gtk::ComboBoxText & cbt)
    30 {
    31   std::string actname=cbt.get_active_text();
    32   int prev_act=-1;
    33 
    34   cbt.clear();
    35   int actptr=0;
    36 
    37   std::vector< std::string >::iterator emsi=stringlist.begin();
    38   for(;emsi!=stringlist.end();emsi++)
    39     {
    40       if(actname==*emsi)
    41 	{
    42 	  prev_act=actptr;
    43 	}
    44 
    45       cbt.append_text(*emsi);
    46       actptr++;
    47     }
    48 
    49   if(prev_act!=-1)
    50     {
    51       cbt.set_active(prev_act);
    52     }
    53   else if(actptr>0) //so there is item in the list
    54     {
    55       cbt.set_active(0);
    56     }
    57 }
    58 
    59 void AlgoBox::update_tablist( std::vector< std::string > tl )
    60 {
    61   update_cbt(tl, tabcbt);
    62   emit_tab_change();
    63 }
    64 
    65 void AlgoBox::update_maplist( std::vector< std::string > nml, std::vector< std::string > eml )
    66 {
    67   for(int i=0;i<(int)nodemapcbts.size();i++)
    68     {
    69       update_cbt(nml, *(nodemapcbts[i]));
    70     }
    71   for(int i=0;i<(int)edgemapcbts.size();i++)
    72     {
    73       update_cbt(eml, *(edgemapcbts[i]));
    74     }
    75 }
    76 
    77 void AlgoBox::run()
    78 {
    79   std::cout << "Start algorithm." << std::endl;
    80 }
    81 
    82 void AlgoBox::build_box()
    83 {
    84   pack_start(*(new Gtk::HSeparator()));
    85 
    86   label=new Gtk::Label("Specific part for each algorithm.");
    87       
    88   pack_start(*label);
    89   pack_start(*(new Gtk::HSeparator()));
    90 
    91   label=new Gtk::Label("Maps in chosen tab:");
    92       
    93   pack_start(*label);
    94 
    95   nodemapcbts.resize(NODE_INPUT_NUM);
    96   for(int i=0;i<(int)nodemapcbts.size();i++)
    97     {
    98       Gtk::HBox * hbox=new Gtk::HBox();
    99 
   100       std::ostringstream o;
   101       o << "NodeInput " << i+1 << ":";
   102       label=new Gtk::Label(o.str());
   103 
   104       nodemapcbts[i]=new Gtk::ComboBoxText();
   105 
   106       hbox->pack_start(*label);
   107       hbox->pack_start(*(nodemapcbts[i]));
   108       pack_start(*hbox);
   109     }
   110 
   111   pack_start(*(new Gtk::HSeparator()));
   112 
   113   edgemapcbts.resize(EDGE_INPUT_NUM);
   114   for(int i=0;i<(int)edgemapcbts.size();i++)
   115     {
   116       Gtk::HBox * hbox=new Gtk::HBox();
   117 
   118       std::ostringstream o;
   119       o << "EdgeInput " << i+1 << ":";
   120       label=new Gtk::Label(o.str());
   121 
   122       edgemapcbts[i]=new Gtk::ComboBoxText();
   123 
   124       hbox->pack_start(*label);
   125       hbox->pack_start(*(edgemapcbts[i]));
   126       pack_start(*hbox);
   127     }
   128 
   129   pack_start(*(new Gtk::HSeparator()));
   130 }
   131 
   132 sigc::signal<void, std::string> AlgoBox::signal_maplist_needed()
   133 {
   134   return signal_maplist_need;
   135 }
   136 
   137 void AlgoBox::emit_tab_change()
   138 {
   139   signal_maplist_need.emit(tabcbt.get_active_text());
   140 }