summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-09-30 22:13:16 +0200
committerCarl Hetherington <cth@carlh.net>2025-10-10 21:15:37 +0200
commit15ebff851d348eea2a5ae91c6495a787b8d012b2 (patch)
tree6de54e8c693754e18d88c08b58d1611861b85437
parent474388e8a89f1bb01df04d1e806f726e66e60cb2 (diff)
Cleanup: use signals for seeking on audio graph clicks.
-rw-r--r--src/wx/audio_dialog.cc6
-rw-r--r--src/wx/audio_dialog.h5
-rw-r--r--src/wx/audio_panel.cc4
-rw-r--r--src/wx/audio_plot.cc6
-rw-r--r--src/wx/audio_plot.h7
-rw-r--r--src/wx/dcp_panel.cc4
6 files changed, 19 insertions, 13 deletions
diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc
index 795a39a44..cee8993e0 100644
--- a/src/wx/audio_dialog.cc
+++ b/src/wx/audio_dialog.cc
@@ -58,7 +58,7 @@ using namespace boost::placeholders;
* @param film Film we are using.
* @param content Content to analyse, or 0 to analyse all of the film's audio.
*/
-AudioDialog::AudioDialog (wxWindow* parent, shared_ptr<Film> film, FilmViewer& viewer, shared_ptr<Content> content)
+AudioDialog::AudioDialog(wxWindow* parent, shared_ptr<Film> film, shared_ptr<Content> content)
: wxDialog (
parent,
wxID_ANY,
@@ -89,7 +89,7 @@ AudioDialog::AudioDialog (wxWindow* parent, shared_ptr<Film> film, FilmViewer& v
_cursor = new StaticText(this, char_to_wx("Cursor: none"));
left->Add (_cursor, 0, wxTOP, DCPOMATIC_SIZER_Y_GAP);
- _plot = new AudioPlot (this, viewer);
+ _plot = new AudioPlot(this);
left->Add (_plot, 1, wxTOP | wxEXPAND, 12);
_sample_peak = new StaticText(this, {});
left->Add (_sample_peak, 0, wxTOP, DCPOMATIC_SIZER_Y_GAP);
@@ -163,6 +163,8 @@ AudioDialog::AudioDialog (wxWindow* parent, shared_ptr<Film> film, FilmViewer& v
overall_sizer->Layout ();
overall_sizer->SetSizeHints (this);
+ _plot->Click.connect(boost::ref(Seek));
+
_film_connection = film->Change.connect (boost::bind(&AudioDialog::film_change, this, _1, _2));
_film_content_connection = film->ContentChange.connect(boost::bind(&AudioDialog::content_change, this, _1, _2));
DCPOMATIC_ASSERT (film->directory());
diff --git a/src/wx/audio_dialog.h b/src/wx/audio_dialog.h
index 4b55ae344..2085a7220 100644
--- a/src/wx/audio_dialog.h
+++ b/src/wx/audio_dialog.h
@@ -36,7 +36,6 @@ LIBDCP_ENABLE_WARNINGS
class AudioPlot;
class CheckBox;
-class FilmViewer;
class Film;
@@ -48,12 +47,14 @@ class Film;
class AudioDialog : public wxDialog
{
public:
- AudioDialog(wxWindow* parent, std::shared_ptr<Film> film, FilmViewer& viewer, std::shared_ptr<Content> content = std::shared_ptr<Content>());
+ AudioDialog(wxWindow* parent, std::shared_ptr<Film> film, std::shared_ptr<Content> content = std::shared_ptr<Content>());
bool Show (bool show = true) override;
void set_cursor (boost::optional<dcpomatic::DCPTime> time, boost::optional<float> db);
+ boost::signals2::signal<void (dcpomatic::DCPTime)> Seek;
+
private:
void film_change(ChangeType, FilmProperty);
void content_change (ChangeType, int);
diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc
index e04e65691..5d5478b1a 100644
--- a/src/wx/audio_panel.cc
+++ b/src/wx/audio_panel.cc
@@ -25,6 +25,7 @@
#include "check_box.h"
#include "content_panel.h"
#include "dcpomatic_button.h"
+#include "film_viewer.h"
#include "gain_calculator_dialog.h"
#include "static_text.h"
#include "wx_util.h"
@@ -414,7 +415,8 @@ AudioPanel::show_clicked ()
return;
}
- _audio_dialog.reset(this, _parent->film(), _parent->film_viewer(), ac.front());
+ _audio_dialog.reset(this, _parent->film(), ac.front());
+ _audio_dialog->Seek.connect(boost::bind(&FilmViewer::seek, &_parent->film_viewer(), _1, true));
_audio_dialog->Show ();
}
diff --git a/src/wx/audio_plot.cc b/src/wx/audio_plot.cc
index 3982f9705..37fb78145 100644
--- a/src/wx/audio_plot.cc
+++ b/src/wx/audio_plot.cc
@@ -20,7 +20,6 @@
#include "audio_plot.h"
-#include "film_viewer.h"
#include "wx_util.h"
#include "lib/audio_decoder.h"
#include "lib/audio_analysis.h"
@@ -54,9 +53,8 @@ int const AudioPlot::_cursor_size = 8;
int const AudioPlot::max_smoothing = 128;
-AudioPlot::AudioPlot(wxWindow* parent, FilmViewer& viewer)
+AudioPlot::AudioPlot(wxWindow* parent)
: wxPanel (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)
- , _viewer (viewer)
, _smoothing (max_smoothing / 2)
, _gain_correction (0)
{
@@ -449,7 +447,7 @@ void
AudioPlot::left_down ()
{
if (_cursor) {
- _viewer.seek(_cursor->time, true);
+ Click(_cursor->time);
}
}
diff --git a/src/wx/audio_plot.h b/src/wx/audio_plot.h
index f3d80b5e5..aec7edfba 100644
--- a/src/wx/audio_plot.h
+++ b/src/wx/audio_plot.h
@@ -28,13 +28,14 @@ LIBDCP_ENABLE_WARNINGS
#include <boost/signals2.hpp>
#include <vector>
+
struct Metrics;
-class FilmViewer;
+
class AudioPlot : public wxPanel
{
public:
- explicit AudioPlot (wxWindow *, FilmViewer& viewer);
+ explicit AudioPlot(wxWindow* parent);
void set_analysis (std::shared_ptr<AudioAnalysis>);
void set_channel_visible (int c, bool v);
@@ -46,6 +47,7 @@ public:
wxColour colour (int n) const;
boost::signals2::signal<void (boost::optional<dcpomatic::DCPTime>, boost::optional<float>)> Cursor;
+ boost::signals2::signal<void (dcpomatic::DCPTime)> Click;
static const int max_smoothing;
@@ -78,7 +80,6 @@ private:
void mouse_moved (wxMouseEvent& ev);
void mouse_leave (wxMouseEvent& ev);
- FilmViewer& _viewer;
std::shared_ptr<AudioAnalysis> _analysis;
bool _channel_visible[MAX_DCP_AUDIO_CHANNELS];
bool _type_visible[AudioPoint::COUNT];
diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc
index 80caa4c2c..755ecfbaa 100644
--- a/src/wx/dcp_panel.cc
+++ b/src/wx/dcp_panel.cc
@@ -27,6 +27,7 @@
#include "dcpomatic_button.h"
#include "dcpomatic_choice.h"
#include "dcpomatic_spin_ctrl.h"
+#include "film_viewer.h"
#include "focus_manager.h"
#include "interop_metadata_dialog.h"
#include "language_tag_dialog.h"
@@ -1040,7 +1041,8 @@ DCPPanel::show_audio_clicked()
return;
}
- _audio_dialog.reset(_panel, _film, _viewer);
+ _audio_dialog.reset(_panel, _film);
+ _audio_dialog->Seek.connect(boost::bind(&FilmViewer::seek, &_viewer, _1, true));
_audio_dialog->Show();
}