summaryrefslogtreecommitdiff
path: root/src/wx/screens_panel.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-08-30 22:59:16 +0200
committerCarl Hetherington <cth@carlh.net>2022-08-30 22:59:16 +0200
commit85be674b29dd61fe08a50f0b84c8402e9df61d94 (patch)
treef827da46c073b0d347350b8296a5248e46d7d1fa /src/wx/screens_panel.cc
parent8a2eeb8c00db2809b8b3fa848d628cf0cd7cb411 (diff)
Refresh cinemas UI if the cinemas.xml file location is changed.
Diffstat (limited to 'src/wx/screens_panel.cc')
-rw-r--r--src/wx/screens_panel.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc
index 5f903eda4..d5445b035 100644
--- a/src/wx/screens_panel.cc
+++ b/src/wx/screens_panel.cc
@@ -45,6 +45,9 @@ using std::shared_ptr;
using std::string;
using std::vector;
using boost::optional;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
using namespace dcpomatic;
@@ -124,6 +127,8 @@ ScreensPanel::ScreensPanel (wxWindow* parent)
ucol_setAttribute(_collator, UCOL_STRENGTH, UCOL_PRIMARY, &status);
ucol_setAttribute(_collator, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status);
}
+
+ _config_connection = Config::instance()->Changed.connect(boost::bind(&ScreensPanel::config_changed, this, _1));
}
@@ -501,7 +506,7 @@ ScreensPanel::add_cinemas ()
void
-ScreensPanel::search_changed ()
+ScreensPanel::clear_and_re_add()
{
_targets->DeleteAllItems ();
@@ -511,6 +516,13 @@ ScreensPanel::search_changed ()
_screen_to_item.clear ();
add_cinemas ();
+}
+
+
+void
+ScreensPanel::search_changed ()
+{
+ clear_and_re_add();
_ignore_selection_change = true;
@@ -668,6 +680,9 @@ ScreensPanel::compare (string const& utf8_a, string const& utf8_b)
bool
ScreensPanel::notify_cinemas_changed()
{
+ _ignore_cinemas_changed = true;
+ ScopeGuard sg = [this]() { _ignore_cinemas_changed = false; };
+
try {
Config::instance()->changed(Config::CINEMAS);
} catch (FileError& e) {
@@ -679,3 +694,12 @@ ScreensPanel::notify_cinemas_changed()
}
+void
+ScreensPanel::config_changed(Config::Property property)
+{
+ if (property == Config::Property::CINEMAS && !_ignore_cinemas_changed) {
+ clear_and_re_add();
+ }
+}
+
+