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@194: #include hegyi@112: ladanyi@201: MapSelector::MapSelector(std::vector n_ml, ladanyi@201: std::vector s_ml, std::string act, ladanyi@201: std::string labeltext, bool edge, bool d, MapType type) : ladanyi@201: def(d), ladanyi@201: itisedge(edge), ladanyi@201: set_new_map(false), ladanyi@201: label(labeltext), ladanyi@201: map_type(type), ladanyi@201: newbut(Gtk::Stock::NEW) hegyi@112: { ladanyi@201: update_list(n_ml, s_ml); hegyi@112: hegyi@112: if(act=="") ladanyi@201: { ladanyi@201: cbt.set_active(0); ladanyi@201: default_state=true; ladanyi@201: } hegyi@112: else ladanyi@201: { ladanyi@201: cbt.set_active_text((Glib::ustring)act); ladanyi@201: default_state=false; ladanyi@201: } 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 ladanyi@201: ); hegyi@112: ladanyi@201: label.set_width_chars(longest_property_string_length); hegyi@112: hegyi@122: if(def) ladanyi@201: { ladanyi@201: defbut.set_label("Reset"); ladanyi@201: defbut.signal_pressed().connect ladanyi@201: ( ladanyi@201: sigc::mem_fun(*this, &MapSelector::reset) ladanyi@201: ); ladanyi@201: } hegyi@112: hegyi@112: ladanyi@201: newbut.signal_pressed().connect hegyi@112: ( hegyi@112: sigc::mem_fun(*this, &MapSelector::new_but_pressed) ladanyi@201: ); hegyi@112: ladanyi@201: add(label); hegyi@112: hegyi@112: add(cbt); hegyi@112: hegyi@122: if(def) ladanyi@201: { ladanyi@201: add(defbut); ladanyi@201: } hegyi@122: ladanyi@201: 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: ladanyi@201: void MapSelector::update_list(std::vector n_ml, ladanyi@201: std::vector s_ml) hegyi@112: { hegyi@112: int prev_act=cbt.get_active_row_number(); hegyi@112: cbt.clear(); hegyi@172: cbt_content.clear(); ladanyi@201: ladanyi@201: if (map_type & NUM) ladanyi@201: { ladanyi@201: std::vector< std::string >::iterator emsi=n_ml.begin(); ladanyi@201: for(;emsi!=n_ml.end();emsi++) hegyi@112: { hegyi@112: cbt.append_text(*emsi); hegyi@172: cbt_content.push_back(*emsi); hegyi@112: } ladanyi@201: } ladanyi@201: if (map_type & STR) ladanyi@201: { ladanyi@201: std::vector< std::string >::iterator emsi=s_ml.begin(); ladanyi@201: for(;emsi!=s_ml.end();emsi++) ladanyi@201: { ladanyi@201: cbt.append_text(*emsi); ladanyi@201: cbt_content.push_back(*emsi); ladanyi@201: } ladanyi@201: } 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: ladanyi@201: void MapSelector::append_text(Glib::ustring text, MapValue::Type type) hegyi@112: { ladanyi@201: if (type & map_type) ladanyi@201: { ladanyi@201: cbt.append_text(text); ladanyi@201: cbt_content.push_back(text); hegyi@172: ladanyi@201: if(set_new_map) hegyi@112: { hegyi@112: set_active_text(text); hegyi@112: set_new_map=false; hegyi@112: } ladanyi@201: } hegyi@112: } hegyi@112: hegyi@112: sigc::signal MapSelector::signal_cbt_ch() hegyi@112: { hegyi@112: return signal_cbt; hegyi@112: } hegyi@112: hegyi@112: sigc::signal MapSelector::signal_newmapwin_needed() hegyi@112: { hegyi@112: return signal_newmapwin; hegyi@112: }