|
1 /* -*- C++ -*- |
|
2 * |
|
3 * This file is a part of LEMON, a generic C++ optimization library |
|
4 * |
|
5 * Copyright (C) 2003-2006 |
|
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
|
7 * (Egervary Research Group on Combinatorial Optimization, EGRES). |
|
8 * |
|
9 * Permission to use, modify and distribute this software is granted |
|
10 * provided that this copyright notice appears in all copies. For |
|
11 * precise terms see the accompanying LICENSE file. |
|
12 * |
|
13 * This software is provided "AS IS" with no warranty of any kind, |
|
14 * express or implied, and with no claim as to its suitability for any |
|
15 * purpose. |
|
16 * |
|
17 */ |
|
18 |
|
19 #include <mapselector.h> |
|
20 |
|
21 MapSelector::MapSelector(std::vector<std::string> n_ml, |
|
22 std::vector<std::string> s_ml, std::string act, |
|
23 std::string labeltext, bool arc, bool d, MapType type) : |
|
24 def(d), |
|
25 itisarc(arc), |
|
26 set_new_map(false), |
|
27 label(labeltext), |
|
28 map_type(type), |
|
29 newbut(Gtk::Stock::NEW) |
|
30 { |
|
31 update_list(n_ml, s_ml); |
|
32 |
|
33 if(act=="") |
|
34 { |
|
35 cbt.set_active(0); |
|
36 default_state=true; |
|
37 } |
|
38 else |
|
39 { |
|
40 cbt.set_active_text((Glib::ustring)act); |
|
41 default_state=false; |
|
42 } |
|
43 |
|
44 //binding signal to the actual entry |
|
45 cbt.signal_changed().connect |
|
46 ( |
|
47 sigc::mem_fun((*this), &MapSelector::comboChanged), |
|
48 false |
|
49 ); |
|
50 |
|
51 label.set_width_chars(longest_property_string_length); |
|
52 |
|
53 if(def) |
|
54 { |
|
55 defbut.set_label("Reset"); |
|
56 defbut.signal_pressed().connect |
|
57 ( |
|
58 sigc::mem_fun(*this, &MapSelector::reset) |
|
59 ); |
|
60 } |
|
61 |
|
62 |
|
63 newbut.signal_pressed().connect |
|
64 ( |
|
65 sigc::mem_fun(*this, &MapSelector::new_but_pressed) |
|
66 ); |
|
67 |
|
68 add(label); |
|
69 |
|
70 add(cbt); |
|
71 |
|
72 if(def) |
|
73 { |
|
74 add(defbut); |
|
75 } |
|
76 |
|
77 add(newbut); |
|
78 } |
|
79 |
|
80 void MapSelector::new_but_pressed() |
|
81 { |
|
82 set_new_map=true; |
|
83 signal_newmapwin.emit(itisarc); |
|
84 } |
|
85 |
|
86 void MapSelector::update_list(std::vector<std::string> n_ml, |
|
87 std::vector<std::string> s_ml) |
|
88 { |
|
89 int prev_act=cbt.get_active_row_number(); |
|
90 cbt.clear(); |
|
91 cbt_content.clear(); |
|
92 |
|
93 if (map_type & NUM) |
|
94 { |
|
95 std::vector< std::string >::iterator emsi=n_ml.begin(); |
|
96 for(;emsi!=n_ml.end();emsi++) |
|
97 { |
|
98 cbt.append_text(*emsi); |
|
99 cbt_content.push_back(*emsi); |
|
100 } |
|
101 } |
|
102 if (map_type & STR) |
|
103 { |
|
104 std::vector< std::string >::iterator emsi=s_ml.begin(); |
|
105 for(;emsi!=s_ml.end();emsi++) |
|
106 { |
|
107 cbt.append_text(*emsi); |
|
108 cbt_content.push_back(*emsi); |
|
109 } |
|
110 } |
|
111 if(def) |
|
112 { |
|
113 cbt.prepend_text("Default values"); |
|
114 cbt_content.push_back("Default values"); |
|
115 } |
|
116 if(prev_act!=-1) |
|
117 { |
|
118 cbt.set_active(prev_act); |
|
119 } |
|
120 } |
|
121 |
|
122 void MapSelector::comboChanged() |
|
123 { |
|
124 if(cbt.get_active_row_number()!=0 || !def) |
|
125 { |
|
126 default_state=false; |
|
127 Glib::ustring mapname = cbt.get_active_text(); |
|
128 if(!(mapname.empty())) //We seem to get 2 signals, one when the text is empty. |
|
129 { |
|
130 signal_cbt.emit(mapname); |
|
131 } |
|
132 } |
|
133 else if((!default_state)&&(cbt.get_active_row_number()==0)) |
|
134 { |
|
135 reset(); |
|
136 } |
|
137 } |
|
138 |
|
139 void MapSelector::reset() |
|
140 { |
|
141 default_state=true; |
|
142 |
|
143 cbt.set_active(0); |
|
144 |
|
145 signal_cbt.emit(""); |
|
146 } |
|
147 |
|
148 |
|
149 Glib::ustring MapSelector::get_active_text() |
|
150 { |
|
151 return cbt.get_active_text(); |
|
152 } |
|
153 |
|
154 void MapSelector::set_active_text(Glib::ustring text) |
|
155 { |
|
156 if(text.compare("")) |
|
157 { |
|
158 cbt.set_active_text(text); |
|
159 } |
|
160 else |
|
161 { |
|
162 cbt.set_active_text("Default values"); |
|
163 } |
|
164 } |
|
165 |
|
166 void MapSelector::append_text(Glib::ustring text, MapValue::Type type) |
|
167 { |
|
168 if (type & map_type) |
|
169 { |
|
170 cbt.append_text(text); |
|
171 cbt_content.push_back(text); |
|
172 |
|
173 if(set_new_map) |
|
174 { |
|
175 set_active_text(text); |
|
176 set_new_map=false; |
|
177 } |
|
178 } |
|
179 } |
|
180 |
|
181 sigc::signal<void, std::string> MapSelector::signal_cbt_ch() |
|
182 { |
|
183 return signal_cbt; |
|
184 } |
|
185 |
|
186 sigc::signal<void, bool> MapSelector::signal_newmapwin_needed() |
|
187 { |
|
188 return signal_newmapwin; |
|
189 } |