#include "wx/hints_dialog.h"
#include "wx/html_dialog.h"
#include "wx/i18n_hook.h"
+#include "wx/id.h"
#include "wx/job_manager_view.h"
#include "wx/kdm_dialog.h"
#include "wx/nag_dialog.h"
#include "lib/version.h"
#include "lib/video_content.h"
#include <dcp/exceptions.h>
+#include <dcp/filesystem.h>
#include <dcp/raw_convert.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
map<wxMenuItem*, int> menu_items;
enum {
- ID_file_new = 1,
+ ID_file_new = DCPOMATIC_MAIN_MENU,
ID_file_open,
ID_file_save,
ID_file_save_as_template,
ID_file_duplicate_and_open,
ID_file_history,
/* Allow spare IDs after _history for the recent files list */
- ID_file_close = 100,
+ ID_file_close = DCPOMATIC_MAIN_MENU + 100,
ID_edit_copy,
ID_edit_paste,
ID_edit_select_all,
}
catch (FileNotFoundError& e) {
auto const dir = e.file().parent_path();
- if (boost::filesystem::exists(dir / "ASSETMAP") || boost::filesystem::exists(dir / "ASSETMAP.xml")) {
+ if (dcp::filesystem::exists(dir / "ASSETMAP") || dcp::filesystem::exists(dir / "ASSETMAP.xml")) {
error_dialog (
this, _("Could not open this folder as a DCP-o-matic project."),
_("It looks like you are trying to open a DCP. File -> Open is for loading DCP-o-matic projects, not DCPs. To import a DCP, create a new project with File -> New and then click the \"Add DCP...\" button.")
);
if (dialog.ShowModal() == wxID_OK) {
- save_all_config_as_zip(wx_to_std(dialog.GetPath()));
+ auto const path = boost::filesystem::path(wx_to_std(dialog.GetPath()));
+ if (boost::filesystem::exists(path)) {
+ boost::system::error_code ec;
+ boost::filesystem::remove(path, ec);
+ if (ec) {
+ error_dialog(nullptr, _("Could not remove existing preferences file"), std_to_wx(path.string()));
+ return;
+ }
+ }
+
+ save_all_config_as_zip(path);
}
}
/* Remove any existing DCP if the user agrees */
auto const dcp_dir = _film->dir (_film->dcp_name(), false);
- if (boost::filesystem::exists(dcp_dir)) {
+ if (dcp::filesystem::exists(dcp_dir)) {
if (!confirm_dialog (this, wxString::Format (_("Do you want to overwrite the existing DCP %s?"), std_to_wx(dcp_dir.string()).data()))) {
return;
}
- boost::filesystem::remove_all (dcp_dir);
+ dcp::filesystem::remove_all(dcp_dir);
}
try {
return;
}
- if (boost::filesystem::exists(dialog.path())) {
+ if (dcp::filesystem::exists(dialog.path())) {
bool ok = confirm_dialog(
this,
wxString::Format(_("File %s already exists. Do you want to overwrite it?"), std_to_wx(dialog.path().string()).data())
add_item (edit, _("Select all\tShift-Ctrl-A"), ID_edit_select_all, NEEDS_FILM);
#ifdef __WXOSX__
- add_item (_file_menu, _("&Preferences...\tCtrl-P"), wxID_PREFERENCES, ALWAYS);
+ add_item(_file_menu, _("&Preferences...\tCtrl-,"), wxID_PREFERENCES, ALWAYS);
#else
edit->AppendSeparator ();
/* [Shortcut] Ctrl+P:Open preferences window */
App ()
: wxApp ()
{
+ dcpomatic_setup_path_encoding ();
#ifdef DCPOMATIC_LINUX
XInitThreads ();
#endif
make_foreground_application ();
#endif
- dcpomatic_setup_path_encoding ();
-
/* Enable i18n; this will create a Config object
to look for a force-configured language. This Config
object will be wrong, however, because dcpomatic_setup
signal_manager = new wxSignalManager (this);
Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1));
- if (!_film_to_load.empty() && boost::filesystem::is_directory(_film_to_load)) {
+ if (!_film_to_load.empty() && dcp::filesystem::is_directory(_film_to_load)) {
try {
_frame->load_film (_film_to_load);
} catch (exception& e) {
}
return true;
}
+ case Config::BAD_SIGNER_DN_QUALIFIER:
+ {
+ RecreateChainDialog dialog(
+ _frame, _("Recreate signing certificates"),
+ _("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs contains a small error\n"
+ "which will prevent DCPs from being validated correctly on some systems. This error was caused\n"
+ "by a bug in DCP-o-matic which has now been fixed. Do you want to re-create the certificate chain\n"
+ "for signing DCPs and KDMs?"),
+ _("Do nothing"),
+ Config::NAG_BAD_SIGNER_DN_QUALIFIER
+ );
+ return dialog.ShowModal() == wxID_OK;
+ }
default:
DCPOMATIC_ASSERT (false);
}