*/
+/** @file src/tools/dcpomatic.cc
+ * @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/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/log.h"
#include "lib/job_manager.h"
#include "lib/transcode_job.h"
#include "wx/wx_util.h"
#include "wx/new_film_dialog.h"
#include "wx/properties_dialog.h"
-#include "wx/wx_ui_signaller.h"
+#include "wx/wx_signal_manager.h"
#include "wx/about_dialog.h"
#include "wx/kdm_dialog.h"
#include "wx/servers_list_dialog.h"
ID_file_save,
ID_file_properties,
ID_file_history,
- ID_edit_restore_default_preferences,
/* Allow spare IDs after _history for the recent files list */
ID_content_scale_to_fit_width = 100,
ID_content_scale_to_fit_height,
ID_tools_hints,
ID_tools_encoding_servers,
ID_tools_check_for_updates,
+ ID_tools_restore_default_preferences,
ID_help_report_a_problem,
/* IDs for shortcuts (with no associated menu item) */
ID_add_file
};
-class Frame : public wxFrame
+class DOMFrame : public wxFrame
{
public:
- Frame (wxString const & title)
+ DOMFrame (wxString const & title)
: wxFrame (NULL, -1, title)
, _hints_dialog (0)
, _servers_list_dialog (0)
setup_menu (bar);
SetMenuBar (bar);
- _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&Frame::config_changed, this));
+ _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&DOMFrame::config_changed, this));
config_changed ();
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_new, this), ID_file_new);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_open, this), ID_file_open);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_save, this), ID_file_save);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_properties, this), ID_file_properties);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_history, this, _1), ID_file_history, ID_file_history + HISTORY_SIZE);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::file_exit, this), wxID_EXIT);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::edit_preferences, this), wxID_PREFERENCES);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::edit_restore_default_preferences, this), ID_edit_restore_default_preferences);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::content_scale_to_fit_width, this), ID_content_scale_to_fit_width);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::content_scale_to_fit_height, this), ID_content_scale_to_fit_height);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_dcp, this), ID_jobs_make_dcp);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_make_kdms, this), ID_jobs_make_kdms);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::jobs_show_dcp, this), ID_jobs_show_dcp);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_hints, this), ID_tools_hints);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_encoding_servers, this), ID_tools_encoding_servers);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::tools_check_for_updates, this), ID_tools_check_for_updates);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_about, this), wxID_ABOUT);
- Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&Frame::help_report_a_problem, this), ID_help_report_a_problem);
-
- Bind (wxEVT_CLOSE_WINDOW, boost::bind (&Frame::close, this, _1));
+ 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::content_scale_to_fit_width, this), ID_content_scale_to_fit_width);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::content_scale_to_fit_height, this), ID_content_scale_to_fit_height);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_make_dcp, this), ID_jobs_make_dcp);
+ 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_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);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_restore_default_preferences, this), ID_tools_restore_default_preferences);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::help_about, this), wxID_ABOUT);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::help_report_a_problem, this), ID_help_report_a_problem);
+
+ Bind (wxEVT_CLOSE_WINDOW, boost::bind (&DOMFrame::close, this, _1));
/* Use a panel as the only child of the Frame so that we avoid
the dark-grey background on Windows.
set_menu_sensitivity ();
- _film_editor->FileChanged.connect (bind (&Frame::file_changed, this, _1));
+ _film_editor->FileChanged.connect (bind (&DOMFrame::file_changed, this, _1));
file_changed ("");
- JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&Frame::set_menu_sensitivity, this));
+ JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&DOMFrame::set_menu_sensitivity, this));
overall_panel->SetSizer (main_sizer);
Bind (wxEVT_MENU, boost::bind (&ContentPanel::add_file_clicked, _film_editor->content_panel()), ID_add_file);
wxAcceleratorTable accel_table (1, accel);
SetAcceleratorTable (accel_table);
+
+ /* Instantly save any config changes when using the DCP-o-matic GUI */
+ Config::instance()->Changed.connect (boost::bind (&Config::write, Config::instance ()));
}
void new_film (boost::filesystem::path path)
_config_dialog->Show (this);
}
- void edit_restore_default_preferences ()
+ void tools_restore_default_preferences ()
{
Config::restore_defaults ();
}
{
double required;
double available;
+ bool can_hard_link;
- if (!_film->should_be_enough_disk_space (required, available)) {
- if (!confirm_dialog (this, wxString::Format (_("The DCP for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. Do you want to continue anyway?"), required, available))) {
+ if (!_film->should_be_enough_disk_space (required, available, can_hard_link)) {
+ wxString message;
+ if (can_hard_link) {
+ message = wxString::Format (_("The DCP for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. Do you want to continue anyway?"), required, available);
+ } else {
+ message = wxString::Format (_("The DCP and intermediate files for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. You would need half as much space if the filesystem supported hard links, but it does not. Do you want to continue anyway?"), required, available);
+ }
+ if (!confirm_dialog (this, message)) {
return;
}
}
#ifdef __WXOSX__
add_item (_file_menu, _("&Preferences...\tCtrl-P"), wxID_PREFERENCES, ALWAYS);
- add_item (_file_menu, _("Restore default preferences"), ID_edit_restore_default_preferences, ALWAYS);
#else
wxMenu* edit = new wxMenu;
add_item (edit, _("&Preferences...\tCtrl-P"), wxID_PREFERENCES, ALWAYS);
- add_item (edit, _("Restore default preferences"), ID_edit_restore_default_preferences, ALWAYS);
#endif
wxMenu* content = new wxMenu;
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);
+ tools->AppendSeparator ();
+ add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS);
wxMenu* help = new wxMenu;
#ifdef __WXOSX__
*/
Config::drop ();
- _frame = new Frame (_("DCP-o-matic"));
+ _frame = new DOMFrame (_("DCP-o-matic"));
SetTopWindow (_frame);
_frame->Maximize ();
_frame->Show ();
}
}
- ui_signaller = new wxUISignaller (this);
+ signal_manager = new wxSignalManager (this);
Bind (wxEVT_IDLE, boost::bind (&App::idle, this));
Bind (wxEVT_TIMER, boost::bind (&App::check, this));
void idle ()
{
- ui_signaller->ui_idle ();
+ signal_manager->ui_idle ();
}
void check ()
}
}
- Frame* _frame;
+ DOMFrame* _frame;
shared_ptr<wxTimer> _timer;
string _film_to_load;
string _film_to_create;