+ wxBitmap add(icon_path("add"), wxBITMAP_TYPE_PNG);
+ wxBitmap pause(icon_path("pause"), wxBITMAP_TYPE_PNG);
+
+ auto toolbar = new wxToolBar(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL);
+ toolbar->SetMargins(4, 4);
+ toolbar->SetToolBitmapSize(wxSize(32, 32));
+ toolbar->AddTool(static_cast<int>(Tool::ADD), _("Add film"), add, _("Add film for conversion"));
+ toolbar->AddCheckTool(static_cast<int>(Tool::PAUSE), _("Pause/resume"), pause, wxNullBitmap, _("Pause or resume conversion"));
+ toolbar->Realize();
+ _sizer->Add(toolbar, 0, wxALL, 6);
+
+ toolbar->Bind(wxEVT_TOOL, bind(&DOMFrame::tool_clicked, this, _1));
+
+ auto job_manager_view = new JobManagerView (panel, true);
+ _sizer->Add (job_manager_view, 1, wxALL | wxEXPAND, 6);
+
+ panel->SetSizer (_sizer);
+
+ Bind (wxEVT_CLOSE_WINDOW, boost::bind(&DOMFrame::close, this, _1));
+ Bind (wxEVT_SIZE, boost::bind(&DOMFrame::sized, this, _1));
+
+ SetDropTarget(new DCPDropTarget(this));
+ }
+
+ void tool_clicked(wxCommandEvent& ev)
+ {
+ switch (static_cast<Tool>(ev.GetId())) {
+ case Tool::ADD:
+ add_film();
+ break;
+ case Tool::PAUSE:
+ {
+ auto jm = JobManager::instance();
+ if (jm->paused()) {
+ jm->resume();
+ } else {
+ jm->pause();
+ }
+ break;
+ }
+ }
+ }
+
+ void start_job (boost::filesystem::path path)
+ {
+ try {
+ auto film = make_shared<Film>(path);
+ film->read_metadata ();
+
+ double total_required;
+ double available;
+ bool can_hard_link;