From 6bf4a95428b265d00ae903acdf8e184347345ebe Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Wed, 28 Sep 2011 19:51:35 +0000 Subject: [PATCH] Add a subtitles save slot to AudioController which stores the audio URI in the subtitles Originally committed to SVN as r5659. --- aegisub/src/audio_controller.cpp | 20 ++++++++++++++++++-- aegisub/src/audio_controller.h | 13 +++++++++++-- aegisub/src/frame_main.cpp | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/aegisub/src/audio_controller.cpp b/aegisub/src/audio_controller.cpp index 5ddd722ea..5aa8f937a 100644 --- a/aegisub/src/audio_controller.cpp +++ b/aegisub/src/audio_controller.cpp @@ -45,12 +45,14 @@ #include +#include "ass_file.h" #include "audio_controller.h" #include "audio_provider_dummy.h" #include "audio_timing.h" #include "compat.h" #include "include/aegisub/audio_player.h" #include "include/aegisub/audio_provider.h" +#include "include/aegisub/context.h" #include "main.h" #include "selection_controller.h" #include "standard_paths.h" @@ -139,8 +141,10 @@ public: } }; -AudioController::AudioController() -: player(0) +AudioController::AudioController(agi::Context *context) +: context(context) +, subtitle_save_slot(context->ass->AddFileSaveListener(&AudioController::OnSubtitlesSave, this)) +, player(0) , provider(0) , keyframes_marker_provider(new AudioMarkerProviderKeyframes(this)) , playback_mode(PM_NotPlaying) @@ -360,6 +364,18 @@ void AudioController::OnTimingControllerUpdatedStyleRanges() /// @todo redraw and stuff, probably } +void AudioController::OnSubtitlesSave() +{ + if (IsAudioOpen()) + { + context->ass->SetScriptInfo("Audio URI", audio_url); + } + else + { + context->ass->SetScriptInfo("Audio URI", ""); + } +} + void AudioController::PlayRange(const SampleRange &range) { if (!IsAudioOpen()) return; diff --git a/aegisub/src/audio_controller.h b/aegisub/src/audio_controller.h index ffade17cb..655a98a98 100644 --- a/aegisub/src/audio_controller.h +++ b/aegisub/src/audio_controller.h @@ -54,6 +54,7 @@ class AudioPlayer; class AudioProvider; +namespace agi { struct Context; } // Declared below class AudioControllerAudioEventListener; @@ -176,7 +177,12 @@ public: /// possible in the existing design is needed, the controller should be /// extended in some way to allow it. class AudioController : public wxEvtHandler, public AudioMarkerProvider, public AudioLabelProvider { -private: + /// Project context this controller belongs to + agi::Context *context; + + /// Slot for subtitles save signal + agi::signal::Connection subtitle_save_slot; + /// A new audio stream was opened (and any previously open was closed) agi::signal::Signal AnnounceAudioOpen; @@ -233,6 +239,9 @@ private: /// @brief Timing controller signals that the rendering style ranges have changed void OnTimingControllerUpdatedStyleRanges(); + /// Subtitles save slot which adds the audio uri to the subtitles + void OnSubtitlesSave(); + #ifdef wxHAS_POWER_EVENTS /// Handle computer going into suspend mode by stopping audio and closing device void OnComputerSuspending(wxPowerEvent &event); @@ -243,7 +252,7 @@ private: public: /// @brief Constructor - AudioController(); + AudioController(agi::Context *context); /// @brief Destructor ~AudioController(); diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp index 574697f07..138c4af7a 100644 --- a/aegisub/src/frame_main.cpp +++ b/aegisub/src/frame_main.cpp @@ -124,7 +124,7 @@ FrameMain::FrameMain (wxArrayString args) context->local_scripts = new Automation4::LocalScriptManager(context.get()); StartupLog("Initializing context controls"); - context->audioController = new AudioController; + context->audioController = new AudioController(context.get()); context->audioController->AddAudioOpenListener(&FrameMain::OnAudioOpen, this); context->audioController->AddAudioCloseListener(&FrameMain::OnAudioClose, this);