summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.h3
-rw-r--r--src/lib/encode_server_finder.cc4
-rw-r--r--src/lib/encode_server_finder.h3
-rw-r--r--src/lib/film.cc6
-rw-r--r--src/lib/film.h11
-rw-r--r--src/lib/hints.cc14
-rw-r--r--src/lib/hints.h10
-rw-r--r--src/lib/job.cc6
-rw-r--r--src/lib/job.h5
-rw-r--r--src/lib/job_manager.cc16
-rw-r--r--src/lib/job_manager.h7
-rw-r--r--src/lib/player.h3
-rw-r--r--src/lib/signal.h70
-rw-r--r--src/wx/audio_mapping_view.h4
-rw-r--r--src/wx/audio_plot.h4
-rw-r--r--src/wx/auto_crop_dialog.h4
-rw-r--r--src/wx/colour_conversion_editor.h4
-rw-r--r--src/wx/content_panel.h3
-rw-r--r--src/wx/dcp_timeline.cc3
-rw-r--r--src/wx/dir_picker_ctrl.h3
-rw-r--r--src/wx/dkdm_output_panel.h3
-rw-r--r--src/wx/editable_list.h2
-rw-r--r--src/wx/film_editor.h2
-rw-r--r--src/wx/film_viewer.cc4
-rw-r--r--src/wx/film_viewer.h12
-rw-r--r--src/wx/filter_dialog.h4
-rw-r--r--src/wx/focus_manager.h5
-rw-r--r--src/wx/kdm_cpl_panel.h3
-rw-r--r--src/wx/kdm_output_panel.h3
-rw-r--r--src/wx/kdm_timing_panel.h3
-rw-r--r--src/wx/language_subtag_panel.h5
-rw-r--r--src/wx/language_tag_widget.h4
-rw-r--r--src/wx/name_format_editor.h3
-rw-r--r--src/wx/password_entry.cc4
-rw-r--r--src/wx/password_entry.h4
-rw-r--r--src/wx/player_stress_tester.h4
-rw-r--r--src/wx/playlist_controls.h3
-rw-r--r--src/wx/rating_dialog.h4
-rw-r--r--src/wx/recipients_panel.h4
-rw-r--r--src/wx/region_subtag_widget.h4
-rw-r--r--src/wx/screens_panel.h4
-rw-r--r--src/wx/simple_video_view.cc2
-rw-r--r--src/wx/time_picker.h3
-rw-r--r--src/wx/timecode.h4
-rw-r--r--src/wx/video_view.cc2
-rw-r--r--src/wx/video_view.h5
-rw-r--r--src/wx/video_waveform_plot.h4
47 files changed, 189 insertions, 98 deletions
diff --git a/src/lib/config.h b/src/lib/config.h
index c90790ebc..0fbc3b7e9 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -31,6 +31,7 @@
#include "enum_indexed_vector.h"
#include "export_config.h"
#include "rough_duration.h"
+#include "signal.h"
#include "state.h"
#include "video_encoding.h"
#include <dcp/name_format.h>
@@ -1250,7 +1251,7 @@ public:
void changed(Property p = OTHER);
- boost::signals2::signal<void (Property)> Changed;
+ UISignal<void (Property)> Changed;
/** Emitted if read() failed on an existing Config file. There is nothing
a listener can do about it: this is just for information.
*/
diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc
index 1a0329dd7..1bee8eb52 100644
--- a/src/lib/encode_server_finder.cc
+++ b/src/lib/encode_server_finder.cc
@@ -169,7 +169,7 @@ try
}
if (removed) {
- emit (boost::bind(boost::ref(ServersListChanged)));
+ ServersListChanged.emit_ui(this);
}
boost::mutex::scoped_lock lm (_search_condition_mutex);
@@ -269,7 +269,7 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec)
}
if (changed) {
- emit (boost::bind(boost::ref (ServersListChanged)));
+ ServersListChanged.emit_ui(this);
}
start_accept ();
diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h
index 722786b77..d5db0234d 100644
--- a/src/lib/encode_server_finder.h
+++ b/src/lib/encode_server_finder.h
@@ -27,6 +27,7 @@
#include "config.h"
#include "encode_server_description.h"
#include "exception_store.h"
+#include "signal.h"
#include "signaller.h"
#include <boost/signals2.hpp>
#include <boost/thread/condition.hpp>
@@ -53,7 +54,7 @@ public:
std::list<EncodeServerDescription> servers () const;
/** Emitted whenever the list of servers changes */
- boost::signals2::signal<void ()> ServersListChanged;
+ UISignal<void ()> ServersListChanged;
private:
EncodeServerFinder ();
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 09378696e..d7cb05930 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -1310,7 +1310,7 @@ Film::signal_change(ChangeType type, FilmProperty p)
if (type == ChangeType::DONE) {
set_dirty(true);
- emit(boost::bind(boost::ref(Change), type, p));
+ Change.emit_ui(this, type, p);
if (p == FilmProperty::VIDEO_FRAME_RATE || p == FilmProperty::SEQUENCE) {
/* We want to call Playlist::maybe_sequence but this must happen after the
@@ -1577,7 +1577,7 @@ Film::playlist_content_change(ChangeType type, weak_ptr<Content> c, int p, bool
}
if (type == ChangeType::DONE) {
- emit(boost::bind(boost::ref(ContentChange), type, c, p, frequent));
+ ContentChange.emit_ui(this, type, c, p, frequent);
if (!frequent) {
check_settings_consistency();
}
@@ -2325,7 +2325,7 @@ Film::set_dirty(bool dirty)
auto const changed = dirty != _dirty;
_dirty = dirty;
if (changed) {
- emit(boost::bind(boost::ref(DirtyChange), _dirty));
+ DirtyChange.emit_ui(this, _dirty);
}
}
diff --git a/src/lib/film.h b/src/lib/film.h
index c14b0f4fa..9f066e628 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -38,6 +38,7 @@
#include "named_channel.h"
#include "remembered_asset.h"
#include "resolution.h"
+#include "signal.h"
#include "signaller.h"
#include "territory_type.h"
#include "transcode_job.h"
@@ -440,20 +441,20 @@ public:
boost::filesystem::path info_file(dcpomatic::DCPTimePeriod p) const;
/** Emitted when some property has of the Film is about to change or has changed */
- mutable boost::signals2::signal<void (ChangeType, FilmProperty)> Change;
+ mutable UISignal<void (ChangeType, FilmProperty)> Change;
/** Emitted when some property of our content has changed */
- mutable boost::signals2::signal<void (ChangeType, std::weak_ptr<Content>, int, bool)> ContentChange;
+ mutable UISignal<void (ChangeType, std::weak_ptr<Content>, int, bool)> ContentChange;
/** Emitted when the film's length might have changed; this is not like a normal
property as its value is derived from the playlist, so it has its own signal.
*/
- mutable boost::signals2::signal<void ()> LengthChange;
+ mutable UISignal<void ()> LengthChange;
- boost::signals2::signal<void (bool)> DirtyChange;
+ UISignal<void (bool)> DirtyChange;
/** Emitted when we have something important to tell the user */
- boost::signals2::signal<void (std::string)> Message;
+ UISignal<void (std::string)> Message;
/** Current version number of the state file */
static int const current_state_version;
diff --git a/src/lib/hints.cc b/src/lib/hints.cc
index 17aa16d47..5e9756b2b 100644
--- a/src/lib/hints.cc
+++ b/src/lib/hints.cc
@@ -411,11 +411,11 @@ Hints::scan_content(shared_ptr<const Film> film)
}
if (check_loudness_done && have_text) {
- emit(boost::bind(boost::ref(Progress), _("Examining subtitles and closed captions")));
+ Progress.emit_ui(this, _("Examining subtitles and closed captions"));
} else if (!check_loudness_done && !have_text) {
- emit(boost::bind(boost::ref(Progress), _("Examining audio")));
+ Progress.emit_ui(this, _("Examining audio"));
} else {
- emit(boost::bind(boost::ref(Progress), _("Examining audio, subtitles and closed captions")));
+ Progress.emit_ui(this, _("Examining audio, subtitles and closed captions"));
}
auto player = make_shared<Player>(film, Image::Alignment::COMPACT, false);
@@ -442,7 +442,7 @@ Hints::scan_content(shared_ptr<const Film> film)
if (_stop) {
return;
}
- emit(boost::bind(boost::ref(Pulse)));
+ Pulse.emit_ui(this);
last_pulse = now;
}
}
@@ -536,7 +536,7 @@ try
}
dcp::filesystem::remove_all(dcp_dir);
- emit(boost::bind(boost::ref(Finished)));
+ Finished.emit_ui(this);
}
catch (boost::thread_interrupted)
{
@@ -545,14 +545,14 @@ catch (boost::thread_interrupted)
catch (...)
{
store_current();
- emit(boost::bind(boost::ref(Finished)));
+ Finished.emit_ui(this);
}
void
Hints::hint(string h)
{
- emit(boost::bind(boost::ref(Hint), h));
+ Hint.emit_ui(this, h);
}
diff --git a/src/lib/hints.h b/src/lib/hints.h
index 49fd32ea9..56a5eb787 100644
--- a/src/lib/hints.h
+++ b/src/lib/hints.h
@@ -23,11 +23,11 @@
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
#include "player_text.h"
+#include "signal.h"
#include "signaller.h"
#include "text_type.h"
#include "weak_film.h"
#include <boost/atomic.hpp>
-#include <boost/signals2.hpp>
#include <string>
#include <vector>
@@ -44,10 +44,10 @@ public:
void start();
- boost::signals2::signal<void (std::string)> Hint;
- boost::signals2::signal<void (std::string)> Progress;
- boost::signals2::signal<void (void)> Pulse;
- boost::signals2::signal<void (void)> Finished;
+ UISignal<void (std::string)> Hint;
+ UISignal<void (std::string)> Progress;
+ UISignal<void ()> Pulse;
+ UISignal<void ()> Finished;
/* For tests only */
void join();
diff --git a/src/lib/job.cc b/src/lib/job.cc
index ee6ad4e70..9f28c2bc2 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -375,7 +375,7 @@ Job::set_state (State s)
if (finished) {
auto const result = state_to_result(s);
- emit(boost::bind(boost::ref(Finished), result));
+ Finished.emit_ui(this, result);
FinishedImmediate(result);
}
}
@@ -419,7 +419,7 @@ Job::check_for_interruption_or_pause ()
boost::mutex::scoped_lock lm (_state_mutex);
while (_state == PAUSED_BY_USER || _state == PAUSED_BY_PRIORITY) {
- emit (boost::bind (boost::ref (Progress)));
+ Progress.emit_ui(this);
_pause_changed.wait (lm);
}
}
@@ -475,7 +475,7 @@ Job::set_progress_common (optional<float> p)
_progress = p;
}
- emit (boost::bind (boost::ref (Progress)));
+ Progress.emit_ui(this);
}
diff --git a/src/lib/job.h b/src/lib/job.h
index 9b5fdfa6e..a80d66cda 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -28,6 +28,7 @@
#define DCPOMATIC_JOB_H
+#include "signal.h"
#include "signaller.h"
#include <boost/atomic.hpp>
#include <boost/signals2.hpp>
@@ -108,9 +109,9 @@ public:
void set_rate_limit_progress(bool rate_limit);
- boost::signals2::signal<void()> Progress;
+ UISignal<void()> Progress;
/** Emitted from the UI thread when the job is finished */
- boost::signals2::signal<void (Result)> Finished;
+ UISignal<void (Result)> Finished;
/** Emitted from the job thread when the job is finished */
boost::signals2::signal<void (Result)> FinishedImmediate;
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index c429dab6e..735b8e797 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -93,7 +93,7 @@ JobManager::add(shared_ptr<Job> j)
_schedule_condition.notify_all();
}
- emit(boost::bind(boost::ref(JobAdded), weak_ptr<Job>(j)));
+ JobAdded.emit_ui(this, weak_ptr<Job>(j));
return j;
}
@@ -110,7 +110,7 @@ JobManager::add_after(shared_ptr<Job> after, shared_ptr<Job> j)
_schedule_condition.notify_all();
}
- emit(boost::bind(boost::ref(JobAdded), weak_ptr<Job>(j)));
+ JobAdded.emit_ui(this, weak_ptr<Job>(j));
return j;
}
@@ -178,7 +178,7 @@ JobManager::scheduler()
i->resume();
}
auto last = _last_active_job.lock();
- emit(boost::bind(boost::ref(ActiveJobsChanged), last ? last->json_name() : std::string{}, i->json_name()));
+ ActiveJobsChanged.emit_ui(this, last ? last->json_name() : std::string{}, i->json_name());
_last_active_job = i;
have_running = true;
} else if (!have_running && i->running()) {
@@ -197,7 +197,7 @@ JobManager::job_finished()
{
boost::mutex::scoped_lock lm(_mutex);
auto job = _last_active_job.lock();
- emit(boost::bind(boost::ref(ActiveJobsChanged), job ? job->json_name() : string{}, optional<string>()));
+ ActiveJobsChanged.emit_ui(this, job ? job->json_name() : string{}, optional<string>());
_last_active_job = {};
}
@@ -257,7 +257,7 @@ JobManager::analyse_audio(
_schedule_condition.notify_all();
}
- emit(boost::bind(boost::ref(JobAdded), weak_ptr<Job>(job)));
+ JobAdded.emit_ui(this, weak_ptr<Job>(job));
}
@@ -292,7 +292,7 @@ JobManager::analyse_subtitles(
_schedule_condition.notify_all();
}
- emit(boost::bind(boost::ref(JobAdded), weak_ptr<Job>(job)));
+ JobAdded.emit_ui(this, weak_ptr<Job>(job));
}
@@ -309,7 +309,7 @@ JobManager::increase_priority (shared_ptr<Job> job)
}
_schedule_condition.notify_all();
- emit(boost::bind(boost::ref(JobsReordered)));
+ JobsReordered.emit_ui(this);
}
@@ -326,7 +326,7 @@ JobManager::decrease_priority(shared_ptr<Job> job)
}
_schedule_condition.notify_all();
- emit(boost::bind(boost::ref(JobsReordered)));
+ JobsReordered.emit_ui(this);
}
diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h
index 248639782..f7981df41 100644
--- a/src/lib/job_manager.h
+++ b/src/lib/job_manager.h
@@ -25,6 +25,7 @@
#include "job.h"
+#include "signal.h"
#include "signaller.h"
#include <boost/thread/mutex.hpp>
#include <boost/thread.hpp>
@@ -86,9 +87,9 @@ public:
void cancel_all_jobs();
- boost::signals2::signal<void (std::weak_ptr<Job>)> JobAdded;
- boost::signals2::signal<void ()> JobsReordered;
- boost::signals2::signal<void (boost::optional<std::string>, boost::optional<std::string>)> ActiveJobsChanged;
+ UISignal<void (std::weak_ptr<Job>)> JobAdded;
+ UISignal<void ()> JobsReordered;
+ UISignal<void (boost::optional<std::string>, boost::optional<std::string>)> ActiveJobsChanged;
static JobManager* instance();
static void drop();
diff --git a/src/lib/player.h b/src/lib/player.h
index 9076ac242..bd8fc1c52 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -39,6 +39,7 @@
#include "player_text.h"
#include "position_image.h"
#include "shuffler.h"
+#include "signal.h"
#include <boost/atomic.hpp>
#include <list>
@@ -119,7 +120,7 @@ public:
* Second parameter is the property.
* Third parameter is true if these signals are currently likely to be frequent.
*/
- boost::signals2::signal<void (ChangeType, int, bool)> Change;
+ UISignal<void (ChangeType, int, bool)> Change;
/** Emitted when a video frame is ready. These emissions happen in the correct order. */
boost::signals2::signal<void (std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime)> Video;
diff --git a/src/lib/signal.h b/src/lib/signal.h
new file mode 100644
index 000000000..03b440e79
--- /dev/null
+++ b/src/lib/signal.h
@@ -0,0 +1,70 @@
+/*
+ Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
+
+ 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.
+
+ 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_SIGNAL_H
+#define DCPOMATIC_SIGNAL_H
+
+
+#include "signaller.h"
+#include "util.h"
+#include <boost/signals2.hpp>
+#include <utility>
+
+
+/** Wrapper for a boost::signals2::signal that asserts that emissions are made from the
+ * UI thead, so anything connected to it will be guaranteed to be called from there.
+ */
+template <typename T>
+class UISignal
+{
+public:
+ template <typename... Args>
+ void emit_ui(Signaller* signaller, Args&&... args) const
+ {
+ signaller->emit(boost::bind(boost::ref(_wrapped), std::forward<Args>(args)...));
+ }
+
+ template <typename... Args>
+ void emit(Args&&... args) const
+ {
+ ensure_ui_thread();
+ _wrapped(std::forward<Args>(args)...);
+ }
+
+ template <typename... Args>
+ boost::signals2::connection connect(Args&&... args)
+ {
+ return _wrapped.connect(std::forward<Args>(args)...);
+ }
+
+ template <typename... Args>
+ void operator()(Args&&... args) const
+ {
+ emit(std::forward<Args>(args)...);
+ }
+
+private:
+ boost::signals2::signal<T> _wrapped;
+};
+
+
+#endif
+
diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h
index 7fb3c0463..c38b8b725 100644
--- a/src/wx/audio_mapping_view.h
+++ b/src/wx/audio_mapping_view.h
@@ -26,11 +26,11 @@
#include "lib/audio_mapping.h"
#include "lib/named_channel.h"
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
/** @class AudioMappingView
@@ -74,7 +74,7 @@ public:
void set_input_groups (std::vector<Group> const & groups);
- boost::signals2::signal<void (AudioMapping)> Changed;
+ UISignal<void (AudioMapping)> Changed;
private:
void map_values_changed ();
diff --git a/src/wx/audio_plot.h b/src/wx/audio_plot.h
index f3d80b5e5..35d96b686 100644
--- a/src/wx/audio_plot.h
+++ b/src/wx/audio_plot.h
@@ -21,11 +21,11 @@
#include "lib/audio_analysis.h"
#include "lib/constants.h"
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
#include <vector>
struct Metrics;
@@ -45,7 +45,7 @@ public:
wxColour colour (int n) const;
- boost::signals2::signal<void (boost::optional<dcpomatic::DCPTime>, boost::optional<float>)> Cursor;
+ UISignal<void (boost::optional<dcpomatic::DCPTime>, boost::optional<float>)> Cursor;
static const int max_smoothing;
diff --git a/src/wx/auto_crop_dialog.h b/src/wx/auto_crop_dialog.h
index 4ccd681ed..8e1eb6a0c 100644
--- a/src/wx/auto_crop_dialog.h
+++ b/src/wx/auto_crop_dialog.h
@@ -25,7 +25,7 @@
#include "table_dialog.h"
#include "lib/crop.h"
-#include <boost/signals2.hpp>
+#include "lib/signal.h"
class SpinCtrl;
@@ -39,7 +39,7 @@ public:
Crop get () const;
void set (Crop crop);
- boost::signals2::signal<void (Crop)> Changed;
+ UISignal<void (Crop)> Changed;
private:
SpinCtrl* _left;
diff --git a/src/wx/colour_conversion_editor.h b/src/wx/colour_conversion_editor.h
index de5ffb794..45256a1f8 100644
--- a/src/wx/colour_conversion_editor.h
+++ b/src/wx/colour_conversion_editor.h
@@ -23,11 +23,11 @@
#define DCPOMATIC_COLOUR_CONVERSION_EDITOR_H
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class ColourConversion;
@@ -43,7 +43,7 @@ public:
void set (ColourConversion);
ColourConversion get () const;
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
private:
void changed ();
diff --git a/src/wx/content_panel.h b/src/wx/content_panel.h
index f99d518a2..ad4d2a006 100644
--- a/src/wx/content_panel.h
+++ b/src/wx/content_panel.h
@@ -22,6 +22,7 @@
#include "content_menu.h"
#include "lib/enum_indexed_vector.h"
#include "lib/film_property.h"
+#include "lib/signal.h"
#include "lib/text_type.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -96,7 +97,7 @@ public:
void add_dcp(boost::filesystem::path dcp);
void add_folder(boost::filesystem::path folder);
- boost::signals2::signal<void (void)> SelectionChanged;
+ UISignal<void (void)> SelectionChanged;
private:
void item_selected ();
diff --git a/src/wx/dcp_timeline.cc b/src/wx/dcp_timeline.cc
index a5b106c00..87947c110 100644
--- a/src/wx/dcp_timeline.cc
+++ b/src/wx/dcp_timeline.cc
@@ -33,6 +33,7 @@
#include "lib/constants.h"
#include "lib/dcp_content.h"
#include "lib/film.h"
+#include "lib/signal.h"
#include "lib/text_content.h"
#include "lib/video_content.h"
#include <dcp/scope_guard.h>
@@ -121,7 +122,7 @@ public:
return _view;
}
- boost::signals2::signal<void (int, dcpomatic::DCPTime)> Changed;
+ UISignal<void (int, dcpomatic::DCPTime)> Changed;
private:
void timecode_changed() {
diff --git a/src/wx/dir_picker_ctrl.h b/src/wx/dir_picker_ctrl.h
index fc5d5a755..b474dfd82 100644
--- a/src/wx/dir_picker_ctrl.h
+++ b/src/wx/dir_picker_ctrl.h
@@ -23,6 +23,7 @@
#define DCPOMATIC_DIR_PICKER_CTRL
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
@@ -41,7 +42,7 @@ public:
wxString GetPath() const;
void SetPath(wxString);
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
private:
void browse_clicked();
diff --git a/src/wx/dkdm_output_panel.h b/src/wx/dkdm_output_panel.h
index 31f621830..0114f3d56 100644
--- a/src/wx/dkdm_output_panel.h
+++ b/src/wx/dkdm_output_panel.h
@@ -22,6 +22,7 @@
#include "name_format_editor.h"
#include "wx_util.h"
#include "lib/kdm_with_metadata.h"
+#include "lib/signal.h"
#include <dcp/types.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -56,7 +57,7 @@ public:
bool method_selected() const;
- boost::signals2::signal<void ()> MethodChanged;
+ UISignal<void ()> MethodChanged;
private:
void method_changed();
diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h
index f1b74b193..5146fa0f6 100644
--- a/src/wx/editable_list.h
+++ b/src/wx/editable_list.h
@@ -201,7 +201,7 @@ public:
_sizer->Layout ();
}
- boost::signals2::signal<void ()> SelectionChanged;
+ UISignal<void ()> SelectionChanged;
private:
diff --git a/src/wx/film_editor.h b/src/wx/film_editor.h
index 54d639ef5..0e17c2c81 100644
--- a/src/wx/film_editor.h
+++ b/src/wx/film_editor.h
@@ -51,7 +51,7 @@ public:
void set_film (std::shared_ptr<Film>);
void first_shown ();
- boost::signals2::signal<void (void)> SelectionChanged;
+ UISignal<void (void)> SelectionChanged;
/* Stuff for panels */
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 0397e4c91..9b397a1df 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -104,7 +104,7 @@ FilmViewer::FilmViewer(wxWindow* p)
#endif
_video_view->Sized.connect(boost::bind(&FilmViewer::video_view_sized, this));
- _video_view->TooManyDropped.connect(boost::bind(boost::ref(TooManyDropped)));
+ _video_view->TooManyDropped.connect([this]() { TooManyDropped(); });
set_film(shared_ptr<Film>());
@@ -866,7 +866,7 @@ void
FilmViewer::image_changed(shared_ptr<PlayerVideo> pv)
{
_last_image = pv;
- emit(boost::bind(boost::ref(ImageChanged)));
+ ImageChanged.emit_ui(this);
}
diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h
index 2a6239d7d..ad9b810db 100644
--- a/src/wx/film_viewer.h
+++ b/src/wx/film_viewer.h
@@ -25,6 +25,7 @@
#include "optimisation.h"
+#include "signal.h"
#include "video_view.h"
#include "lib/change_signaller.h"
#include "lib/config.h"
@@ -156,16 +157,17 @@ public:
Frame average_latency() const;
/** The image we are viewing changed: call last_image() to get the image */
- boost::signals2::signal<void ()> ImageChanged;
+ UISignal<void ()> ImageChanged;
std::shared_ptr<const PlayerVideo> last_image() const;
- boost::signals2::signal<void ()> Started;
- boost::signals2::signal<void ()> Stopped;
+ UISignal<void ()> Started;
+ UISignal<void ()> Stopped;
/** While playing back we reached the end of the film (emitted from GUI thread) */
- boost::signals2::signal<void ()> Finished;
+ UISignal<void ()> Finished;
/** Emitted from the GUI thread when a lot of frames are being dropped */
- boost::signals2::signal<void()> TooManyDropped;
+ UISignal<void()> TooManyDropped;
+ /* XXX: could be UISignal but this needs a return type and that is tricky in C++11 AFAICS */
boost::signals2::signal<bool ()> PlaybackPermitted;
private:
diff --git a/src/wx/filter_dialog.h b/src/wx/filter_dialog.h
index aaa43c3e4..f5b724997 100644
--- a/src/wx/filter_dialog.h
+++ b/src/wx/filter_dialog.h
@@ -24,11 +24,11 @@
*/
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class Film;
@@ -43,7 +43,7 @@ class FilterDialog : public wxDialog
public:
FilterDialog(wxWindow *, std::vector<Filter> const&);
- boost::signals2::signal<void (std::vector<Filter>)> ActiveChanged;
+ UISignal<void (std::vector<Filter>)> ActiveChanged;
private:
void active_changed ();
diff --git a/src/wx/focus_manager.h b/src/wx/focus_manager.h
index ca4c4e384..91fbcd4fc 100644
--- a/src/wx/focus_manager.h
+++ b/src/wx/focus_manager.h
@@ -19,6 +19,7 @@
*/
+#include "lib/signal.h"
#include <boost/signals2.hpp>
@@ -38,9 +39,9 @@ class FocusManager
{
public:
/** emitted when any add()ed TextCtrl gets focus */
- boost::signals2::signal<void ()> SetFocus;
+ UISignal<void ()> SetFocus;
/** emitted when any add()ed TextCtrl loses focus */
- boost::signals2::signal<void ()> KillFocus;
+ UISignal<void ()> KillFocus;
void add(wxTextCtrl* c);
diff --git a/src/wx/kdm_cpl_panel.h b/src/wx/kdm_cpl_panel.h
index 91821d7a3..dd190be2b 100644
--- a/src/wx/kdm_cpl_panel.h
+++ b/src/wx/kdm_cpl_panel.h
@@ -19,6 +19,7 @@
*/
+#include "lib/signal.h"
#include "lib/types.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -36,7 +37,7 @@ public:
boost::filesystem::path cpl () const;
bool has_selected () const;
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
private:
void update_cpl_choice ();
diff --git a/src/wx/kdm_output_panel.h b/src/wx/kdm_output_panel.h
index b555162dd..ddd474b0b 100644
--- a/src/wx/kdm_output_panel.h
+++ b/src/wx/kdm_output_panel.h
@@ -25,6 +25,7 @@
#include "wx_util.h"
#include "lib/kdm_with_metadata.h"
+#include "lib/signal.h"
#include <dcp/types.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -73,7 +74,7 @@ public:
void set_annotation_text(std::string text);
std::string annotation_text() const;
- boost::signals2::signal<void ()> MethodChanged;
+ UISignal<void ()> MethodChanged;
protected:
void create_destination_widgets(wxWindow* parent);
diff --git a/src/wx/kdm_timing_panel.h b/src/wx/kdm_timing_panel.h
index a6199534a..477d489d1 100644
--- a/src/wx/kdm_timing_panel.h
+++ b/src/wx/kdm_timing_panel.h
@@ -20,6 +20,7 @@
#include "wx_util.h"
+#include "lib/signal.h"
#include <dcp/utc_offset.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -49,7 +50,7 @@ public:
*/
void suggest_utc_offset(dcp::UTCOffset offset);
- boost::signals2::signal<void ()> TimingChanged;
+ UISignal<void ()> TimingChanged;
private:
void changed () const;
diff --git a/src/wx/language_subtag_panel.h b/src/wx/language_subtag_panel.h
index 6f1b5fd01..5ebe397e4 100644
--- a/src/wx/language_subtag_panel.h
+++ b/src/wx/language_subtag_panel.h
@@ -20,6 +20,7 @@
#include "subtag_list_ctrl.h"
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/srchctrl.h>
@@ -39,8 +40,8 @@ public:
void set(dcp::LanguageTag::SubtagType type, std::string search, boost::optional<dcp::LanguageTag::SubtagData> subtag = boost::optional<dcp::LanguageTag::SubtagData>());
boost::optional<dcp::LanguageTag::RegionSubtag> get() const;
- boost::signals2::signal<void (boost::optional<dcp::LanguageTag::SubtagData>)> SelectionChanged;
- boost::signals2::signal<void (std::string)> SearchChanged;
+ UISignal<void (boost::optional<dcp::LanguageTag::SubtagData>)> SelectionChanged;
+ UISignal<void (std::string)> SearchChanged;
private:
void search_changed();
diff --git a/src/wx/language_tag_widget.h b/src/wx/language_tag_widget.h
index ff3eeb727..c7e88fd03 100644
--- a/src/wx/language_tag_widget.h
+++ b/src/wx/language_tag_widget.h
@@ -19,12 +19,12 @@
*/
+#include "lib/signal.h"
#include <dcp/language_tag.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class wxButton;
@@ -52,7 +52,7 @@ public:
void set (boost::optional<dcp::LanguageTag> tag);
void enable (bool e);
- boost::signals2::signal<void (dcp::LanguageTag)> Changed;
+ UISignal<void (dcp::LanguageTag)> Changed;
private:
void edit ();
diff --git a/src/wx/name_format_editor.h b/src/wx/name_format_editor.h
index b4fe5691e..a442d37e8 100644
--- a/src/wx/name_format_editor.h
+++ b/src/wx/name_format_editor.h
@@ -24,6 +24,7 @@
#include "lib/compose.hpp"
+#include "lib/signal.h"
#include <dcp/name_format.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -45,7 +46,7 @@ public:
return _name;
}
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
private:
diff --git a/src/wx/password_entry.cc b/src/wx/password_entry.cc
index a6378fdd0..661894a15 100644
--- a/src/wx/password_entry.cc
+++ b/src/wx/password_entry.cc
@@ -38,7 +38,7 @@ PasswordEntry::PasswordEntry (wxWindow* parent)
_panel->SetSizerAndFit (sizer);
_show->bind(&PasswordEntry::show_clicked, this);
- _text->Bind(wxEVT_TEXT, boost::bind(boost::ref(Changed)));
+ _text->Bind(wxEVT_TEXT, [this](wxCommandEvent const&) { Changed(); });
}
wxPanel *
@@ -59,7 +59,7 @@ PasswordEntry::show_clicked ()
delete _text;
_text = new wxTextCtrl (_panel, wxID_ANY, pass, wxDefaultPosition, wxDefaultSize, _show->GetValue() ? 0 : wxTE_PASSWORD);
_text->SetSelection (from, to);
- _text->Bind(wxEVT_TEXT, boost::bind(boost::ref(Changed)));
+ _text->Bind(wxEVT_TEXT, [this](wxCommandEvent const&) { Changed(); });
sizer->Prepend (_text, 1, wxRIGHT, DCPOMATIC_SIZER_GAP);
sizer->Layout ();
_panel->Thaw ();
diff --git a/src/wx/password_entry.h b/src/wx/password_entry.h
index f2d4f9ed0..e7b420e2d 100644
--- a/src/wx/password_entry.h
+++ b/src/wx/password_entry.h
@@ -19,11 +19,11 @@
*/
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class CheckBox;
@@ -39,7 +39,7 @@ public:
std::string get () const;
void set (std::string);
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
private:
void show_clicked ();
diff --git a/src/wx/player_stress_tester.h b/src/wx/player_stress_tester.h
index 534cf8c76..1307fac8e 100644
--- a/src/wx/player_stress_tester.h
+++ b/src/wx/player_stress_tester.h
@@ -19,11 +19,11 @@
*/
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
#include <boost/filesystem.hpp>
@@ -62,7 +62,7 @@ public:
_suspended = s;
}
- boost::signals2::signal<void (boost::filesystem::path)> LoadDCP;
+ UISignal<void (boost::filesystem::path)> LoadDCP;
private:
void check_commands ();
diff --git a/src/wx/playlist_controls.h b/src/wx/playlist_controls.h
index 76ec63824..96a73aff5 100644
--- a/src/wx/playlist_controls.h
+++ b/src/wx/playlist_controls.h
@@ -20,6 +20,7 @@
#include "controls.h"
+#include "lib/signal.h"
#include "lib/spl.h"
@@ -35,7 +36,7 @@ public:
when we have created one from a SPL. We could call a method
in the player's DOMFrame but we don't have that in a header.
*/
- boost::signals2::signal<void (std::weak_ptr<Film>)> ResetFilm;
+ UISignal<void (std::weak_ptr<Film>)> ResetFilm;
void play () override;
void stop () override;
diff --git a/src/wx/rating_dialog.h b/src/wx/rating_dialog.h
index e8dfc2d9c..f7e2f9697 100644
--- a/src/wx/rating_dialog.h
+++ b/src/wx/rating_dialog.h
@@ -19,12 +19,12 @@
*/
+#include "lib/signal.h"
#include <dcp/rating.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class wxChoice;
@@ -43,7 +43,7 @@ public:
/** Emitted when the page has been changed, the parameter being true if OK
* should now be enabled in the main dialogue.
*/
- boost::signals2::signal<void (bool)> Changed;
+ UISignal<void (bool)> Changed;
};
diff --git a/src/wx/recipients_panel.h b/src/wx/recipients_panel.h
index cecfa3d33..ee613d6eb 100644
--- a/src/wx/recipients_panel.h
+++ b/src/wx/recipients_panel.h
@@ -22,13 +22,13 @@
#include "lib/collator.h"
#include "lib/dkdm_recipient.h"
#include "lib/dkdm_recipient_list.h"
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/srchctrl.h>
#include <wx/treectrl.h>
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
#include <list>
#include <map>
@@ -47,7 +47,7 @@ public:
/** @return List of selected recipients */
std::list<DKDMRecipient> recipients() const;
- boost::signals2::signal<void ()> RecipientsChanged;
+ UISignal<void ()> RecipientsChanged;
private:
void add_recipients ();
diff --git a/src/wx/region_subtag_widget.h b/src/wx/region_subtag_widget.h
index 725f8652c..16c622358 100644
--- a/src/wx/region_subtag_widget.h
+++ b/src/wx/region_subtag_widget.h
@@ -19,12 +19,12 @@
*/
+#include "lib/signal.h"
#include <dcp/language_tag.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
class wxButton;
@@ -54,7 +54,7 @@ public:
void set(boost::optional<dcp::LanguageTag::RegionSubtag> tag);
void enable(bool e);
- boost::signals2::signal<void (boost::optional<dcp::LanguageTag::RegionSubtag>)> Changed;
+ UISignal<void (boost::optional<dcp::LanguageTag::RegionSubtag>)> Changed;
private:
void edit ();
diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h
index 07f72f9a8..a9b6529df 100644
--- a/src/wx/screens_panel.h
+++ b/src/wx/screens_panel.h
@@ -22,13 +22,13 @@
#include "lib/cinema_list.h"
#include "lib/collator.h"
#include "lib/config.h"
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/srchctrl.h>
#include <wx/treelist.h>
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
#include <list>
#include <map>
#include <set>
@@ -57,7 +57,7 @@ public:
dcp::UTCOffset best_utc_offset() const;
- boost::signals2::signal<void ()> ScreensChanged;
+ UISignal<void ()> ScreensChanged;
private:
void add_cinemas ();
diff --git a/src/wx/simple_video_view.cc b/src/wx/simple_video_view.cc
index 31f413a36..df4fce596 100644
--- a/src/wx/simple_video_view.cc
+++ b/src/wx/simple_video_view.cc
@@ -61,7 +61,7 @@ SimpleVideoView::SimpleVideoView (FilmViewer* viewer, wxWindow* parent)
_panel->SetBackgroundColour (*wxBLACK);
_panel->Bind (wxEVT_PAINT, boost::bind (&SimpleVideoView::paint, this));
- _panel->Bind (wxEVT_SIZE, boost::bind(boost::ref(Sized)));
+ _panel->Bind (wxEVT_SIZE, [this](wxSizeEvent const&) { Sized.emit_ui(this); });
_timer.Bind (wxEVT_TIMER, boost::bind(&SimpleVideoView::timer, this));
}
diff --git a/src/wx/time_picker.h b/src/wx/time_picker.h
index 50177afd3..58b3cea05 100644
--- a/src/wx/time_picker.h
+++ b/src/wx/time_picker.h
@@ -19,6 +19,7 @@
*/
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
@@ -36,7 +37,7 @@ public:
virtual int hours () const = 0;
virtual int minutes () const = 0;
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
};
diff --git a/src/wx/timecode.h b/src/wx/timecode.h
index 53cd93694..fb901a006 100644
--- a/src/wx/timecode.h
+++ b/src/wx/timecode.h
@@ -25,13 +25,13 @@
#include "wx_util.h"
#include "lib/dcpomatic_time.h"
+#include "lib/signal.h"
#include <dcp/raw_convert.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
#include <fmt/format.h>
-#include <boost/signals2.hpp>
class TimecodeBase : public wxPanel
@@ -44,7 +44,7 @@ public:
void set_editable (bool);
void set_focus ();
- boost::signals2::signal<void ()> Changed;
+ UISignal<void ()> Changed;
static wxSize size (wxWindow* parent);
diff --git a/src/wx/video_view.cc b/src/wx/video_view.cc
index 2c6a637ea..902853772 100644
--- a/src/wx/video_view.cc
+++ b/src/wx/video_view.cc
@@ -170,7 +170,7 @@ VideoView::add_dropped ()
}
if (too_many) {
- emit (boost::bind(boost::ref(TooManyDropped)));
+ TooManyDropped.emit_ui(this);
}
}
diff --git a/src/wx/video_view.h b/src/wx/video_view.h
index 04c52a35d..f24aff790 100644
--- a/src/wx/video_view.h
+++ b/src/wx/video_view.h
@@ -26,6 +26,7 @@
#include "optimisation.h"
#include "lib/dcpomatic_time.h"
#include "lib/exception_store.h"
+#include "lib/signal.h"
#include "lib/signaller.h"
#include "lib/timer.h"
#include "lib/types.h"
@@ -76,9 +77,9 @@ public:
bool reset_metadata (std::shared_ptr<const Film> film, dcp::Size player_video_container_size);
/** Emitted from the GUI thread when our display changes in size */
- boost::signals2::signal<void()> Sized;
+ UISignal<void()> Sized;
/** Emitted from the GUI thread when a lot of frames are being dropped */
- boost::signals2::signal<void()> TooManyDropped;
+ UISignal<void()> TooManyDropped;
/* Accessors for FilmViewer */
diff --git a/src/wx/video_waveform_plot.h b/src/wx/video_waveform_plot.h
index e6e7a6f3d..1dae59462 100644
--- a/src/wx/video_waveform_plot.h
+++ b/src/wx/video_waveform_plot.h
@@ -19,11 +19,11 @@
*/
+#include "lib/signal.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/wx.h>
LIBDCP_ENABLE_WARNINGS
-#include <boost/signals2.hpp>
namespace dcp {
@@ -50,7 +50,7 @@ public:
- (int, int): image x range
- (int, int): component value range
*/
- boost::signals2::signal<void (int, int, int, int)> MouseMoved;
+ UISignal<void (int, int, int, int)> MouseMoved;
private:
void paint ();