- int index = contrib_subset_menu->check();
- if (index != -1)
- {
- if (contrib_subset_menu->get_item_by_id(index).kind == MN_ACTION)
- {
- std::cout << "Sarting level: " << index << std::endl;
- GameSession session(current_contrib_subset, index, ST_GL_PLAY);
- session.run();
- Menu::set_current(main_menu);
- }
- }
+ /** Generating contrib levels list by making use of Level Subset */
+ std::vector<std::string> level_subsets;
+ char** files = PHYSFS_enumerateFiles("levels/");
+ for(const char* const* filename = files; *filename != 0; ++filename) {
+ std::string filepath = std::string("levels/") + *filename;
+ if(PHYSFS_isDirectory(filepath.c_str()))
+ level_subsets.push_back(filepath);
+ }
+ PHYSFS_freeList(files);
+
+ free_contrib_menu();
+
+ contrib_menu->add_label(_("Contrib Levels"));
+ contrib_menu->add_hl();
+
+ int i = 0;
+ for (std::vector<std::string>::iterator it = level_subsets.begin();
+ it != level_subsets.end(); ++it) {
+ try {
+ std::auto_ptr<LevelSubset> subset (new LevelSubset());
+ subset->load(*it);
+ if(subset->hide_from_contribs) {
+ continue;
+ }
+ contrib_menu->add_submenu(subset->title, contrib_subset_menu, i++);
+ contrib_subsets.push_back(subset.release());
+ } catch(std::exception& e) {
+#ifdef DEBUG
+ std::cerr << "Couldn't parse levelset info for '"
+ << *it << "': " << e.what() << "\n";
+#endif
+ }
+ }
+
+ contrib_menu->add_hl();
+ contrib_menu->add_back(_("Back"));