+ for (unsigned j = 0; j < i->num_machines; ++j) {
+#if USE_SPLITSCREEN
+ RotateScreen *rs = new RotateScreen();
+ screens.push_back(rs);
+#endif
+ rs->add_screen(new GroupScreen(conn, i->tournament, i->round, i->parallel, j, i->num_machines, i->players_per_machine));
+ }
+ }
+ }
+
+ bool show_only_main_screen = (USE_SPLITSCREEN && screens.size() == 1);
+
+ /*
+ * Show auxilliary screens except if we have too many already,
+ * or if we're in the special split-screen end-tournament mode,
+ * where there if only one.
+ */
+ RotateScreen *aux_screen = NULL;
+ if (screens.size() < 4 && !show_only_main_screen) {
+#if USE_SPLITSCREEN
+ RotateScreen *rs = new RotateScreen();
+ screens.push_back(rs);
+#endif
+ aux_screen = rs;
+
+ conn.perform(FetchAuxilliaryScreens(&aux_screens));
+ for (std::vector<widestring>::const_iterator i = aux_screens.begin(); i != aux_screens.end(); ++i) {
+ if (*i == widestring("top10scores")) {
+ rs->add_screen(new Top10ScoreScreen(conn, active_tournament.id));
+ continue;
+ }
+ if (*i == widestring("top5chosen")) {
+ rs->add_screen(new Top5ChosenScreen(conn, active_tournament.id));
+ continue;
+ }
+ }
+ }
+
+#if USE_SPLITSCREEN
+ /*
+ * If we still have room, make yet another rotational screen with
+ * results from previous groups -- otherwise tack them onto the end
+ * of the auxilliary screens.
+ */
+ RotateScreen *finished_groups_screen;
+ if (show_only_main_screen) {
+ finished_groups_screen = NULL;
+ } else if (screens.size() < 4) {
+ finished_groups_screen = new RotateScreen();
+ screens.push_back(finished_groups_screen);
+ } else {
+ finished_groups_screen = aux_screen;
+ }
+ if (finished_groups_screen != NULL) {
+ std::vector<SkeletonGroup> finished_groups;
+ conn.perform(FetchListOfFinishedGroups(active_tournament.id, &finished_groups));
+
+ for (std::vector<SkeletonGroup>::const_iterator i = finished_groups.begin(); i != finished_groups.end(); ++i) {
+ finished_groups_screen->add_screen(new GroupScreen(conn, i->tournament, i->round, i->parallel, 0, 1, 1));