X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_panel.cc;h=9d6d9a00643467fc3fcbece5e1a9d350e8d62918;hb=27b83475435dda4e84a90cf59a52f150905c4ab1;hp=1aeba63728181478cbe755e28e67413d5795ef53;hpb=14247790278d45e98004ef54b8ba700d10f3193a;p=dcpomatic.git diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 1aeba6372..9d6d9a006 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington + Copyright (C) 2012-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -22,13 +22,13 @@ #include "wx_util.h" #include "video_panel.h" #include "audio_panel.h" -#include "subtitle_panel.h" +#include "caption_panel.h" #include "timing_panel.h" #include "timeline_dialog.h" #include "image_sequence_dialog.h" #include "film_viewer.h" #include "lib/audio_content.h" -#include "lib/subtitle_content.h" +#include "lib/caption_content.h" #include "lib/video_content.h" #include "lib/ffmpeg_content.h" #include "lib/content_factory.h" @@ -36,6 +36,11 @@ #include "lib/dcp_content.h" #include "lib/case_insensitive_sorter.h" #include "lib/playlist.h" +#include "lib/config.h" +#include "lib/log.h" +#include "lib/compose.hpp" +#include "lib/text_caption_file_content.h" +#include "lib/text_caption_file.h" #include #include #include @@ -53,6 +58,8 @@ using boost::weak_ptr; using boost::dynamic_pointer_cast; using boost::optional; +#define LOG_GENERAL(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); + ContentPanel::ContentPanel (wxNotebook* n, boost::shared_ptr film, FilmViewer* viewer) : _timeline_dialog (0) , _parent (n) @@ -118,8 +125,8 @@ ContentPanel::ContentPanel (wxNotebook* n, boost::shared_ptr film, FilmVie _panels.push_back (_video_panel); _audio_panel = new AudioPanel (this); _panels.push_back (_audio_panel); - _subtitle_panel = new SubtitlePanel (this); - _panels.push_back (_subtitle_panel); + _caption_panel = new CaptionPanel (this); + _panels.push_back (_caption_panel); _timing_panel = new TimingPanel (this, _film_viewer); _panels.push_back (_timing_panel); @@ -189,7 +196,7 @@ ContentPanel::selected_subtitle () ContentList sc; BOOST_FOREACH (shared_ptr i, selected ()) { - if (i->subtitle) { + if (i->caption) { sc.push_back (i); } } @@ -249,18 +256,31 @@ ContentPanel::selection_changed () optional go_to; BOOST_FOREACH (shared_ptr i, selected ()) { - if (!go_to || i->position() < go_to.get()) { - go_to = i->position (); + DCPTime p; + p = i->position(); + if (dynamic_pointer_cast(i) && i->paths_valid()) { + /* Rather special case; if we select a text subtitle file jump to its + first subtitle. + */ + TextCaptionFile ts (dynamic_pointer_cast(i)); + if (ts.first()) { + p += DCPTime(ts.first().get(), _film->active_frame_rate_change(i->position())); + } + } + if (!go_to || p < go_to.get()) { + go_to = p; } } - if (go_to) { - _film_viewer->set_position (go_to.get ()); + if (go_to && Config::instance()->jump_to_selected ()) { + _film_viewer->set_position (go_to.get().ceil(_film->video_frame_rate())); } if (_timeline_dialog) { _timeline_dialog->set_selection (selected ()); } + + SelectionChanged (); } void @@ -269,7 +289,7 @@ ContentPanel::add_file_clicked () /* This method is also called when Ctrl-A is pressed, so check that our notebook page is visible. */ - if (_parent->GetCurrentPage() != _panel) { + if (_parent->GetCurrentPage() != _panel || !_film) { return; } @@ -389,6 +409,10 @@ ContentPanel::remove_clicked (bool hotkey) void ContentPanel::timeline_clicked () { + if (!_film) { + return; + } + if (_timeline_dialog) { _timeline_dialog->Destroy (); _timeline_dialog = 0; @@ -416,14 +440,14 @@ ContentPanel::setup_sensitivity () ContentList video_selection = selected_video (); ContentList audio_selection = selected_audio (); - _remove->Enable (!selection.empty() && _generally_sensitive); - _earlier->Enable (selection.size() == 1 && _generally_sensitive); - _later->Enable (selection.size() == 1 && _generally_sensitive); - _timeline->Enable (!_film->content().empty() && _generally_sensitive); + _remove->Enable (_generally_sensitive && !selection.empty()); + _earlier->Enable (_generally_sensitive && selection.size() == 1); + _later->Enable (_generally_sensitive && selection.size() == 1); + _timeline->Enable (_generally_sensitive && _film && !_film->content().empty()); - _video_panel->Enable (video_selection.size() > 0 && _generally_sensitive); - _audio_panel->Enable (audio_selection.size() > 0 && _generally_sensitive); - _subtitle_panel->Enable (selection.size() == 1 && selection.front()->subtitle && _generally_sensitive); + _video_panel->Enable (_generally_sensitive && video_selection.size() > 0); + _audio_panel->Enable (_generally_sensitive && audio_selection.size() > 0); + _caption_panel->Enable (_generally_sensitive && selection.size() == 1 && selection.front()->caption); _timing_panel->Enable (_generally_sensitive); } @@ -444,20 +468,7 @@ void ContentPanel::set_general_sensitivity (bool s) { _generally_sensitive = s; - - _content->Enable (s); - _add_file->Enable (s); - _add_folder->Enable (s); - _add_dcp->Enable (s); - _remove->Enable (s); - _earlier->Enable (s); - _later->Enable (s); - _timeline->Enable (s); - - /* Set the panels in the content notebook */ - BOOST_FOREACH (ContentSubPanel* i, _panels) { - i->Enable (s); - } + setup_sensitivity (); } void @@ -544,6 +555,12 @@ ContentPanel::setup () BOOST_FOREACH (shared_ptr i, content) { int const t = _content->GetItemCount (); bool const valid = i->paths_valid (); + + /* Temporary debugging for Igor */ + BOOST_FOREACH (boost::filesystem::path j, i->paths()) { + LOG_GENERAL ("Check %1 %2 answer %3", j.string(), boost::filesystem::exists(j) ? "yes" : "no", valid ? "yes" : "no"); + } + shared_ptr dcp = dynamic_pointer_cast (i); bool const needs_kdm = dcp && dcp->needs_kdm (); bool const needs_assets = dcp && dcp->needs_assets (); @@ -581,6 +598,8 @@ ContentPanel::setup () /* Select the item of content if none was selected before */ _content->SetItemState (0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } + + setup_sensitivity (); } void @@ -611,9 +630,13 @@ ContentPanel::add_files (list paths) /* XXX: check for lots of files here and do something */ - BOOST_FOREACH (boost::filesystem::path i, paths) { - BOOST_FOREACH (shared_ptr j, content_factory (_film, i)) { - _film->examine_and_add_content (j); + try { + BOOST_FOREACH (boost::filesystem::path i, paths) { + BOOST_FOREACH (shared_ptr j, content_factory (_film, i)) { + _film->examine_and_add_content (j); + } } + } catch (exception& e) { + error_dialog (_parent, e.what()); } }