Moved connection determination to schema
This commit is contained in:
1 parent
1ec8b10ef5
commit
1759adf25a
7 files changed
+119
-41
No files matched your search
@@ -132,9 +132,13 @@ namespace display {
|
||||
auto instance = context.pin->getComponentInstance();
|
||||
auto &pin = context.pin->getPin();
|
||||
|
||||
auto busInstances = getAvailableConnectionBusses(instance, pin);
|
||||
auto availableConnections = schema->availableConnections(instance->name, pin.getName(), true);
|
||||
|
||||
for (auto &bus: busInstances) {
|
||||
for(auto &connection: availableConnections) {
|
||||
if(connection.type != domain::ConnectionEntry::BUS) {
|
||||
continue;
|
||||
}
|
||||
auto bus = connection.busInstance.value();
|
||||
if(buses[bus->name] == nullptr) {
|
||||
continue;
|
||||
}
|
||||
@@ -163,9 +167,11 @@ namespace display {
|
||||
}
|
||||
}
|
||||
|
||||
auto pinInstances = getAvailableConnectionPins(instance, pin);
|
||||
|
||||
for (auto &pinInstance: pinInstances) {
|
||||
for (auto &connection: availableConnections) {
|
||||
if(connection.type != domain::ConnectionEntry::COMPONENT) {
|
||||
continue;
|
||||
}
|
||||
auto pinInstance = domain::ConnectionComponent{connection.componentInstance.value()->name, connection.pin.value().getName()};
|
||||
auto rect = pins[pinInstance]->boundingRect();
|
||||
rect.setX(pins[pinInstance]->scenePos().x());
|
||||
rect.setY(pins[pinInstance]->scenePos().y());
|
||||
@@ -218,9 +224,13 @@ namespace display {
|
||||
void Schema::showConnectable(Pin *domainPin) {
|
||||
auto &pin = domainPin->getPin();
|
||||
|
||||
auto busInstances = getAvailableConnectionBusses(domainPin->getComponentInstance(), domainPin->getPin());
|
||||
auto availableConnections = schema->availableConnections(domainPin->getComponentInstance()->name, pin.getName(), true);
|
||||
|
||||
for (auto bus: busInstances) {
|
||||
for(auto &connection: availableConnections) {
|
||||
if(connection.type != domain::ConnectionEntry::BUS) {
|
||||
continue;
|
||||
}
|
||||
auto bus = connection.busInstance.value();
|
||||
auto &group = buses[bus->name];
|
||||
if(group == nullptr) {
|
||||
continue;
|
||||
@@ -238,10 +248,11 @@ namespace display {
|
||||
scene.addItem(rect);
|
||||
}
|
||||
|
||||
std::vector<domain::ConnectionComponent> pinInstances = getAvailableConnectionPins(
|
||||
domainPin->getComponentInstance(), domainPin->getPin());
|
||||
|
||||
for (auto &pinInstance: pinInstances) {
|
||||
for (auto &connection: availableConnections) {
|
||||
if(connection.type != domain::ConnectionEntry::COMPONENT) {
|
||||
continue;
|
||||
}
|
||||
auto pinInstance = domain::ConnectionComponent{connection.componentInstance.value()->name, connection.pin.value().getName()};
|
||||
auto &instance = pins[pinInstance];
|
||||
auto rect = new QGraphicsRectItem(instance->boundingRect());
|
||||
rect->setPen(selectedPen);
|
||||
@@ -258,31 +269,6 @@ namespace display {
|
||||
|
||||
}
|
||||
|
||||
std::vector<domain::BusInstance *>
|
||||
Schema::getAvailableConnectionBusses(domain::ComponentInstance *instance, domain::Pin &pin) {
|
||||
std::vector<domain::BusInstance *> instances;
|
||||
for (const auto &bus: schema->busInstances) {
|
||||
if (library->hasConnection(domain::ConnectionComponent{instance->component.getName(), pin.getName()},
|
||||
bus->bus.getName())) {
|
||||
instances.push_back(bus.get());
|
||||
}
|
||||
}
|
||||
return instances;
|
||||
}
|
||||
|
||||
std::vector<domain::ConnectionComponent>
|
||||
Schema::getAvailableConnectionPins(domain::ComponentInstance *instance, domain::Pin &pin) {
|
||||
std::vector<domain::ConnectionComponent> instances;
|
||||
domain::ConnectionComponent source{instance->component.getName(), pin.getName()};
|
||||
for (const auto &entry: pins) {
|
||||
std::string name = components[entry.first.component]->getComponentInstance()->component.getName();
|
||||
if (library->hasConnection(source, domain::ConnectionComponent{name, entry.first.pin})) {
|
||||
instances.push_back(entry.first);
|
||||
}
|
||||
}
|
||||
return instances;
|
||||
}
|
||||
|
||||
std::vector<domain::InstanceAttribute> Schema::populateAttributes(std::vector<domain::Attribute>& attributes) {
|
||||
std::vector<domain::InstanceAttribute> instanceAttributes;
|
||||
|
||||
|
||||
Reference in new issue
Block a user