#include <iostream>
#include <boost/filesystem.hpp>
+#ifdef __WXMSW__
+#include <shellapi.h>
+#endif
#include <wx/aboutdlg.h>
#include <wx/stdpaths.h>
#include <wx/cmdline.h>
using std::cout;
using std::string;
+using std::wstring;
using std::stringstream;
using std::map;
using std::make_pair;
+using std::exception;
using boost::shared_ptr;
static FilmEditor* film_editor = 0;
ID_edit_preferences,
ID_jobs_make_dcp,
ID_jobs_send_dcp_to_tms,
- ID_jobs_examine_content,
- ID_jobs_make_dcp_from_existing_transcode,
+ ID_jobs_show_dcp,
+ ID_jobs_analyse_audio,
ID_help_about
};
jobs_menu = new wxMenu;
add_item (jobs_menu, "&Make DCP", ID_jobs_make_dcp, NEEDS_FILM);
add_item (jobs_menu, "&Send DCP to TMS", ID_jobs_send_dcp_to_tms, NEEDS_FILM);
+ add_item (jobs_menu, "S&how DCP", ID_jobs_show_dcp, NEEDS_FILM);
jobs_menu->AppendSeparator ();
- add_item (jobs_menu, "&Examine content", ID_jobs_examine_content, NEEDS_FILM);
- add_item (jobs_menu, "Make DCP from existing &transcode", ID_jobs_make_dcp_from_existing_transcode, NEEDS_FILM);
+ add_item (jobs_menu, "&Analyse audio", ID_jobs_analyse_audio, NEEDS_FILM);
wxMenu* help = new wxMenu;
add_item (help, "About", ID_help_about, ALWAYS);
Connect (ID_edit_preferences, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::edit_preferences));
Connect (ID_jobs_make_dcp, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp));
Connect (ID_jobs_send_dcp_to_tms, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_send_dcp_to_tms));
- Connect (ID_jobs_examine_content, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_examine_content));
- Connect (ID_jobs_make_dcp_from_existing_transcode, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp_from_existing_transcode));
+ Connect (ID_jobs_show_dcp, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_show_dcp));
+ Connect (ID_jobs_analyse_audio, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_analyse_audio));
Connect (ID_help_about, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about));
Connect (wxID_ANY, wxEVT_MENU_OPEN, wxMenuEventHandler (Frame::menu_opened));
film_viewer = new FilmViewer (film, panel);
JobManagerView* job_manager_view = new JobManagerView (panel);
- wxSizer* rhs_sizer = new wxBoxSizer (wxVERTICAL);
- rhs_sizer->Add (film_viewer, 3, wxEXPAND | wxALL);
- rhs_sizer->Add (job_manager_view, 1, wxEXPAND | wxALL);
+ _top_sizer = new wxBoxSizer (wxHORIZONTAL);
+ _top_sizer->Add (film_editor, 0, wxALL, 6);
+ _top_sizer->Add (film_viewer, 1, wxEXPAND | wxALL, 6);
- wxBoxSizer* main_sizer = new wxBoxSizer (wxHORIZONTAL);
- main_sizer->Add (film_editor, 0, wxALL, 6);
- main_sizer->Add (rhs_sizer, 1, wxEXPAND | wxALL, 6);
+ wxBoxSizer* main_sizer = new wxBoxSizer (wxVERTICAL);
+ main_sizer->Add (_top_sizer, 2, wxEXPAND | wxALL, 6);
+ main_sizer->Add (job_manager_view, 1, wxEXPAND | wxALL, 6);
panel->SetSizer (main_sizer);
set_menu_sensitivity ();
} else {
file_changed ("");
}
-
+
set_film ();
+
+ film_editor->Connect (wxID_ANY, wxEVT_SIZE, wxSizeEventHandler (Frame::film_editor_sized), 0, this);
}
private:
+ void film_editor_sized (wxSizeEvent &)
+ {
+ static bool in_layout = false;
+ if (!in_layout) {
+ in_layout = true;
+ _top_sizer->Layout ();
+ in_layout = false;
+ }
+ }
+
void menu_opened (wxMenuEvent& ev)
{
if (ev.GetMenu() != jobs_menu) {
bool const have_dcp = film && film->have_dcp();
jobs_menu->Enable (ID_jobs_send_dcp_to_tms, have_dcp);
+ jobs_menu->Enable (ID_jobs_show_dcp, have_dcp);
}
void set_film ()
if (r == wxID_OK) {
if (boost::filesystem::exists (d->get_path())) {
- error_dialog (this, wxString::Format (_("The directory %s already exists"), d->get_path().c_str()));
+ error_dialog (this, wxString::Format (_("The directory %s already exists."), d->get_path().c_str()));
return;
}
void jobs_make_dcp (wxCommandEvent &)
{
- JobWrapper::make_dcp (this, film, true);
- }
-
- void jobs_make_dcp_from_existing_transcode (wxCommandEvent &)
- {
- JobWrapper::make_dcp (this, film, false);
+ JobWrapper::make_dcp (this, film);
}
void jobs_send_dcp_to_tms (wxCommandEvent &)
{
film->send_dcp_to_tms ();
}
-
- void jobs_examine_content (wxCommandEvent &)
+
+ void jobs_show_dcp (wxCommandEvent &)
{
- film->examine_content ();
+#ifdef __WXMSW__
+ string d = film->directory();
+ wstring w;
+ w.assign (d.begin(), d.end());
+ ShellExecute (0, L"open", w.c_str(), 0, 0, SW_SHOWDEFAULT);
+#else
+ int r = system ("which nautilus");
+ if (WEXITSTATUS (r) == 0) {
+ system (string ("nautilus " + film->directory()).c_str ());
+ } else {
+ int r = system ("which konqueror");
+ if (WEXITSTATUS (r) == 0) {
+ system (string ("konqueror " + film->directory()).c_str ());
+ }
+ }
+#endif
+ }
+
+ void jobs_analyse_audio (wxCommandEvent &)
+ {
+ film->analyse_audio ();
}
void help_about (wxCommandEvent &)
info.SetWebSite (wxT ("http://carlh.net/software/dvdomatic"));
wxAboutBox (info);
}
+
+ wxSizer* _top_sizer;
};
#if wxMINOR_VERSION == 9
dvdomatic_setup ();
if (!film_to_load.empty() && boost::filesystem::is_directory (film_to_load)) {
- film.reset (new Film (film_to_load));
- film->log()->set_level (log_level);
+ try {
+ film.reset (new Film (film_to_load));
+ film->log()->set_level (log_level);
+ } catch (exception& e) {
+ error_dialog (0, std_to_wx (String::compose ("Could not load film %1 (%2)", film_to_load, e.what())));
+ }
}
Frame* f = new Frame (_("DVD-o-matic"));