* @brief The main DCP-o-matic GUI.
*/
-#include "lib/film.h"
-#include "lib/config.h"
-#include "lib/util.h"
-#include "lib/version.h"
-#include "lib/signal_manager.h"
-#include "lib/log.h"
-#include "lib/job_manager.h"
-#include "lib/transcode_job.h"
-#include "lib/exceptions.h"
-#include "lib/cinema.h"
-#include "lib/kdm.h"
-#include "lib/send_kdm_email_job.h"
-#include "lib/server_finder.h"
-#include "lib/update.h"
-#include "lib/content_factory.h"
#include "wx/film_viewer.h"
#include "wx/film_editor.h"
#include "wx/job_manager_view.h"
#include "wx/config_dialog.h"
#include "wx/wx_util.h"
#include "wx/new_film_dialog.h"
-#include "wx/properties_dialog.h"
#include "wx/wx_signal_manager.h"
#include "wx/about_dialog.h"
#include "wx/kdm_dialog.h"
#include "wx/update_dialog.h"
#include "wx/content_panel.h"
#include "wx/report_problem_dialog.h"
+#include "wx/video_waveform_dialog.h"
+#include "lib/film.h"
+#include "lib/config.h"
+#include "lib/util.h"
+#include "lib/video_content.h"
+#include "lib/version.h"
+#include "lib/signal_manager.h"
+#include "lib/log.h"
+#include "lib/job_manager.h"
+#include "lib/exceptions.h"
+#include "lib/cinema.h"
+#include "lib/kdm.h"
+#include "lib/send_kdm_email_job.h"
+#include "lib/server_finder.h"
+#include "lib/update_checker.h"
+#include "lib/cross.h"
+#include "lib/content_factory.h"
+#include "lib/compose.hpp"
#include <dcp/exceptions.h>
#include <wx/generic/aboutdlgg.h>
#include <wx/stdpaths.h>
#include <wx/cmdline.h>
#include <wx/preferences.h>
+#include <wx/splash.h>
#ifdef __WXMSW__
#include <shellapi.h>
#endif
_dialog = new wxMessageDialog (
0,
wxString::Format (_("Save changes to film \"%s\" before closing?"), std_to_wx (name).data()),
- /* TRANSLATORS: this is the heading for a dialog box, which tells the user that the current
- project (Film) has been changed since it was last saved.
- */
+ /// TRANSLATORS: this is the heading for a dialog box, which tells the user that the current
+ /// project (Film) has been changed since it was last saved.
_("Film changed"),
wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION
);
ID_file_new = 1,
ID_file_open,
ID_file_save,
- ID_file_properties,
ID_file_history,
/* Allow spare IDs after _history for the recent files list */
ID_content_scale_to_fit_width = 100,
ID_jobs_make_kdms,
ID_jobs_send_dcp_to_tms,
ID_jobs_show_dcp,
+ ID_tools_video_waveform,
ID_tools_hints,
ID_tools_encoding_servers,
ID_tools_check_for_updates,
public:
DOMFrame (wxString const & title)
: wxFrame (NULL, -1, title)
+ , _video_waveform_dialog (0)
, _hints_dialog (0)
, _servers_list_dialog (0)
, _config_dialog (0)
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_new, this), ID_file_new);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_open, this), ID_file_open);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_save, this), ID_file_save);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_properties, this), ID_file_properties);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_history, this, _1), ID_file_history, ID_file_history + HISTORY_SIZE);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::file_exit, this), wxID_EXIT);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::edit_preferences, this), wxID_PREFERENCES);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_make_kdms, this), ID_jobs_make_kdms);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_show_dcp, this), ID_jobs_show_dcp);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_video_waveform, this), ID_tools_video_waveform);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_hints, this), ID_tools_hints);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_encoding_servers, this), ID_tools_encoding_servers);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_check_for_updates, this), ID_tools_check_for_updates);
_film->write_metadata ();
}
- void file_properties ()
- {
- PropertiesDialog* d = new PropertiesDialog (this, _film);
- d->ShowModal ();
- d->Destroy ();
- }
-
void file_history (wxCommandEvent& event)
{
vector<boost::filesystem::path> history = Config::instance()->history ();
#endif
}
+ void tools_video_waveform ()
+ {
+ if (!_video_waveform_dialog) {
+ _video_waveform_dialog = new VideoWaveformDialog (this, _film_viewer);
+ }
+
+ _video_waveform_dialog->Show ();
+ }
+
void tools_hints ()
{
if (!_hints_dialog) {
{
list<shared_ptr<Job> > jobs = JobManager::instance()->get ();
list<shared_ptr<Job> >::iterator i = jobs.begin();
- while (i != jobs.end() && dynamic_pointer_cast<TranscodeJob> (*i) == 0) {
+ while (i != jobs.end() && (*i)->json_name() != "transcode") {
++i;
}
bool const dcp_creation = (i != jobs.end ()) && !(*i)->finished ();
add_item (_file_menu, _("&Open...\tCtrl-O"), ID_file_open, ALWAYS);
_file_menu->AppendSeparator ();
add_item (_file_menu, _("&Save\tCtrl-S"), ID_file_save, NEEDS_FILM);
- _file_menu->AppendSeparator ();
- add_item (_file_menu, _("&Properties..."), ID_file_properties, NEEDS_FILM);
_history_position = _file_menu->GetMenuItems().GetCount();
add_item (jobs_menu, _("S&how DCP"), ID_jobs_show_dcp, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_CPL);
wxMenu* tools = new wxMenu;
+ add_item (tools, _("Video waveform..."), ID_tools_video_waveform, NEEDS_FILM);
add_item (tools, _("Hints..."), ID_tools_hints, 0);
add_item (tools, _("Encoding servers..."), ID_tools_encoding_servers, 0);
add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0);
FilmEditor* _film_editor;
FilmViewer* _film_viewer;
+ VideoWaveformDialog* _video_waveform_dialog;
HintsDialog* _hints_dialog;
ServersListDialog* _servers_list_dialog;
wxPreferencesEditor* _config_dialog;
bool OnInit ()
try
{
+ wxInitAllImageHandlers ();
+
+ wxSplashScreen* splash = 0;
+ try {
+ if (!Config::have_existing ()) {
+ wxBitmap bitmap;
+ boost::filesystem::path p = shared_path () / "splash.png";
+ if (bitmap.LoadFile (std_to_wx (p.string ()), wxBITMAP_TYPE_PNG)) {
+ splash = new wxSplashScreen (bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, 0, -1);
+ wxYield ();
+ }
+ }
+ } catch (boost::filesystem::filesystem_error& e) {
+ /* Maybe we couldn't find the splash image; never mind */
+ }
+
SetAppName (_("DCP-o-matic"));
if (!wxApp::OnInit()) {
TransformProcessType (&serial, kProcessTransformToForegroundApplication);
#endif
- wxInitAllImageHandlers ();
+ dcpomatic_setup_path_encoding ();
/* Enable i18n; this will create a Config object
to look for a force-configured language. This Config
_frame = new DOMFrame (_("DCP-o-matic"));
SetTopWindow (_frame);
_frame->Maximize ();
+ if (splash) {
+ splash->Destroy ();
+ }
_frame->Show ();
if (!_film_to_load.empty() && boost::filesystem::is_directory (_film_to_load)) {
try {
throw;
} catch (FileError& e) {
- error_dialog (0, wxString::Format (_("An exception occurred: %s in %s.\n\n" + REPORT_PROBLEM), e.what(), e.file().string().c_str ()));
+ error_dialog (
+ 0,
+ wxString::Format (
+ _("An exception occurred: %s (%s)\n\n") + REPORT_PROBLEM,
+ std_to_wx (e.what()),
+ std_to_wx (e.file().string().c_str ())
+ )
+ );
} catch (exception& e) {
- error_dialog (0, wxString::Format (_("An exception occurred: %s.\n\n"), e.what ()) + " " + REPORT_PROBLEM);
+ error_dialog (
+ 0,
+ wxString::Format (
+ _("An exception occurred: %s.\n\n") + " " + REPORT_PROBLEM,
+ std_to_wx (e.what ())
+ )
+ );
} catch (...) {
error_dialog (0, _("An unknown exception occurred.") + " " + REPORT_PROBLEM);
}