#include "wx/wx_util.h"
#include "lib/analytics.h"
#include "lib/audio_content.h"
-#include "lib/check_content_change_job.h"
+#include "lib/check_content_job.h"
#include "lib/cinema.h"
#include "lib/compose.hpp"
#include "lib/config.h"
#include "lib/kdm_with_metadata.h"
#include "lib/log.h"
#include "lib/make_dcp.h"
+#include "lib/release_notes.h"
#include "lib/screen.h"
#include "lib/send_kdm_email_job.h"
#include "lib/signal_manager.h"
#include "lib/util.h"
#include "lib/version.h"
#include "lib/video_content.h"
-#include "lib/warnings.h"
#include <dcp/exceptions.h>
#include <dcp/raw_convert.h>
-DCPOMATIC_DISABLE_WARNINGS
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
#include <wx/cmdline.h>
#include <wx/generic/aboutdlgg.h>
#include <wx/preferences.h>
#include <wx/splash.h>
#include <wx/stdpaths.h>
#include <wx/wxhtml.h>
-DCPOMATIC_ENABLE_WARNINGS
+LIBDCP_ENABLE_WARNINGS
#ifdef __WXGTK__
#include <X11/Xlib.h>
#endif
set_menu_sensitivity ();
- _film_editor->FileChanged.connect (bind (&DOMFrame::file_changed, this, _1));
_film_editor->content_panel()->SelectionChanged.connect (boost::bind (&DOMFrame::set_menu_sensitivity, this));
- file_changed ("");
+ set_title ();
- JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&DOMFrame::set_menu_sensitivity, this));
+ JobManager::instance()->ActiveJobsChanged.connect(boost::bind(&DOMFrame::active_jobs_changed, this));
overall_panel->SetSizer (main_sizer);
#else
int accelerators = 6;
#endif
- auto accel = new wxAcceleratorEntry[accelerators];
+ std::vector<wxAcceleratorEntry> accel(accelerators);
/* [Shortcut] Ctrl+A:Add file(s) to the film */
accel[0].Set (wxACCEL_CTRL, static_cast<int>('A'), ID_add_file);
/* [Shortcut] Delete:Remove selected content from film */
Bind (wxEVT_MENU, boost::bind (&DOMFrame::timeline_pressed, this), ID_timeline);
Bind (wxEVT_MENU, boost::bind (&DOMFrame::back_frame, this), ID_back_frame);
Bind (wxEVT_MENU, boost::bind (&DOMFrame::forward_frame, this), ID_forward_frame);
- wxAcceleratorTable accel_table (accelerators, accel);
+ wxAcceleratorTable accel_table (accelerators, accel.data());
SetAcceleratorTable (accel_table);
- delete[] accel;
}
void remove_accelerators ()
set_film (film);
- JobManager::instance()->add(shared_ptr<Job>(new CheckContentChangeJob(film)));
+ JobManager::instance()->add(make_shared<CheckContentJob>(film));
}
catch (FileNotFoundError& e) {
auto const dir = e.file().parent_path();
if (_film) {
_film->Change.connect (boost::bind (&DOMFrame::film_change, this, _1));
_film->Message.connect (boost::bind(&DOMFrame::film_message, this, _1));
+ _film->DirtyChange.connect (boost::bind(&DOMFrame::set_title, this));
dcpomatic_log = _film->log ();
}
+ set_title ();
}
shared_ptr<Film> film () const {
}
}
- void file_changed (boost::filesystem::path f)
- {
- auto s = wx_to_std(_("DCP-o-matic"));
- if (!f.empty ()) {
- s += " - " + f.string ();
- }
-
- SetTitle (std_to_wx (s));
- }
-
void file_new ()
{
auto d = new FilmNameLocationDialog (this, _("New Film"), true);
ev.Skip ();
}
+ void active_jobs_changed()
+ {
+ /* ActiveJobsChanged can be called while JobManager holds a lock on its mutex, making
+ * the call to JobManager::get() in set_menu_sensitivity() deadlock unless we work around
+ * it by using an idle callback. This feels quite unpleasant.
+ */
+ signal_manager->when_idle(boost::bind(&DOMFrame::set_menu_sensitivity, this));
+ }
+
void set_menu_sensitivity ()
{
auto jobs = JobManager::instance()->get ();
d->Destroy();
}
+ void set_title ()
+ {
+ auto s = wx_to_std(_("DCP-o-matic"));
+ if (_film) {
+ if (_film->directory()) {
+ s += " - " + _film->directory()->string();
+ }
+ if (_film->dirty()) {
+ s += " *";
+ }
+ }
+
+ SetTitle (std_to_wx(s));
+ }
+
FilmEditor* _film_editor;
std::shared_ptr<FilmViewer> _film_viewer;
StandardControls* _controls;
if (Config::instance()->check_for_updates ()) {
UpdateChecker::instance()->run ();
}
+
+ auto release_notes = find_release_notes();
+ if (release_notes) {
+ auto notes = new HTMLDialog(nullptr, _("Release notes"), std_to_wx(*release_notes), true);
+ notes->Centre();
+ notes->ShowModal();
+ notes->Destroy();
+ }
}
catch (exception& e)
{