19 #include "win_select.h"
23 win_select::win_select()
25 cur_select_ = list_wb_.begin();
27 set_mode(MODE_BRIGHTNESS);
29 border_select_ = NULL;
33 finish_scroll_ =
true;
41 cur_select_ = list_wb_.begin ();
43 if(border_select_ != NULL) w->set_border(*border_select_);
54 void win_select::remove(
win_base * w)
58 win_scroll::remove(w);
64 void win_select::remove_all()
66 win_scroll::remove_all();
67 cur_select_ = list_wb_.begin();
71 void win_select::next()
74 if(cur_select_ == list_wb_.end() || list_wb_.size() == 0)
return;
76 audio::play_wave (-1, 1);
77 (*cur_select_)->on_unselect();
80 rules(
false,*cur_select_);
81 (*cur_select_)->set_activate (
false);
84 lwb :: iterator i = cur_select_;
90 while( i != list_wb_.end() && !(*i)->is_can_be_selected() && i != cur_select_) i++;
93 if(i == list_wb_.end())
99 while(i != list_wb_.end() && !(*i)->is_can_be_selected() && i != cur_select_) i++;
100 if(i != list_wb_.end()) cur_select_ = i;
102 }
else cur_select_ = i;
104 rules(
true,*cur_select_);
106 (*cur_select_)->on_select();
110 finish_scroll_ =
false;
116 void win_select::previous()
118 if(cur_select_==list_wb_.end() || list_wb_.size() == 0)
return;
120 audio::play_wave (-1, 1);
121 (*cur_select_)->on_unselect();
124 rules(
false,*cur_select_);
126 (*cur_select_)->set_activate (
false);
128 lwb::iterator i=cur_select_;
132 if(i==list_wb_.begin()) i=list_wb_.end();
135 else if(i!=list_wb_.begin()) i--;
137 while(i != list_wb_.begin() && !(*i)->is_can_be_selected() && i != cur_select_) i--;
139 if( i== list_wb_.begin() && !(*i)->is_can_be_selected())
145 while(i!=list_wb_.begin() && !(*i)->is_can_be_selected() && i!=cur_select_) i--;
146 if((*i)->is_can_be_selected()) cur_select_=i;
148 }
else cur_select_=i;
150 (*cur_select_)->on_select();
153 rules(
true,*cur_select_);
158 finish_scroll_ =
false;
163 void win_select::activate()
165 if(cur_select_ == list_wb_.end())
return;
167 audio::play_wave (-1, 0);
171 (*cur_select_)->set_activate(
true);
182 if(focus_object_)
return true;
194 void win_select::rules(
const bool b,
win_base * wb)
201 wb->set_visible_border(b);
204 case MODE_BRIGHTNESS:
211 void win_select::set_default()
213 if(list_wb_.size() == 0)
return;
215 if(cur_select_ != list_wb_.end())
217 rules(
false,*cur_select_);
220 cur_select_ = list_wb_.begin();
222 while(cur_select_ != list_wb_.end() && !(*cur_select_)->is_can_be_selected()) cur_select_++;
224 if(cur_select_ != list_wb_.end()) rules(
true,*cur_select_);
226 finish_scroll_ =
false;
229 void win_select::set_default_object(
const win_base * wb)
231 if(list_wb_.size() == 0)
return;
233 if(cur_select_ != list_wb_.end()) rules(
false,*cur_select_);
235 cur_select_ = list_wb_.begin();
237 while(cur_select_ != list_wb_.end() && *cur_select_ != wb) cur_select_++;
239 if(cur_select_ != list_wb_.end()) rules(
true,*cur_select_);
241 finish_scroll_ =
false;
246 void win_select::set_default_position(
const u_int16 pos)
248 if(list_wb_.size() == 0 || pos > list_wb_.size())
return;
250 if(cur_select_ != list_wb_.end()) rules(
false,*cur_select_);
252 cur_select_ = list_wb_.begin();
256 while(cur_select_ != list_wb_.end() && i++ < pos) cur_select_++;
258 if(cur_select_ != list_wb_.end()) rules(
true,*cur_select_);
260 finish_scroll_ =
false;
265 win_base * win_select::get_selected_object()
267 if(cur_select_ != list_wb_.end() || list_wb_.size() == 0)
return *cur_select_;
271 u_int16 win_select::get_selected_position()
275 lwb::iterator i = list_wb_.begin();
277 if(i==list_wb_.end())
return 0;
279 while( (*i++) != (*cur_select_)) pos_++;
286 void win_select::update_cur_select_position()
288 if(!max_amplitude_)
return;
294 if((*cur_select_)->height() + (space_with_border_ << 1) >
height())
break;
295 else if((*cur_select_)->y() + (*cur_select_)->pad_y() < space_with_border_ ) up();
296 else if((*cur_select_)->y() + (*cur_select_)->pad_y() + (*cur_select_)->height() >
height() - space_with_border_) down();
308 if(!max_amplitude_) {finish_scroll_=
true;
return true;}
309 if((*cur_select_)->height() + (space_with_border_ << 1) >
height()) {finish_scroll_ =
true;
return true;}
310 else if((*cur_select_)->y() + (*cur_select_)->pad_y() < space_with_border_ ) up();
311 else if((*cur_select_)->y() + (*cur_select_)->pad_y() + (*cur_select_)->height() >
height() - space_with_border_) down();
312 else finish_scroll_ =
true;