diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-03 13:17:37 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-03 13:17:37 +0100 |
| commit | fa61fc99549264810e17fcd35abffe9e8ddab5b2 (patch) | |
| tree | 855ce952ed8b416bbab33cd6debbd0f2b7379597 /src/wx | |
| parent | 3b67c79bf4534e72a7eceaa6e566e7b7c949e4f7 (diff) | |
Various work on audio mapping.
Fix everything up so that the audio mapping view in
the audio panel reflects the processor (or lack of).
Diffstat (limited to 'src/wx')
| -rw-r--r-- | src/wx/audio_mapping_view.cc | 138 | ||||
| -rw-r--r-- | src/wx/audio_mapping_view.h | 27 | ||||
| -rw-r--r-- | src/wx/audio_panel.cc | 21 | ||||
| -rw-r--r-- | src/wx/dcp_panel.cc | 4 | ||||
| -rw-r--r-- | src/wx/timeline.cc | 2 |
5 files changed, 74 insertions, 118 deletions
diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc index c61ce7f06..8f55043be 100644 --- a/src/wx/audio_mapping_view.cc +++ b/src/wx/audio_mapping_view.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,6 +37,7 @@ using std::cout; using std::list; using std::string; using std::max; +using std::vector; using boost::shared_ptr; using boost::lexical_cast; @@ -125,8 +126,7 @@ AudioMappingView::AudioMappingView (wxWindow* parent) _grid->EnableEditing (false); _grid->SetCellHighlightPenWidth (0); _grid->SetDefaultRenderer (new NoSelectionStringRenderer); - - set_column_labels (); + _grid->AutoSize (); _sizer = new wxBoxSizer (wxVERTICAL); _sizer->Add (_grid, 1, wxEXPAND | wxALL); @@ -148,8 +148,9 @@ AudioMappingView::AudioMappingView (wxWindow* parent) Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&AudioMappingView::edit, this), ID_edit); } +/** Called when any gain value has changed */ void -AudioMappingView::map_changed () +AudioMappingView::map_values_changed () { update_cells (); Changed (_map); @@ -163,7 +164,7 @@ AudioMappingView::left_click (wxGridEvent& ev) return; } - dcp::Channel d = static_cast<dcp::Channel> (ev.GetCol() - 1); + int const d = ev.GetCol() - 1; if (_map.get (ev.GetRow(), d) > 0) { _map.set (ev.GetRow(), d, 0); @@ -171,7 +172,7 @@ AudioMappingView::left_click (wxGridEvent& ev) _map.set (ev.GetRow(), d, 1); } - map_changed (); + map_values_changed (); } void @@ -189,33 +190,33 @@ AudioMappingView::right_click (wxGridEvent& ev) void AudioMappingView::off () { - _map.set (_menu_row, static_cast<dcp::Channel> (_menu_column - 1), 0); - map_changed (); + _map.set (_menu_row, _menu_column - 1, 0); + map_values_changed (); } void AudioMappingView::full () { - _map.set (_menu_row, static_cast<dcp::Channel> (_menu_column - 1), 1); - map_changed (); + _map.set (_menu_row, _menu_column - 1, 1); + map_values_changed (); } void AudioMappingView::minus6dB () { - _map.set (_menu_row, static_cast<dcp::Channel> (_menu_column - 1), pow (10, -6.0 / 20)); - map_changed (); + _map.set (_menu_row, _menu_column - 1, pow (10, -6.0 / 20)); + map_values_changed (); } void AudioMappingView::edit () { - dcp::Channel d = static_cast<dcp::Channel> (_menu_column - 1); + int const d = _menu_column - 1; AudioGainDialog* dialog = new AudioGainDialog (this, _menu_row, _menu_column - 1, _map.get (_menu_row, d)); if (dialog->ShowModal () == wxID_OK) { _map.set (_menu_row, d, dialog->value ()); - map_changed (); + map_values_changed (); } dialog->Destroy (); @@ -229,104 +230,51 @@ AudioMappingView::set (AudioMapping map) } void -AudioMappingView::update_cells () +AudioMappingView::set_input_channels (vector<string> const & names) { - if (_grid->GetNumberRows ()) { - _grid->DeleteRows (0, _grid->GetNumberRows ()); + for (int i = 0; i < _grid->GetNumberRows(); ++i) { + _grid->SetCellValue (i, 0, std_to_wx (names[i])); } - - _grid->InsertRows (0, _map.content_channels ()); - - for (int i = 0; i < _map.content_channels(); ++i) { - for (int j = 0; j < MAX_DCP_AUDIO_CHANNELS; ++j) { - _grid->SetCellRenderer (i, j + 1, new ValueRenderer); - } - } - - for (int i = 0; i < _map.content_channels(); ++i) { - _grid->SetCellValue (i, 0, wxString::Format (wxT("%d"), i + 1)); - - for (int j = 1; j < _grid->GetNumberCols(); ++j) { - _grid->SetCellValue (i, j, std_to_wx (raw_convert<string> (_map.get (i, static_cast<dcp::Channel> (j - 1))))); - } - } - - _grid->AutoSize (); } -/** @param c Number of DCP channels */ void -AudioMappingView::set_channels (int c) +AudioMappingView::set_output_channels (vector<string> const & names) { - c++; + int const o = names.size() + 1; + if (o < _grid->GetNumberCols ()) { + _grid->DeleteCols (o, _grid->GetNumberCols() - o); + } else if (o > _grid->GetNumberCols ()) { + _grid->InsertCols (_grid->GetNumberCols(), o - _grid->GetNumberCols()); + } + + _grid->SetColLabelValue (0, _("Content")); - if (c < _grid->GetNumberCols ()) { - _grid->DeleteCols (c, _grid->GetNumberCols() - c); - } else if (c > _grid->GetNumberCols ()) { - _grid->InsertCols (_grid->GetNumberCols(), c - _grid->GetNumberCols()); - set_column_labels (); + for (size_t i = 0; i < names.size(); ++i) { + _grid->SetColLabelValue (i + 1, std_to_wx (names[i])); } update_cells (); } void -AudioMappingView::set_column_labels () +AudioMappingView::update_cells () { - int const c = _grid->GetNumberCols (); - - _grid->SetColLabelValue (0, _("Content")); - -#if MAX_DCP_AUDIO_CHANNELS != 12 -#warning AudioMappingView::set_column_labels() is expecting the wrong MAX_DCP_AUDIO_CHANNELS -#endif - - if (c > 0) { - _grid->SetColLabelValue (1, _("L")); - } - - if (c > 1) { - _grid->SetColLabelValue (2, _("R")); - } - - if (c > 2) { - _grid->SetColLabelValue (3, _("C")); - } - - if (c > 3) { - _grid->SetColLabelValue (4, _("Lfe")); - } - - if (c > 4) { - _grid->SetColLabelValue (5, _("Ls")); - } - - if (c > 5) { - _grid->SetColLabelValue (6, _("Rs")); - } - - if (c > 6) { - _grid->SetColLabelValue (7, _("HI")); - } - - if (c > 7) { - _grid->SetColLabelValue (8, _("VI")); - } - - if (c > 8) { - _grid->SetColLabelValue (9, _("Lc")); + if (_grid->GetNumberRows ()) { + _grid->DeleteRows (0, _grid->GetNumberRows ()); } - if (c > 9) { - _grid->SetColLabelValue (10, _("Rc")); - } + _grid->InsertRows (0, _map.input_channels ()); - if (c > 10) { - _grid->SetColLabelValue (11, _("BsL")); + for (int i = 0; i < _map.input_channels(); ++i) { + for (int j = 0; j < _map.output_channels(); ++j) { + _grid->SetCellRenderer (i, j + 1, new ValueRenderer); + } } - - if (c > 11) { - _grid->SetColLabelValue (12, _("BsR")); + + for (int i = 0; i < _map.input_channels(); ++i) { + for (int j = 1; j < _grid->GetNumberCols(); ++j) { + _grid->SetCellValue (i, j, std_to_wx (raw_convert<string> (_map.get (i, j - 1)))); + } } _grid->AutoSize (); @@ -351,7 +299,7 @@ AudioMappingView::mouse_moved (wxMouseEvent& ev) if (row != _last_tooltip_row || column != _last_tooltip_column) { wxString s; - float const gain = _map.get (row, static_cast<dcp::Channel> (column - 1)); + float const gain = _map.get (row, column - 1); if (gain == 0) { s = wxString::Format (_("No audio will be passed from content channel %d to DCP channel %d."), row + 1, column); } else if (gain == 1) { diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h index 7ed699463..4210d7554 100644 --- a/src/wx/audio_mapping_view.h +++ b/src/wx/audio_mapping_view.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net> + Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,10 +18,8 @@ */ /** @file src/wx/audio_mapping_view.h - * @brief AudioMappingView class + * @brief AudioMappingView class. * - * This class displays the mapping of one set of audio channels to another, - * with gain values on each node of the map. */ #include <boost/signals2.hpp> @@ -29,13 +27,29 @@ #include <wx/grid.h> #include "lib/audio_mapping.h" +/** @class AudioMappingView + * @brief This class displays the mapping of one set of audio channels to another, + * with gain values on each node of the map. + * + * The AudioMapping passed to set() describes the actual channel mapping, + * and the names passed to set_input_channels() and set_output_channels() are + * used to label the rows and columns. + * + * The display's row count is equal to the AudioMapping's input channel count, + * and the column count is equal to the number of name passed to + * set_output_channels(). Any other output channels in the AudioMapping are + * hidden from view. Thus input channels are never hidden but output channels + * might be. + */ + class AudioMappingView : public wxPanel { public: AudioMappingView (wxWindow *); void set (AudioMapping); - void set_channels (int); + void set_input_channels (std::vector<std::string> const & names); + void set_output_channels (std::vector<std::string> const & names); boost::signals2::signal<void (AudioMapping)> Changed; @@ -43,9 +57,8 @@ private: void left_click (wxGridEvent &); void right_click (wxGridEvent &); void mouse_moved (wxMouseEvent &); - void set_column_labels (); void update_cells (); - void map_changed (); + void map_values_changed (); void off (); void full (); diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc index c34a67032..436e6db4c 100644 --- a/src/wx/audio_panel.cc +++ b/src/wx/audio_panel.cc @@ -110,8 +110,8 @@ AudioPanel::film_changed (Film::Property property) { switch (property) { case Film::AUDIO_CHANNELS: - _mapping->set_channels (_parent->film()->audio_channels ()); - _sizer->Layout (); + case Film::AUDIO_PROCESSOR: + _mapping->set_output_channels (_parent->film()->audio_output_names ()); break; case Film::VIDEO_FRAME_RATE: setup_description (); @@ -124,17 +124,14 @@ AudioPanel::film_changed (Film::Property property) void AudioPanel::film_content_changed (int property) { - AudioContentList ac = _parent->selected_audio (); - shared_ptr<AudioContent> acs; - shared_ptr<FFmpegContent> fcs; - if (ac.size() == 1) { - acs = ac.front (); - fcs = dynamic_pointer_cast<FFmpegContent> (acs); - } - if (property == AudioContentProperty::AUDIO_STREAMS) { - _mapping->set (acs ? acs->audio_mapping () : AudioMapping ()); - _sizer->Layout (); + AudioContentList ac = _parent->selected_audio (); + if (ac.size() == 1) { + _mapping->set (ac.front()->audio_mapping()); + _mapping->set_input_channels (ac.front()->audio_channel_names ()); + } else { + _mapping->set (AudioMapping ()); + } setup_description (); } } diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 7a5f0554f..022fe9a06 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -696,7 +696,5 @@ DCPPanel::audio_processor_changed () } string const s = string_client_data (_audio_processor->GetClientObject (_audio_processor->GetSelection ())); - if (s != "none") { - _film->set_audio_processor (AudioProcessor::from_id (s)); - } + _film->set_audio_processor (AudioProcessor::from_id (s)); } diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index c1713bb61..b0197ad3d 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -115,7 +115,7 @@ Timeline::recreate_views () } shared_ptr<AudioContent> ac = dynamic_pointer_cast<AudioContent> (*i); - if (ac && !ac->audio_mapping().mapped_dcp_channels().empty ()) { + if (ac && !ac->audio_mapping().mapped_output_channels().empty ()) { _views.push_back (shared_ptr<TimelineView> (new TimelineAudioContentView (*this, *i))); } |
