hegyi@1: /* -*- C++ -*- hegyi@1: * hegyi@1: * This file is a part of LEMON, a generic C++ optimization library hegyi@1: * hegyi@1: * Copyright (C) 2003-2006 hegyi@1: * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport hegyi@1: * (Egervary Research Group on Combinatorial Optimization, EGRES). hegyi@1: * hegyi@1: * Permission to use, modify and distribute this software is granted hegyi@1: * provided that this copyright notice appears in all copies. For hegyi@1: * precise terms see the accompanying LICENSE file. hegyi@1: * hegyi@1: * This software is provided "AS IS" with no warranty of any kind, hegyi@1: * express or implied, and with no claim as to its suitability for any hegyi@1: * purpose. hegyi@1: * hegyi@1: */ hegyi@1: hegyi@1: #include hegyi@1: hegyi@1: MapSelector::MapSelector(std::vector n_ml, hegyi@1: std::vector s_ml, std::string act, hegyi@1: std::string labeltext, bool arc, bool d, MapType type) : hegyi@1: def(d), hegyi@1: itisarc(arc), hegyi@1: set_new_map(false), hegyi@1: label(labeltext), hegyi@1: map_type(type), hegyi@1: newbut(Gtk::Stock::NEW) hegyi@1: { hegyi@1: update_list(n_ml, s_ml); hegyi@1: hegyi@1: if(act=="") hegyi@1: { hegyi@1: cbt.set_active(0); hegyi@1: default_state=true; hegyi@1: } hegyi@1: else hegyi@1: { hegyi@1: cbt.set_active_text((Glib::ustring)act); hegyi@1: default_state=false; hegyi@1: } hegyi@1: hegyi@1: //binding signal to the actual entry hegyi@1: cbt.signal_changed().connect hegyi@1: ( hegyi@1: sigc::mem_fun((*this), &MapSelector::comboChanged), hegyi@1: false hegyi@1: ); hegyi@1: hegyi@1: label.set_width_chars(longest_property_string_length); hegyi@1: hegyi@1: if(def) hegyi@1: { hegyi@1: defbut.set_label("Reset"); hegyi@1: defbut.signal_pressed().connect hegyi@1: ( hegyi@1: sigc::mem_fun(*this, &MapSelector::reset) hegyi@1: ); hegyi@1: } hegyi@1: hegyi@1: hegyi@1: newbut.signal_pressed().connect hegyi@1: ( hegyi@1: sigc::mem_fun(*this, &MapSelector::new_but_pressed) hegyi@1: ); hegyi@1: hegyi@1: add(label); hegyi@1: hegyi@1: add(cbt); hegyi@1: hegyi@1: if(def) hegyi@1: { hegyi@1: add(defbut); hegyi@1: } hegyi@1: hegyi@1: add(newbut); hegyi@1: } hegyi@1: hegyi@1: void MapSelector::new_but_pressed() hegyi@1: { hegyi@1: set_new_map=true; hegyi@1: signal_newmapwin.emit(itisarc); hegyi@1: } hegyi@1: hegyi@1: void MapSelector::update_list(std::vector n_ml, hegyi@1: std::vector s_ml) hegyi@1: { hegyi@1: int prev_act=cbt.get_active_row_number(); hegyi@1: cbt.clear(); hegyi@1: cbt_content.clear(); hegyi@1: hegyi@1: if (map_type & NUM) hegyi@1: { hegyi@1: std::vector< std::string >::iterator emsi=n_ml.begin(); hegyi@1: for(;emsi!=n_ml.end();emsi++) hegyi@1: { hegyi@1: cbt.append_text(*emsi); hegyi@1: cbt_content.push_back(*emsi); hegyi@1: } hegyi@1: } hegyi@1: if (map_type & STR) hegyi@1: { hegyi@1: std::vector< std::string >::iterator emsi=s_ml.begin(); hegyi@1: for(;emsi!=s_ml.end();emsi++) hegyi@1: { hegyi@1: cbt.append_text(*emsi); hegyi@1: cbt_content.push_back(*emsi); hegyi@1: } hegyi@1: } hegyi@1: if(def) hegyi@1: { hegyi@1: cbt.prepend_text("Default values"); hegyi@1: cbt_content.push_back("Default values"); hegyi@1: } hegyi@1: if(prev_act!=-1) hegyi@1: { hegyi@1: cbt.set_active(prev_act); hegyi@1: } hegyi@1: } hegyi@1: hegyi@1: void MapSelector::comboChanged() hegyi@1: { hegyi@1: if(cbt.get_active_row_number()!=0 || !def) hegyi@1: { hegyi@1: default_state=false; hegyi@1: Glib::ustring mapname = cbt.get_active_text(); hegyi@1: if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. hegyi@1: { hegyi@1: signal_cbt.emit(mapname); hegyi@1: } hegyi@1: } hegyi@1: else if((!default_state)&&(cbt.get_active_row_number()==0)) hegyi@1: { hegyi@1: reset(); hegyi@1: } hegyi@1: } hegyi@1: hegyi@1: void MapSelector::reset() hegyi@1: { hegyi@1: default_state=true; hegyi@1: hegyi@1: cbt.set_active(0); hegyi@1: hegyi@1: signal_cbt.emit(""); hegyi@1: } hegyi@1: hegyi@1: hegyi@1: Glib::ustring MapSelector::get_active_text() hegyi@1: { hegyi@1: return cbt.get_active_text(); hegyi@1: } hegyi@1: hegyi@1: void MapSelector::set_active_text(Glib::ustring text) hegyi@1: { hegyi@1: if(text.compare("")) hegyi@1: { hegyi@1: cbt.set_active_text(text); hegyi@1: } hegyi@1: else hegyi@1: { hegyi@1: cbt.set_active_text("Default values"); hegyi@1: } hegyi@1: } hegyi@1: hegyi@1: void MapSelector::append_text(Glib::ustring text, MapValue::Type type) hegyi@1: { hegyi@1: if (type & map_type) hegyi@1: { hegyi@1: cbt.append_text(text); hegyi@1: cbt_content.push_back(text); hegyi@1: hegyi@1: if(set_new_map) hegyi@1: { hegyi@1: set_active_text(text); hegyi@1: set_new_map=false; hegyi@1: } hegyi@1: } hegyi@1: } hegyi@1: hegyi@1: sigc::signal MapSelector::signal_cbt_ch() hegyi@1: { hegyi@1: return signal_cbt; hegyi@1: } hegyi@1: hegyi@1: sigc::signal MapSelector::signal_newmapwin_needed() hegyi@1: { hegyi@1: return signal_newmapwin; hegyi@1: }