+#ifndef DCPOMATIC_CONFIG_DIALOG_H
+#define DCPOMATIC_CONFIG_DIALOG_H
+
+#include "wx_util.h"
+#include "editable_list.h"
+#include "make_chain_dialog.h"
+#include "lib/config.h"
+#include "lib/ratio.h"
+#include "lib/filter.h"
+#include "lib/dcp_content_type.h"
+#include "lib/log.h"
+#include "lib/util.h"
+#include "lib/cross.h"
+#include "lib/exceptions.h"
+#include <dcp/locale_convert.h>
+#include <dcp/exceptions.h>
+#include <dcp/certificate_chain.h>
+#include <wx/stdpaths.h>
+#include <wx/preferences.h>
+#include <wx/spinctrl.h>
+#include <wx/filepicker.h>
+#include <RtAudio.h>
+#include <boost/filesystem.hpp>
+#include <boost/foreach.hpp>
+#include <iostream>
+
+class Page
+{
+public:
+ Page (wxSize panel_size, int border);
+ virtual ~Page () {}
+
+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 StockPage : public wxStockPreferencesPage, public Page
+{
+public:
+ StockPage (Kind kind, wxSize panel_size, int border);
+ wxWindow* CreateWindow (wxWindow* parent);
+};
+
+class StandardPage : public wxPreferencesPage, public Page
+{
+public:
+ StandardPage (wxSize panel_size, int border);
+ wxWindow* CreateWindow (wxWindow* parent);
+};
+
+class GeneralPage : public StockPage
+{
+public:
+ GeneralPage (wxSize panel_size, int border);