Host::Host(std::string name, size_t portNumber, NetworkSystem* system) : Module(system), NetworkModule(name, system), NetworkLog(system) { size_t k; allPort.clear(); for(k=0; k<portNumber; k++) { char nameBuffer[1024]; snprintf(nameBuffer, sizeof(nameBuffer), "%s's port[%lu]", name.c_str(), k); Port* newPort = new Port(std::string(nameBuffer), system); newPort->connect(this); allPort.push_back(newPort); } this->pidStart = 0; this->syscallIDStart = 0; this->defaultInterface = new DefaultSystemCall(this); this->running = true; }
// Called when in connection mode void FlowDesigner::handleConnectionClick(QMouseEvent *event) { float x = event->x(); float y = event->y(); Component *comp = getComponentIntersection(x, y); Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); if (comp != NULL) { Port *port = getPortIntersection(comp, x, y); if (port && m_connectingPort) { // Connect the two port->connect(m_connectingPort); } } // Stop the connection m_connectingPort = NULL; repaint(); }
/// TODO: This code can be simplified. Make a PortContainer class. /// Plugin and Patch can inherit from PortContainer. We can have a /// pseudo-PortContainer here to represent the input and output ports /// Then, all adds/removals will be symetric /// ^^^: Or, just wrap Plugin and BackendPorts with a class that acts this way void FxLine::addPlugin(const PluginInfoPtr info, int pos) { int idx = pos + 1; int pluginCnt = m_entries.length() - 2; // Check for proper position value. TODO: Report error, not fatal Q_ASSERT(pos <= pluginCnt); // Create the plugin. TODO: Report error, not fatal Plugin *plugin = info->createPlugin(48000); Q_ASSERT(plugin); plugin->activate(Engine::bufferProvider()); m_parent.add(plugin); // Verify number of ports. TODO: Report error, not fatal Q_ASSERT(plugin->audioInputCount() == 2); Q_ASSERT(plugin->audioOutputCount() == 2); // Collect ports. Entry entry; entry.plugin = plugin; collectPorts(plugin, &entry.inputPorts, &entry.outputPorts); Q_ASSERT(entry.inputPorts.length() == 2); Q_ASSERT(entry.outputPorts.length() == 2); /* if (m_plugins.length() == 0) { // If there are no plugins, we disconnect the backend ports from each // other. Then, we connect the plugin in-between the backend ports // TODO: Bring back once backend ports have patch? // m_inPorts[0]->disconnect(m_outPorts[0]); // m_inPorts[1]->disconnect(m_outPorts[1]); m_inPorts[0]->connect(pluginIn.at(0)); m_inPorts[1]->connect(pluginIn.at(1)); m_outPorts[0]->connect(pluginOut.at(0)); m_outPorts[1]->connect(pluginOut.at(1)); } else if (pos < m_plugins.length()) { */ // At this point, there is at least one plugin already in the line, and we // are trying to insert the new plugin before another one. Entry producer = m_entries.value(idx-1); Entry consumer = m_entries.value(idx); qWarning() << "FX LINE ADD producer port count:" << producer.outputPorts.count(); for (int i=0; i<producer.outputPorts.count(); ++i) { Port *producerPort = producer.outputPorts.at(i); Port *consumerPort = consumer.inputPorts.at(i); // Work around: if (producerPort->parentPatch() == NULL && consumerPort->parentPatch() == NULL) { qWarning("Probably disconnecting two backend-ports. Ignoring"); } else { producerPort->disconnect(consumerPort); } qWarning() << "FX: Connecting: " << producerPort->name() << " TO " << entry.inputPorts.at(i)->name(); qWarning() << "FX: and Connecting: " << consumerPort->name() << " TO " << entry.outputPorts.at(i)->name(); producerPort->connect(entry.inputPorts.at(i)); consumerPort->connect(entry.outputPorts.at(i)); } m_entries.insert(idx, entry); }