PlayerChange PlayerChangeDialog::getPlayerChange() const
{
    PlayerChange change;

    for (size_t i = 0; i < myStaffComboBoxes.size(); ++i)
    {
        const int staff = myStaffComboBoxes[i]->itemData(
                    myStaffComboBoxes[i]->currentIndex()).toInt();
        if (staff >= 0)
        {
            change.insertActivePlayer(
                staff, ActivePlayer(static_cast<int>(i),
                                    myInstrumentComboBoxes[i]->currentIndex()));
        }
    }

    return change;
}
Document &DocumentManager::addDefaultDocument(
    const SettingsManager &settings_manager)
{
    Document &doc = addDocument();
    Score &score = doc.getScore();

    auto settings = settings_manager.getReadHandle();

    // Add an initial player and instrument.
    Player player;
    player.setDescription("Player 1");
    player.setTuning(settings->get(Settings::DefaultTuning));
    score.insertPlayer(player);

    Instrument instrument;
    instrument.setDescription(settings->get(Settings::DefaultInstrumentName) +
                              " 1");
    instrument.setMidiPreset(settings->get(Settings::DefaultInstrumentPreset));
    score.insertInstrument(instrument);

    ScoreUtils::addStandardFilters(score);

    // Add an initial staff, player change, and tempo marker.
    System system;
    system.insertStaff(Staff(player.getTuning().getStringCount()));

    PlayerChange initialPlayers;
    initialPlayers.insertActivePlayer(0, ActivePlayer(0, 0));
    system.insertPlayerChange(initialPlayers);

    TempoMarker tempo;
    tempo.setDescription("Moderately");
    system.insertTempoMarker(tempo);

    score.insertSystem(system);

    return doc;
}