X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Faudio_mapping_view.h;h=fd8a16d5c667d3645c1b02e4aaabe1d12104d136;hb=78471c43c0c55fb9b25b4beb03dd861439da4f40;hp=76e20ad9a2aef424783bdc7c9e5d7f15c770638d;hpb=2de990b0155fcb5c3dac821ef8c2659e903d2f6e;p=dcpomatic.git diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h index 76e20ad9a..fd8a16d5c 100644 --- a/src/wx/audio_mapping_view.h +++ b/src/wx/audio_mapping_view.h @@ -1,41 +1,115 @@ -/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */ - /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington + + This file is part of DCP-o-matic. - This program is free software; you can redistribute it and/or modify + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ +/** @file src/wx/audio_mapping_view.h + * @brief AudioMappingView class. + * + */ + #include #include -#include #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 *); + explicit AudioMappingView (wxWindow *); + + void set (AudioMapping); + void set_input_channels (std::vector const & names); + void set_output_channels (std::vector const & names); + + struct Group + { + Group (int f, int t, std::string n) + : from (f) + , to (t) + , name (n) + {} - void set_mapping (AudioMapping); + /** First channel index (from 0) */ + int from; + /** Last channel index (from 0) */ + int to; + /** Name of this group */ + std::string name; + }; + + void set_input_groups (std::vector const & groups); boost::signals2::signal Changed; private: - void left_click (wxGridEvent &); + void map_values_changed (); + void setup_sizes (); + void paint (); + void paint_static (wxDC& dc, wxGraphicsContext* gc); + void paint_column_labels (wxDC& dc, wxGraphicsContext* gc); + void paint_column_lines (wxGraphicsContext* gc); + void paint_row_labels (wxDC& dc, wxGraphicsContext* gc); + void paint_row_lines (wxGraphicsContext* gc); + void paint_indicators (wxDC& dc); + void size (wxSizeEvent &); + void scroll (); + void left_down (wxMouseEvent &); + void right_down (wxMouseEvent &); + void motion (wxMouseEvent &); + void mouse_wheel (wxMouseEvent &); + boost::optional > mouse_event_to_channels (wxMouseEvent& ev) const; + boost::optional mouse_event_to_input_group_name (wxMouseEvent& ev) const; + void setup (); + wxString safe_input_channel_name (int n) const; + wxString safe_output_channel_name (int n) const; + + void off (); + void full (); + void minus6dB (); + void edit (); + + AudioMapping _map; + + wxMenu* _menu; + wxPanel* _body; + wxScrollBar* _vertical_scroll; + wxScrollBar* _horizontal_scroll; + int _menu_input; + int _menu_output; + + std::vector _input_channels; + std::vector _output_channels; + std::vector _input_groups; - wxGrid* _grid; - wxSizer* _sizer; + boost::optional > _last_tooltip_channels; };