135 |
listener = al; |
listener = al; |
136 |
} |
} |
137 |
void trigger_action() { |
void trigger_action() { |
138 |
cache.clear(); |
if( (iselected) < (max_available)) { |
139 |
if (listener) listener->on_action(this); |
cache.clear(); |
140 |
|
if (listener) listener->on_action(this); |
141 |
|
recalc_availavle(); |
142 |
|
} |
143 |
} |
} |
144 |
|
|
145 |
void change_levelpack (LevelPack *lp); |
void change_levelpack (LevelPack *lp); |
172 |
void scroll_up(int lines); |
void scroll_up(int lines); |
173 |
void scroll_down(int lines); |
void scroll_down(int lines); |
174 |
void set_selected (int newfirst, int newsel); |
void set_selected (int newfirst, int newsel); |
175 |
|
void recalc_availavle (); |
176 |
|
|
177 |
// Event handling. |
// Event handling. |
178 |
bool handle_keydown (const SDL_Event *e); |
bool handle_keydown (const SDL_Event *e); |
187 |
|
|
188 |
int ifirst; // Index of "upper left" level |
int ifirst; // Index of "upper left" level |
189 |
int iselected; // Index of selected level |
int iselected; // Index of selected level |
190 |
|
int max_available; // Index of the last available level (one can coose out of x unsolved levels) |
191 |
int width, height; |
int width, height; |
192 |
vector<px::Rect> m_areas; // Screen areas occupied by level previews |
vector<px::Rect> m_areas; // Screen areas occupied by level previews |
193 |
ActionListener *listener; |
ActionListener *listener; |
330 |
set_selected (ifirst + width*height, iselected + width*height); |
set_selected (ifirst + width*height, iselected + width*height); |
331 |
} |
} |
332 |
|
|
333 |
|
void |
334 |
|
LevelWidget::recalc_availavle() |
335 |
|
{ |
336 |
|
max_available = HighestAvailableLevel( level_pack); |
337 |
|
} |
338 |
|
|
339 |
void |
void |
340 |
LevelWidget::change_levelpack (LevelPack *lp) |
LevelWidget::change_levelpack (LevelPack *lp) |
345 |
oxyd::ChangeSoundset(options::SoundSet, level_pack->get_default_SoundSet()); |
oxyd::ChangeSoundset(options::SoundSet, level_pack->get_default_SoundSet()); |
346 |
cache.clear(); |
cache.clear(); |
347 |
preview_cache.clear(); |
preview_cache.clear(); |
348 |
|
recalc_availavle(); |
349 |
redraw(); |
redraw(); |
350 |
sound::PlaySound("menumove"); |
sound::PlaySound("menumove"); |
351 |
} |
} |
416 |
string fname = string("levels/") + levelinfo->filename + ".png"; |
string fname = string("levels/") + levelinfo->filename + ".png"; |
417 |
img = cache.get(enigma::FindDataFile(fname)); |
img = cache.get(enigma::FindDataFile(fname)); |
418 |
} |
} |
419 |
|
if( i >= (max_available)) |
420 |
if (!img && !Nozoom) { |
{ |
421 |
|
img = cache.get(enigma::FindDataFile("levels/unavailable.png")); |
422 |
|
} else if (!img && !Nozoom) { |
423 |
img = preview_cache.getPreview(level_pack, i); |
img = preview_cache.getPreview(level_pack, i); |
424 |
if (!img) |
if (!img) |
425 |
img = cache.get(enigma::FindDataFile("levels/error.png")); |
img = cache.get(enigma::FindDataFile("levels/error.png")); |