#include "lib/util.h"
#include "lib/film.h"
#include "lib/ffmpeg_content.h"
+#include "lib/audio_processor.h"
#include <dcp/key.h>
#include <wx/wx.h>
#include <wx/notebook.h>
#include <wx/gbsizer.h>
#include <wx/spinctrl.h>
#include <boost/lexical_cast.hpp>
+#include <boost/foreach.hpp>
using std::cout;
using std::list;
++r;
}
- add_label_to_grid_bag_sizer (grid, _panel, _("DCP Name"), true, wxGBPosition (r, 0));
- _dcp_name = new wxStaticText (_panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END);
- grid->Add (_dcp_name, wxGBPosition(r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxEXPAND);
+ /* wxST_ELLIPSIZE_MIDDLE works around a bug in GTK2 and/or wxWidgets, see
+ http://trac.wxwidgets.org/ticket/12539
+ */
+ _dcp_name = new wxStaticText (
+ _panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize,
+ wxALIGN_CENTRE_HORIZONTAL | wxST_NO_AUTORESIZE | wxST_ELLIPSIZE_MIDDLE
+ );
+
+ grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan (1, 2), wxALIGN_CENTER_VERTICAL | wxEXPAND);
++r;
add_label_to_grid_bag_sizer (grid, _panel, _("Content Type"), true, wxGBPosition (r, 0));
break;
case Film::RESOLUTION:
checked_set (_resolution, _film->resolution() == RESOLUTION_2K ? 0 : 1);
+ setup_container ();
setup_dcp_name ();
break;
case Film::J2K_BANDWIDTH:
void
DCPPanel::film_content_changed (int property)
{
- if (property == FFmpegContentProperty::AUDIO_STREAM ||
+ if (property == FFmpegContentProperty::AUDIO_STREAMS ||
property == SubtitleContentProperty::USE_SUBTITLES ||
property == VideoContentProperty::VIDEO_SCALE) {
setup_dcp_name ();
if (i == ratios.end()) {
checked_set (_container, -1);
+ checked_set (_container_size, wxT (""));
} else {
checked_set (_container, n);
+ dcp::Size const size = fit_ratio_within (_film->container()->ratio(), _film->full_frame ());
+ checked_set (_container_size, wxString::Format ("%dx%d", size.width, size.height));
}
setup_dcp_name ();
_frame_rate_choice->Enable (s);
_frame_rate_spin->Enable (s);
_audio_channels->Enable (s);
+ _audio_processor->Enable (s);
_j2k_bandwidth->Enable (s);
_container->Enable (s);
_best_frame_rate->Enable (s && _film && _film->best_video_frame_rate () != _film->video_frame_rate ());
void
DCPPanel::setup_dcp_name ()
{
- string s = _film->dcp_name (true);
- if (s.length() > 28) {
- _dcp_name->SetLabel (std_to_wx (s.substr (0, 28)) + N_("..."));
- _dcp_name->SetToolTip (std_to_wx (s));
- } else {
- _dcp_name->SetLabel (std_to_wx (s));
- }
+ _dcp_name->SetLabel (std_to_wx (_film->dcp_name (true)));
}
void
int r = 0;
add_label_to_grid_bag_sizer (grid, panel, _("Container"), true, wxGBPosition (r, 0));
- _container = new wxChoice (panel, wxID_ANY);
- grid->Add (_container, wxGBPosition (r, 1));
- ++r;
+ {
+ wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ _container = new wxChoice (panel, wxID_ANY);
+ s->Add (_container, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP);
+ _container_size = new wxStaticText (panel, wxID_ANY, wxT (""));
+ s->Add (_container_size, 1, wxLEFT | wxALIGN_CENTER_VERTICAL);
+ grid->Add (s, wxGBPosition (r,1 ), wxDefaultSpan, wxEXPAND);
+ ++r;
+ }
+ add_label_to_grid_bag_sizer (grid, panel, _("Frame Rate"), true, wxGBPosition (r, 0));
{
- add_label_to_grid_bag_sizer (grid, panel, _("Frame Rate"), true, wxGBPosition (r, 0));
_frame_rate_sizer = new wxBoxSizer (wxHORIZONTAL);
_frame_rate_choice = new wxChoice (panel, wxID_ANY);
_frame_rate_sizer->Add (_frame_rate_choice, 1, wxALIGN_CENTER_VERTICAL);
_best_frame_rate = new wxButton (panel, wxID_ANY, _("Use best"));
_frame_rate_sizer->Add (_best_frame_rate, 1, wxALIGN_CENTER_VERTICAL);
grid->Add (_frame_rate_sizer, wxGBPosition (r, 1));
+ ++r;
}
- ++r;
_burn_subtitles = new wxCheckBox (panel, wxID_ANY, _("Burn subtitles into image"));
grid->Add (_burn_subtitles, wxGBPosition (r, 0), wxGBSpan (1, 2));
panel->SetSizer (sizer);
int r = 0;
+
add_label_to_grid_bag_sizer (grid, panel, _("Channels"), true, wxGBPosition (r, 0));
_audio_channels = new wxChoice (panel, wxID_ANY);
for (int i = 2; i <= 12; i += 2) {
_audio_channels->Append (wxString::Format ("%d", i));
}
grid->Add (_audio_channels, wxGBPosition (r, 1));
+
+ add_label_to_grid_bag_sizer (grid, panel, _("Processor"), true, wxGBPosition (r, 0));
+ _audio_processor = new wxChoice (panel, wxID_ANY);
+ _audio_processor->Append (_("None"), new wxStringClientData (N_("none")));
+ BOOST_FOREACH (AudioProcessor const * ap, AudioProcessor::all ()) {
+ _audio_processor->Append (std_to_wx (ap->name ()), new wxStringClientData (std_to_wx (ap->id ())));
+ }
+ grid->Add (_audio_processor, wxGBPosition (r, 1));
+
++r;
_audio_channels->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DCPPanel::audio_channels_changed, this));
+ _audio_processor->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&DCPPanel::audio_processor_changed, this));
return panel;
}
_film->set_name (_film->isdcf_name (false));
_film->set_use_isdcf_name (false);
}
+
+void
+DCPPanel::audio_processor_changed ()
+{
+ if (!_film) {
+ return;
+ }
+
+ string const s = string_client_data (_audio_processor->GetClientObject (_audio_processor->GetSelection ()));
+ if (s != "none") {
+ _film->set_audio_processor (AudioProcessor::from_id (s));
+ }
+}