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@112: #include "mapselector.h"
hegyi@112: 
hegyi@114: MapSelector::MapSelector(std::vector<std::string> ml, std::string act, std::string labeltext, bool edge, bool d):def(d),itisedge(edge),set_new_map(false)
hegyi@112: {
hegyi@112:   update_list(ml);
hegyi@112: 
hegyi@112:   if(act=="")
hegyi@112:     {
hegyi@112:       cbt.set_active(0);
hegyi@112:       default_state=true;
hegyi@112:     }
hegyi@112:   else
hegyi@112:     {
hegyi@112:       cbt.set_active_text((Glib::ustring)act);
hegyi@112:       default_state=false;
hegyi@112:     }
hegyi@112: 
hegyi@112:   //binding signal to the actual entry
hegyi@112:   cbt.signal_changed().connect
hegyi@112:     (
hegyi@112:      sigc::mem_fun((*this), &MapSelector::comboChanged),
hegyi@112:      false
hegyi@112:      );
hegyi@112:   
hegyi@114:   label=new Gtk::Label(labeltext);
hegyi@112: 
hegyi@112:   label->set_width_chars(longest_property_string_length);
hegyi@112: 
hegyi@122:   defbut=NULL;
hegyi@122:   if(def)
hegyi@122:     {
hegyi@122:       defbut=new Gtk::Button();
hegyi@122:       defbut->set_label("Reset");
hegyi@122:       
hegyi@122:       defbut->signal_pressed().connect
hegyi@122: 	(
hegyi@122: 	 sigc::mem_fun(*this, &MapSelector::reset)
hegyi@122: 	 );
hegyi@122:     }
hegyi@112: 
hegyi@112:   newbut=new Gtk::Button(Gtk::Stock::NEW);
hegyi@112: 
hegyi@112:   newbut->signal_pressed().connect
hegyi@112:     (
hegyi@112:      sigc::mem_fun(*this, &MapSelector::new_but_pressed)
hegyi@112:      );
hegyi@112: 
hegyi@112:   add(*label);
hegyi@112: 
hegyi@112:   add(cbt);
hegyi@112: 
hegyi@122:   if(def)
hegyi@122:     {
hegyi@122:       add(*defbut);
hegyi@122:     }
hegyi@122: 
hegyi@112:   add(*newbut);
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::new_but_pressed()
hegyi@112: {
hegyi@112:   set_new_map=true;
hegyi@112:   signal_newmapwin.emit(itisedge);
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::update_list( std::vector< std::string > ml )
hegyi@112: {
hegyi@112:   int prev_act=cbt.get_active_row_number();
hegyi@112:   cbt.clear();
hegyi@172:   cbt_content.clear();
hegyi@112:   std::vector< std::string >::iterator emsi=ml.begin();
hegyi@112:   for(;emsi!=ml.end();emsi++)
hegyi@112:     {
hegyi@112:       cbt.append_text(*emsi);
hegyi@172:       cbt_content.push_back(*emsi);
hegyi@112:     }
hegyi@114:   if(def)
hegyi@114:     {
hegyi@114:       cbt.prepend_text("Default values");
hegyi@172:       cbt_content.push_back("Default values");
hegyi@114:     }
hegyi@112:   if(prev_act!=-1)
hegyi@112:     {
hegyi@112:       cbt.set_active(prev_act);
hegyi@112:     }
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::comboChanged()
hegyi@112: {
hegyi@122:   if(cbt.get_active_row_number()!=0 || !def)
hegyi@112:     {
hegyi@112:       default_state=false;
hegyi@112:       Glib::ustring mapname = cbt.get_active_text();
hegyi@112:       if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty.
hegyi@112: 	{
hegyi@112: 	  signal_cbt.emit(mapname);
hegyi@112: 	}
hegyi@112:     }
hegyi@112:   else if((!default_state)&&(cbt.get_active_row_number()==0))
hegyi@112:     {
hegyi@112:       reset();
hegyi@112:     }
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::reset()
hegyi@112: {
hegyi@112:   default_state=true;
hegyi@112: 
hegyi@112:   cbt.set_active(0);
hegyi@112: 
hegyi@112:   signal_cbt.emit("");
hegyi@112: }
hegyi@112: 
hegyi@112: 
hegyi@112: Glib::ustring MapSelector::get_active_text()
hegyi@112: {
hegyi@112:   return cbt.get_active_text();
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::set_active_text(Glib::ustring text)
hegyi@112: {
hegyi@172:   if(text.compare(""))
hegyi@172:     {
hegyi@172:       cbt.set_active_text(text);
hegyi@172:     }
hegyi@172:   else
hegyi@172:     { 
hegyi@172:       cbt.set_active_text("Default values");
hegyi@172:     }
hegyi@112: }
hegyi@112: 
hegyi@112: void MapSelector::append_text(Glib::ustring text)
hegyi@112: {
hegyi@112:   cbt.append_text(text);
hegyi@172:   cbt_content.push_back(text);
hegyi@172: 
hegyi@112:   if(set_new_map)
hegyi@112:     {
hegyi@112:       set_active_text(text);
hegyi@112:       set_new_map=false;
hegyi@112:     }
hegyi@112: }
hegyi@112: 
hegyi@112: sigc::signal<void, std::string> MapSelector::signal_cbt_ch()
hegyi@112: {
hegyi@112:   return signal_cbt;
hegyi@112: }
hegyi@112: 
hegyi@112: sigc::signal<void, bool> MapSelector::signal_newmapwin_needed()
hegyi@112: {
hegyi@112:   return signal_newmapwin;
hegyi@112: }