#include "lib/encoded_log_entry.h"
#include "lib/encode_server.h"
#include "lib/config.h"
+#ifdef DCPOMATIC_GROK
+#include "lib/grok/context.h"
+#endif
#include "lib/log.h"
#include "lib/signaller.h"
#include "lib/cross.h"
#include "lib/dcpomatic_log.h"
-#include "lib/warnings.h"
-DCPOMATIC_DISABLE_WARNINGS
-#include <wx/taskbar.h>
-#include <wx/splash.h>
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
#include <wx/icon.h>
-DCPOMATIC_ENABLE_WARNINGS
+#include <wx/splash.h>
+#include <wx/taskbar.h>
+LIBDCP_ENABLE_WARNINGS
#include <boost/thread.hpp>
-#include <boost/foreach.hpp>
#include <boost/optional.hpp>
#include <iostream>
+
using std::cout;
using std::string;
using std::exception;
using std::list;
using std::fixed;
using std::setprecision;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::thread;
using boost::bind;
using boost::optional;
-using boost::dynamic_pointer_cast;
+using std::dynamic_pointer_cast;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
#endif
+
enum {
ID_status = 1,
ID_quit,
static unsigned int const log_lines = 32;
+
class ServerLog : public Log, public Signaller
{
public:
string get () const {
string a;
- BOOST_FOREACH (string const & i, _log) {
+ for (auto const& i: _log) {
a += i + "\n";
}
return a;
boost::signals2::signal<void(int)> Removed;
private:
- void do_log (shared_ptr<const LogEntry> entry)
+ void do_log (shared_ptr<const LogEntry> entry) override
{
time_t const s = entry->seconds ();
struct tm* local = localtime (&s);
}
_last_time = *local;
- shared_ptr<const EncodedLogEntry> encoded = dynamic_pointer_cast<const EncodedLogEntry> (entry);
+ auto encoded = dynamic_pointer_cast<const EncodedLogEntry> (entry);
if (encoded) {
_history.push_back (encoded->seconds ());
if (_history.size() > 48) {
void append (string s)
{
_log.push_back (s);
- emit (boost::bind (boost::ref (Appended), s));
+ emit (boost::bind(boost::ref(Appended), s));
}
list<string> _log;
float _fps;
};
+
static shared_ptr<ServerLog> server_log;
+
class StatusDialog : public wxDialog
{
public:
StatusDialog ()
: wxDialog (
- 0, wxID_ANY, _("DCP-o-matic Encode Server"),
+ nullptr, wxID_ANY, _("DCP-o-matic Encode Server"),
wxDefaultPosition, wxDefaultSize,
#ifdef DCPOMATIC_OSX
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxSTAY_ON_TOP
#endif
)
{
- wxFlexGridSizer* state_sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_GAP, DCPOMATIC_SIZER_GAP);
+ auto state_sizer = new wxFlexGridSizer (2, DCPOMATIC_SIZER_GAP, DCPOMATIC_SIZER_GAP);
add_label_to_sizer (state_sizer, this, _("Frames per second"), true);
_fps = new StaticText (this, wxT(""));
state_sizer->Add (_fps);
- wxFlexGridSizer* log_sizer = new wxFlexGridSizer (1, DCPOMATIC_SIZER_GAP, DCPOMATIC_SIZER_GAP);
+ auto log_sizer = new wxFlexGridSizer (1, DCPOMATIC_SIZER_GAP, DCPOMATIC_SIZER_GAP);
log_sizer->AddGrowableCol (0, 1);
wxClientDC dc (this);
wxTextCtrl* _text;
wxStaticText* _fps;
- boost::shared_ptr<wxTimer> _timer;
+ std::shared_ptr<wxTimer> _timer;
};
+
+static StatusDialog* status_dialog = nullptr;
+
+
class TaskBarIcon : public wxTaskBarIcon
{
public:
TaskBarIcon ()
- : _status (0)
{
-#ifdef DCPOMATIC_WINDOWS
- wxIcon icon (std_to_wx ("id"));
-#else
- wxBitmap bitmap (wxString::Format(wxT("%s/dcpomatic_small.png"), std_to_wx(resources_path().string())), wxBITMAP_TYPE_PNG);
- wxIcon icon;
- icon.CopyFromBitmap (bitmap);
-#endif
-
- SetIcon (icon, std_to_wx ("DCP-o-matic Encode Server"));
+ set_icon ();
Bind (wxEVT_MENU, boost::bind (&TaskBarIcon::status, this), ID_status);
Bind (wxEVT_MENU, boost::bind (&TaskBarIcon::quit, this), ID_quit);
}
- wxMenu* CreatePopupMenu ()
+ wxMenu* CreatePopupMenu () override
{
- wxMenu* menu = new wxMenu;
+ auto menu = new wxMenu;
menu->Append (ID_status, std_to_wx ("Status..."));
menu->Append (ID_quit, std_to_wx ("Quit"));
return menu;
}
+ void set_icon ()
+ {
+#ifdef DCPOMATIC_WINDOWS
+ wxIcon icon (std_to_wx("id"));
+#else
+ string const colour = gui_is_dark() ? "white" : "black";
+ wxBitmap bitmap (
+ bitmap_path(String::compose("dcpomatic_small_%1.png", colour)),
+ wxBITMAP_TYPE_PNG
+ );
+ wxIcon icon;
+ icon.CopyFromBitmap (bitmap);
+#endif
+
+ SetIcon (icon, std_to_wx ("DCP-o-matic Encode Server"));
+ }
+
private:
void status ()
{
- if (!_status) {
- _status = new StatusDialog ();
- }
- _status->Show ();
+ status_dialog->Show ();
}
void quit ()
{
wxTheApp->ExitMainLoop ();
}
-
- StatusDialog* _status;
};
+
class App : public wxApp, public ExceptionStore
{
public:
App ()
: wxApp ()
- , _icon (0)
{}
private:
- bool OnInit ()
+ bool OnInit () override
{
- if (!wxApp::OnInit ()) {
+ if (!wxApp::OnInit()) {
return false;
}
server_log->set_types (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR);
dcpomatic_log = server_log;
- Config::FailedToLoad.connect (boost::bind (&App::config_failed_to_load, this));
+ Config::FailedToLoad.connect(boost::bind(&App::config_failed_to_load, this, _1));
Config::Warning.connect (boost::bind (&App::config_warning, this, _1));
- wxSplashScreen* splash = maybe_show_splash ();
+ auto splash = maybe_show_splash ();
dcpomatic_setup_path_encoding ();
dcpomatic_setup_i18n ();
*/
Config::instance();
+ status_dialog = new StatusDialog ();
#ifdef DCPOMATIC_LINUX
- StatusDialog* d = new StatusDialog ();
- d->Show ();
+ status_dialog->Show ();
#else
_icon = new TaskBarIcon;
+ status_dialog->Bind (wxEVT_SYS_COLOUR_CHANGED, boost::bind(&TaskBarIcon::set_icon, _icon));
#endif
_thread = thread (bind (&App::main_thread, this));
SetExitOnFrameDelete (false);
+#ifdef DCPOMATIC_GROK
+ grk_plugin::setMessengerLogger(new grk_plugin::GrokLogger("[GROK] "));
+ setup_grok_library_path();
+#endif
+
return true;
}
- int OnExit ()
+ int OnExit () override
{
delete _icon;
return wxApp::OnExit ();
try {
rethrow ();
} catch (exception& e) {
- error_dialog (0, std_to_wx (e.what ()));
+ error_dialog (nullptr, std_to_wx(e.what()));
wxTheApp->ExitMainLoop ();
} catch (...) {
- error_dialog (0, _("An unknown error has occurred with the DCP-o-matic server."));
+ error_dialog (nullptr, _("An unknown error has occurred with the DCP-o-matic server."));
wxTheApp->ExitMainLoop ();
}
}
signal_manager->ui_idle ();
}
- void config_failed_to_load ()
+ void config_failed_to_load(Config::LoadFailure what)
{
- message_dialog (0, _("The existing configuration failed to load. Default values will be used instead. These may take a short time to create."));
+ report_config_load_failure(nullptr, what);
}
void config_warning (string m)
{
- message_dialog (0, std_to_wx (m));
+ message_dialog (nullptr, std_to_wx(m));
}
boost::thread _thread;
- TaskBarIcon* _icon;
+ TaskBarIcon* _icon = nullptr;
shared_ptr<wxTimer> _timer;
};