Emit no audio from DCPs if none is mapped
[dcpomatic.git] / src / tools / dcpomatic_editor.cc
index 075cf177f091bea364a9424162818f0903dccae4..14ff6da7f04129f8188cb70d9d7e01ee337966a3 100644 (file)
 
 #include "wx/about_dialog.h"
 #include "wx/editable_list.h"
+#include "wx/id.h"
 #include "wx/wx_signal_manager.h"
 #include "wx/wx_util.h"
+#include "lib/constants.h"
 #include "lib/cross.h"
 #include "lib/dcpomatic_log.h"
 #include "lib/null_log.h"
-#include "lib/util.h"
 #include <dcp/cpl.h>
 #include <dcp/dcp.h>
 #include <dcp/reel.h>
@@ -59,7 +60,7 @@ using namespace boost::placeholders;
 
 
 enum {
-       ID_file_open = 1,
+       ID_file_open = DCPOMATIC_MAIN_MENU,
        ID_file_save,
 };
 
@@ -147,10 +148,10 @@ public:
        ReelEditor(wxWindow* parent)
                : wxDialog(parent, wxID_ANY, _("Edit reel"))
        {
-               auto sizer = new wxBoxSizer(wxVERTICAL);
+               _sizer = new wxBoxSizer(wxVERTICAL);
                _notebook = new wxNotebook(this, wxID_ANY);
-               sizer->Add(_notebook, wxEXPAND | wxALL, 1, DCPOMATIC_DIALOG_BORDER);
-               SetSizerAndFit(sizer);
+               _sizer->Add(_notebook, wxEXPAND | wxALL, 1, DCPOMATIC_DIALOG_BORDER);
+               SetSizerAndFit(_sizer);
        }
 
        optional<shared_ptr<dcp::Reel>> get() {
@@ -171,10 +172,14 @@ public:
                if (_reel->main_subtitle()) {
                        _notebook->AddPage(new AssetPanel(_notebook, _reel->main_subtitle()), _("Subtitle"));
                }
+
+               _sizer->Layout();
+               _sizer->SetSizeHints(this);
        }
 
 private:
        wxNotebook* _notebook = nullptr;
+       wxSizer* _sizer = nullptr;
        shared_ptr<dcp::Reel> _reel;
 };
 
@@ -221,7 +226,7 @@ public:
                        [](shared_ptr<dcp::Reel> reel, int) {
                                return reel->id();
                        },
-                       false,
+                       EditableListTitle::INVISIBLE,
                        EditableListButton::EDIT
                );
                sizer->Add(_reels, wxGBPosition(r, 1), wxDefaultSpan, wxEXPAND);
@@ -324,10 +329,15 @@ public:
 
        void load_dcp (boost::filesystem::path path)
        {
-               _notebook->DeleteAllPages();
+               try {
+                       _dcp = dcp::DCP(path);
+                       _dcp->read();
+               } catch (std::runtime_error& e) {
+                       error_dialog(this, _("Could not load DCP"), std_to_wx(e.what()));
+                       return;
+               }
 
-               _dcp = dcp::DCP(path);
-               _dcp->read();
+               _notebook->DeleteAllPages();
                for (auto cpl: _dcp->cpls()) {
                        _notebook->AddPage(new CPLPanel(_notebook, cpl), wx_to_std(cpl->annotation_text().get_value_or(cpl->id())));
                }
@@ -362,12 +372,12 @@ private:
        void file_open ()
        {
                auto d = wxStandardPaths::Get().GetDocumentsDir();
-               auto c = new wxDirDialog (this, _("Select DCP to open"), d, wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST);
+               wxDirDialog dialog(this, _("Select DCP to open"), d, wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST);
 
                int r;
                while (true) {
-                       r = c->ShowModal ();
-                       if (r == wxID_OK && c->GetPath() == wxStandardPaths::Get().GetDocumentsDir()) {
+                       r = dialog.ShowModal();
+                       if (r == wxID_OK && dialog.GetPath() == wxStandardPaths::Get().GetDocumentsDir()) {
                                error_dialog (this, _("You did not select a folder.  Make sure that you select a folder before clicking Open."));
                        } else {
                                break;
@@ -375,11 +385,9 @@ private:
                }
 
                if (r == wxID_OK) {
-                       boost::filesystem::path const dcp (wx_to_std (c->GetPath ()));
+                       boost::filesystem::path const dcp(wx_to_std(dialog.GetPath()));
                        load_dcp (dcp);
                }
-
-               c->Destroy ();
        }
 
        void file_save ()
@@ -394,9 +402,8 @@ private:
 
        void help_about ()
        {
-               auto d = new AboutDialog (this);
-               d->ShowModal ();
-               d->Destroy ();
+               AboutDialog dialog(this);
+               dialog.ShowModal();
        }
 
        wxPanel* _overall_panel = nullptr;
@@ -431,7 +438,7 @@ private:
 
        bool OnInit () override
        {
-               wxSplashScreen* splash = nullptr;
+               wxSplashScreen* splash;
                try {
                        wxInitAllImageHandlers ();