shared_ptr bugfixes.

Updated Ingen to work with new FlowCanvas.
Updated Patchage to work with new(er) FlowCanvas.


git-svn-id: http://svn.drobilla.net/lad/patchage@152 a436a847-0d15-0410-975c-d299462d15a1
This commit is contained in:
dave 2006-10-03 22:24:22 +00:00
parent 985e516974
commit e8c497b5d6
7 changed files with 34 additions and 39 deletions

View File

@ -33,7 +33,6 @@ using namespace LibFlowCanvas;
AlsaDriver::AlsaDriver(Patchage* app)
: m_app(app),
m_canvas(app->canvas()),
m_seq(NULL)
{
}
@ -180,7 +179,7 @@ AlsaDriver::refresh_ports()
// Application input/output ports go on the same module
if (!split) {
m = m_canvas->find_module(client_name, InputOutput);
m = m_app->canvas()->find_module(client_name, InputOutput);
if (!m) {
m = boost::shared_ptr<PatchageModule>(new PatchageModule(m_app, client_name, InputOutput));
m->load_location();
@ -207,10 +206,10 @@ AlsaDriver::refresh_ports()
else type = Output;
// See if an InputOutput module exists (maybe with Jack ports on it)
m = m_canvas->find_module(client_name, InputOutput);
m = m_app->canvas()->find_module(client_name, InputOutput);
if (!m)
m = m_canvas->find_module(client_name, type);
m = m_app->canvas()->find_module(client_name, type);
if (!m) {
m = boost::shared_ptr<PatchageModule>(
@ -225,10 +224,10 @@ AlsaDriver::refresh_ports()
type = Input;
// See if an InputOutput module exists (maybe with Jack ports on it)
m = m_canvas->find_module(client_name, InputOutput);
m = m_app->canvas()->find_module(client_name, InputOutput);
if (!m)
m = m_canvas->find_module(client_name, type);
m = m_app->canvas()->find_module(client_name, type);
if (!m) {
m = boost::shared_ptr<PatchageModule>(
@ -245,10 +244,10 @@ AlsaDriver::refresh_ports()
type = Output;
// See if an InputOutput module exists (maybe with Jack ports on it)
m = m_canvas->find_module(client_name, InputOutput);
m = m_app->canvas()->find_module(client_name, InputOutput);
if (!m)
m = m_canvas->find_module(client_name, type);
m = m_app->canvas()->find_module(client_name, type);
if (!m) {
m = boost::shared_ptr<PatchageModule>(
@ -279,8 +278,8 @@ AlsaDriver::refresh_connections()
boost::shared_ptr<PatchageModule> m;
boost::shared_ptr<PatchagePort> p;
for (ModuleMap::iterator i = m_canvas->modules().begin();
i != m_canvas->modules().end(); ++i) {
for (ModuleMap::iterator i = m_app->canvas()->modules().begin();
i != m_app->canvas()->modules().end(); ++i) {
m = boost::dynamic_pointer_cast<PatchageModule>((*i).second);
if (m) {
for (PortVector::const_iterator j = m->ports().begin(); j != m->ports().end(); ++j) {
@ -317,14 +316,14 @@ AlsaDriver::add_connections(boost::shared_ptr<PatchagePort> port)
while(!snd_seq_query_port_subscribers(m_seq, subsinfo)) {
const snd_seq_addr_t* connected_addr = snd_seq_query_subscribe_get_addr(subsinfo);
connected_port = m_canvas->find_port(connected_addr);
connected_port = m_app->canvas()->find_port(connected_addr);
if (connected_port) {
boost::shared_ptr<Connection> existing = m_canvas->get_connection(port, connected_port);
boost::shared_ptr<Connection> existing = m_app->canvas()->get_connection(port, connected_port);
if (existing) {
existing->set_flagged(false);
} else {
m_canvas->add_connection(port, connected_port);
m_app->canvas()->add_connection(port, connected_port);
}
}

View File

@ -51,8 +51,6 @@ public:
bool disconnect(boost::shared_ptr<PatchagePort> src_port,
boost::shared_ptr<PatchagePort> dst_port);
PatchageFlowCanvas* canvas() { return m_canvas; }
private:
void refresh_ports();
void refresh_connections();
@ -66,8 +64,7 @@ private:
boost::shared_ptr<PatchagePort> create_port(boost::shared_ptr<PatchageModule> parent,
const string& name, bool is_input, snd_seq_addr_t addr);
Patchage* m_app;
PatchageFlowCanvas* m_canvas;
Patchage* m_app;
snd_seq_t* m_seq;

View File

@ -32,7 +32,6 @@ using namespace LibFlowCanvas;
JackDriver::JackDriver(Patchage* app)
: m_app(app),
m_canvas(app->canvas()),
m_client(NULL)
{
}
@ -91,7 +90,7 @@ JackDriver::detach()
void
JackDriver::destroy_all_ports()
{
ModuleMap modules = m_canvas->modules(); // copy
ModuleMap modules = m_app->canvas()->modules(); // copy
for (ModuleMap::iterator m = modules.begin(); m != modules.end(); ++m) {
PortVector ports = m->second->ports(); // copy
for (PortVector::iterator p = ports.begin(); p != ports.end(); ++p) {
@ -178,7 +177,7 @@ JackDriver::refresh()
}
}
boost::shared_ptr<PatchageModule> m = m_canvas->find_module(client1_name, type);
boost::shared_ptr<PatchageModule> m = m_app->canvas()->find_module(client1_name, type);
if (!m) {
m = boost::shared_ptr<PatchageModule>(new PatchageModule(m_app, client1_name, type));
@ -212,7 +211,7 @@ JackDriver::refresh()
const string module_name = (*i).substr(0, i->find(":"));
const string port_name = (*i).substr(i->find(":")+1);
for (ModuleMap::iterator m = m_canvas->modules().begin(); m != m_canvas->modules().end(); ++m) {
for (ModuleMap::iterator m = m_app->canvas()->modules().begin(); m != m_app->canvas()->modules().end(); ++m) {
if (m->second->name() == module_name)
m->second->remove_port(port_name);
}
@ -235,15 +234,15 @@ 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 = m_canvas->get_port(client1_name, port1_name);
boost::shared_ptr<Port> port2 = m_canvas->get_port(client2_name, port2_name);
boost::shared_ptr<Port> port1 = m_app->canvas()->get_port(client1_name, port1_name);
boost::shared_ptr<Port> port2 = m_app->canvas()->get_port(client2_name, port2_name);
if (port1 && port2) {
boost::shared_ptr<Connection> existing = m_canvas->get_connection(port1, port2);
boost::shared_ptr<Connection> existing = m_app->canvas()->get_connection(port1, port2);
if (existing) {
existing->set_flagged(false);
} else {
m_canvas->add_connection(port1, port2);
m_app->canvas()->add_connection(port1, port2);
}
}
}

View File

@ -56,7 +56,6 @@ public:
private:
Patchage* m_app;
PatchageFlowCanvas* m_canvas;
jack_client_t* m_client;

View File

@ -37,7 +37,6 @@ Patchage::Patchage(int argc, char** argv)
#ifdef HAVE_ALSA
m_alsa_driver(NULL),
#endif
m_canvas(NULL),
m_jack_driver(NULL),
m_state_manager(NULL),
m_refresh(false)
@ -46,7 +45,7 @@ Patchage::Patchage(int argc, char** argv)
m_settings_filename += "/.patchagerc";
m_state_manager = new StateManager();
m_canvas = new PatchageFlowCanvas(this, 1600*2, 1200*2);
m_canvas = boost::shared_ptr<PatchageFlowCanvas>(new PatchageFlowCanvas(this, 1600*2, 1200*2));
m_jack_driver = new JackDriver(this);
#ifdef HAVE_ALSA
m_alsa_driver = new AlsaDriver(this);
@ -159,7 +158,6 @@ Patchage::~Patchage()
delete m_lash_driver;
#endif
delete m_state_manager;
delete m_canvas;
}

View File

@ -19,6 +19,7 @@
#include "config.h"
#include <string>
#include <boost/shared_ptr.hpp>
#include <libgnomecanvasmm.h>
using namespace std;
@ -36,15 +37,16 @@ public:
Patchage(int argc, char** argv);
~Patchage();
PatchageFlowCanvas* canvas() { return m_canvas; }
StateManager* state_manager() { return m_state_manager; }
Gtk::Window* window() { return m_main_window; }
JackDriver* jack_driver() { return m_jack_driver; }
boost::shared_ptr<PatchageFlowCanvas> canvas() { return m_canvas; }
StateManager* state_manager() { return m_state_manager; }
Gtk::Window* window() { return m_main_window; }
JackDriver* jack_driver() { return m_jack_driver; }
#ifdef HAVE_ALSA
AlsaDriver* alsa_driver() { return m_alsa_driver; }
AlsaDriver* alsa_driver() { return m_alsa_driver; }
#endif
#ifdef HAVE_LASH
LashDriver* lash_driver() { return m_lash_driver; }
LashDriver* lash_driver() { return m_lash_driver; }
#endif
void attach();
@ -85,7 +87,8 @@ protected:
void menu_alsa_disconnect();
#endif
PatchageFlowCanvas* m_canvas;
boost::shared_ptr<PatchageFlowCanvas> m_canvas;
JackDriver* m_jack_driver;
StateManager* m_state_manager;

View File

@ -35,7 +35,7 @@ class PatchageModule : public Module
{
public:
PatchageModule(Patchage* app, const string& title, ModuleType type, double x=0, double y=0)
: Module(*app->canvas(), title, x, y),
: Module(app->canvas(), title, x, y),
m_app(app),
m_type(type)
{
@ -79,8 +79,8 @@ public:
if (loc.x != -1)
move_to(loc.x, loc.y);
else
move_to((m_canvas.width()/2) - 100 + rand() % 400,
(m_canvas.height()/2) - 100 + rand() % 400);
move_to((m_canvas.lock()->width()/2) - 100 + rand() % 400,
(m_canvas.lock()->height()/2) - 100 + rand() % 400);
}
void split() {