diff options
author | David Robillard <d@drobilla.net> | 2006-08-11 07:15:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-08-11 07:15:30 +0000 |
commit | cbdf686e391bc2e7b93f37a5d3fa9197cb178078 (patch) | |
tree | 455b52d56b02b90444cd1c39f3ddcb703ca30e10 /gtk2_ardour/io_selector.cc | |
parent | 30c08ba655330232767554c48bda1975bfb5628c (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.cc | 44 |
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(); } } |