void ShipSelectionScreen::updateCrewTypeOptions()
{
    game_master_button->hide();
    window_button->hide();
    window_angle->hide();
    topdown_button->hide();
    main_screen_button->setVisible(canDoMainScreen());
    main_screen_button->setValue(false);
    game_master_button->setValue(false);
    window_button->setValue(false);
    topdown_button->setValue(false);
    for(int n=0; n<max_crew_positions; n++)
    {
        crew_position_button[n]->setValue(false)->hide();
    }
    switch(crew_type_selector->getSelectionIndex())
    {
    case 0:
        for(int n=helmsOfficer; n<=relayOfficer; n++)
            crew_position_button[n]->show();
        break;
    case 1:
        for(int n=tacticalOfficer; n<=operationsOfficer; n++)
            crew_position_button[n]->show();
        break;
    case 2:
        crew_position_button[singlePilot]->show();
        crew_position_button[damageControl]->show();
        crew_position_button[powerManagement]->show();
        crew_position_button[databaseView]->show();
        break;
    case 3:
        main_screen_button->hide();
        game_master_button->setVisible(game_server);
        window_button->setVisible(canDoMainScreen());
        window_angle->setVisible(canDoMainScreen());
        topdown_button->setVisible(canDoMainScreen());
        break;
    }
    for(int n=0; n<max_crew_positions; n++)
    {
        if (!crew_position_button[n]->isVisible())
            my_player_info->setCrewPosition(ECrewPosition(n), false);
        else
            crew_position_button[n]->setValue(my_player_info->crew_position[n]);
    }
    updateReadyButton();
}
void ShipSelectionScreen::updateCrewTypeOptions()
{
    // Hide and unselect alternative and view screens.
    game_master_button->hide();
    window_button->hide();
    window_angle->hide();
    topdown_button->hide();
    cinematic_view_button->hide();
    main_screen_button->setVisible(canDoMainScreen());
    main_screen_button->setValue(false);
    game_master_button->setValue(false);
    window_button->setValue(false);
    topdown_button->setValue(false);
    cinematic_view_button->setValue(false);

    // Hide and unselect each crew position button.
    for(int n = 0; n < max_crew_positions; n++)
    {
        crew_position_button[n]->setValue(false)->hide();
    }

    // Choose which set of screens to list from the crew type selector index.
    switch(crew_type_selector->getSelectionIndex())
    {
    case 0:
        for(int n = helmsOfficer; n <= relayOfficer; n++)
        {
            crew_position_button[n]->show();
        }
        break;
    case 1:
        for(int n = tacticalOfficer; n <= operationsOfficer; n++)
            crew_position_button[n]->show();
        break;
    case 2:
        crew_position_button[singlePilot]->show();
        crew_position_button[damageControl]->show();
        crew_position_button[powerManagement]->show();
        crew_position_button[databaseView]->show();
        break;
    case 3:
        main_screen_button->hide();
        game_master_button->setVisible(game_server);
        window_button->setVisible(canDoMainScreen());
        window_angle->setVisible(canDoMainScreen());
        topdown_button->setVisible(canDoMainScreen());
        cinematic_view_button->setVisible(canDoMainScreen());
        break;
    }

    // For each crew position, unselect the position if the button is hidden
    // and select the button if the current player has already selected that
    // position.
    for(int n = 0; n < max_crew_positions; n++)
    {
        if (!crew_position_button[n]->isVisible())
            my_player_info->commandSetCrewPosition(ECrewPosition(n), false);
        else
            crew_position_button[n]->setValue(my_player_info->crew_position[n]);
    }

    // Update the state of the Ready button, because position changes can
    // affect player readiness.
    updateReadyButton();
}