Move _state_timer into VideoView.
[dcpomatic.git] / src / wx / wx_util.h
1 /*
2     Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
3
4     This file is part of DCP-o-matic.
5
6     DCP-o-matic is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     DCP-o-matic is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 /** @file src/wx/wx_util.h
22  *  @brief Some utility functions and classes.
23  */
24
25 #ifndef DCPOMATIC_WX_UTIL_H
26 #define DCPOMATIC_WX_UTIL_H
27
28 #include "lib/dcpomatic_time.h"
29 #include <wx/wx.h>
30 #include <wx/gbsizer.h>
31 #include <boost/function.hpp>
32 #include <boost/thread.hpp>
33 #include <boost/signals2.hpp>
34 #ifdef __WXGTK__
35 #include <gtk/gtk.h>
36 #endif
37
38 class FilePickerCtrl;
39 class wxDirPickerCtrl;
40 class wxSpinCtrl;
41 class wxSpinCtrlDouble;
42 class wxGridBagSizer;
43 class wxSplashScreen;
44 class PasswordEntry;
45
46 #define DCPOMATIC_SIZER_X_GAP 8
47 #define DCPOMATIC_SIZER_Y_GAP 8
48 #define DCPOMATIC_SIZER_GAP 8
49 #define DCPOMATIC_DIALOG_BORDER 12
50
51 /** Spacing to use between buttons in a vertical line */
52 #ifdef DCPOMATIC_OSX
53 #define DCPOMATIC_BUTTON_STACK_GAP 2
54 #else
55 #define DCPOMATIC_BUTTON_STACK_GAP 0
56 #endif
57
58 #ifdef DCPOMATIC_LINUX
59 #define DCPOMATIC_RTAUDIO_API RtAudio::LINUX_PULSE
60 #endif
61 #ifdef DCPOMATIC_WINDOWS
62 #define DCPOMATIC_RTAUDIO_API RtAudio::UNSPECIFIED
63 #endif
64 #ifdef DCPOMATIC_OSX
65 #define DCPOMATIC_RTAUDIO_API RtAudio::MACOSX_CORE
66 #endif
67
68 /** i18n macro to support strings like Context|String
69  *  so that `String' can be translated to different things
70  *  in different contexts.
71  */
72 #define S_(x) context_translation(x)
73
74 extern void error_dialog (wxWindow *, wxString, boost::optional<wxString> e = boost::optional<wxString>());
75 extern void message_dialog (wxWindow *, wxString);
76 extern bool confirm_dialog (wxWindow *, wxString);
77 extern wxStaticText* create_label (wxWindow* p, wxString t, bool left);
78 extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, bool left, int prop = 0, int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT);
79 extern wxStaticText* add_label_to_sizer (wxSizer *, wxStaticText *, bool left, int prop = 0, int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT);
80 extern wxStaticText* add_label_to_sizer (wxGridBagSizer *, wxWindow *, wxString, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan);
81 extern wxStaticText* add_label_to_sizer (wxGridBagSizer *, wxStaticText *, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan);
82 extern std::string wx_to_std (wxString);
83 extern wxString std_to_wx (std::string);
84 extern void dcpomatic_setup_i18n ();
85 extern wxString context_translation (wxString);
86 extern std::string string_client_data (wxClientData* o);
87 extern wxString time_to_timecode (dcpomatic::DCPTime t, double fps);
88 extern void setup_audio_channels_choice (wxChoice* choice, int minimum);
89 extern wxSplashScreen* maybe_show_splash ();
90 extern double calculate_mark_interval (double start);
91 extern bool display_progress (wxString title, wxString task);
92 extern bool report_errors_from_last_job (wxWindow* parent);
93
94 extern void checked_set (FilePickerCtrl* widget, boost::filesystem::path value);
95 extern void checked_set (wxDirPickerCtrl* widget, boost::filesystem::path value);
96 extern void checked_set (wxSpinCtrl* widget, int value);
97 extern void checked_set (wxSpinCtrlDouble* widget, double value);
98 extern void checked_set (wxChoice* widget, int value);
99 extern void checked_set (wxChoice* widget, std::string value);
100 extern void checked_set (wxChoice* widget, std::vector<std::pair<std::string, std::string> > items);
101 extern void checked_set (wxTextCtrl* widget, std::string value);
102 extern void checked_set (wxTextCtrl* widget, wxString value);
103 extern void checked_set (PasswordEntry* widget, std::string value);
104 extern void checked_set (wxCheckBox* widget, bool value);
105 extern void checked_set (wxRadioButton* widget, bool value);
106 extern void checked_set (wxStaticText* widget, std::string value);
107 extern void checked_set (wxStaticText* widget, wxString value);
108
109 extern int wx_get (wxChoice* widget);
110 extern int wx_get (wxSpinCtrl* widget);
111 extern double wx_get (wxSpinCtrlDouble* widget);
112
113 /* GTK 2.24.17 has a buggy GtkFileChooserButton and it was put in Ubuntu 13.04.
114    This also seems to apply to 2.24.20 in Ubuntu 13.10 and 2.24.23 in Ubuntu 14.04.
115    Use our own dir picker as this is the least bad option I can think of.
116 */
117 #if defined(__WXMSW__) || (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION == 24 && (GTK_MICRO_VERSION == 17 || GTK_MICRO_VERSION == 20 || GTK_MICRO_VERSION == 23))
118 #define DCPOMATIC_USE_OWN_PICKER
119 #endif
120
121 #endif