diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp index c84beaf226d..dd41777de11 100644 --- a/src/plugins/projectexplorer/targetsetuppage.cpp +++ b/src/plugins/projectexplorer/targetsetuppage.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,15 @@ namespace ProjectExplorer { namespace Internal { +static Utils::FileName importDirectory(const QString &projectPath) +{ + // Setup import widget: + auto path = Utils::FileName::fromString(projectPath); + path = path.parentDir(); // base dir + path = path.parentDir(); // parent dir + + return path; +} class TargetSetupPageUi { @@ -64,6 +74,7 @@ public: QLabel *noValidKitLabel; QLabel *optionHintLabel; QCheckBox *allKitsCheckBox; + Utils::FancyLineEdit *kitFilterLineEdit; void setupUi(TargetSetupPage *q) { @@ -93,6 +104,10 @@ public: allKitsCheckBox->setTristate(true); allKitsCheckBox->setText(TargetSetupPage::tr("Select all kits")); + kitFilterLineEdit = new Utils::FancyLineEdit(setupTargetPage); + kitFilterLineEdit->setFiltering(true); + kitFilterLineEdit->setPlaceholderText(TargetSetupPage::tr("Type to filter kits by name...")); + centralWidget = new QWidget(setupTargetPage); QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Fixed); policy.setHorizontalStretch(0); @@ -115,8 +130,9 @@ public: auto verticalLayout_2 = new QVBoxLayout(setupTargetPage); verticalLayout_2->addWidget(headerLabel); - verticalLayout_2->addWidget(noValidKitLabel); verticalLayout_2->addWidget(descriptionLabel); + verticalLayout_2->addWidget(kitFilterLineEdit); + verticalLayout_2->addWidget(noValidKitLabel); verticalLayout_2->addWidget(optionHintLabel); verticalLayout_2->addWidget(allKitsCheckBox); verticalLayout_2->addWidget(centralWidget); @@ -131,6 +147,9 @@ public: QObject::connect(allKitsCheckBox, &QAbstractButton::clicked, q, &TargetSetupPage::changeAllKitsSelections); + + QObject::connect(kitFilterLineEdit, &Utils::FancyLineEdit::filterChanged, + q, &TargetSetupPage::kitFilterChanged); } }; @@ -246,20 +265,16 @@ bool TargetSetupPage::isComplete() const void TargetSetupPage::setupWidgets() { // Known profiles: - QList kitList; - kitList = KitManager::kits(m_requiredPredicate); - kitList = KitManager::sortKits(kitList); + auto kitList = sortedKitList(m_requiredPredicate); foreach (Kit *k, kitList) addWidget(k); // Setup import widget: - Utils::FileName path = Utils::FileName::fromString(m_projectPath); - path = path.parentDir(); // base dir - path = path.parentDir(); // parent dir - m_importWidget->setCurrentDirectory(path); + m_importWidget->setCurrentDirectory(Internal::importDirectory(m_projectPath)); updateVisibility(); + selectAtLeastOneKit(); } void TargetSetupPage::reset() @@ -434,6 +449,35 @@ void TargetSetupPage::kitSelectionChanged() m_ui->allKitsCheckBox->setCheckState(Qt::Unchecked); } +QList TargetSetupPage::sortedKitList(const Kit::Predicate &predicate) +{ + const auto kitList = KitManager::kits(predicate); + + return KitManager::sortKits(kitList); +} + +void TargetSetupPage::kitFilterChanged(const QString &filterText) +{ + // Reset current shown kits + reset(); + + if (filterText.isEmpty()) { + setupWidgets(); + } else { + const auto kitList = sortedKitList(m_requiredPredicate); + + foreach (Kit *kit, kitList) { + if (kit->displayName().contains(filterText, Qt::CaseInsensitive)) + addWidget(kit); + } + + m_importWidget->setCurrentDirectory(Internal::importDirectory(m_projectPath)); + + updateVisibility(); + selectAtLeastOneKit(); + } +} + void TargetSetupPage::changeAllKitsSelections() { if (m_ui->allKitsCheckBox->checkState() == Qt::PartiallyChecked) diff --git a/src/plugins/projectexplorer/targetsetuppage.h b/src/plugins/projectexplorer/targetsetuppage.h index 0b8918a954e..122872cd369 100644 --- a/src/plugins/projectexplorer/targetsetuppage.h +++ b/src/plugins/projectexplorer/targetsetuppage.h @@ -89,6 +89,8 @@ public: void openOptions(); void changeAllKitsSelections(); + void kitFilterChanged(const QString &filterText); + private: void handleKitAddition(ProjectExplorer::Kit *k); void handleKitRemoval(ProjectExplorer::Kit *k); @@ -96,6 +98,7 @@ private: void updateVisibility(); void kitSelectionChanged(); + static QList sortedKitList(const Kit::Predicate &predicate); bool isUpdating() const; void selectAtLeastOneKit();