void ribi::QtMusicTheoryMultiScaleDialog::any_change() { std::vector<boost::shared_ptr<Music::Chord> > chords_1 = Music::Chord::CreateAllChords(); { //Obtain the root const Music::Note root(ui->root_1->currentText().toStdString()); //Obtain the scale const boost::shared_ptr<Music::Scale> scale = Music::Scale::CreateScale( ui->scale_1->currentText().toLower().toStdString(),root); //Obtain the notes in the scale const std::vector<Music::Note> notes = scale->GetNotes(); std::string notes_str; std::for_each(notes.begin(),notes.end(), [¬es_str](const Music::Note& note) { notes_str+=note.ToStr(); notes_str+="-"; } ); notes_str.resize(notes_str.size() - 1); ui->notes_1->setText(notes_str.c_str()); //Obtain the fitting chords in the scale { std::vector<boost::shared_ptr<Music::Chord> > tmp; std::copy_if(chords_1.begin(),chords_1.end(),std::back_inserter(tmp), [scale](const boost::shared_ptr<Music::Chord>& chord) { return scale->Fits(chord); } ); chords_1.swap(tmp); } //Obtain only the chords the user wants to have displayed { std::vector<boost::shared_ptr<Music::Chord> > tmp; std::copy_if(chords_1.begin(),chords_1.end(),std::back_inserter(tmp), [this](const boost::shared_ptr<Music::Chord>& chord) { return (ui->display_6->isChecked() && dynamic_cast<const Music::Chord6*>(chord.get())) || (ui->display_7->isChecked() && dynamic_cast<const Music::Chord7*>(chord.get())) || (ui->display_aug->isChecked() && dynamic_cast<const Music::ChordAug*>(chord.get())) || (ui->display_dim->isChecked() && dynamic_cast<const Music::ChordDim*>(chord.get())) || (ui->display_m6->isChecked() && dynamic_cast<const Music::ChordMinor6*>(chord.get())) || (ui->display_m7->isChecked() && dynamic_cast<const Music::ChordMinor7*>(chord.get())) || (ui->display_major->isChecked() && dynamic_cast<const Music::ChordMajor*>(chord.get())) || (ui->display_minor->isChecked() && dynamic_cast<const Music::ChordMinor*>(chord.get())) ; } ); chords_1.swap(tmp); } } std::vector<boost::shared_ptr<Music::Chord> > chords_2 = Music::Chord::CreateAllChords(); { //Obtain the root const Music::Note root(ui->root_2->currentText().toStdString()); //Obtain the scale const boost::shared_ptr<Music::Scale> scale = Music::Scale::CreateScale( ui->scale_2->currentText().toLower().toStdString(),root); //Obtain the notes in the scale const std::vector<Music::Note> notes = scale->GetNotes(); std::string notes_str; std::for_each(notes.begin(),notes.end(), [¬es_str](const Music::Note& note) { notes_str+=note.ToStr(); notes_str+="-"; } ); notes_str.resize(notes_str.size() - 1); ui->notes_2->setText(notes_str.c_str()); //Obtain the fitting chords in the scale { std::vector<boost::shared_ptr<Music::Chord> > tmp; std::copy_if(chords_2.begin(),chords_2.end(),std::back_inserter(tmp), [scale](const boost::shared_ptr<Music::Chord>& chord) { return scale->Fits(chord); } ); chords_2.swap(tmp); } //Obtain only the chords the user wants to have displayed { std::vector<boost::shared_ptr<Music::Chord> > tmp; std::copy_if(chords_2.begin(),chords_2.end(),std::back_inserter(tmp), [this](const boost::shared_ptr<Music::Chord>& chord) { return (ui->display_6->isChecked() && dynamic_cast<const Music::Chord6*>(chord.get())) || (ui->display_7->isChecked() && dynamic_cast<const Music::Chord7*>(chord.get())) || (ui->display_aug->isChecked() && dynamic_cast<const Music::ChordAug*>(chord.get())) || (ui->display_dim->isChecked() && dynamic_cast<const Music::ChordDim*>(chord.get())) || (ui->display_m6->isChecked() && dynamic_cast<const Music::ChordMinor6*>(chord.get())) || (ui->display_m7->isChecked() && dynamic_cast<const Music::ChordMinor7*>(chord.get())) || (ui->display_major->isChecked() && dynamic_cast<const Music::ChordMajor*>(chord.get())) || (ui->display_minor->isChecked() && dynamic_cast<const Music::ChordMinor*>(chord.get())) ; } ); chords_2.swap(tmp); } } ui->widget->SetChords(chords_1,chords_2); }