From 853f658e8a95ece236438eb8e91860360e0624af Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 18 Sep 2014 00:48:13 +0100 Subject: [PATCH] Try to make Windows console appearance a preference. --- src/lib/config.cc | 9 +++++++++ src/lib/config.h | 16 ++++++++++++++++ src/tools/dcpomatic.cc | 30 ++++++++++++++++-------------- src/wx/config_dialog.cc | 20 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 14 deletions(-) diff --git a/src/lib/config.cc b/src/lib/config.cc index d624e6070..2b7b81cfe 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -76,6 +76,9 @@ Config::Config () , _check_for_test_updates (false) , _maximum_j2k_bandwidth (250000000) , _log_types (Log::TYPE_GENERAL | Log::TYPE_WARNING | Log::TYPE_ERROR) +#ifdef DCPOMATIC_WINDOWS + , _win32_console (false) +#endif { _allowed_dcp_frame_rates.push_back (24); _allowed_dcp_frame_rates.push_back (25); @@ -219,6 +222,9 @@ Config::read () _allow_any_dcp_frame_rate = f.optional_bool_child ("AllowAnyDCPFrameRate"); _log_types = f.optional_number_child ("LogTypes").get_value_or (Log::TYPE_GENERAL | Log::TYPE_WARNING | Log::TYPE_ERROR); +#ifdef DCPOMATIC_WINDOWS + _win32_console = f.optional_bool_child ("Win32Console").get_value_or (false); +#endif list his = f.node_children ("History"); for (list::const_iterator i = his.begin(); i != his.end(); ++i) { @@ -363,6 +369,9 @@ Config::write () const root->add_child("MaximumJ2KBandwidth")->add_child_text (raw_convert (_maximum_j2k_bandwidth)); root->add_child("AllowAnyDCPFrameRate")->add_child_text (_allow_any_dcp_frame_rate ? "1" : "0"); root->add_child("LogTypes")->add_child_text (raw_convert (_log_types)); +#ifdef DCPOMATIC_WINDOWS + root->add_child("Win32Console")->add_child_text (_win32_console ? "1" : "0"); +#endif xmlpp::Element* signer = root->add_child ("Signer"); dcp::CertificateChain::List certs = _signer->certificates().root_to_leaf (); diff --git a/src/lib/config.h b/src/lib/config.h index 3cc7c49c4..55a172d78 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -223,6 +223,12 @@ public: return _log_types; } +#ifdef DCPOMATIC_WINDOWS + bool win32_console () const { + return _win32_console; + } +#endif + std::vector history () const { return _history; } @@ -420,6 +426,13 @@ public: changed (); } +#ifdef DCPOMATIC_WINDOWS + void set_win32_console (bool c) { + _win32_console = c; + changed (); + } +#endif + void clear_history () { _history.clear (); changed (); @@ -494,6 +507,9 @@ private: /** maximum allowed J2K bandwidth in bits per second */ int _maximum_j2k_bandwidth; int _log_types; +#ifdef DCPOMATIC_WINDOWS + bool _win32_console; +#endif std::vector _history; /** Singleton instance, or 0 */ diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 5f6a98075..e429b7a9d 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -144,20 +144,22 @@ public: , _history_position (0) , _history_separator (0) { -#if defined(DCPOMATIC_WINDOWS) && defined(DCPOMATIC_WINDOWS_CONSOLE) - AllocConsole(); - - HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); - int hCrt = _open_osfhandle((intptr_t) handle_out, _O_TEXT); - FILE* hf_out = _fdopen(hCrt, "w"); - setvbuf(hf_out, NULL, _IONBF, 1); - *stdout = *hf_out; - - HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE); - hCrt = _open_osfhandle((intptr_t) handle_in, _O_TEXT); - FILE* hf_in = _fdopen(hCrt, "r"); - setvbuf(hf_in, NULL, _IONBF, 128); - *stdin = *hf_in; +#if defined(DCPOMATIC_WINDOWS) + if (Config::instance()->win32_console ()) { + AllocConsole(); + + HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); + int hCrt = _open_osfhandle((intptr_t) handle_out, _O_TEXT); + FILE* hf_out = _fdopen(hCrt, "w"); + setvbuf(hf_out, NULL, _IONBF, 1); + *stdout = *hf_out; + + HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE); + hCrt = _open_osfhandle((intptr_t) handle_in, _O_TEXT); + FILE* hf_in = _fdopen(hCrt, "r"); + setvbuf(hf_in, NULL, _IONBF, 128); + *stdin = *hf_in; + } #endif wxMenuBar* bar = new wxMenuBar; diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index ada082359..8d8f44b4e 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -1163,6 +1163,12 @@ public: table->Add (t, 0, wxALL, 6); } +#ifdef DCPOMATIC_WINDOWS + _win32_console = new wxCheckBox (panel, wxID_ANY, _("Open console window")); + table->Add (_win32_console, 1, wxEXPAND | wxALL); + table->AddSpacer (0); +#endif + Config* config = Config::instance (); _maximum_j2k_bandwidth->SetRange (1, 500); @@ -1178,6 +1184,10 @@ public: _log_error->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this)); _log_timing->SetValue (config->log_types() & Log::TYPE_TIMING); _log_timing->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this)); +#ifdef DCPOMATIC_WINDOWS + _win32_console->SetValue (config->win32_console()); + _win32_console->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::win32_console_changed, this)); +#endif return panel; } @@ -1211,6 +1221,13 @@ private: } Config::instance()->set_log_types (types); } + +#ifdef DCPOMATIC_WINDOWS + void win32_console_changed () + { + Config::instance()->set_win32_console (_win32_console->GetValue ()); + } +#endif wxSpinCtrl* _maximum_j2k_bandwidth; wxCheckBox* _allow_any_dcp_frame_rate; @@ -1218,6 +1235,9 @@ private: wxCheckBox* _log_warning; wxCheckBox* _log_error; wxCheckBox* _log_timing; +#ifdef DCPOMATIC_WINDOWS + wxCheckBox* _win32_console; +#endif }; wxPreferencesEditor* -- 2.30.2