void EngineManagementWidget::addEngine()
{
	auto dlg = new EngineConfigurationDialog(
		EngineConfigurationDialog::AddEngine, this);
	dlg->setAttribute(Qt::WA_DeleteOnClose);
	dlg->setReservedNames(m_engineManager->engineNames());

	connect(dlg, &EngineConfigurationDialog::accepted, [=]()
	{
		m_engineManager->addEngine(dlg->engineConfiguration());
		m_hasChanged = true;
	});
	dlg->open();
}
void EngineConfigurationDialog::detectEngineOptions()
{
	if (m_engine != 0)
		return;

	if (QObject::sender() != ui->m_detectBtn
	&&  ui->m_commandEdit->text() == m_oldCommand
	&&  ui->m_workingDirEdit->text() == m_oldPath
	&&  ui->m_protocolCombo->currentText() == m_oldProtocol)
	{
		emit detectionFinished();
		return;
	}

	m_oldCommand = ui->m_commandEdit->text();
	m_oldPath = ui->m_workingDirEdit->text();
	m_oldProtocol = ui->m_protocolCombo->currentText();

	ui->m_detectBtn->setEnabled(false);
	ui->m_restoreBtn->setEnabled(false);
	ui->m_progressBar->show();

	EngineBuilder builder(engineConfiguration());
	m_engine = qobject_cast<ChessEngine*>(builder.create(0, 0, this));

	if (m_engine != 0)
	{
		connect(m_engine, SIGNAL(ready()),
			this, SLOT(onEngineReady()));
		connect(m_engine, SIGNAL(disconnected()),
			this, SLOT(onEngineQuit()));
		connect(m_engine, SIGNAL(destroyed()),
			this, SIGNAL(detectionFinished()));
		connect(m_optionDetectionTimer, SIGNAL(timeout()),
			m_engine, SLOT(kill()));

		m_optionDetectionTimer->start();
	}
	else
	{
		ui->m_detectBtn->setEnabled(true);
		ui->m_restoreBtn->setEnabled(true);
		ui->m_progressBar->hide();
		emit detectionFinished();
	}
}
void EngineManagementWidget::configureEngine(const QModelIndex& index)
{
	// Map the index from the filtered model to the original model
	int row = m_filteredModel->mapToSource(index).row();
	const EngineConfiguration& config = m_engineManager->engineAt(row);

	QSet<QString> names = m_engineManager->engineNames();
	names.remove(config.name());

	auto dlg = new EngineConfigurationDialog(
		EngineConfigurationDialog::ConfigureEngine, this);
	dlg->setAttribute(Qt::WA_DeleteOnClose);
	dlg->applyEngineInformation(config);
	dlg->setReservedNames(names);

	connect(dlg, &EngineConfigurationDialog::accepted, [=]()
	{
		m_engineManager->updateEngineAt(row, dlg->engineConfiguration());
		m_hasChanged = true;
	});
	dlg->open();
}