X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_editor.cc;h=3b26a5537e3bf3327f80e42bb048bcb20e9e065c;hb=f29219ed06d27dcae5e18b8b9c52dcf24554f188;hp=4240bc05c303cfa3eb72a704ee9f7e6d3ef51876;hpb=5d0f01f04f85280a562ac9da8f58ad0c3489f7aa;p=dcpomatic.git diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc index 4240bc05c..3b26a5537 100644 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@ -116,6 +116,7 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) s->Add (video_control (_audio_gain), 1); video_control (add_label_to_sizer (s, this, "dB")); _audio_gain_calculate_button = new wxButton (this, wxID_ANY, _("Calculate...")); + video_control (_audio_gain_calculate_button); s->Add (_audio_gain_calculate_button, 1, wxEXPAND); _sizer->Add (s); } @@ -130,8 +131,8 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) } video_control (add_label_to_sizer (_sizer, this, "Frames Per Second")); - _frames_per_second = new wxTextCtrl (this, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, 0, wxTextValidator (wxFILTER_NUMERIC)); - _sizer->Add (video_control (_frames_per_second)); + _frames_per_second = new wxStaticText (this, wxID_ANY, wxT ("")); + _sizer->Add (video_control (_frames_per_second), 1, wxALIGN_CENTER_VERTICAL); video_control (add_label_to_sizer (_sizer, this, "Original Size")); _original_size = new wxStaticText (this, wxID_ANY, wxT ("")); @@ -181,11 +182,6 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) _audio_delay->SetRange (-1000, 1000); _still_duration->SetRange (0, 60 * 60); - vector fmt = Format::all (); - for (vector::iterator i = fmt.begin(); i != fmt.end(); ++i) { - _format->Append (std_to_wx ((*i)->name ())); - } - vector const ct = DCPContentType::all (); for (vector::const_iterator i = ct.begin(); i != ct.end(); ++i) { _dcp_content_type->Append (std_to_wx ((*i)->pretty_name ())); @@ -201,7 +197,6 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) /* Now connect to them, since initial values are safely set */ _name->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (FilmEditor::name_changed), 0, this); - _frames_per_second->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (FilmEditor::frames_per_second_changed), 0, this); _format->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (FilmEditor::format_changed), 0, this); _content->Connect (wxID_ANY, wxEVT_COMMAND_FILEPICKER_CHANGED, wxCommandEventHandler (FilmEditor::content_changed), 0, this); _left_crop->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::left_crop_changed), 0, this); @@ -221,6 +216,7 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) _change_dcp_range_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::change_dcp_range_clicked), 0, this); setup_visibility (); + setup_formats (); } /** Called when the left crop widget has been changed */ @@ -289,14 +285,13 @@ FilmEditor::content_changed (wxCommandEvent &) _film->set_content (wx_to_std (_content->GetPath ())); } catch (std::exception& e) { _content->SetPath (std_to_wx (_film->directory ())); - stringstream m; - m << "Could not set content: " << e.what() << "."; - error_dialog (this, m.str ()); + error_dialog (this, String::compose ("Could not set content: %1", e.what ())); } _ignore_changes = Film::NONE; setup_visibility (); + setup_formats (); } /** Called when the DCP A/B switch has been toggled */ @@ -344,10 +339,19 @@ FilmEditor::film_changed (Film::Property p) case Film::CONTENT: _content->SetPath (std_to_wx (_film->content ())); setup_visibility (); + setup_formats (); break; case Film::FORMAT: - _format->SetSelection (Format::as_index (_film->format ())); + { + int n = 0; + vector::iterator i = _formats.begin (); + while (i != _formats.end() && *i != _film->format ()) { + ++i; + ++n; + } + _format->SetSelection (n); break; + } case Film::CROP: _left_crop->SetValue (_film->crop().left); _right_crop->SetValue (_film->crop().right); @@ -373,7 +377,7 @@ FilmEditor::film_changed (Film::Property p) { stringstream s; s << fixed << setprecision(2) << _film->frames_per_second(); - _frames_per_second->ChangeValue (std_to_wx (s.str ())); + _frames_per_second->SetLabel (std_to_wx (s.str ())); break; } case Film::AUDIO_CHANNELS: @@ -447,7 +451,8 @@ FilmEditor::format_changed (wxCommandEvent &) _ignore_changes = Film::FORMAT; int const n = _format->GetSelection (); if (n >= 0) { - _film->set_format (Format::from_index (n)); + assert (n < int (_formats.size())); + _film->set_format (_formats[n]); } _ignore_changes = Film::NONE; } @@ -558,19 +563,6 @@ FilmEditor::scaler_changed (wxCommandEvent &) _ignore_changes = Film::NONE; } -/** Called when the frames per second widget has been changed */ -void -FilmEditor::frames_per_second_changed (wxCommandEvent &) -{ - if (!_film) { - return; - } - - _ignore_changes = Film::FRAMES_PER_SECOND; - _film->set_frames_per_second (boost::lexical_cast (wx_to_std (_frames_per_second->GetValue ()))); - _ignore_changes = Film::NONE; -} - void FilmEditor::audio_gain_changed (wxCommandEvent &) { @@ -661,11 +653,52 @@ FilmEditor::audio_gain_calculate_button_clicked (wxCommandEvent &) { GainCalculatorDialog* d = new GainCalculatorDialog (this); d->ShowModal (); + + if (d->wanted_fader() == 0 || d->actual_fader() == 0) { + d->Destroy (); + return; + } + _audio_gain->SetValue ( Config::instance()->sound_processor()->db_for_fader_change ( d->wanted_fader (), d->actual_fader () ) ); + + /* This appears to be necessary, as the change is not signalled, + I think. + */ + wxCommandEvent dummy; + audio_gain_changed (dummy); + d->Destroy (); } + +void +FilmEditor::setup_formats () +{ + ContentType c = VIDEO; + + if (_film) { + c = _film->content_type (); + } + + _formats.clear (); + + vector fmt = Format::all (); + for (vector::iterator i = fmt.begin(); i != fmt.end(); ++i) { + if (c == VIDEO && dynamic_cast (*i)) { + _formats.push_back (*i); + } else if (c == STILL && dynamic_cast (*i)) { + _formats.push_back (*i); + } + } + + _format->Clear (); + for (vector::iterator i = _formats.begin(); i != _formats.end(); ++i) { + _format->Append (std_to_wx ((*i)->name ())); + } + + _sizer->Layout (); +}