summaryrefslogtreecommitdiffstats
path: root/src/AlsaDriver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/AlsaDriver.cpp')
-rw-r--r--src/AlsaDriver.cpp80
1 files changed, 48 insertions, 32 deletions
diff --git a/src/AlsaDriver.cpp b/src/AlsaDriver.cpp
index abd6b82..a22ecc8 100644
--- a/src/AlsaDriver.cpp
+++ b/src/AlsaDriver.cpp
@@ -82,6 +82,20 @@ AlsaDriver::detach()
}
}
+static bool
+is_alsa_port(const PatchagePort* port)
+{
+ return port->type() == ALSA_MIDI;
+}
+
+/** Destroy all JACK (canvas) ports.
+ */
+void
+AlsaDriver::destroy_all()
+{
+ _app->canvas()->remove_ports(is_alsa_port);
+}
+
/** Refresh all Alsa Midi ports and connections.
*/
void
@@ -96,38 +110,38 @@ AlsaDriver::refresh()
refresh_connections();
}
-boost::shared_ptr<PatchagePort>
+PatchagePort*
AlsaDriver::create_port_view(Patchage* patchage,
const PortID& id)
{
- boost::shared_ptr<PatchageModule> parent;
- boost::shared_ptr<PatchagePort> port;
+ PatchageModule* parent;
+ PatchagePort* port;
create_port_view_internal(patchage, id.id.alsa_addr, parent, port);
return port;
}
-boost::shared_ptr<PatchageModule>
+PatchageModule*
AlsaDriver::find_or_create_module(
Patchage* patchage,
const std::string& client_name,
ModuleType type)
{
- boost::shared_ptr<PatchageModule> m = _app->canvas()->find_module(client_name, type);
+ PatchageModule* m = _app->canvas()->find_module(client_name, type);
if (!m) {
- m = boost::shared_ptr<PatchageModule>(new PatchageModule(patchage, client_name, type));
+ m = new PatchageModule(patchage, client_name, type);
m->load_location();
_app->canvas()->add_module(client_name, m);
- _app->enqueue_resize(m.get());
+ _app->enqueue_resize(m);
}
return m;
}
void
AlsaDriver::create_port_view_internal(
- Patchage* patchage,
- snd_seq_addr_t addr,
- boost::shared_ptr<PatchageModule>& m,
- boost::shared_ptr<PatchagePort>& port)
+ Patchage* patchage,
+ snd_seq_addr_t addr,
+ PatchageModule*& m,
+ PatchagePort*& port)
{
if (ignore(addr))
return;
@@ -184,7 +198,7 @@ AlsaDriver::create_port_view_internal(
if (!split) {
m = find_or_create_module(_app, client_name, InputOutput);
if (!m->get_port(port_name)) {
- port = create_port(m, port_name, is_input, addr);
+ port = create_port(*m, port_name, is_input, addr);
port->show();
m->add_port(port);
}
@@ -193,7 +207,7 @@ AlsaDriver::create_port_view_internal(
ModuleType type = ((is_input) ? Input : Output);
m = find_or_create_module(_app, client_name, type);
if (!m->get_port(port_name)) {
- port = create_port(m, port_name, is_input, addr);
+ port = create_port(*m, port_name, is_input, addr);
port->show();
m->add_port(port);
}
@@ -202,7 +216,7 @@ AlsaDriver::create_port_view_internal(
type = ((!is_input) ? Input : Output);
m = find_or_create_module(_app, client_name, type);
if (!m->get_port(port_name)) {
- port = create_port(m, port_name, !is_input, addr);
+ port = create_port(*m, port_name, !is_input, addr);
port->show();
m->add_port(port);
}
@@ -210,15 +224,15 @@ AlsaDriver::create_port_view_internal(
}
}
-boost::shared_ptr<PatchagePort>
-AlsaDriver::create_port(boost::shared_ptr<PatchageModule> parent,
+PatchagePort*
+AlsaDriver::create_port(PatchageModule& parent,
const string& name, bool is_input, snd_seq_addr_t addr)
{
- boost::shared_ptr<PatchagePort> ret(
- new PatchagePort(parent, ALSA_MIDI, name, is_input,
- _app->state_manager()->get_port_color(ALSA_MIDI)));
+ PatchagePort* ret = new PatchagePort(
+ parent, ALSA_MIDI, name, is_input,
+ _app->state_manager()->get_port_color(ALSA_MIDI));
- dynamic_cast<PatchageCanvas*>(parent->canvas())->index_port(
+ dynamic_cast<PatchageCanvas*>(parent.canvas())->index_port(
PortID(addr, is_input), ret);
ret->alsa_addr(addr);
@@ -281,10 +295,10 @@ AlsaDriver::refresh_ports()
snd_seq_port_info_t* pinfo;
snd_seq_port_info_alloca(&pinfo);
- boost::shared_ptr<PatchageModule> parent;
- boost::shared_ptr<PatchagePort> port;
+ PatchageModule* parent;
+ PatchagePort* port;
- std::set< boost::shared_ptr<PatchageModule> > to_resize;
+ std::set<PatchageModule*> to_resize;
while (snd_seq_query_next_client (_seq, cinfo) >= 0) {
snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo));
@@ -294,7 +308,7 @@ AlsaDriver::refresh_ports()
if (!ignore(addr)) {
create_port_view_internal(_app, addr, parent, port);
if (parent)
- _app->enqueue_resize(parent.get());
+ _app->enqueue_resize(parent);
}
}
}
@@ -308,15 +322,15 @@ AlsaDriver::refresh_connections()
assert(is_attached());
assert(_seq);
- boost::shared_ptr<PatchageModule> m;
- boost::shared_ptr<PatchagePort> p;
+ PatchageModule* m = NULL;
+ PatchagePort* p = NULL;
for (FlowCanvas::Canvas::Items::iterator i = _app->canvas()->items().begin();
i != _app->canvas()->items().end(); ++i) {
- m = boost::dynamic_pointer_cast<PatchageModule>(*i);
+ m = dynamic_cast<PatchageModule*>(*i);
if (m) {
for (FlowCanvas::Module::Ports::const_iterator j = m->ports().begin(); j != m->ports().end(); ++j) {
- p = boost::dynamic_pointer_cast<PatchagePort>(*j);
+ p = dynamic_cast<PatchagePort*>(*j);
if (p->type() == ALSA_MIDI)
add_connections(p);
}
@@ -327,13 +341,13 @@ AlsaDriver::refresh_connections()
/** Add all connections for the given port.
*/
void
-AlsaDriver::add_connections(boost::shared_ptr<PatchagePort> port)
+AlsaDriver::add_connections(PatchagePort* port)
{
assert(is_attached());
assert(_seq);
const snd_seq_addr_t* addr = port->alsa_addr();
- boost::shared_ptr<PatchagePort> connected_port;
+ PatchagePort* connected_port;
// Fix a problem with duplex->duplex connections (would show up twice)
// No sense doing them all twice anyway..
@@ -366,7 +380,8 @@ AlsaDriver::add_connections(boost::shared_ptr<PatchagePort> port)
* \return Whether connection succeeded.
*/
bool
-AlsaDriver::connect(boost::shared_ptr<PatchagePort> src_port, boost::shared_ptr<PatchagePort> dst_port)
+AlsaDriver::connect(PatchagePort* src_port,
+ PatchagePort* dst_port)
{
const snd_seq_addr_t* src = src_port->alsa_addr();
const snd_seq_addr_t* dst = dst_port->alsa_addr();
@@ -410,7 +425,8 @@ AlsaDriver::connect(boost::shared_ptr<PatchagePort> src_port, boost::shared_ptr<
* \return Whether disconnection succeeded.
*/
bool
-AlsaDriver::disconnect(boost::shared_ptr<PatchagePort> src_port, boost::shared_ptr<PatchagePort> dst_port)
+AlsaDriver::disconnect(PatchagePort* src_port,
+ PatchagePort* dst_port)
{
const snd_seq_addr_t* src = src_port->alsa_addr();
const snd_seq_addr_t* dst = dst_port->alsa_addr();