summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AlsaDriver.cpp2
-rw-r--r--src/JackDriver.cpp25
-rw-r--r--src/PatchageFlowCanvas.cpp28
-rw-r--r--src/PatchageFlowCanvas.h6
4 files changed, 39 insertions, 22 deletions
diff --git a/src/AlsaDriver.cpp b/src/AlsaDriver.cpp
index 3e42df9..c961af1 100644
--- a/src/AlsaDriver.cpp
+++ b/src/AlsaDriver.cpp
@@ -318,7 +318,7 @@ AlsaDriver::add_connections(boost::shared_ptr<PatchagePort> port)
if (existing) {
existing->set_flagged(false);
} else {
- _app->canvas()->add_connection(port, connected_port);
+ _app->canvas()->add_connection(port, connected_port, port->color() + 0x22222200);
}
}
diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp
index 5d4c139..6847b09 100644
--- a/src/JackDriver.cpp
+++ b/src/JackDriver.cpp
@@ -264,15 +264,30 @@ JackDriver::refresh()
port2_name = client2_name.substr(client2_name.find(':')+1);
client2_name = client2_name.substr(0, client2_name.find(':'));
- boost::shared_ptr<Port> port1 = _app->canvas()->get_port(client1_name, port1_name);
- boost::shared_ptr<Port> port2 = _app->canvas()->get_port(client2_name, port2_name);
+ boost::shared_ptr<Port> port1
+ = _app->canvas()->get_port(client1_name, port1_name);
+ boost::shared_ptr<Port> port2
+ = _app->canvas()->get_port(client2_name, port2_name);
+
+ boost::shared_ptr<Port> src;
+ boost::shared_ptr<Port> dst;
+
+ if (port1->is_output() && port2->is_input()) {
+ src = port1;
+ dst = port2;
+ } else if (port2->is_output() && port1->is_input()) {
+ src = port2;
+ dst = port1;
+ }
+
+ if (src && dst) {
+ boost::shared_ptr<Connection> existing
+ = _app->canvas()->get_connection(src, dst);
- if (port1 && port2) {
- boost::shared_ptr<Connection> existing = _app->canvas()->get_connection(port1, port2);
if (existing) {
existing->set_flagged(false);
} else {
- _app->canvas()->add_connection(port1, port2);
+ _app->canvas()->add_connection(src, dst, port1->color() + 0x22222200);
}
}
}
diff --git a/src/PatchageFlowCanvas.cpp b/src/PatchageFlowCanvas.cpp
index 881caf8..c979d48 100644
--- a/src/PatchageFlowCanvas.cpp
+++ b/src/PatchageFlowCanvas.cpp
@@ -65,7 +65,7 @@ PatchageFlowCanvas::find_port(const snd_seq_addr_t* alsa_addr)
#endif
void
-PatchageFlowCanvas::connect(boost::shared_ptr<Port> port1, boost::shared_ptr<Port> port2)
+PatchageFlowCanvas::connect(boost::shared_ptr<Connectable> port1, boost::shared_ptr<Connectable> port2)
{
boost::shared_ptr<PatchagePort> p1 = boost::dynamic_pointer_cast<PatchagePort>(port1);
boost::shared_ptr<PatchagePort> p2 = boost::dynamic_pointer_cast<PatchagePort>(port2);
@@ -85,20 +85,24 @@ PatchageFlowCanvas::connect(boost::shared_ptr<Port> port1, boost::shared_ptr<Por
void
-PatchageFlowCanvas::disconnect(boost::shared_ptr<Port> port1, boost::shared_ptr<Port> port2)
+PatchageFlowCanvas::disconnect(boost::shared_ptr<Connectable> port1, boost::shared_ptr<Connectable> port2)
{
- boost::shared_ptr<PatchagePort> input;
- boost::shared_ptr<PatchagePort> output;
-
- if (port1->is_input() && !port2->is_input()) {
- input = boost::dynamic_pointer_cast<PatchagePort>(port1);
- output = boost::dynamic_pointer_cast<PatchagePort>(port2);
- } else if (port2->is_input() && !port1->is_input()) {
- input = boost::dynamic_pointer_cast<PatchagePort>(port2);
- output = boost::dynamic_pointer_cast<PatchagePort>(port1);
+ boost::shared_ptr<PatchagePort> input
+ = boost::dynamic_pointer_cast<PatchagePort>(port1);
+ boost::shared_ptr<PatchagePort> output
+ = boost::dynamic_pointer_cast<PatchagePort>(port2);
+
+ if (!input || !output)
+ return;
+
+ if (input->is_output() && output->is_input()) {
+ // Damn, guessed wrong
+ boost::shared_ptr<PatchagePort> swap = input;
+ input = output;
+ output = swap;
}
- if (!input || !output) {
+ if (!input || !output || input->is_output() || output->is_input()) {
status_message("ERROR: Attempt to disconnect mismatched/unknown ports");
return;
}
diff --git a/src/PatchageFlowCanvas.h b/src/PatchageFlowCanvas.h
index f2a126f..19873c5 100644
--- a/src/PatchageFlowCanvas.h
+++ b/src/PatchageFlowCanvas.h
@@ -24,8 +24,6 @@
#include <flowcanvas/FlowCanvas.h>
#include "StateManager.h"
-
-
class Patchage;
class PatchageModule;
class PatchagePort;
@@ -42,8 +40,8 @@ public:
#ifdef HAVE_ALSA
boost::shared_ptr<PatchagePort> find_port(const snd_seq_addr_t* alsa_addr);
#endif
- void connect(boost::shared_ptr<Port> port1, boost::shared_ptr<Port> port2);
- void disconnect(boost::shared_ptr<Port> port1, boost::shared_ptr<Port> port2);
+ void connect(boost::shared_ptr<Connectable> port1, boost::shared_ptr<Connectable> port2);
+ void disconnect(boost::shared_ptr<Connectable> port1, boost::shared_ptr<Connectable> port2);
void status_message(const string& msg);