/*
- 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/named_channel.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
+#include <wx/wx.h>
+LIBDCP_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:
- explicit 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
{
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 grid_scrolled (wxScrollWinEvent& ev);
-
- 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;
- wxScrolledCanvas* _left_labels;
- wxScrolledCanvas* _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;
};