#include <ardour/route.h>
#include <ardour/audioengine.h>
#include <ardour/port.h>
-#include <ardour/insert.h>
+#include <ardour/port_insert.h>
#include <ardour/session.h>
#include <ardour/audio_diskstream.h>
set_title (title);
set_position (WIN_POS_MOUSE);
+ ok_button.show();
+ cancel_button.show();
+ rescan_button.show();
+ button_box.show();
+ get_vbox()->show();
+
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this)));
}
port_button_box.set_border_width (5);
port_button_box.pack_start (add_port_button, false, false);
+
+ // The IO selector only works for single typed IOs
+ const ARDOUR::DataType t = io->default_type();
+
+ if (for_input) {
+ if (io->input_maximum().get(t) < 0 || io->input_maximum().get(t) > (size_t) io->n_inputs().get(t)) {
+ add_port_button.set_sensitive (true);
+ } else {
+ add_port_button.set_sensitive (false);
+ }
+
+ } else {
+ if (io->output_maximum().get(t) < 0 || io->output_maximum().get(t) > (size_t) io->n_outputs().get(t)) {
+ add_port_button.set_sensitive (true);
+ } else {
+ add_port_button.set_sensitive (false);
+ }
+
+ }
+
port_button_box.pack_start (remove_port_button, false, false);
+
+ if (for_input) {
+ if (io->input_minimum().get(t) < 0 || io->input_minimum().get(t) < (size_t) io->n_inputs().get(t)) {
+ remove_port_button.set_sensitive (true);
+ } else {
+ remove_port_button.set_sensitive (false);
+ }
+
+ } else {
+ if (io->output_minimum().get(t) < 0 || io->output_minimum().get(t) < (size_t) io->n_outputs().get(t)) {
+ remove_port_button.set_sensitive (true);
+ } else {
+ remove_port_button.set_sensitive (false);
+ }
+ }
+
port_button_box.pack_start (clear_connections_button, false, false);
port_and_button_box.set_border_width (5);
io->output_changed.connect (mem_fun(*this, &IOSelector::ports_changed));
}
- io->name_changed.connect (mem_fun(*this, &IOSelector::name_changed));
+ io->NameChanged.connect (mem_fun(*this, &IOSelector::name_changed));
+
+ main_box.show();
+ port_and_selector_box.show();
+ notebook.show();
+ selector_frame.show();
+ selector_box.show();
+ selector_button_box.show();
+ port_box.show();
+ port_button_box.show();
+ port_and_button_box.show();
+ port_frame.show();
+ add_port_button.show();
+ remove_port_button.show();
+ clear_connections_button.show();
+ port_display_scroller.show();
+
+ show();
+
}
IOSelector::~IOSelector ()
void
IOSelector::set_button_sensitivity ()
{
+ DataType t = io->default_type();
+
if (for_input) {
- if (io->input_maximum() < 0 || io->input_maximum() > (int) io->n_inputs()) {
+ if (io->input_maximum().get(t) < 0 || io->input_maximum().get(t) > io->n_inputs().get(t)) {
add_port_button.set_sensitive (true);
} else {
add_port_button.set_sensitive (false);
} else {
- if (io->output_maximum() < 0 || io->output_maximum() > (int) io->n_outputs()) {
+ if (io->output_maximum().get(t) < 0 || io->output_maximum().get(t) > io->n_outputs().get(t)) {
add_port_button.set_sensitive (true);
} else {
add_port_button.set_sensitive (false);
}
if (for_input) {
- if (io->n_inputs() && (io->input_minimum() < 0 || io->input_minimum() < (int) io->n_inputs())) {
+ if (io->n_inputs().get(t) && (io->input_minimum().get(t) < 0 || io->input_minimum().get(t) < io->n_inputs().get(t))) {
remove_port_button.set_sensitive (true);
} else {
remove_port_button.set_sensitive (false);
}
} else {
- if (io->n_outputs() && (io->output_minimum() < 0 || io->output_minimum() < (int) io->n_outputs())) {
+ if (io->n_outputs().get(t) && (io->output_minimum().get(t) < 0 || io->output_minimum().get(t) < io->n_outputs().get(t))) {
remove_port_button.set_sensitive (true);
} else {
remove_port_button.set_sensitive (false);
void
-IOSelector::name_changed (void* src)
+IOSelector::name_changed ()
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &IOSelector::name_changed), src));
+ ENSURE_GUI_THREAD(mem_fun(*this, &IOSelector::name_changed));
display_ports ();
}
/* get relevant current JACK ports */
- ports = session.engine().get_ports ("", JACK_DEFAULT_AUDIO_TYPE, for_input ? JackPortIsOutput : JackPortIsInput);
+ ports = session.engine().get_ports ("", io->default_type().to_jack_type(), for_input ? JackPortIsOutput : JackPortIsInput);
if (ports == 0) {
return;
Port *port;
uint32_t limit;
+ // The IO selector only works for single typed IOs
+ const ARDOUR::DataType t = io->default_type();
+
if (for_input) {
- limit = io->n_inputs();
+ limit = io->n_inputs().get(t);
} else {
- limit = io->n_outputs();
+ limit = io->n_outputs().get(t);
}
for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
if (for_input) {
- if (io->input_maximum() == 1) {
+ if (io->input_maximum().get(io->default_type()) == 1) {
selected_port = port;
selected_port_tview = tview;
} else {
} else {
- if (io->output_maximum() == 1) {
+ if (io->output_maximum().get(t) == 1) {
selected_port = port;
selected_port_tview = tview;
} else {
if (for_input) {
if ((status = io->connect_input (selected_port, other_port_name, this)) == 0) {
Port *p = session.engine().get_port_by_name (other_port_name);
- p->enable_metering();
+ if (p) {
+ p->enable_metering();
+ }
}
} else {
status = io->connect_output (selected_port, other_port_name, this);
{
/* add a new port, then hide the button if we're up to the maximum allowed */
+ // The IO selector only works for single typed IOs
+ const ARDOUR::DataType t = io->default_type();
+
if (for_input) {
try {
{
uint32_t nports;
+ // The IO selector only works for single typed IOs
+ const ARDOUR::DataType t = io->default_type();
+
// always remove last port
if (for_input) {
- if ((nports = io->n_inputs()) > 0) {
+ if ((nports = io->n_inputs().get(t)) > 0) {
io->remove_input_port (io->input(nports-1), this);
}
-
} else {
- if ((nports = io->n_outputs()) > 0) {
+ if ((nports = io->n_outputs().get(t)) > 0) {
io->remove_output_port (io->output(nports-1), this);
}
}
if (for_input) {
Port *p = session.engine().get_port_by_name (connected_port_name);
- p->disable_metering();
+ if (p) {
+ p->disable_metering();
+ }
io->disconnect_input (port, connected_port_name, this);
} else {
io->disconnect_output (port, connected_port_name, this);
display_ports ();
if (for_input) {
- if (io->input_maximum() != 0) {
+ if (io->input_maximum().get(io->default_type()) != 0) {
rescan ();
}
} else {
- if (io->output_maximum() != 0) {
+ if (io->output_maximum().get(io->default_type()) != 0) {
rescan();
}
}
}
PortInsertUI::PortInsertUI (Session& sess, boost::shared_ptr<PortInsert> pi)
- : input_selector (sess, pi, true),
- output_selector (sess, pi, false)
+ : input_selector (sess, pi->io(), true),
+ output_selector (sess, pi->io(), false)
{
hbox.pack_start (output_selector, true, true);
hbox.pack_start (input_selector, true, true);
rescan_button.signal_clicked().connect (mem_fun(*this, &PortInsertWindow::rescan));
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast<Window *> (this)));
- pi->GoingAway.connect (mem_fun(*this, &PortInsertWindow::plugin_going_away));
+
+ going_away_connection = pi->GoingAway.connect (mem_fun(*this, &PortInsertWindow::plugin_going_away));
}
void
PortInsertWindow::plugin_going_away ()
{
ENSURE_GUI_THREAD(mem_fun(*this, &PortInsertWindow::plugin_going_away));
-
+ going_away_connection.disconnect ();
delete_when_idle (this);
}