summaryrefslogtreecommitdiff
path: root/src/wx
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-06-03 13:17:37 +0100
committerCarl Hetherington <cth@carlh.net>2015-06-03 13:17:37 +0100
commitfa61fc99549264810e17fcd35abffe9e8ddab5b2 (patch)
tree855ce952ed8b416bbab33cd6debbd0f2b7379597 /src/wx
parent3b67c79bf4534e72a7eceaa6e566e7b7c949e4f7 (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.cc138
-rw-r--r--src/wx/audio_mapping_view.h27
-rw-r--r--src/wx/audio_panel.cc21
-rw-r--r--src/wx/dcp_panel.cc4
-rw-r--r--src/wx/timeline.cc2
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)));
}