From a7636d8d5c0e184693fe5ba440299c3d7f8f640a Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 21 Jul 2022 18:54:08 +0200 Subject: [PATCH] Android: inline addnewavddialog.ui Change-Id: Ib90981f8fb60b637deb03da5466f7aaa49369104 Reviewed-by: Alessandro Portale --- src/plugins/android/CMakeLists.txt | 1 - src/plugins/android/addnewavddialog.ui | 179 ------------------------- src/plugins/android/android.qbs | 1 - src/plugins/android/avddialog.cpp | 176 +++++++++++++++--------- src/plugins/android/avddialog.h | 29 +++- 5 files changed, 138 insertions(+), 248 deletions(-) delete mode 100644 src/plugins/android/addnewavddialog.ui diff --git a/src/plugins/android/CMakeLists.txt b/src/plugins/android/CMakeLists.txt index 90218c6c7c0..522ad3d394a 100644 --- a/src/plugins/android/CMakeLists.txt +++ b/src/plugins/android/CMakeLists.txt @@ -2,7 +2,6 @@ add_qtc_plugin(Android DEPENDS QmlDebug Qt5::Xml LanguageServerProtocol PLUGIN_DEPENDS Core Debugger ProjectExplorer QtSupport LanguageClient SOURCES - addnewavddialog.ui android.qrc android_global.h androidtr.h diff --git a/src/plugins/android/addnewavddialog.ui b/src/plugins/android/addnewavddialog.ui deleted file mode 100644 index f0736429a0c..00000000000 --- a/src/plugins/android/addnewavddialog.ui +++ /dev/null @@ -1,179 +0,0 @@ - - - Android::Internal::AddNewAVDDialog - - - - 0 - 0 - 800 - - - - Create new AVD - - - - - - - - - 0 - 0 - - - - Name: - - - - - - - Architecture (ABI): - - - - - - - SD card size: - - - - - - - Target API: - - - - - - - Device definition: - - - - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - MiB - - - 0 - - - 1000000 - - - 512 - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - - - - Overwrite existing AVD name - - - - - - - - - Qt::Vertical - - - - 20 - 20 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - Utils::InfoLabel - QLabel -
utils/infolabel.h
-
-
- - - - buttonBox - accepted() - Android::Internal::AddNewAVDDialog - accept() - - - 222 - 134 - - - 157 - 148 - - - - - buttonBox - rejected() - Android::Internal::AddNewAVDDialog - reject() - - - 245 - 140 - - - 249 - 148 - - - - -
diff --git a/src/plugins/android/android.qbs b/src/plugins/android/android.qbs index aaa29b2b329..4db566e9054 100644 --- a/src/plugins/android/android.qbs +++ b/src/plugins/android/android.qbs @@ -20,7 +20,6 @@ Project { files: [ "android_global.h", "androidtr.h", "android.qrc", - "addnewavddialog.ui", "androidavdmanager.cpp", "androidavdmanager.h", "androidconfigurations.cpp", diff --git a/src/plugins/android/avddialog.cpp b/src/plugins/android/avddialog.cpp index c6cae9b4793..852fa8a7bc5 100644 --- a/src/plugins/android/avddialog.cpp +++ b/src/plugins/android/avddialog.cpp @@ -24,30 +24,39 @@ ****************************************************************************/ #include "avddialog.h" -#include "androidsdkmanager.h" + #include "androidavdmanager.h" -#include "androiddevice.h" #include "androidconstants.h" +#include "androiddevice.h" +#include "androidsdkmanager.h" #include + #include +#include +#include +#include #include #include -#include +#include +#include +#include #include #include -#include -#include +#include #include +#include #include +#include +#include -using namespace Android; -using namespace Android::Internal; +using namespace Utils; + +namespace Android::Internal { -namespace { static Q_LOGGING_CATEGORY(avdDialogLog, "qtc.android.avdDialog", QtWarningMsg) -} + AvdDialog::AvdDialog(const AndroidConfig &config, QWidget *parent) : QDialog(parent), @@ -55,38 +64,79 @@ AvdDialog::AvdDialog(const AndroidConfig &config, QWidget *parent) m_androidConfig(config), m_sdkManager(m_androidConfig) { - m_avdDialog.setupUi(this); + resize(800, 0); + setWindowTitle(tr("Create new AVD")); + + m_abiComboBox = new QComboBox; + m_abiComboBox->addItems({ + ProjectExplorer::Constants::ANDROID_ABI_X86, + ProjectExplorer::Constants::ANDROID_ABI_X86_64, + ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A, + ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A + }); + + m_sdcardSizeSpinBox = new QSpinBox; + m_sdcardSizeSpinBox->setSuffix(tr(" MiB")); + m_sdcardSizeSpinBox->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + m_sdcardSizeSpinBox->setRange(0, 1000000); + m_sdcardSizeSpinBox->setValue(512); + + m_nameLineEdit = new QLineEdit; + m_nameLineEdit->setValidator(new QRegularExpressionValidator(m_allowedNameChars, this)); + m_nameLineEdit->installEventFilter(this); + + m_targetApiComboBox = new QComboBox; + + m_deviceDefinitionComboBox = new QComboBox; + + m_warningText = new InfoLabel; + m_warningText->setType(InfoLabel::Warning); + m_warningText->setElideMode(Qt::ElideNone); + + m_deviceDefinitionTypeComboBox = new QComboBox; + + m_overwriteCheckBox = new QCheckBox(tr("Overwrite existing AVD name")); + + m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + m_hideTipTimer.setInterval(2000); m_hideTipTimer.setSingleShot(true); + using namespace Layouting; + const Break nl; + + Column { + Form { + tr("Name:"), m_nameLineEdit, nl, + tr("Device definition:"), + Row { m_deviceDefinitionTypeComboBox, m_deviceDefinitionComboBox }, nl, + tr("Architecture (ABI):"), m_abiComboBox, nl, + tr("Target API:"), m_targetApiComboBox, nl, + QString(), m_warningText, nl, + tr("SD card size:"), m_sdcardSizeSpinBox, nl, + QString(), m_overwriteCheckBox, + }, + Stretch(), + m_buttonBox + }.attachTo(this); + connect(&m_hideTipTimer, &QTimer::timeout, this, &Utils::ToolTip::hide); - connect(m_avdDialog.deviceDefinitionTypeComboBox, &QComboBox::currentIndexChanged, + connect(m_deviceDefinitionTypeComboBox, &QComboBox::currentIndexChanged, this, &AvdDialog::updateDeviceDefinitionComboBox); - connect(m_avdDialog.abiComboBox, &QComboBox::currentIndexChanged, + connect(m_abiComboBox, &QComboBox::currentIndexChanged, this, &AvdDialog::updateApiLevelComboBox); + connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - deviceTypeToStringMap.insert(AvdDialog::Phone, "Phone"); - deviceTypeToStringMap.insert(AvdDialog::Tablet, "Tablet"); - deviceTypeToStringMap.insert(AvdDialog::Automotive, "Automotive"); - deviceTypeToStringMap.insert(AvdDialog::TV, "TV"); - deviceTypeToStringMap.insert(AvdDialog::Wear, "Wear"); - - m_avdDialog.abiComboBox->addItems(QStringList({ - ProjectExplorer::Constants::ANDROID_ABI_X86, - ProjectExplorer::Constants::ANDROID_ABI_X86_64, - ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A, - ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A})); - - auto v = new QRegularExpressionValidator(m_allowedNameChars, this); - m_avdDialog.nameLineEdit->setValidator(v); - m_avdDialog.nameLineEdit->installEventFilter(this); - - m_avdDialog.warningText->setType(Utils::InfoLabel::Warning); - m_avdDialog.warningText->setElideMode(Qt::ElideNone); + m_deviceTypeToStringMap.insert(AvdDialog::Phone, "Phone"); + m_deviceTypeToStringMap.insert(AvdDialog::Tablet, "Tablet"); + m_deviceTypeToStringMap.insert(AvdDialog::Automotive, "Automotive"); + m_deviceTypeToStringMap.insert(AvdDialog::TV, "TV"); + m_deviceTypeToStringMap.insert(AvdDialog::Wear, "Wear"); parseDeviceDefinitionsList(); - for (const QString &type : deviceTypeToStringMap) - m_avdDialog.deviceDefinitionTypeComboBox->addItem(type); + for (const QString &type : m_deviceTypeToStringMap) + m_deviceDefinitionTypeComboBox->addItem(type); updateApiLevelComboBox(); } @@ -101,7 +151,7 @@ int AvdDialog::exec() result.abi = abi(); result.deviceDefinition = deviceDefinition(); result.sdcardSize = sdcardSize(); - result.overwrite = m_avdDialog.overwriteCheckBox->isChecked(); + result.overwrite = m_overwriteCheckBox->isChecked(); const AndroidAvdManager avdManager = AndroidAvdManager(m_androidConfig); QFutureWatcher createAvdFutureWatcher; @@ -204,49 +254,49 @@ void AvdDialog::parseDeviceDefinitionsList() void AvdDialog::updateDeviceDefinitionComboBox() { - DeviceType curDeviceType = deviceTypeToStringMap.key( - m_avdDialog.deviceDefinitionTypeComboBox->currentText()); + DeviceType curDeviceType = m_deviceTypeToStringMap.key( + m_deviceDefinitionTypeComboBox->currentText()); - m_avdDialog.deviceDefinitionComboBox->clear(); + m_deviceDefinitionComboBox->clear(); for (const DeviceDefinitionStruct &item : qAsConst(m_deviceDefinitionsList)) { if (item.deviceType == curDeviceType) - m_avdDialog.deviceDefinitionComboBox->addItem(item.name_id); + m_deviceDefinitionComboBox->addItem(item.name_id); } - m_avdDialog.deviceDefinitionComboBox->addItem("Custom"); + m_deviceDefinitionComboBox->addItem("Custom"); updateApiLevelComboBox(); } const SystemImage* AvdDialog::systemImage() const { - return m_avdDialog.targetApiComboBox->currentData().value(); + return m_targetApiComboBox->currentData().value(); } QString AvdDialog::name() const { - return m_avdDialog.nameLineEdit->text(); + return m_nameLineEdit->text(); } QString AvdDialog::abi() const { - return m_avdDialog.abiComboBox->currentText(); + return m_abiComboBox->currentText(); } QString AvdDialog::deviceDefinition() const { - return m_avdDialog.deviceDefinitionComboBox->currentText(); + return m_deviceDefinitionComboBox->currentText(); } int AvdDialog::sdcardSize() const { - return m_avdDialog.sdcardSizeSpinBox->value(); + return m_sdcardSizeSpinBox->value(); } void AvdDialog::updateApiLevelComboBox() { SystemImageList installedSystemImages = m_sdkManager.installedSystemImages(); - DeviceType curDeviceType = deviceTypeToStringMap.key( - m_avdDialog.deviceDefinitionTypeComboBox->currentText()); + DeviceType curDeviceType = m_deviceTypeToStringMap.key( + m_deviceDefinitionTypeComboBox->currentText()); QString selectedAbi = abi(); auto hasAbi = [selectedAbi](const SystemImage *image) { @@ -261,49 +311,49 @@ void AvdDialog::updateApiLevelComboBox() return image && deviceType == curDeviceType && hasAbi(image); }); - m_avdDialog.targetApiComboBox->clear(); + m_targetApiComboBox->clear(); for (SystemImage *image : qAsConst(filteredList)) { QString imageString = "android-" % QString::number(image->apiLevel()); const QStringList imageSplits = image->sdkStylePath().split(';'); if (imageSplits.size() == 4) imageString += QStringLiteral(" (%1)").arg(imageSplits.at(2)); - m_avdDialog.targetApiComboBox->addItem(imageString, + m_targetApiComboBox->addItem(imageString, QVariant::fromValue(image)); - m_avdDialog.targetApiComboBox->setItemData(m_avdDialog.targetApiComboBox->count() - 1, + m_targetApiComboBox->setItemData(m_targetApiComboBox->count() - 1, image->descriptionText(), Qt::ToolTipRole); } if (installedSystemImages.isEmpty()) { - m_avdDialog.targetApiComboBox->setEnabled(false); - m_avdDialog.warningText->setVisible(true); - m_avdDialog.warningText->setText( + m_targetApiComboBox->setEnabled(false); + m_warningText->setVisible(true); + m_warningText->setText( tr("Cannot create a new AVD. No suitable Android system image is installed.
" "Install a system image for the intended Android version from the SDK Manager.")); - m_avdDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } else if (filteredList.isEmpty()) { - m_avdDialog.targetApiComboBox->setEnabled(false); - m_avdDialog.warningText->setVisible(true); - m_avdDialog.warningText->setText(tr("Cannot create an AVD for ABI %1.
Install a system " + m_targetApiComboBox->setEnabled(false); + m_warningText->setVisible(true); + m_warningText->setText(tr("Cannot create an AVD for ABI %1.
Install a system " "image for it from the SDK Manager tab first.") .arg(abi())); - m_avdDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } else { - m_avdDialog.warningText->setVisible(false); - m_avdDialog.targetApiComboBox->setEnabled(true); - m_avdDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + m_warningText->setVisible(false); + m_targetApiComboBox->setEnabled(true); + m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); } } bool AvdDialog::eventFilter(QObject *obj, QEvent *event) { - if (obj == m_avdDialog.nameLineEdit && event->type() == QEvent::KeyPress) { + if (obj == m_nameLineEdit && event->type() == QEvent::KeyPress) { auto ke = static_cast(event); const QString key = ke->text(); if (!key.isEmpty() && !m_allowedNameChars.match(key).hasMatch()) { - QPoint position = m_avdDialog.nameLineEdit->parentWidget()->mapToGlobal(m_avdDialog.nameLineEdit->geometry().bottomLeft()); + QPoint position = m_nameLineEdit->parentWidget()->mapToGlobal(m_nameLineEdit->geometry().bottomLeft()); position -= Utils::ToolTip::offsetFromPosition(); - Utils::ToolTip::show(position, tr("Allowed characters are: a-z A-Z 0-9 and . _ -"), m_avdDialog.nameLineEdit); + Utils::ToolTip::show(position, tr("Allowed characters are: a-z A-Z 0-9 and . _ -"), m_nameLineEdit); m_hideTipTimer.start(); } else { m_hideTipTimer.stop(); @@ -312,3 +362,5 @@ bool AvdDialog::eventFilter(QObject *obj, QEvent *event) } return QDialog::eventFilter(obj, event); } + +} // Android::Internal diff --git a/src/plugins/android/avddialog.h b/src/plugins/android/avddialog.h index 45169bd79f4..8732eb48ef2 100644 --- a/src/plugins/android/avddialog.h +++ b/src/plugins/android/avddialog.h @@ -25,12 +25,21 @@ #pragma once #include "androidconfigurations.h" -#include "ui_addnewavddialog.h" #include "androidconfigurations.h" #include #include +QT_BEGIN_NAMESPACE +class QComboBox; +class QCheckBox; +class QDialogButtonBox; +class QLineEdit; +class QSpinBox; +QT_END_NAMESPACE + +namespace Utils { class InfoLabel; } + namespace Android { class AndroidConfig; class SdkPlatform; @@ -70,14 +79,24 @@ private: DeviceType deviceType; }; - Ui::AddNewAVDDialog m_avdDialog; CreateAvdInfo m_createdAvdInfo; QTimer m_hideTipTimer; QRegularExpression m_allowedNameChars; QList m_deviceDefinitionsList; const AndroidConfig &m_androidConfig; AndroidSdkManager m_sdkManager; - QMap deviceTypeToStringMap; + QMap m_deviceTypeToStringMap; + + QComboBox *m_abiComboBox; + QSpinBox *m_sdcardSizeSpinBox; + QLineEdit *m_nameLineEdit; + QComboBox *m_targetApiComboBox; + QComboBox *m_deviceDefinitionComboBox; + Utils::InfoLabel *m_warningText; + QComboBox *m_deviceDefinitionTypeComboBox; + QCheckBox *m_overwriteCheckBox; + QDialogButtonBox *m_buttonBox; }; -} -} + +} // Internal +} // Android