X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Faudio_mapping_view.h;h=aad152a622172be69fb25d9f82adc9e542ad468e;hb=8fe1cc5b89408c8aaba79e04cc4d0c271931b099;hp=4210d755493de61d39e54a8f7756e8a2cb5102e0;hpb=fa61fc99549264810e17fcd35abffe9e8ddab5b2;p=dcpomatic.git diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h index 4210d7554..aad152a62 100644 --- a/src/wx/audio_mapping_view.h +++ b/src/wx/audio_mapping_view.h @@ -1,31 +1,38 @@ /* - Copyright (C) 2013-2015 Carl Hetherington + Copyright (C) 2013-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + 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" +#include "lib/types.h" +#include "lib/warnings.h" +DCPOMATIC_DISABLE_WARNINGS +#include +DCPOMATIC_ENABLE_WARNINGS +#include + /** @class AudioMappingView * @brief This class displays the mapping of one set of audio channels to another, @@ -41,38 +48,77 @@ * hidden from view. Thus input channels are never hidden but output channels * might be. */ - class AudioMappingView : public wxPanel { public: - AudioMappingView (wxWindow *); + AudioMappingView (wxWindow *, wxString left_label, wxString from, wxString top_label, wxString to); void set (AudioMapping); - void set_input_channels (std::vector const & names); - void set_output_channels (std::vector const & names); + void set_input_channels (std::vector const& channels); + void set_output_channels (std::vector const& channels); + + struct Group + { + Group (int f, int t, std::string n) + : from (f) + , to (t) + , name (n) + {} + + /** 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 right_click (wxGridEvent &); - void mouse_moved (wxMouseEvent &); - void update_cells (); void map_values_changed (); + void paint (); + void paint_static (wxDC& dc); + void paint_column_labels (wxDC& dc); + void paint_column_lines (wxDC& dc); + void paint_row_labels (wxDC& dc); + void paint_row_lines (wxDC& dc); + 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 input_channel_name_with_group (NamedChannel const& n) const; - void off (); - void full (); - void minus6dB (); + void set_gain_from_menu (double linear); void edit (); - wxGrid* _grid; - wxSizer* _sizer; AudioMapping _map; - wxMenu* _menu; - int _menu_row; - int _menu_column; + wxMenu* _menu = nullptr; + wxPanel* _body = nullptr; + wxScrollBar* _vertical_scroll = nullptr; + wxScrollBar* _horizontal_scroll = nullptr; + int _menu_input; + int _menu_output; + + wxString _left_label; + wxString _from; + wxString _top_label; + wxString _to; + + std::vector _input_channels; + std::vector _output_channels; + std::vector _input_groups; + std::vector _column_widths; + int _column_widths_total = 0; - int _last_tooltip_row; - int _last_tooltip_column; + boost::optional> _last_tooltip_channels; };