summaryrefslogtreecommitdiff
path: root/gtk2_ardour/io_selector.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-11 07:15:30 +0000
committerDavid Robillard <d@drobilla.net>2006-08-11 07:15:30 +0000
commitcbdf686e391bc2e7b93f37a5d3fa9197cb178078 (patch)
tree455b52d56b02b90444cd1c39f3ddcb703ca30e10 /gtk2_ardour/io_selector.cc
parent30c08ba655330232767554c48bda1975bfb5628c (diff)
- Replaced integer port counts (and input/output maximum/minimum) with ChanCount, which can count multiple types and does the reasonable thing for all comparison operators
- Removed the fader/meters from MIDI mixer strips, at least until they do something - Made the Add Route dialog refuse to create MIDI busses, Spifftacular warning dialog and all Changes a bit more widespread than I was hoping, but worked out really well - lots of code will continue to work fine even when multi-typed (eg instrument) IOs come around, just ignoring the types it doesn't care about. Most all changes related to counts are little search/replace deals, logic doesn't need to change. Hopefully SVN can handle (automatic) merging with the other SoC projects if the buffer change goes as well. Next step: do for buffers what the last two commits did for ports. git-svn-id: svn://localhost/ardour2/branches/midi@787 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/io_selector.cc')
-rw-r--r--gtk2_ardour/io_selector.cc44
1 files changed, 28 insertions, 16 deletions
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc
index f754435112..f9082c3ef0 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/io_selector.cc
@@ -183,15 +183,18 @@ IOSelector::IOSelector (Session& sess, boost::shared_ptr<IO> ior, bool input)
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() < 0 || io->input_maximum() > (int) io->n_inputs()) {
+ 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() < 0 || io->output_maximum() > (int) io->n_outputs()) {
+ 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);
@@ -202,14 +205,14 @@ IOSelector::IOSelector (Session& sess, boost::shared_ptr<IO> ior, bool input)
port_button_box.pack_start (remove_port_button, false, false);
if (for_input) {
- if (io->input_minimum() < 0 || io->input_minimum() < (int) io->n_inputs()) {
+ 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() < 0 || io->output_minimum() < (int) io->n_outputs()) {
+ 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);
@@ -373,10 +376,13 @@ IOSelector::display_ports ()
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(); ) {
@@ -443,7 +449,7 @@ IOSelector::display_ports ()
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 {
@@ -454,7 +460,7 @@ IOSelector::display_ports ()
} else {
- if (io->output_maximum() == 1) {
+ if (io->output_maximum().get(t) == 1) {
selected_port = port;
selected_port_tview = tview;
} else {
@@ -545,6 +551,9 @@ IOSelector::add_port ()
{
/* 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 {
@@ -556,11 +565,11 @@ IOSelector::add_port ()
msg.run ();
}
- if (io->input_maximum() >= 0 && io->input_maximum() <= (int) io->n_inputs()) {
+ if (io->input_maximum().get(t) >= 0 && io->input_maximum().get(t) <= (size_t) io->n_inputs().get(t)) {
add_port_button.set_sensitive (false);
}
- if (io->input_minimum() < (int) io->n_inputs()) {
+ if (io->input_minimum().get(t) < (size_t) io->n_inputs().get(t)) {
remove_port_button.set_sensitive (true);
}
@@ -575,7 +584,7 @@ IOSelector::add_port ()
msg.run ();
}
- if (io->output_maximum() >= 0 && io->output_maximum() <= (int) io->n_outputs()) {
+ if (io->output_maximum().get(t) >= 0 && io->output_maximum().get(t) <= (size_t) io->n_outputs().get(t)) {
add_port_button.set_sensitive (false);
}
}
@@ -586,17 +595,20 @@ IOSelector::remove_port ()
{
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);
}
- if (io->input_minimum() == (int) io->n_inputs()) {
+ if (io->input_minimum().get(t) == (size_t) io->n_inputs().get(t)) {
remove_port_button.set_sensitive (false);
}
} else {
- if ((nports = io->n_outputs()) > 0) {
+ if ((nports = io->n_outputs().get(t)) > 0) {
io->remove_output_port (io->output(nports-1), this);
}
}
@@ -749,11 +761,11 @@ IOSelector::redisplay ()
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();
}
}