Support subs and tidy up a few things.
[dcpomatic.git] / src / wx / audio_mapping_view.h
index a1d33ccd61b1fe4b8eefe7a0377a9139d70bc8f6..aad152a622172be69fb25d9f82adc9e542ad468e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 /** @file  src/wx/audio_mapping_view.h
  *  @brief AudioMappingView class.
  *
  */
 
-#include <boost/signals2.hpp>
-#include <wx/wx.h>
-#include <wx/grid.h>
+
 #include "lib/audio_mapping.h"
+#include "lib/types.h"
+#include "lib/warnings.h"
+DCPOMATIC_DISABLE_WARNINGS
+#include <wx/wx.h>
+DCPOMATIC_ENABLE_WARNINGS
+#include <boost/signals2.hpp>
+
 
 /** @class AudioMappingView
  *  @brief This class displays the mapping of one set of audio channels to another,
  *  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<std::string> const & names);
-       void set_output_channels (std::vector<std::string> const & names);
+       void set_input_channels (std::vector<NamedChannel> const& channels);
+       void set_output_channels (std::vector<NamedChannel> const& channels);
 
        struct Group
        {
@@ -73,34 +78,47 @@ public:
        boost::signals2::signal<void (AudioMapping)> Changed;
 
 private:
-       void left_click (wxGridEvent &);
-       void right_click (wxGridEvent &);
-       void mouse_moved_grid (wxMouseEvent &);
-       void update_cells ();
        void map_values_changed ();
-       void sized (wxSizeEvent &);
-       void paint_left_labels ();
-       void paint_top_labels ();
-       void mouse_moved_left_labels (wxMouseEvent &);
-       void setup_sizes ();
-
-       void off ();
-       void full ();
-       void minus6dB ();
+       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<std::pair<NamedChannel, NamedChannel>> mouse_event_to_channels (wxMouseEvent& ev) const;
+       boost::optional<std::string> mouse_event_to_input_group_name (wxMouseEvent& ev) const;
+       void setup ();
+       wxString input_channel_name_with_group (NamedChannel const& n) const;
+
+       void set_gain_from_menu (double linear);
        void edit ();
 
-       wxGrid* _grid;
-       wxPanel* _left_labels;
-       wxPanel* _top_labels;
        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<NamedChannel> _input_channels;
+       std::vector<NamedChannel> _output_channels;
        std::vector<Group> _input_groups;
-       std::vector<std::pair<int, int> > _input_group_positions;
+       std::vector<int> _column_widths;
+       int _column_widths_total = 0;
 
-       int _last_tooltip_row;
-       int _last_tooltip_column;
+       boost::optional<std::pair<NamedChannel, NamedChannel>> _last_tooltip_channels;
 };