X-Git-Url: https://git.sesse.net/?p=ccbs;a=blobdiff_plain;f=bigscreen%2Fccbs_bigscreen.cpp;fp=bigscreen%2Fccbs_bigscreen.cpp;h=e9a30110c5eb449ed67ca0a067f2d6dac4e4eb68;hp=d09b1c4d36f1fae35d363aa0fe7bd01ae1ef34aa;hb=250bedbb9992af9f72996b0f790e8c585c3fe4e0;hpb=0fad64f1f8ecc79312e6d27aac1bc0b3feff84c1 diff --git a/bigscreen/ccbs_bigscreen.cpp b/bigscreen/ccbs_bigscreen.cpp index d09b1c4..e9a3011 100644 --- a/bigscreen/ccbs_bigscreen.cpp +++ b/bigscreen/ccbs_bigscreen.cpp @@ -39,9 +39,13 @@ void init(pqxx::connection &conn) } screens.erase(screens.begin(), screens.end()); + bool show_only_main_screen = (USE_SPLITSCREEN && screens.size() == 1); + +#if !USE_SPLITSCREEN RotateScreen *rs = new RotateScreen(); mainscreen = rs; - +#endif + conn.perform(FetchCurrentTournament(&active_tournament)); conn.perform(FetchListOfActiveGroups(&active_groups)); @@ -56,12 +60,28 @@ void init(pqxx::connection &conn) // memory leaks here? 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)); } } } - { + /* + * 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::const_iterator i = aux_screens.begin(); i != aux_screens.end(); ++i) { if (*i == widestring("top10scores")) { @@ -74,6 +94,45 @@ void init(pqxx::connection &conn) } } } + +#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 finished_groups; + conn.perform(FetchListOfFinishedGroups(active_tournament.id, &finished_groups)); + + for (std::vector::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)); + } + } +#endif + +#if USE_SPLITSCREEN + // hack + screens.push_back(NULL); + screens.push_back(NULL); + screens.push_back(NULL); + screens.push_back(NULL); + + if (screens[1] == NULL) { + mainscreen = screens[0]; + } else { + mainscreen = new SplitScreen(screens[0], screens[1], screens[2], screens[3]); + } +#endif } void main_loop(pqxx::connection &conn)