aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-09-13 04:20:29 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-10-04 12:11:16 +0000
commit480bdbd3af2abe97a9a9ef7379351d60aff65296 (patch)
treea10335bc1d2a656b911faf942bf12abea2b0e815 /src/plugins/android
parent2f8b541fe55737edbaa4e73dcaa7c5072bf72d1d (diff)
Add search field for Android Sdk Manager
The list of packages from the sdk manager can be too much to look at and search manually, thus a search field is very convenient to have here. The search is very simple, include any package that contains the search word into the result. Change-Id: Id222841162739d49562ad11bb0f3152041614ebc Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/androidsdkmanagerwidget.cpp26
-rw-r--r--src/plugins/android/androidsdkmanagerwidget.ui41
2 files changed, 43 insertions, 24 deletions
diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp
index c4598351536..c576571d32c 100644
--- a/src/plugins/android/androidsdkmanagerwidget.cpp
+++ b/src/plugins/android/androidsdkmanagerwidget.cpp
@@ -59,10 +59,12 @@ public:
PackageFilterModel(AndroidSdkModel* sdkModel);
void setAcceptedPackageState(AndroidSdkPackage::PackageState state);
+ void setAcceptedSearchPackage(const QString &text);
bool filterAcceptsRow(int source_row, const QModelIndex &sourceParent) const override;
private:
AndroidSdkPackage::PackageState m_packageState = AndroidSdkPackage::AnyValidState;
+ QString m_searchText;
};
AndroidSdkManagerWidget::AndroidSdkManagerWidget(AndroidConfig &config,
@@ -129,6 +131,15 @@ AndroidSdkManagerWidget::AndroidSdkManagerWidget(AndroidConfig &config,
}
});
+ m_ui->searchField->setPlaceholderText("Filter");
+ connect(m_ui->searchField, &QLineEdit::textChanged, [this, proxyModel](const QString &text) {
+ const bool isExpanded = m_ui->expandCheck->isChecked();
+ proxyModel->setAcceptedSearchPackage(text);
+ m_sdkModel->resetSelection();
+ // It is more convenient to expand the view with the results
+ m_ui->expandCheck->setChecked(!text.isEmpty());
+ });
+
connect(m_ui->applySelectionButton, &QPushButton::clicked,
this, &AndroidSdkManagerWidget::onApplyButton);
connect(m_ui->cancelButton, &QPushButton::clicked, this,
@@ -469,6 +480,12 @@ void PackageFilterModel::setAcceptedPackageState(AndroidSdkPackage::PackageState
invalidateFilter();
}
+void PackageFilterModel::setAcceptedSearchPackage(const QString &name)
+{
+ m_searchText = name;
+ invalidateFilter();
+}
+
bool PackageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
QModelIndex srcIndex = sourceModel()->index(sourceRow, 0, sourceParent);
@@ -479,19 +496,24 @@ bool PackageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sour
return (AndroidSdkPackage::PackageState)i.data(AndroidSdkModel::PackageStateRole).toInt();
};
+ auto packageFound = [this](const QModelIndex& i) {
+ return i.data(AndroidSdkModel::packageNameColumn).toString()
+ .contains(m_searchText, Qt::CaseInsensitive);
+ };
+
bool showTopLevel = false;
if (!sourceParent.isValid()) {
// Top Level items
for (int row = 0; row < sourceModel()->rowCount(srcIndex); ++row) {
QModelIndex childIndex = sourceModel()->index(row, 0, srcIndex);
- if (m_packageState & packageState(childIndex)) {
+ if ((m_packageState & packageState(childIndex) && packageFound(childIndex))) {
showTopLevel = true;
break;
}
}
}
- return showTopLevel || (packageState(srcIndex) & m_packageState);
+ return showTopLevel || (packageState(srcIndex) & m_packageState) && packageFound(srcIndex);
}
OptionsDialog::OptionsDialog(AndroidSdkManager *sdkManager, const QStringList &args,
diff --git a/src/plugins/android/androidsdkmanagerwidget.ui b/src/plugins/android/androidsdkmanagerwidget.ui
index e49f7a792ef..3baa968402a 100644
--- a/src/plugins/android/androidsdkmanagerwidget.ui
+++ b/src/plugins/android/androidsdkmanagerwidget.ui
@@ -51,27 +51,7 @@
<property name="spacing">
<number>4</number>
</property>
- <item row="0" column="0" colspan="2">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QCheckBox" name="expandCheck">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Expand All</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
+ <item row="2" column="0" colspan="4">
<widget class="QTreeView" name="packagesView">
<property name="indentation">
<number>20</number>
@@ -81,7 +61,7 @@
</attribute>
</widget>
</item>
- <item row="1" column="1">
+ <item row="2" column="4">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="updateInstalledButton">
@@ -149,6 +129,16 @@
</item>
</layout>
</item>
+ <item row="1" column="1">
+ <widget class="Utils::FancyLineEdit" name="searchField"/>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="expandCheck">
+ <property name="text">
+ <string>Expand All</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QWidget" name="outputStack">
@@ -234,6 +224,13 @@
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>Utils::FancyLineEdit</class>
+ <extends>QLineEdit</extends>
+ <header location="global">utils/fancylineedit.h</header>
+ </customwidget>
+ </customwidgets>
<tabstops>
<tabstop>packagesView</tabstop>
<tabstop>showAllRadio</tabstop>