forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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,
|
||||
|
@@ -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>
|
||||
|
Reference in New Issue
Block a user