Removed duplicate target variants from Insight window

This commit is contained in:
Nav
2021-06-20 22:57:09 +01:00
parent 57acda4b3b
commit a9c6171ac2
3 changed files with 52 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ using Bloom::Targets::TargetState;
using Bloom::Targets::TargetPinState; using Bloom::Targets::TargetPinState;
using Bloom::Targets::TargetVariant; using Bloom::Targets::TargetVariant;
using Bloom::Targets::TargetPackage; using Bloom::Targets::TargetPackage;
using Bloom::Targets::TargetPinDescriptor;
void InsightWindow::init( void InsightWindow::init(
QApplication& application, QApplication& application,
@@ -126,7 +127,40 @@ void InsightWindow::activate() {
this->supportedVariantsByName.clear(); this->supportedVariantsByName.clear();
/*
* We don't want to present the user with duplicate target variants.
*
* In the context of the Insight window, a variant that doesn't differ in package type or pinout
* configuration is considered a duplicate.
*/
auto processedVariants = std::vector<TargetVariant>();
auto isDuplicateVariant = [&processedVariants] (const TargetVariant& variantA) {
return std::ranges::any_of(
processedVariants.begin(),
processedVariants.end(),
[&variantA, &processedVariants] (const TargetVariant& variantB) {
if (variantA.package != variantB.package) {
return false;
}
if (variantA.pinDescriptorsByNumber.size() != variantB.pinDescriptorsByNumber.size()) {
return false;
}
if (variantA.pinDescriptorsByNumber != variantB.pinDescriptorsByNumber) {
return false;
}
return true;
}
);
};
for (const auto& targetVariant: this->targetDescriptor.variants) { for (const auto& targetVariant: this->targetDescriptor.variants) {
if (isDuplicateVariant(targetVariant)) {
continue;
}
auto variantAction = new QAction(this->variantMenu); auto variantAction = new QAction(this->variantMenu);
variantAction->setText( variantAction->setText(
QString::fromStdString(targetVariant.name + " (" + targetVariant.packageName + ")") QString::fromStdString(targetVariant.name + " (" + targetVariant.packageName + ")")
@@ -152,6 +186,7 @@ void InsightWindow::activate() {
} }
this->variantMenu->addAction(variantAction); this->variantMenu->addAction(variantAction);
processedVariants.push_back(targetVariant);
} }
this->variantMenu->setEnabled(true); this->variantMenu->setEnabled(true);

View File

@@ -25,6 +25,16 @@ namespace Bloom::Targets
std::vector<std::string> functions; std::vector<std::string> functions;
TargetPinType type = TargetPinType::UNKNOWN; TargetPinType type = TargetPinType::UNKNOWN;
bool operator == (const TargetPinDescriptor& pinDescriptor) const {
return this->number == pinDescriptor.number
&& this->supportsGpio == pinDescriptor.supportsGpio
&& this->name == pinDescriptor.name
&& this->padName == pinDescriptor.padName
&& this->functions == pinDescriptor.functions
&& this->type == pinDescriptor.type
;
}
}; };
struct TargetPinState struct TargetPinState

View File

@@ -53,5 +53,12 @@ namespace Bloom::Targets
std::string packageName; std::string packageName;
TargetPackage package = TargetPackage::UNKNOWN; TargetPackage package = TargetPackage::UNKNOWN;
std::map<int, TargetPinDescriptor> pinDescriptorsByNumber; std::map<int, TargetPinDescriptor> pinDescriptorsByNumber;
bool operator == (const TargetVariant& variant) const {
return this->name == variant.name
&& this->packageName == variant.packageName
&& this->package == variant.package
&& this->pinDescriptorsByNumber == variant.pinDescriptorsByNumber;
}
}; };
} }