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);
|
PackageFilterModel(AndroidSdkModel* sdkModel);
|
||||||
|
|
||||||
void setAcceptedPackageState(AndroidSdkPackage::PackageState state);
|
void setAcceptedPackageState(AndroidSdkPackage::PackageState state);
|
||||||
|
void setAcceptedSearchPackage(const QString &text);
|
||||||
bool filterAcceptsRow(int source_row, const QModelIndex &sourceParent) const override;
|
bool filterAcceptsRow(int source_row, const QModelIndex &sourceParent) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AndroidSdkPackage::PackageState m_packageState = AndroidSdkPackage::AnyValidState;
|
AndroidSdkPackage::PackageState m_packageState = AndroidSdkPackage::AnyValidState;
|
||||||
|
QString m_searchText;
|
||||||
};
|
};
|
||||||
|
|
||||||
AndroidSdkManagerWidget::AndroidSdkManagerWidget(AndroidConfig &config,
|
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,
|
connect(m_ui->applySelectionButton, &QPushButton::clicked,
|
||||||
this, &AndroidSdkManagerWidget::onApplyButton);
|
this, &AndroidSdkManagerWidget::onApplyButton);
|
||||||
connect(m_ui->cancelButton, &QPushButton::clicked, this,
|
connect(m_ui->cancelButton, &QPushButton::clicked, this,
|
||||||
@@ -469,6 +480,12 @@ void PackageFilterModel::setAcceptedPackageState(AndroidSdkPackage::PackageState
|
|||||||
invalidateFilter();
|
invalidateFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PackageFilterModel::setAcceptedSearchPackage(const QString &name)
|
||||||
|
{
|
||||||
|
m_searchText = name;
|
||||||
|
invalidateFilter();
|
||||||
|
}
|
||||||
|
|
||||||
bool PackageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
bool PackageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||||
{
|
{
|
||||||
QModelIndex srcIndex = sourceModel()->index(sourceRow, 0, sourceParent);
|
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();
|
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;
|
bool showTopLevel = false;
|
||||||
if (!sourceParent.isValid()) {
|
if (!sourceParent.isValid()) {
|
||||||
// Top Level items
|
// Top Level items
|
||||||
for (int row = 0; row < sourceModel()->rowCount(srcIndex); ++row) {
|
for (int row = 0; row < sourceModel()->rowCount(srcIndex); ++row) {
|
||||||
QModelIndex childIndex = sourceModel()->index(row, 0, srcIndex);
|
QModelIndex childIndex = sourceModel()->index(row, 0, srcIndex);
|
||||||
if (m_packageState & packageState(childIndex)) {
|
if ((m_packageState & packageState(childIndex) && packageFound(childIndex))) {
|
||||||
showTopLevel = true;
|
showTopLevel = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return showTopLevel || (packageState(srcIndex) & m_packageState);
|
return showTopLevel || (packageState(srcIndex) & m_packageState) && packageFound(srcIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
OptionsDialog::OptionsDialog(AndroidSdkManager *sdkManager, const QStringList &args,
|
OptionsDialog::OptionsDialog(AndroidSdkManager *sdkManager, const QStringList &args,
|
||||||
|
@@ -51,27 +51,7 @@
|
|||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>4</number>
|
<number>4</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="0" column="0" colspan="2">
|
<item row="2" column="0" colspan="4">
|
||||||
<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">
|
|
||||||
<widget class="QTreeView" name="packagesView">
|
<widget class="QTreeView" name="packagesView">
|
||||||
<property name="indentation">
|
<property name="indentation">
|
||||||
<number>20</number>
|
<number>20</number>
|
||||||
@@ -81,7 +61,7 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="4">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="updateInstalledButton">
|
<widget class="QPushButton" name="updateInstalledButton">
|
||||||
@@ -149,6 +129,16 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="outputStack">
|
<widget class="QWidget" name="outputStack">
|
||||||
@@ -234,6 +224,13 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Utils::FancyLineEdit</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header location="global">utils/fancylineedit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>packagesView</tabstop>
|
<tabstop>packagesView</tabstop>
|
||||||
<tabstop>showAllRadio</tabstop>
|
<tabstop>showAllRadio</tabstop>
|
||||||
|
Reference in New Issue
Block a user