-extern void error_dialog (wxWindow *, wxString);
-extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, int prop = 0);
-extern wxStaticText* add_label_to_grid_bag_sizer (wxGridBagSizer *, wxWindow *, wxString, wxGBPosition, wxGBSpan span = wxDefaultSpan);
+/** Amount by which you need to top-pad a choice to make it line up, in some cases */
+#ifdef DCPOMATIC_OSX
+#define DCPOMATIC_CHOICE_TOP_PAD 1
+#else
+#define DCPOMATIC_CHOICE_TOP_PAD 0
+#endif
+
+/** Spacing to use between buttons in a vertical/horizontal line */
+#if defined(DCPOMATIC_OSX) || defined(__WXGTK3__)
+#define DCPOMATIC_BUTTON_STACK_GAP 2
+#else
+#define DCPOMATIC_BUTTON_STACK_GAP 0
+#endif
+
+#ifdef DCPOMATIC_LINUX
+#define DCPOMATIC_RTAUDIO_API RtAudio::LINUX_PULSE
+#endif
+#ifdef DCPOMATIC_WINDOWS
+#define DCPOMATIC_RTAUDIO_API RtAudio::UNSPECIFIED
+#endif
+#ifdef DCPOMATIC_OSX
+#define DCPOMATIC_RTAUDIO_API RtAudio::MACOSX_CORE
+#endif
+
+
+/** i18n macro to support strings like Context|String
+ * so that `String' can be translated to different things
+ * in different contexts.
+ */
+#define S_(x) context_translation(x)
+
+
+extern void error_dialog (wxWindow *, wxString, boost::optional<wxString> e = boost::optional<wxString>());
+extern void message_dialog (wxWindow *, wxString);
+extern bool confirm_dialog (wxWindow *, wxString);
+extern wxStaticText* create_label (wxWindow* p, wxString t, bool left);
+extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, bool left, int prop = 0, int flags = wxLEFT | wxRIGHT);
+extern wxStaticText* add_label_to_sizer (wxSizer *, wxStaticText *, bool left, int prop = 0, int flags = wxLEFT | wxRIGHT);
+extern wxStaticText* add_label_to_sizer(wxGridBagSizer *, wxWindow *, wxString, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan, bool indent = false);
+extern wxStaticText* add_label_to_sizer (wxGridBagSizer *, wxStaticText *, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan);