Restore configuration of click IO connections to session options dialog.

git-svn-id: svn://localhost/ardour2/branches/3.0@5107 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2009-05-20 20:54:07 +00:00
parent 74d319b7ff
commit d1ee2a06ca
2 changed files with 135 additions and 1 deletions

View File

@ -55,7 +55,7 @@ IOSelector::IOSelector (ARDOUR::Session& session, boost::shared_ptr<ARDOUR::IO>
_ours = 1;
}
_port_group = boost::shared_ptr<PortGroup> (new PortGroup (""));
_port_group.reset (new PortGroup (""));
_ports[_ours].add_group (_port_group);
setup_all_ports ();

View File

@ -1,10 +1,142 @@
#include "ardour/session.h"
#include "ardour/io.h"
#include "ardour/auditioner.h"
#include "ardour/audioengine.h"
#include "ardour/port.h"
#include "session_option_editor.h"
#include "port_matrix.h"
#include "i18n.h"
using namespace std;
using namespace sigc;
using namespace ARDOUR;
class OptionsPortMatrix : public PortMatrix
{
public:
OptionsPortMatrix (ARDOUR::Session& session)
: PortMatrix (session, DataType::AUDIO)
{
_port_group.reset (new PortGroup (""));
_ports[OURS].add_group (_port_group);
setup_all_ports ();
}
void setup_ports (int dim)
{
cerr << _session.the_auditioner()->outputs().num_ports() << "\n";
if (dim == OURS) {
_port_group->clear ();
_port_group->add_bundle (_session.click_io()->bundle_for_outputs());
_port_group->add_bundle (_session.the_auditioner()->bundle_for_outputs());
} else {
_ports[OTHER].gather (_session, true);
}
}
void set_state (ARDOUR::BundleChannel c[2], bool s)
{
Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel);
Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel);
if (c[OURS].bundle == _session.click_io()->bundle_for_outputs()) {
for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) {
Port* f = _session.engine().get_port_by_name (*i);
assert (f);
if (s) {
_session.click_io()->connect_output (f, *j, 0);
} else {
_session.click_io()->disconnect_output (f, *j, 0);
}
}
}
}
}
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const
{
Bundle::PortList const & our_ports = c[OURS].bundle->channel_ports (c[OURS].channel);
Bundle::PortList const & other_ports = c[OTHER].bundle->channel_ports (c[OTHER].channel);
if (c[OURS].bundle == _session.click_io()->bundle_for_outputs()) {
for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) {
Port* f = _session.engine().get_port_by_name (*i);
assert (f);
if (f->connected_to (*j)) {
return PortMatrixNode::ASSOCIATED;
} else {
return PortMatrixNode::NOT_ASSOCIATED;
}
}
}
} else {
/* XXX */
}
return PortMatrixNode::NOT_ASSOCIATED;
}
bool list_is_global (int dim) const
{
return (dim == OTHER);
}
void add_channel (boost::shared_ptr<ARDOUR::Bundle>) {}
bool can_remove_channels (int) const {
return false;
}
void remove_channel (ARDOUR::BundleChannel) {}
bool can_rename_channels (int) const {
return false;
}
private:
/* see PortMatrix: signal flow from 0 to 1 (out to in) */
enum {
OURS = 0,
OTHER = 1,
};
boost::shared_ptr<PortGroup> _port_group;
};
class ConnectionOptions : public OptionEditorBox
{
public:
ConnectionOptions (ARDOUR::Session* s)
: _port_matrix (*s)
{
_box->pack_start (_port_matrix);
}
void parameter_changed (string const & p)
{
}
void set_state_from_config ()
{
}
private:
OptionsPortMatrix _port_matrix;
};
SessionOptionEditor::SessionOptionEditor (Session* s)
: OptionEditor (&(s->config), _("Session Preferences")),
_session_config (&(s->config))
@ -197,4 +329,6 @@ SessionOptionEditor::SessionOptionEditor (Session* s)
mem_fun (*_session_config, &SessionConfiguration::get_bwf_organization_code),
mem_fun (*_session_config, &SessionConfiguration::set_bwf_organization_code)
));
add_option (_("Connections"), new ConnectionOptions (s));
}