diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2020-03-11 18:49:02 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2020-03-16 08:21:22 +0000 |
commit | 7fd0f307766b95c9619a645d131fe1e9bdbe68b2 (patch) | |
tree | 0c9f9641c818fd95fca27baf539882cf37a119e1 /src/plugins/android/androidsettingswidget.cpp | |
parent | 3faa91945afc056a8b9ebe3d564be47d57de3576 (diff) |
Android: use QListWidget to show defined NDKs
Use QListWidget to show all installed NDKs (from SDK manager), and NDKs
Added manually by the user. Each item has an icon to indicate if it's
removable when added by the user, or non-removable if installed from the
SDK manager.
Change-Id: I26ae5909ce930d5cc8af561b6b4e9cc5415d12f1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/android/androidsettingswidget.cpp')
-rw-r--r-- | src/plugins/android/androidsettingswidget.cpp | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index 30875271c10..62ba4c23087 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -54,6 +54,7 @@ #include <QAbstractTableModel> #include <QDesktopServices> #include <QDir> +#include <QFileDialog> #include <QFutureWatcher> #include <QList> #include <QMessageBox> @@ -360,25 +361,44 @@ void AndroidSettingsWidget::showEvent(QShowEvent *event) void AndroidSettingsWidget::updateNdkList() { - m_ui->ndkListComboBox->clear(); - for (const Ndk *ndk : m_sdkManager->installedNdkPackages()) - m_ui->ndkListComboBox->addItem(ndk->installedLocation().toString()); + m_ui->ndkListWidget->clear(); + for (const Ndk *ndk : m_sdkManager->installedNdkPackages()) { + m_ui->ndkListWidget->addItem(new QListWidgetItem(Utils::Icons::LOCKED.icon(), + ndk->installedLocation().toString())); + } for (const QString &ndk : m_androidConfig.getCustomNdkList()) { - if (m_androidConfig.isValidNdk(ndk)) - m_ui->ndkListComboBox->addItem(ndk); - else + if (m_androidConfig.isValidNdk(ndk)) { + m_ui->ndkListWidget->addItem( + new QListWidgetItem(Utils::Icons::UNLOCKED.icon(), ndk)); + } else { m_androidConfig.removeCustomNdk(ndk); + } } + + m_ui->ndkListWidget->setCurrentRow(0); } void AndroidSettingsWidget::addCustomNdkItem() { - const QString ndkPath = QDir::toNativeSeparators(m_ui->customNdkPathChooser->rawPath()); - m_androidConfig.addCustomNdk(ndkPath); - if (m_ui->ndkListComboBox->findData(ndkPath) == -1) - m_ui->ndkListComboBox->addItem(ndkPath); - m_ui->ndkListComboBox->setCurrentText(ndkPath); + const QString homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first(); + const QString ndkPath = QFileDialog::getExistingDirectory(this, tr("Select an NDK"), homePath); + + if (m_androidConfig.isValidNdk(ndkPath)) { + m_androidConfig.addCustomNdk(ndkPath); + if (m_ui->ndkListWidget->findItems(ndkPath, Qt::MatchExactly).size() == 0) { + m_ui->ndkListWidget->addItem( + new QListWidgetItem(Utils::Icons::UNLOCKED.icon(), ndkPath)); + } + } else if (!ndkPath.isEmpty()) { + QMessageBox::warning( + this, + tr("Add Custom NDK"), + tr("The selected path has an invalid NDK. This might mean that the path contains space " + "characters, or that it does not have a \"toolchains\" sub-directory, or that the " + "NDK version could not be retrieved because of a missing \"source.properties\" or " + "\"RELEASE.TXT\" file")); + } } AndroidSettingsWidget::AndroidSettingsWidget() @@ -481,25 +501,18 @@ AndroidSettingsWidget::AndroidSettingsWidget() connect(m_ui->SDKLocationPathChooser, &Utils::PathChooser::rawPathChanged, this, &AndroidSettingsWidget::onSdkPathChanged); - connect(m_ui->ndkListComboBox, - QOverload<const QString &>::of(&QComboBox::currentIndexChanged), - [this](const QString &ndk) { - validateNdk(); - m_ui->removeCustomNdkButton->setEnabled(m_androidConfig.getCustomNdkList().contains(ndk)); - }); - connect(m_ui->customNdkPathChooser, &Utils::PathChooser::rawPathChanged, this, [this]() { - const QString ndkPath = m_ui->customNdkPathChooser->rawPath(); - m_ui->addCustomNdkButton->setEnabled(m_androidConfig.isValidNdk(ndkPath)); + + connect(m_ui->ndkListWidget, &QListWidget::currentTextChanged, [this](const QString &ndk) { + validateNdk(); + m_ui->removeCustomNdkButton->setEnabled(m_androidConfig.getCustomNdkList().contains(ndk)); }); connect(m_ui->addCustomNdkButton, &QPushButton::clicked, this, &AndroidSettingsWidget::addCustomNdkItem); connect(m_ui->removeCustomNdkButton, &QPushButton::clicked, this, [this]() { - m_androidConfig.removeCustomNdk(m_ui->ndkListComboBox->currentText()); - m_ui->ndkListComboBox->removeItem(m_ui->ndkListComboBox->currentIndex()); + m_androidConfig.removeCustomNdk(m_ui->ndkListWidget->currentItem()->text()); + m_ui->ndkListWidget->takeItem(m_ui->ndkListWidget->currentRow()); }); - connect(m_ui->ndkListComboBox, QOverload<const QString &>::of(&QComboBox::currentIndexChanged), - [this](const QString) { validateNdk(); }); connect(m_ui->openSslPathChooser, &Utils::PathChooser::rawPathChanged, this, &AndroidSettingsWidget::validateOpenSsl); connect(&m_virtualDevicesWatcher, &QFutureWatcherBase::finished, @@ -664,7 +677,8 @@ Utils::FilePath AndroidSettingsWidget::findJdkInCommonPaths() void AndroidSettingsWidget::validateNdk() { - auto ndkPath = Utils::FilePath::fromUserInput(m_ui->ndkListComboBox->currentText()); + const QListWidgetItem *currentItem = m_ui->ndkListWidget->currentItem(); + Utils::FilePath ndkPath = Utils::FilePath::fromString(currentItem ? currentItem->text() : ""); auto summaryWidget = static_cast<SummaryWidget *>(m_ui->androidDetailsWidget->widget()); summaryWidget->setPointValid(NdkPathExistsRow, ndkPath.exists()); @@ -889,7 +903,8 @@ void AndroidSettingsWidget::updateUI() m_ui->sdkManagerTab->setEnabled(sdkToolsOk); m_sdkManagerWidget->setSdkManagerControlsEnabled(!m_androidConfig.useNativeUiTools()); - Utils::FilePath currentNdk = Utils::FilePath::fromString(m_ui->ndkListComboBox->currentText()); + const QListWidgetItem *currentItem = m_ui->ndkListWidget->currentItem(); + Utils::FilePath currentNdk = Utils::FilePath::fromString(currentItem ? currentItem->text() : ""); auto infoText = tr("(SDK Version: %1, NDK Bundle Version: %2)") .arg(m_androidConfig.sdkToolsVersion().toString()) .arg(currentNdk.isEmpty() ? "" : m_androidConfig.ndkVersion(currentNdk).toString()); |