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(),
      [&notes_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(),
      [&notes_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);
}