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 | |
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')
-rw-r--r-- | gtk2_ardour/add_route_dialog.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/add_route_dialog.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/audio_time_axis.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/export_dialog.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/io_selector.cc | 44 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/panner_ui.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/redirect_box.cc | 4 |
11 files changed, 74 insertions, 51 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index aa61cb2525..4a2c3d2a2a 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -159,11 +159,16 @@ AddRouteDialog::track () return track_button.get_active (); } -bool -AddRouteDialog::midi () +ARDOUR::DataType +AddRouteDialog::type () { + // FIXME: ew + const string str = channel_combo.get_active_text(); - return (str == _("MIDI")); + if (str == _("MIDI")) + return ARDOUR::DataType::MIDI; + else + return ARDOUR::DataType::AUDIO; } string diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index ae4679fd5d..d0c1ec661a 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -13,6 +13,7 @@ #include <gtkmm/comboboxtext.h> #include <ardour/types.h> +#include <ardour/data_type.h> class AddRouteDialog : public Gtk::Dialog { @@ -21,7 +22,7 @@ class AddRouteDialog : public Gtk::Dialog ~AddRouteDialog (); bool track (); - bool midi (); + ARDOUR::DataType type(); std::string name_template (); int channels (); int count (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 203d64c3c3..337e10ea4b 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1414,7 +1414,7 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine, bool in) { if (in) { - if (io.n_inputs() == 0) { + if (io.n_inputs().get_total() == 0) { buf = _("none"); return; } @@ -1433,7 +1433,7 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine, } else { - if (io.n_outputs() == 0) { + if (io.n_outputs().get_total() == 0) { buf = _("none"); return; } @@ -2103,7 +2103,7 @@ ARDOUR_UI::add_route () Session::AutoConnectOption oac = session->get_output_auto_connect(); if (oac & Session::AutoConnectMaster) { - output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); + output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan); } else { output_chan = input_chan; } @@ -2111,10 +2111,15 @@ ARDOUR_UI::add_route () /* XXX do something with name template */ while (count) { - if (track && add_route_dialog->midi()) { - session_add_midi_track(); - } else if (add_route_dialog->midi()) { - session_add_midi_bus(); + if (add_route_dialog->type() == ARDOUR::DataType::MIDI) { + if (track) { + session_add_midi_track(); + } else { + MessageDialog msg (*editor, + _("Sorry, MIDI Busses are not supported at this time.")); + msg.run (); + //session_add_midi_bus(); + } } else if (track) { session_add_audio_track (input_chan, output_chan, add_route_dialog->mode()); } else { diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 9ae94d1fe0..ffa95ae23d 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -406,7 +406,7 @@ AudioTimeAxisView::update_pans () /* we don't draw lines for "greater than stereo" panning. */ - if (_route->n_outputs() > 2) { + if (_route->n_outputs().get(DataType::AUDIO) > 2) { return; } diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 7524f9605c..754706ad9f 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -293,7 +293,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool input_chan = finfo.channels; if (session->get_output_auto_connect() & Session::AutoConnectMaster) { - output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); + output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan); } else { output_chan = input_chan; } diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index b5a4757090..bf7873914d 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -490,7 +490,7 @@ ExportDialog::set_state() } TreeModel::Children rows = master_selector.get_model()->children(); - for (uint32_t r = 0; r < session->master_out()->n_outputs(); ++r) { + for (uint32_t r = 0; r < session->master_out()->n_outputs().get(DataType::AUDIO); ++r) { if (nchns == 2) { if (r % 2) { rows[r][exp_cols.right] = true; @@ -1092,9 +1092,9 @@ ExportDialog::fill_lists () continue; } - for (uint32_t i=0; i < route->n_outputs(); ++i) { + for (uint32_t i=0; i < route->n_outputs().get(DataType::AUDIO); ++i) { string name; - if (route->n_outputs() == 1) { + if (route->n_outputs().get(DataType::AUDIO) == 1) { name = route->name(); } else { name = string_compose("%1: out-%2", route->name(), i+1); diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 5fa8c462bc..ea7663da8a 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -141,13 +141,16 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s) gain_automation_state_button.set_size_request(15, 15); gain_automation_style_button.set_size_request(15, 15); + fader_vbox = manage (new Gtk::VBox()); fader_vbox->set_spacing (0); fader_vbox->pack_start (*gain_slider, false, false, 0); hbox.set_spacing (0); - hbox.pack_start (*fader_vbox, false, false, 2); + if (_io->default_type() == ARDOUR::DataType::AUDIO) + hbox.pack_start (*fader_vbox, false, false, 2); + set_width(Narrow); Route* r; @@ -382,7 +385,7 @@ GainMeter::hide_all_meters () void GainMeter::setup_meters () { - uint32_t nmeters = _io->n_outputs(); + uint32_t nmeters = _io->n_outputs().get(DataType::AUDIO); guint16 width; hide_all_meters (); @@ -394,16 +397,16 @@ GainMeter::setup_meters () switch (r->meter_point()) { case MeterPreFader: case MeterInput: - nmeters = r->n_inputs(); + nmeters = r->n_inputs().get(DataType::AUDIO); break; case MeterPostFader: - nmeters = r->n_outputs(); + nmeters = r->n_outputs().get(DataType::AUDIO); break; } } else { - nmeters = _io->n_outputs(); + nmeters = _io->n_outputs().get(DataType::AUDIO); } 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(); } } diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index a866a9780a..14c5b920be 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -614,7 +614,7 @@ MixerStrip::add_connection_to_input_menu (ARDOUR::Connection* c) MenuList& citems = input_menu.items(); - if (c->nports() == _route->n_inputs()) { + if (c->nports() == _route->n_inputs().get_total()) { citems.push_back (CheckMenuElem (c->name(), bind (mem_fun(*this, &MixerStrip::connection_input_chosen), c))); @@ -637,7 +637,7 @@ MixerStrip::add_connection_to_output_menu (ARDOUR::Connection* c) return; } - if (c->nports() == _route->n_outputs()) { + if (c->nports() == _route->n_outputs().get_total()) { MenuList& citems = output_menu.items(); citems.push_back (CheckMenuElem (c->name(), bind (mem_fun(*this, &MixerStrip::connection_output_chosen), c))); @@ -1129,8 +1129,6 @@ MixerStrip::route_active_changed () { RouteUI::route_active_changed (); - // FIXME: MIDI/Audio bus distinction - if (is_midi_track()) { if (_route->active()) { set_name ("MidiTrackStripBase"); @@ -1139,7 +1137,6 @@ MixerStrip::route_active_changed () set_name ("MidiTrackStripBaseInactive"); gpm.set_meter_strip_name ("MidiTrackStripBaseInactive"); } - gpm.set_fader_name ("MidiTrackFader"); } else if (is_audio_track()) { if (_route->active()) { set_name ("AudioTrackStripBase"); diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc index ccce2ec9f1..250f1e146e 100644 --- a/gtk2_ardour/panner_ui.cc +++ b/gtk2_ardour/panner_ui.cc @@ -276,7 +276,7 @@ PannerUI::update_pan_state () void PannerUI::setup_pan () { - uint32_t nouts = _io->n_outputs (); + uint32_t nouts = _io->n_outputs ().get(ARDOUR::DataType::AUDIO); if (nouts == 0 || nouts == 1) { @@ -375,7 +375,7 @@ PannerUI::setup_pan () } update_pan_sensitive (); - panner->reset (_io->n_inputs()); + panner->reset (_io->n_inputs().get(ARDOUR::DataType::AUDIO)); panner->set_size_request (w, 61); /* and finally, add it to the panner frame */ @@ -462,7 +462,7 @@ PannerUI::effective_pan_display () return; } - switch (_io->n_outputs()) { + switch (_io->n_outputs().get(ARDOUR::DataType::AUDIO)) { case 0: case 1: /* relax */ @@ -473,7 +473,7 @@ PannerUI::effective_pan_display () break; default: - //panner->move_puck (pan_value (v, right), 0.5); + //panner->move_puck (pan_value (v, right), 0.5); break; } } @@ -499,7 +499,7 @@ PannerUI::pan_changed (void *src) panning_link_button.set_sensitive (true); } - uint32_t nouts = _io->n_outputs(); + uint32_t nouts = _io->n_outputs().get(ARDOUR::DataType::AUDIO); switch (nouts) { case 0: @@ -556,7 +556,7 @@ PannerUI::pan_value_changed (uint32_t which) { ENSURE_GUI_THREAD (bind (mem_fun(*this, &PannerUI::pan_value_changed), which)); - if (_io->n_outputs() > 1 && which < _io->panner().size()) { + if (_io->n_outputs().get(ARDOUR::DataType::AUDIO) > 1 && which < _io->panner().size()) { float xpos; float val = pan_adjustments[which]->get_value (); @@ -626,7 +626,7 @@ PannerUI::update_pan_sensitive () { bool sensitive = !(_io->panner().automation_state() & Play); - switch (_io->n_outputs()) { + switch (_io->n_outputs().get(ARDOUR::DataType::AUDIO)) { case 0: case 1: break; diff --git a/gtk2_ardour/redirect_box.cc b/gtk2_ardour/redirect_box.cc index ddb9e85ca2..2c645d8ed1 100644 --- a/gtk2_ardour/redirect_box.cc +++ b/gtk2_ardour/redirect_box.cc @@ -417,8 +417,8 @@ RedirectBox::wierd_plugin_dialog (Plugin& p, uint32_t streams, boost::shared_ptr p.name(), p.get_info()->n_inputs, p.get_info()->n_outputs, - io->n_inputs(), - io->n_outputs(), + io->n_inputs().get_total(), + io->n_outputs().get_total(), streams)); } |