diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-09-13 04:20:29 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-10-04 12:11:16 +0000 |
commit | 480bdbd3af2abe97a9a9ef7379351d60aff65296 (patch) | |
tree | a10335bc1d2a656b911faf942bf12abea2b0e815 /src/plugins/android | |
parent | 2f8b541fe55737edbaa4e73dcaa7c5072bf72d1d (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.cpp | 26 | ||||
-rw-r--r-- | src/plugins/android/androidsdkmanagerwidget.ui | 41 |
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> |