summaryrefslogtreecommitdiff
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
parent8a2eeb8c00db2809b8b3fa848d628cf0cd7cb411 (diff)
Refresh cinemas UI if the cinemas.xml file location is changed.
-rw-r--r--src/lib/config.cc1
-rw-r--r--src/wx/screens_panel.cc26
-rw-r--r--src/wx/screens_panel.h6
3 files changed, 32 insertions, 1 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index cb2ec8885..c9b428571 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -1291,6 +1291,7 @@ Config::set_cinemas_file (boost::filesystem::path file)
read_cinemas (f);
}
+ changed (CINEMAS);
changed (OTHER);
}
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();
+ }
+}
+
+
diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h
index 7c72f5873..a91fbc0e0 100644
--- a/src/wx/screens_panel.h
+++ b/src/wx/screens_panel.h
@@ -19,6 +19,7 @@
*/
+#include "lib/config.h"
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/srchctrl.h>
@@ -72,6 +73,8 @@ private:
void check_all ();
void uncheck_all ();
bool notify_cinemas_changed();
+ void clear_and_re_add();
+ void config_changed(Config::Property);
std::shared_ptr<Cinema> item_to_cinema (wxTreeListItem item) const;
std::shared_ptr<dcpomatic::Screen> item_to_screen (wxTreeListItem item) const;
@@ -109,4 +112,7 @@ private:
bool _ignore_check_change = false;
UCollator* _collator = nullptr;
+
+ boost::signals2::scoped_connection _config_connection;
+ bool _ignore_cinemas_changed = false;
};