X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=3edc241817bb062fda4d7834291da18f96ee4323;hb=81c71ecbd9106d93e5e2ce803ea924199f464d8f;hp=fe3a43f71c4d06fabce4e2931eb26afa4ad588e5;hpb=360f49fad409d1e37318ffcf3069c4111c19c7b8;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index fe3a43f71..3edc24181 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include "wx/film_viewer.h" #include "wx/film_editor.h" #include "wx/job_manager_view.h" @@ -45,6 +45,8 @@ #include "wx/servers_list_dialog.h" #include "wx/hints_dialog.h" #include "wx/update_dialog.h" +#include "wx/content_panel.h" +#include "wx/report_problem_dialog.h" #include "lib/film.h" #include "lib/config.h" #include "lib/util.h" @@ -72,8 +74,6 @@ using std::exception; using boost::shared_ptr; using boost::dynamic_pointer_cast; -// #define DCPOMATIC_WINDOWS_CONSOLE 1 - class FilmChangedDialog { public: @@ -128,6 +128,7 @@ enum { ID_tools_hints, ID_tools_encoding_servers, ID_tools_check_for_updates, + ID_help_report_a_problem, /* IDs for shortcuts (with no associated menu item) */ ID_add_file }; @@ -145,20 +146,24 @@ 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; + + cout << "DCP-o-matic is starting." << "\n"; + } #endif wxMenuBar* bar = new wxMenuBar; @@ -185,15 +190,10 @@ public: Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_encoding_servers, this), ID_tools_encoding_servers); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_check_for_updates, this), ID_tools_check_for_updates); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_about, this), wxID_ABOUT); + Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_report_a_problem, this), ID_help_report_a_problem); Bind (wxEVT_CLOSE_WINDOW, boost::bind (&Frame::close, this, _1)); - wxAcceleratorEntry accel[1]; - accel[0].Set (wxACCEL_CTRL, static_cast('A'), ID_add_file); - Bind (wxEVT_MENU, boost::bind (&FilmEditor::content_add_file_clicked, _film_editor), ID_add_file); - wxAcceleratorTable accel_table (1, accel); - SetAcceleratorTable (accel_table); - /* Use a panel as the only child of the Frame so that we avoid the dark-grey background on Windows. */ @@ -201,7 +201,7 @@ public: _film_editor = new FilmEditor (overall_panel); _film_viewer = new FilmViewer (overall_panel); - JobManagerView* job_manager_view = new JobManagerView (overall_panel, static_cast (0)); + JobManagerView* job_manager_view = new JobManagerView (overall_panel); wxBoxSizer* right_sizer = new wxBoxSizer (wxVERTICAL); right_sizer->Add (_film_viewer, 2, wxEXPAND | wxALL, 6); @@ -219,6 +219,12 @@ public: JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&Frame::set_menu_sensitivity, this)); overall_panel->SetSizer (main_sizer); + + wxAcceleratorEntry accel[1]; + accel[0].Set (wxACCEL_CTRL, static_cast('A'), ID_add_file); + Bind (wxEVT_MENU, boost::bind (&ContentPanel::add_file_clicked, _film_editor->content_panel()), ID_add_file); + wxAcceleratorTable accel_table (1, accel); + SetAcceleratorTable (accel_table); } void new_film (boost::filesystem::path path) @@ -410,7 +416,7 @@ private: shared_ptr (new SendKDMEmailJob (_film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation ())) ); } - } catch (libdcp::NotEncryptedError& e) { + } catch (dcp::NotEncryptedError& e) { error_dialog (this, _("CPL's content is not encrypted.")); } catch (exception& e) { error_dialog (this, e.what ()); @@ -423,7 +429,7 @@ private: void content_scale_to_fit_width () { - VideoContentList vc = _film_editor->selected_video_content (); + VideoContentList vc = _film_editor->content_panel()->selected_video (); for (VideoContentList::iterator i = vc.begin(); i != vc.end(); ++i) { (*i)->scale_and_crop_to_fit_width (); } @@ -431,7 +437,7 @@ private: void content_scale_to_fit_height () { - VideoContentList vc = _film_editor->selected_video_content (); + VideoContentList vc = _film_editor->content_panel()->selected_video (); for (VideoContentList::iterator i = vc.begin(); i != vc.end(); ++i) { (*i)->scale_and_crop_to_fit_height (); } @@ -498,6 +504,15 @@ private: d->Destroy (); } + void help_report_a_problem () + { + ReportProblemDialog* d = new ReportProblemDialog (this, _film); + if (d->ShowModal () == wxID_OK) { + d->report (); + } + d->Destroy (); + } + bool should_close () { if (!JobManager::instance()->work_to_do ()) { @@ -542,7 +557,7 @@ private: } bool const dcp_creation = (i != jobs.end ()) && !(*i)->finished (); bool const have_cpl = _film && !_film->cpls().empty (); - bool const have_selected_video_content = !_film_editor->selected_video_content().empty(); + bool const have_selected_video_content = !_film_editor->content_panel()->selected_video().empty(); for (map::iterator j = menu_items.begin(); j != menu_items.end(); ++j) { @@ -644,6 +659,7 @@ private: #else add_item (help, _("About"), wxID_ABOUT, ALWAYS); #endif + add_item (help, _("Report a problem..."), ID_help_report_a_problem, ALWAYS); m->Append (_file_menu, _("&File")); #ifndef __WXOSX__ @@ -707,6 +723,9 @@ static const wxCmdLineEntryDesc command_line_description[] = { { wxCMD_LINE_NONE, "", "", "", wxCmdLineParamType (0), 0 } }; +/** @class App + * @brief The magic App class for wxWidgets. + */ class App : public wxApp { bool OnInit () @@ -818,9 +837,8 @@ class App : public wxApp try { throw; } catch (exception& e) { - error_dialog (0, wxString::Format (_("An exception occurred (%s). Please report this problem to the DCP-o-matic author (carl@dcpomatic.com)."), e.what ())); - } catch (...) { - error_dialog (0, _("An unknown exception occurred. Please report this problem to the DCP-o-matic author (carl@dcpomatic.com).")); + error_dialog (0, wxString::Format (_("An exception occurred (%s)."), e.what ()) + " " + REPORT_PROBLEM); } catch (...) { + error_dialog (0, _("An unknown exception occurred.") + " " + REPORT_PROBLEM); } /* This will terminate the program */ @@ -829,7 +847,7 @@ class App : public wxApp void OnUnhandledException () { - error_dialog (0, _("An unknown exception occurred. Please report this problem to the DCP-o-matic author (carl@dcpomatic.com).")); + error_dialog (0, _("An unknown exception occurred.") + " " + REPORT_PROBLEM); } void idle ()