summaryrefslogtreecommitdiff
path: root/gtk2_ardour
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
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')
-rw-r--r--gtk2_ardour/add_route_dialog.cc11
-rw-r--r--gtk2_ardour/add_route_dialog.h3
-rw-r--r--gtk2_ardour/ardour_ui.cc19
-rw-r--r--gtk2_ardour/audio_time_axis.cc2
-rw-r--r--gtk2_ardour/editor_audio_import.cc2
-rw-r--r--gtk2_ardour/export_dialog.cc6
-rw-r--r--gtk2_ardour/gain_meter.cc13
-rw-r--r--gtk2_ardour/io_selector.cc44
-rw-r--r--gtk2_ardour/mixer_strip.cc7
-rw-r--r--gtk2_ardour/panner_ui.cc14
-rw-r--r--gtk2_ardour/redirect_box.cc4
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));
}