+#include <wx/preferences.h>
+#include <wx/spinctrl.h>
+#include <wx/stdpaths.h>
+#include <RtAudio.h>
+LIBDCP_ENABLE_WARNINGS
+#include <boost/filesystem.hpp>
+
+
+class AudioMappingView;
+
+
+class Page : public wxPreferencesPage
+{
+public:
+ Page (wxSize panel_size, int border);
+ virtual ~Page () {}
+
+ wxWindow* CreateWindow (wxWindow* parent) override;
+
+protected:
+ wxWindow* create_window (wxWindow* parent);
+
+ int _border;
+ wxPanel* _panel;
+
+private:
+ virtual void config_changed () = 0;
+ virtual void setup () = 0;
+
+ void config_changed_wrapper ();
+ void window_destroyed ();
+
+ wxSize _panel_size;
+ boost::signals2::scoped_connection _config_connection;
+ bool _window_exists;
+};
+
+
+class GeneralPage : public Page
+{
+public:
+ GeneralPage (wxSize panel_size, int border);
+
+ wxString GetName () const override;
+
+#ifdef DCPOMATIC_OSX
+ wxBitmap GetLargeIcon () const override
+ {
+ return wxBitmap(bitmap_path("general.png"), wxBITMAP_TYPE_PNG);
+ }
+#endif
+
+protected:
+ void add_language_controls (wxGridBagSizer* table, int& r);
+ void add_update_controls (wxGridBagSizer* table, int& r);
+ void config_changed () override;
+
+private:
+ void setup_sensitivity ();
+ void set_language_changed ();
+ void language_changed ();
+ void check_for_updates_changed ();
+ void check_for_test_updates_changed ();
+
+ wxCheckBox* _set_language;
+ wxChoice* _language;
+ wxCheckBox* _check_for_updates;
+ wxCheckBox* _check_for_test_updates;
+};
+
+
+class CertificateChainEditor : public wxDialog
+{
+public:
+ CertificateChainEditor (
+ wxWindow* parent,
+ wxString title,
+ int border,
+ std::function<void (std::shared_ptr<dcp::CertificateChain>)> set,
+ std::function<std::shared_ptr<const dcp::CertificateChain> (void)> get,
+ std::function<bool (void)> nag_alter
+ );