void DlgPrefController::showLearningWizard() { // If the user has checked the "Enabled" checkbox but they haven't hit OK to // apply it yet, prompt them to apply the settings before we open the // learning dialog. If we don't apply the settings first and open the // device, the dialog won't react to controller messages. if (m_ui.chkEnabledDevice->isChecked() && !m_pController->isOpen()) { QMessageBox::StandardButton result = QMessageBox::question( this, tr("Apply device settings?"), tr("Your settings must be applied before starting the learning wizard.\n" "Apply settings and continue?"), QMessageBox::Ok | QMessageBox::Cancel, // Buttons to be displayed QMessageBox::Ok); // Default button // Stop if the user has not pressed the Ok button, // which could be the Cancel or the Close Button. if (result != QMessageBox::Ok) { return; } } slotApply(); // After this point we consider the mapping wizard as dirtying the preset. slotDirty(); // Note that DlgControllerLearning is set to delete itself on close using // the Qt::WA_DeleteOnClose attribute (so this "new" doesn't leak memory) m_pDlgControllerLearning = new DlgControllerLearning(this, m_pController); m_pDlgControllerLearning->show(); ControllerLearningEventFilter* pControllerLearning = m_pControllerManager->getControllerLearningEventFilter(); pControllerLearning->startListening(); connect(pControllerLearning, SIGNAL(controlClicked(ControlObject*)), m_pDlgControllerLearning, SLOT(controlClicked(ControlObject*))); connect(m_pDlgControllerLearning, SIGNAL(listenForClicks()), pControllerLearning, SLOT(startListening())); connect(m_pDlgControllerLearning, SIGNAL(stopListeningForClicks()), pControllerLearning, SLOT(stopListening())); connect(m_pDlgControllerLearning, SIGNAL(stopLearning()), this, SLOT(show())); connect(m_pDlgControllerLearning, SIGNAL(inputMappingsLearned(MidiInputMappings)), this, SLOT(midiInputMappingsLearned(MidiInputMappings))); emit(mappingStarted()); connect(m_pDlgControllerLearning, SIGNAL(stopLearning()), this, SIGNAL(mappingEnded())); }
DlgControllerLearning::~DlgControllerLearning() { //If there was any ongoing learning, cancel it (benign if there wasn't). emit(cancelLearning()); emit(stopListeningForClicks()); }