- contrib_menu->additem(MN_LABEL,_("Contrib Levels"),0,0);
- contrib_menu->additem(MN_HL,"",0,0);
-
- for (int i = 0; i < level_subsets.num_items; ++i)
- {
- LevelSubset* subset = new LevelSubset();
- subset->load(level_subsets.item[i]);
- contrib_menu->additem(MN_GOTO, subset->title.c_str(), i,
- contrib_subset_menu, i);
- contrib_subsets.push_back(subset);
- }
-
- for(int i = 0; i < worldmap_list.num_items; i++)
- {
- WorldMapNS::WorldMap worldmap;
- worldmap.loadmap(worldmap_list.item[i]);
- contrib_menu->additem(MN_ACTION, worldmap.get_world_title(),0,0, i + level_subsets.num_items);
+ 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