From fda4c81bf18b89faca131b6a9eee8e80517ffe55 Mon Sep 17 00:00:00 2001 From: Thomas Amland Date: Sat, 10 Feb 2018 14:27:47 +0100 Subject: [PATCH 1/2] split audio and subtitle settings osd --- .../resources/strings.po | 12 +- .../xml/Custom_1101_SettingsList.xml | 6 + xbmc/guilib/GUIWindowManager.cpp | 7 +- xbmc/guilib/WindowIDs.h | 1 + xbmc/input/WindowTranslator.cpp | 1 + xbmc/video/PlayerController.cpp | 6 +- xbmc/video/dialogs/CMakeLists.txt | 6 +- ...ettings.cpp => GUIDialogAudioSettings.cpp} | 201 ++-------- ...tleSettings.h => GUIDialogAudioSettings.h} | 16 +- .../dialogs/GUIDialogSubtitleSettings.cpp | 367 ++++++++++++++++++ .../video/dialogs/GUIDialogSubtitleSettings.h | 71 ++++ xbmc/video/dialogs/GUIDialogVideoOSD.cpp | 4 + xbmc/video/windows/GUIWindowFullScreen.cpp | 4 +- 13 files changed, 502 insertions(+), 200 deletions(-) rename xbmc/video/dialogs/{GUIDialogAudioSubtitleSettings.cpp => GUIDialogAudioSettings.cpp} (60%) rename xbmc/video/dialogs/{GUIDialogAudioSubtitleSettings.h => GUIDialogAudioSettings.h} (82%) create mode 100644 xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp create mode 100644 xbmc/video/dialogs/GUIDialogSubtitleSettings.h diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po index bccb29802fa87..3fd7af88a5583 100644 --- a/addons/resource.language.en_gb/resources/strings.po +++ b/addons/resource.language.en_gb/resources/strings.po @@ -6856,7 +6856,7 @@ msgstr "" #: addons/skin.estuary/xml/Custom_1106_VideoOSDSettings.xml #: addons/skin.estuary/xml/Variables.xml msgctxt "#13396" -msgid "Audio and subtitle settings" +msgid "Audio settings" msgstr "" msgctxt "#13397" @@ -15466,7 +15466,15 @@ msgctxt "#24132" msgid "Would you like to switch to this language?" msgstr "" -#empty strings from id 24133 to 24134 +#: xbmc/dialogs/GUIDialogSubtitles.cpp +msgctxt "#24133" +msgid "Subtitle settings" +msgstr "" + +#: xbmc/dialogs/GUIDialogSubtitles.cpp +msgctxt "#24134" +msgid "Download subtitle..." +msgstr "" #. Folder name in addon settings window #: xbmc/addons/addon.cpp diff --git a/addons/skin.estuary/xml/Custom_1101_SettingsList.xml b/addons/skin.estuary/xml/Custom_1101_SettingsList.xml index c0dbfd133a3db..c0a5efd6287f5 100644 --- a/addons/skin.estuary/xml/Custom_1101_SettingsList.xml +++ b/addons/skin.estuary/xml/Custom_1101_SettingsList.xml @@ -33,6 +33,12 @@ ActivateWindow(osdaudiosettings) + + 700 + DialogSettingButton + + ActivateWindow(osdsubtitlesettings) + 700 DialogSettingButton diff --git a/xbmc/guilib/GUIWindowManager.cpp b/xbmc/guilib/GUIWindowManager.cpp index 6ba09d7ccb99b..78c850caeb50a 100644 --- a/xbmc/guilib/GUIWindowManager.cpp +++ b/xbmc/guilib/GUIWindowManager.cpp @@ -86,7 +86,8 @@ #include "video/dialogs/GUIDialogCMSSettings.h" #endif #include "video/dialogs/GUIDialogVideoSettings.h" -#include "video/dialogs/GUIDialogAudioSubtitleSettings.h" +#include "video/dialogs/GUIDialogAudioSettings.h" +#include "video/dialogs/GUIDialogSubtitleSettings.h" #include "video/dialogs/GUIDialogVideoBookmarks.h" #include "profiles/dialogs/GUIDialogProfileSettings.h" #include "profiles/dialogs/GUIDialogLockSettings.h" @@ -231,7 +232,8 @@ void CGUIWindowManager::CreateWindows() Add(new CGUIDialogCMSSettings); #endif Add(new CGUIDialogVideoSettings); - Add(new CGUIDialogAudioSubtitleSettings); + Add(new CGUIDialogAudioSettings); + Add(new CGUIDialogSubtitleSettings); Add(new CGUIDialogVideoBookmarks); // Don't add the filebrowser dialog - it's created and added when it's needed Add(new CGUIDialogNetworkSetup); @@ -357,6 +359,7 @@ bool CGUIWindowManager::DestroyWindows() DestroyWindow(WINDOW_DIALOG_CMS_OSD_SETTINGS); DestroyWindow(WINDOW_DIALOG_VIDEO_OSD_SETTINGS); DestroyWindow(WINDOW_DIALOG_AUDIO_OSD_SETTINGS); + DestroyWindow(WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS); DestroyWindow(WINDOW_DIALOG_VIDEO_BOOKMARKS); DestroyWindow(WINDOW_DIALOG_CONTENT_SETTINGS); DestroyWindow(WINDOW_DIALOG_INFOPROVIDER_SETTINGS); diff --git a/xbmc/guilib/WindowIDs.h b/xbmc/guilib/WindowIDs.h index 56867b55dc5d5..510f41202c86a 100644 --- a/xbmc/guilib/WindowIDs.h +++ b/xbmc/guilib/WindowIDs.h @@ -106,6 +106,7 @@ #define WINDOW_DIALOG_KEYBOARD_TOUCH 10156 #define WINDOW_DIALOG_CMS_OSD_SETTINGS 10157 #define WINDOW_DIALOG_INFOPROVIDER_SETTINGS 10158 +#define WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS 10159 #define WINDOW_MUSIC_PLAYLIST 10500 #define WINDOW_MUSIC_NAV 10502 diff --git a/xbmc/input/WindowTranslator.cpp b/xbmc/input/WindowTranslator.cpp index 88a8757fff3bd..52aeff3db9a0c 100644 --- a/xbmc/input/WindowTranslator.cpp +++ b/xbmc/input/WindowTranslator.cpp @@ -100,6 +100,7 @@ const CWindowTranslator::WindowMapByName CWindowTranslator::WindowMappingByName { "osdcmssettings" , WINDOW_DIALOG_CMS_OSD_SETTINGS }, { "osdvideosettings" , WINDOW_DIALOG_VIDEO_OSD_SETTINGS }, { "osdaudiosettings" , WINDOW_DIALOG_AUDIO_OSD_SETTINGS }, + { "osdsubtitlesettings" , WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS }, { "audiodspmanager" , WINDOW_DIALOG_AUDIO_DSP_MANAGER }, { "osdaudiodspsettings" , WINDOW_DIALOG_AUDIO_DSP_OSD_SETTINGS }, { "videobookmarks" , WINDOW_DIALOG_VIDEO_BOOKMARKS }, diff --git a/xbmc/video/PlayerController.cpp b/xbmc/video/PlayerController.cpp index a70cc43350d24..afedc16040006 100644 --- a/xbmc/video/PlayerController.cpp +++ b/xbmc/video/PlayerController.cpp @@ -31,7 +31,7 @@ #include "guilib/GUISliderControl.h" #include "guilib/GUIWindowManager.h" #include "dialogs/GUIDialogKaiToast.h" -#include "video/dialogs/GUIDialogAudioSubtitleSettings.h" +#include "video/dialogs/GUIDialogAudioSettings.h" #include "cores/VideoPlayer/VideoRenderers/OverlayRendererGUI.h" #include "Application.h" #include "utils/LangCodeExpander.h" @@ -486,9 +486,9 @@ void CPlayerController::OnSliderChange(void *data, CGUISliderControl *slider) else if (m_sliderAction == ACTION_VOLAMP_UP || m_sliderAction == ACTION_VOLAMP_DOWN || m_sliderAction == ACTION_VOLAMP) - slider->SetTextValue(CGUIDialogAudioSubtitleSettings::FormatDecibel(slider->GetFloatValue())); + slider->SetTextValue(CGUIDialogAudioSettings::FormatDecibel(slider->GetFloatValue())); else - slider->SetTextValue(CGUIDialogAudioSubtitleSettings::FormatDelay(slider->GetFloatValue(), 0.025f)); + slider->SetTextValue(CGUIDialogAudioSettings::FormatDelay(slider->GetFloatValue(), 0.025f)); if (g_application.GetAppPlayer().HasPlayer()) { diff --git a/xbmc/video/dialogs/CMakeLists.txt b/xbmc/video/dialogs/CMakeLists.txt index 217c868424dd3..b2ec11f8b84e9 100644 --- a/xbmc/video/dialogs/CMakeLists.txt +++ b/xbmc/video/dialogs/CMakeLists.txt @@ -1,15 +1,17 @@ -set(SOURCES GUIDialogAudioSubtitleSettings.cpp +set(SOURCES GUIDialogAudioSettings.cpp GUIDialogFullScreenInfo.cpp GUIDialogSubtitles.cpp + GUIDialogSubtitleSettings.cpp GUIDialogTeletext.cpp GUIDialogVideoBookmarks.cpp GUIDialogVideoInfo.cpp GUIDialogVideoOSD.cpp GUIDialogVideoSettings.cpp) -set(HEADERS GUIDialogAudioSubtitleSettings.h +set(HEADERS GUIDialogAudioSettings.h GUIDialogFullScreenInfo.h GUIDialogSubtitles.h + GUIDialogSubtitleSettings.h GUIDialogTeletext.h GUIDialogVideoBookmarks.h GUIDialogVideoInfo.h diff --git a/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp b/xbmc/video/dialogs/GUIDialogAudioSettings.cpp similarity index 60% rename from xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp rename to xbmc/video/dialogs/GUIDialogAudioSettings.cpp index b95560151c38e..769638feed1e8 100644 --- a/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogAudioSettings.cpp @@ -18,7 +18,7 @@ * */ -#include "GUIDialogAudioSubtitleSettings.h" +#include "GUIDialogAudioSettings.h" #include #include @@ -54,25 +54,19 @@ #define SETTING_AUDIO_VOLUME_AMPLIFICATION "audio.volumeamplification" #define SETTING_AUDIO_DELAY "audio.delay" #define SETTING_AUDIO_STREAM "audio.stream" -#define SETTING_AUDIO_PASSTHROUGH "audio.digitalanalog" +#define SETTING_AUDIO_PASSTHROUGH "audio.digitalanalog" #define SETTING_AUDIO_DSP "audio.dsp" - -#define SETTING_SUBTITLE_ENABLE "subtitles.enable" -#define SETTING_SUBTITLE_DELAY "subtitles.delay" -#define SETTING_SUBTITLE_STREAM "subtitles.stream" -#define SETTING_SUBTITLE_BROWSER "subtitles.browser" - #define SETTING_AUDIO_MAKE_DEFAULT "audio.makedefault" -CGUIDialogAudioSubtitleSettings::CGUIDialogAudioSubtitleSettings() +CGUIDialogAudioSettings::CGUIDialogAudioSettings() : CGUIDialogSettingsManualBase(WINDOW_DIALOG_AUDIO_OSD_SETTINGS, "DialogSettings.xml"), m_passthrough(false), m_dspEnabled(false) { } -CGUIDialogAudioSubtitleSettings::~CGUIDialogAudioSubtitleSettings() = default; +CGUIDialogAudioSettings::~CGUIDialogAudioSettings() = default; -void CGUIDialogAudioSubtitleSettings::FrameMove() +void CGUIDialogAudioSettings::FrameMove() { // update the volume setting if necessary float newVolume = g_application.GetVolume(false); @@ -87,17 +81,12 @@ void CGUIDialogAudioSubtitleSettings::FrameMove() //! @todo (needs special handling): m_settingsManager->SetInt(SETTING_AUDIO_STREAM, g_application.GetAppPlayer().GetAudioStream()); GetSettingsManager()->SetNumber(SETTING_AUDIO_DELAY, videoSettings.m_AudioDelay); GetSettingsManager()->SetBool(SETTING_AUDIO_PASSTHROUGH, CServiceBroker::GetSettings().GetBool(CSettings::SETTING_AUDIOOUTPUT_PASSTHROUGH)); - - //! @todo m_settingsManager->SetBool(SETTING_SUBTITLE_ENABLE, g_application.GetAppPlayer().GetSubtitleVisible()); - // \-> Unless subtitle visibility can change on the fly, while Dialog is up, this code should be removed. - GetSettingsManager()->SetNumber(SETTING_SUBTITLE_DELAY, videoSettings.m_SubtitleDelay); - //! @todo (needs special handling): m_settingsManager->SetInt(SETTING_SUBTITLE_STREAM, g_application.GetAppPlayer().GetSubtitle()); } CGUIDialogSettingsManualBase::FrameMove(); } -std::string CGUIDialogAudioSubtitleSettings::FormatDelay(float value, float interval) +std::string CGUIDialogAudioSettings::FormatDelay(float value, float interval) { if (fabs(value) < 0.5f * interval) return StringUtils::Format(g_localizeStrings.Get(22003).c_str(), 0.0); @@ -107,17 +96,17 @@ std::string CGUIDialogAudioSubtitleSettings::FormatDelay(float value, float inte return StringUtils::Format(g_localizeStrings.Get(22005).c_str(), value); } -std::string CGUIDialogAudioSubtitleSettings::FormatDecibel(float value) +std::string CGUIDialogAudioSettings::FormatDecibel(float value) { return StringUtils::Format(g_localizeStrings.Get(14054).c_str(), value); } -std::string CGUIDialogAudioSubtitleSettings::FormatPercentAsDecibel(float value) +std::string CGUIDialogAudioSettings::FormatPercentAsDecibel(float value) { return StringUtils::Format(g_localizeStrings.Get(14054).c_str(), CAEUtil::PercentToGain(value)); } -void CGUIDialogAudioSubtitleSettings::OnSettingChanged(std::shared_ptr setting) +void CGUIDialogAudioSettings::OnSettingChanged(std::shared_ptr setting) { if (setting == NULL) return; @@ -154,62 +143,9 @@ void CGUIDialogAudioSubtitleSettings::OnSettingChanged(std::shared_ptr(setting)->GetValue(); CServiceBroker::GetSettings().SetBool(CSettings::SETTING_AUDIOOUTPUT_PASSTHROUGH, m_passthrough); } - else if (settingId == SETTING_SUBTITLE_ENABLE) - { - bool value = std::static_pointer_cast(setting)->GetValue(); - g_application.GetAppPlayer().SetSubtitleVisible(value); - } - else if (settingId == SETTING_SUBTITLE_DELAY) - { - float value = static_cast(std::static_pointer_cast(setting)->GetValue()); - g_application.GetAppPlayer().SetSubTitleDelay(value); - } - else if (settingId == SETTING_SUBTITLE_STREAM) - { - m_subtitleStream = std::static_pointer_cast(setting)->GetValue(); - g_application.GetAppPlayer().SetSubtitle(m_subtitleStream); - } -} - -std::string CGUIDialogAudioSubtitleSettings::BrowseForSubtitle() -{ - std::string strPath; - if (URIUtils::IsInRAR(g_application.CurrentFileItem().GetPath()) || URIUtils::IsInZIP(g_application.CurrentFileItem().GetPath())) - strPath = CURL(g_application.CurrentFileItem().GetPath()).GetHostName(); - else - strPath = g_application.CurrentFileItem().GetPath(); - - std::string strMask = ".utf|.utf8|.utf-8|.sub|.srt|.smi|.rt|.txt|.ssa|.aqt|.jss|.ass|.idx|.rar|.zip"; - if (g_application.GetCurrentPlayer() == "VideoPlayer") - strMask = ".srt|.rar|.zip|.ifo|.smi|.sub|.idx|.ass|.ssa|.txt"; - VECSOURCES shares(*CMediaSourceSettings::GetInstance().GetSources("video")); - if (CMediaSettings::GetInstance().GetAdditionalSubtitleDirectoryChecked() != -1 && !CServiceBroker::GetSettings().GetString(CSettings::SETTING_SUBTITLES_CUSTOMPATH).empty()) - { - CMediaSource share; - std::vector paths; - paths.push_back(URIUtils::GetDirectory(strPath)); - paths.push_back(CServiceBroker::GetSettings().GetString(CSettings::SETTING_SUBTITLES_CUSTOMPATH)); - share.FromNameAndPaths("video",g_localizeStrings.Get(21367),paths); - shares.push_back(share); - strPath = share.strPath; - URIUtils::AddSlashAtEnd(strPath); - } - - if (CGUIDialogFileBrowser::ShowAndGetFile(shares, strMask, g_localizeStrings.Get(293), strPath, false, true)) // "subtitles" - { - if (URIUtils::HasExtension(strPath, ".sub")) - { - if (XFILE::CFile::Exists(URIUtils::ReplaceExtension(strPath, ".idx"))) - strPath = URIUtils::ReplaceExtension(strPath, ".idx"); - } - - return strPath; - } - - return ""; } -void CGUIDialogAudioSubtitleSettings::OnSettingAction(std::shared_ptr setting) +void CGUIDialogAudioSettings::OnSettingAction(std::shared_ptr setting) { if (setting == NULL) return; @@ -221,20 +157,11 @@ void CGUIDialogAudioSubtitleSettings::OnSettingAction(std::shared_ptr category = AddCategory("audiosubtitlesettings", -1); if (category == NULL) { - CLog::Log(LOGERROR, "CGUIDialogAudioSubtitleSettings: unable to setup settings"); + CLog::Log(LOGERROR, "CGUIDialogAudioSettings: unable to setup settings"); return; } @@ -285,19 +211,19 @@ void CGUIDialogAudioSubtitleSettings::InitializeSettings() const std::shared_ptr groupAudio = AddGroup(category); if (groupAudio == NULL) { - CLog::Log(LOGERROR, "CGUIDialogAudioSubtitleSettings: unable to setup settings"); + CLog::Log(LOGERROR, "CGUIDialogAudioSettings: unable to setup settings"); return; } const std::shared_ptr groupSubtitles = AddGroup(category); if (groupSubtitles == NULL) { - CLog::Log(LOGERROR, "CGUIDialogAudioSubtitleSettings: unable to setup settings"); + CLog::Log(LOGERROR, "CGUIDialogAudioSettings: unable to setup settings"); return; } const std::shared_ptr groupSaveAsDefault = AddGroup(category); if (groupSaveAsDefault == NULL) { - CLog::Log(LOGERROR, "CGUIDialogAudioSubtitleSettings: unable to setup settings"); + CLog::Log(LOGERROR, "CGUIDialogAudioSettings: unable to setup settings"); return; } @@ -308,7 +234,6 @@ void CGUIDialogAudioSubtitleSettings::InitializeSettings() if (g_application.GetAppPlayer().HasPlayer()) { g_application.GetAppPlayer().GetAudioCapabilities(m_audioCaps); - g_application.GetAppPlayer().GetSubtitleCapabilities(m_subCaps); } // register IsPlayingPassthrough condition @@ -358,31 +283,11 @@ void CGUIDialogAudioSubtitleSettings::InitializeSettings() AddToggle(groupAudio, SETTING_AUDIO_PASSTHROUGH, 348, SettingLevel::Basic, m_passthrough); } - // subtitle settings - m_subtitleVisible = g_application.GetAppPlayer().GetSubtitleVisible(); - // subtitle enabled setting - AddToggle(groupSubtitles, SETTING_SUBTITLE_ENABLE, 13397, SettingLevel::Basic, m_subtitleVisible); - - // subtitle delay setting - if (SupportsSubtitleFeature(IPC_SUBS_OFFSET)) - { - std::shared_ptr settingSubtitleDelay = AddSlider(groupSubtitles, SETTING_SUBTITLE_DELAY, 22006, SettingLevel::Basic, videoSettings.m_SubtitleDelay, 0, -g_advancedSettings.m_videoSubsDelayRange, 0.1f, g_advancedSettings.m_videoSubsDelayRange, 22006, usePopup); - std::static_pointer_cast(settingSubtitleDelay->GetControl())->SetFormatter(SettingFormatterDelay); - } - - // subtitle stream setting - if (SupportsSubtitleFeature(IPC_SUBS_SELECT)) - AddSubtitleStreams(groupSubtitles, SETTING_SUBTITLE_STREAM); - - // subtitle browser setting - if (SupportsSubtitleFeature(IPC_SUBS_EXTERNAL)) - AddButton(groupSubtitles, SETTING_SUBTITLE_BROWSER, 13250, SettingLevel::Basic); - // subtitle stream setting AddButton(groupSaveAsDefault, SETTING_AUDIO_MAKE_DEFAULT, 12376, SettingLevel::Basic); } -bool CGUIDialogAudioSubtitleSettings::SupportsAudioFeature(int feature) +bool CGUIDialogAudioSettings::SupportsAudioFeature(int feature) { for (Features::iterator itr = m_audioCaps.begin(); itr != m_audioCaps.end(); ++itr) { @@ -393,18 +298,7 @@ bool CGUIDialogAudioSubtitleSettings::SupportsAudioFeature(int feature) return false; } -bool CGUIDialogAudioSubtitleSettings::SupportsSubtitleFeature(int feature) -{ - for (Features::iterator itr = m_subCaps.begin(); itr != m_subCaps.end(); ++itr) - { - if (*itr == feature || *itr == IPC_SUBS_ALL) - return true; - } - - return false; -} - -void CGUIDialogAudioSubtitleSettings::AddAudioStreams(std::shared_ptr group, const std::string &settingId) +void CGUIDialogAudioSettings::AddAudioStreams(std::shared_ptr group, const std::string &settingId) { if (group == NULL || settingId.empty()) return; @@ -416,24 +310,12 @@ void CGUIDialogAudioSubtitleSettings::AddAudioStreams(std::shared_ptr group, const std::string &settingId) -{ - if (group == NULL || settingId.empty()) - return; - - m_subtitleStream = g_application.GetAppPlayer().GetSubtitle(); - if (m_subtitleStream < 0) - m_subtitleStream = 0; - - AddList(group, settingId, 462, SettingLevel::Basic, m_subtitleStream, SubtitleStreamsOptionFiller, 462); -} - -bool CGUIDialogAudioSubtitleSettings::IsPlayingPassthrough(const std::string &condition, const std::string &value, SettingConstPtr setting, void *data) +bool CGUIDialogAudioSettings::IsPlayingPassthrough(const std::string &condition, const std::string &value, SettingConstPtr setting, void *data) { return g_application.GetAppPlayer().IsPassthrough(); } -void CGUIDialogAudioSubtitleSettings::AudioStreamsOptionFiller(SettingConstPtr setting, std::vector< std::pair > &list, int ¤t, void *data) +void CGUIDialogAudioSettings::AudioStreamsOptionFiller(SettingConstPtr setting, std::vector< std::pair > &list, int ¤t, void *data) { int audioStreamCount = g_application.GetAppPlayer().GetAudioStreamCount(); @@ -466,42 +348,7 @@ void CGUIDialogAudioSubtitleSettings::AudioStreamsOptionFiller(SettingConstPtr s } } -void CGUIDialogAudioSubtitleSettings::SubtitleStreamsOptionFiller(SettingConstPtr setting, std::vector< std::pair > &list, int ¤t, void *data) -{ - int subtitleStreamCount = g_application.GetAppPlayer().GetSubtitleCount(); - - // cycle through each subtitle and add it to our entry list - for (int i = 0; i < subtitleStreamCount; ++i) - { - SubtitleStreamInfo info; - g_application.GetAppPlayer().GetSubtitleStreamInfo(i, info); - - std::string strItem; - std::string strLanguage; - - if (!g_LangCodeExpander.Lookup(info.language, strLanguage)) - strLanguage = g_localizeStrings.Get(13205); // Unknown - - if (info.name.length() == 0) - strItem = strLanguage; - else - strItem = StringUtils::Format("%s - %s", strLanguage.c_str(), info.name.c_str()); - - strItem += FormatFlags(info.flags); - strItem += StringUtils::Format(" (%i/%i)", i + 1, subtitleStreamCount); - - list.push_back(make_pair(strItem, i)); - } - - // no subtitle streams - just add a "None" entry - if (list.empty()) - { - list.push_back(make_pair(g_localizeStrings.Get(231), -1)); - current = -1; - } -} - -std::string CGUIDialogAudioSubtitleSettings::SettingFormatterDelay(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum) +std::string CGUIDialogAudioSettings::SettingFormatterDelay(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum) { if (!value.isDouble()) return ""; @@ -517,7 +364,7 @@ std::string CGUIDialogAudioSubtitleSettings::SettingFormatterDelay(std::shared_p return StringUtils::Format(g_localizeStrings.Get(22005).c_str(), fValue); } -std::string CGUIDialogAudioSubtitleSettings::SettingFormatterPercentAsDecibel(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum) +std::string CGUIDialogAudioSettings::SettingFormatterPercentAsDecibel(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum) { if (control == NULL || !value.isDouble()) return ""; @@ -529,7 +376,7 @@ std::string CGUIDialogAudioSubtitleSettings::SettingFormatterPercentAsDecibel(st return StringUtils::Format(formatString.c_str(), CAEUtil::PercentToGain(value.asFloat())); } -std::string CGUIDialogAudioSubtitleSettings::FormatFlags(StreamFlags flags) +std::string CGUIDialogAudioSettings::FormatFlags(StreamFlags flags) { std::vector localizedFlags; if (flags & StreamFlags::FLAG_DEFAULT) diff --git a/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.h b/xbmc/video/dialogs/GUIDialogAudioSettings.h similarity index 82% rename from xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.h rename to xbmc/video/dialogs/GUIDialogAudioSettings.h index 7634b5e11c038..9b7c2ba3168a4 100644 --- a/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.h +++ b/xbmc/video/dialogs/GUIDialogAudioSettings.h @@ -29,11 +29,11 @@ class CVariant; -class CGUIDialogAudioSubtitleSettings : public CGUIDialogSettingsManualBase +class CGUIDialogAudioSettings : public CGUIDialogSettingsManualBase { public: - CGUIDialogAudioSubtitleSettings(); - ~CGUIDialogAudioSubtitleSettings() override; + CGUIDialogAudioSettings(); + ~CGUIDialogAudioSettings() override; // specialization of CGUIWindow void FrameMove() override; @@ -42,8 +42,6 @@ class CGUIDialogAudioSubtitleSettings : public CGUIDialogSettingsManualBase static std::string FormatDecibel(float value); static std::string FormatPercentAsDecibel(float value); - static std::string BrowseForSubtitle(); - protected: // implementations of ISettingCallback void OnSettingChanged(std::shared_ptr setting) override; @@ -58,29 +56,23 @@ class CGUIDialogAudioSubtitleSettings : public CGUIDialogSettingsManualBase void InitializeSettings() override; bool SupportsAudioFeature(int feature); - bool SupportsSubtitleFeature(int feature); void AddAudioStreams(std::shared_ptr group, const std::string &settingId); - void AddSubtitleStreams(std::shared_ptr group, const std::string &settingId); static bool IsPlayingPassthrough(const std::string &condition, const std::string &value, std::shared_ptr setting, void *data); static void AudioStreamsOptionFiller(std::shared_ptr setting, std::vector< std::pair > &list, int ¤t, void *data); - static void SubtitleStreamsOptionFiller(std::shared_ptr setting, std::vector< std::pair > &list, int ¤t, void *data); - + static std::string SettingFormatterDelay(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum); static std::string SettingFormatterPercentAsDecibel(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum); float m_volume; int m_audioStream; bool m_passthrough; - int m_subtitleStream; - bool m_subtitleVisible; bool m_dspEnabled; typedef std::vector Features; Features m_audioCaps; - Features m_subCaps; private: static std::string FormatFlags(StreamFlags flags); }; diff --git a/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp b/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp new file mode 100644 index 0000000000000..c7b916f9edcb8 --- /dev/null +++ b/xbmc/video/dialogs/GUIDialogSubtitleSettings.cpp @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2005-2014 Team XBMC + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * . + * + */ + +#include "GUIDialogSubtitleSettings.h" + +#include +#include + +#include "addons/Skin.h" +#include "Application.h" +#include "ServiceBroker.h" +#include "cores/IPlayer.h" +#include "dialogs/GUIDialogFileBrowser.h" +#include "dialogs/GUIDialogYesNo.h" +#include "FileItem.h" +#include "filesystem/File.h" +#include "guilib/GUIWindowManager.h" +#include "guilib/LocalizeStrings.h" +#include "profiles/ProfilesManager.h" +#include "settings/AdvancedSettings.h" +#include "settings/lib/Setting.h" +#include "settings/lib/SettingsManager.h" +#include "settings/MediaSettings.h" +#include "settings/MediaSourceSettings.h" +#include "settings/Settings.h" +#include "URL.h" +#include "utils/LangCodeExpander.h" +#include "utils/log.h" +#include "utils/StringUtils.h" +#include "utils/URIUtils.h" +#include "utils/Variant.h" +#include "video/VideoDatabase.h" +#include "GUIDialogSubtitles.h" + +#define SETTING_SUBTITLE_ENABLE "subtitles.enable" +#define SETTING_SUBTITLE_DELAY "subtitles.delay" +#define SETTING_SUBTITLE_STREAM "subtitles.stream" +#define SETTING_SUBTITLE_BROWSER "subtitles.browser" +#define SETTING_SUBTITLE_SEARCH "subtitles.search" +#define SETTING_MAKE_DEFAULT "audio.makedefault" + +CGUIDialogSubtitleSettings::CGUIDialogSubtitleSettings() + : CGUIDialogSettingsManualBase(WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS, "DialogSettings.xml") +{ } + +CGUIDialogSubtitleSettings::~CGUIDialogSubtitleSettings() = default; + +void CGUIDialogSubtitleSettings::FrameMove() +{ + if (g_application.GetAppPlayer().HasPlayer()) + { + const CVideoSettings videoSettings = g_application.GetAppPlayer().GetVideoSettings(); + + // these settings can change on the fly + //! @todo m_settingsManager->SetBool(SETTING_SUBTITLE_ENABLE, g_application.GetAppPlayer().GetSubtitleVisible()); + // \-> Unless subtitle visibility can change on the fly, while Dialog is up, this code should be removed. + GetSettingsManager()->SetNumber(SETTING_SUBTITLE_DELAY, videoSettings.m_SubtitleDelay); + //! @todo (needs special handling): m_settingsManager->SetInt(SETTING_SUBTITLE_STREAM, g_application.GetAppPlayer().GetSubtitle()); + } + + CGUIDialogSettingsManualBase::FrameMove(); +} + +void CGUIDialogSubtitleSettings::OnSettingChanged(std::shared_ptr setting) +{ + if (setting == NULL) + return; + + CGUIDialogSettingsManualBase::OnSettingChanged(setting); + + const std::string &settingId = setting->GetId(); + if (settingId == SETTING_SUBTITLE_ENABLE) + { + bool value = std::static_pointer_cast(setting)->GetValue(); + g_application.GetAppPlayer().SetSubtitleVisible(value); + } + else if (settingId == SETTING_SUBTITLE_DELAY) + { + float value = static_cast(std::static_pointer_cast(setting)->GetValue()); + g_application.GetAppPlayer().SetSubTitleDelay(value); + } + else if (settingId == SETTING_SUBTITLE_STREAM) + { + m_subtitleStream = std::static_pointer_cast(setting)->GetValue(); + g_application.GetAppPlayer().SetSubtitle(m_subtitleStream); + } +} + +std::string CGUIDialogSubtitleSettings::BrowseForSubtitle() +{ + std::string strPath; + if (URIUtils::IsInRAR(g_application.CurrentFileItem().GetPath()) || URIUtils::IsInZIP(g_application.CurrentFileItem().GetPath())) + strPath = CURL(g_application.CurrentFileItem().GetPath()).GetHostName(); + else + strPath = g_application.CurrentFileItem().GetPath(); + + std::string strMask = ".utf|.utf8|.utf-8|.sub|.srt|.smi|.rt|.txt|.ssa|.aqt|.jss|.ass|.idx|.rar|.zip"; + if (g_application.GetCurrentPlayer() == "VideoPlayer") + strMask = ".srt|.rar|.zip|.ifo|.smi|.sub|.idx|.ass|.ssa|.txt"; + VECSOURCES shares(*CMediaSourceSettings::GetInstance().GetSources("video")); + if (CMediaSettings::GetInstance().GetAdditionalSubtitleDirectoryChecked() != -1 && !CServiceBroker::GetSettings().GetString(CSettings::SETTING_SUBTITLES_CUSTOMPATH).empty()) + { + CMediaSource share; + std::vector paths; + paths.push_back(URIUtils::GetDirectory(strPath)); + paths.push_back(CServiceBroker::GetSettings().GetString(CSettings::SETTING_SUBTITLES_CUSTOMPATH)); + share.FromNameAndPaths("video",g_localizeStrings.Get(21367),paths); + shares.push_back(share); + strPath = share.strPath; + URIUtils::AddSlashAtEnd(strPath); + } + + if (CGUIDialogFileBrowser::ShowAndGetFile(shares, strMask, g_localizeStrings.Get(293), strPath, false, true)) // "subtitles" + { + if (URIUtils::HasExtension(strPath, ".sub")) + { + if (XFILE::CFile::Exists(URIUtils::ReplaceExtension(strPath, ".idx"))) + strPath = URIUtils::ReplaceExtension(strPath, ".idx"); + } + + return strPath; + } + + return ""; +} + +void CGUIDialogSubtitleSettings::OnSettingAction(std::shared_ptr setting) +{ + if (setting == NULL) + return; + + CGUIDialogSettingsManualBase::OnSettingAction(setting); + + const std::string &settingId = setting->GetId(); + if (settingId == SETTING_SUBTITLE_BROWSER) + { + std::string strPath = BrowseForSubtitle(); + if (!strPath.empty()) + { + g_application.GetAppPlayer().AddSubtitle(strPath); + Close(); + } + } + else if (settingId == SETTING_SUBTITLE_SEARCH) + { + auto dialog = g_windowManager.GetWindow(WINDOW_DIALOG_SUBTITLES); + if (dialog) + { + dialog->Open(); + m_subtitleStreamSetting->UpdateDynamicOptions(); + } + } + else if (settingId == SETTING_MAKE_DEFAULT) + Save(); +} + +void CGUIDialogSubtitleSettings::Save() +{ + const CProfilesManager &profileManager = CServiceBroker::GetProfileManager(); + + if (!g_passwordManager.CheckSettingLevelLock(SettingLevel::Expert) && + profileManager.GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE) + return; + + // prompt user if they are sure + if (!CGUIDialogYesNo::ShowAndGetInput(CVariant{12376}, CVariant{12377})) + return; + + // reset the settings + CVideoDatabase db; + if (!db.Open()) + return; + + db.EraseVideoSettings(); + db.Close(); + + CMediaSettings::GetInstance().GetDefaultVideoSettings() = g_application.GetAppPlayer().GetVideoSettings(); + CMediaSettings::GetInstance().GetDefaultVideoSettings().m_SubtitleStream = -1; + CServiceBroker::GetSettings().Save(); +} + +void CGUIDialogSubtitleSettings::SetupView() +{ + CGUIDialogSettingsManualBase::SetupView(); + + SetHeading(24133); + SET_CONTROL_HIDDEN(CONTROL_SETTINGS_OKAY_BUTTON); + SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON); + SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 15067); +} + +void CGUIDialogSubtitleSettings::InitializeSettings() +{ + CGUIDialogSettingsManualBase::InitializeSettings(); + + const std::shared_ptr category = AddCategory("audiosubtitlesettings", -1); + if (category == NULL) + { + CLog::Log(LOGERROR, "CGUIDialogSubtitleSettings: unable to setup settings"); + return; + } + + // get all necessary setting groups + const std::shared_ptr groupAudio = AddGroup(category); + if (groupAudio == NULL) + { + CLog::Log(LOGERROR, "CGUIDialogSubtitleSettings: unable to setup settings"); + return; + } + const std::shared_ptr groupSubtitles = AddGroup(category); + if (groupSubtitles == NULL) + { + CLog::Log(LOGERROR, "CGUIDialogSubtitleSettings: unable to setup settings"); + return; + } + const std::shared_ptr groupSaveAsDefault = AddGroup(category); + if (groupSaveAsDefault == NULL) + { + CLog::Log(LOGERROR, "CGUIDialogSubtitleSettings: unable to setup settings"); + return; + } + + bool usePopup = g_SkinInfo->HasSkinFile("DialogSlider.xml"); + + const CVideoSettings videoSettings = g_application.GetAppPlayer().GetVideoSettings(); + + if (g_application.GetAppPlayer().HasPlayer()) + { + g_application.GetAppPlayer().GetSubtitleCapabilities(m_subtitleCapabilities); + } + + // subtitle settings + m_subtitleVisible = g_application.GetAppPlayer().GetSubtitleVisible(); + + // subtitle enabled setting + AddToggle(groupSubtitles, SETTING_SUBTITLE_ENABLE, 13397, SettingLevel::Basic, m_subtitleVisible); + + // subtitle delay setting + if (SupportsSubtitleFeature(IPC_SUBS_OFFSET)) + { + std::shared_ptr settingSubtitleDelay = AddSlider(groupSubtitles, SETTING_SUBTITLE_DELAY, 22006, SettingLevel::Basic, videoSettings.m_SubtitleDelay, 0, -g_advancedSettings.m_videoSubsDelayRange, 0.1f, g_advancedSettings.m_videoSubsDelayRange, 22006, usePopup); + std::static_pointer_cast(settingSubtitleDelay->GetControl())->SetFormatter(SettingFormatterDelay); + } + + // subtitle stream setting + if (SupportsSubtitleFeature(IPC_SUBS_SELECT)) + AddSubtitleStreams(groupSubtitles, SETTING_SUBTITLE_STREAM); + + // subtitle browser setting + if (SupportsSubtitleFeature(IPC_SUBS_EXTERNAL)) + AddButton(groupSubtitles, SETTING_SUBTITLE_BROWSER, 13250, SettingLevel::Basic); + + AddButton(groupSubtitles, SETTING_SUBTITLE_SEARCH, 24134, SettingLevel::Basic); + + // subtitle stream setting + AddButton(groupSaveAsDefault, SETTING_MAKE_DEFAULT, 12376, SettingLevel::Basic); +} + +bool CGUIDialogSubtitleSettings::SupportsSubtitleFeature(int feature) +{ + for (auto item : m_subtitleCapabilities) + { + if (item == feature || item == IPC_SUBS_ALL) + return true; + } + return false; +} + +void CGUIDialogSubtitleSettings::AddSubtitleStreams(std::shared_ptr group, const std::string &settingId) +{ + if (group == NULL || settingId.empty()) + return; + + m_subtitleStream = g_application.GetAppPlayer().GetSubtitle(); + if (m_subtitleStream < 0) + m_subtitleStream = 0; + + m_subtitleStreamSetting = AddList(group, settingId, 462, SettingLevel::Basic, m_subtitleStream, SubtitleStreamsOptionFiller, 462); +} + +void CGUIDialogSubtitleSettings::SubtitleStreamsOptionFiller(SettingConstPtr setting, std::vector< std::pair > &list, int ¤t, void *data) +{ + int subtitleStreamCount = g_application.GetAppPlayer().GetSubtitleCount(); + + // cycle through each subtitle and add it to our entry list + for (int i = 0; i < subtitleStreamCount; ++i) + { + SubtitleStreamInfo info; + g_application.GetAppPlayer().GetSubtitleStreamInfo(i, info); + + std::string strItem; + std::string strLanguage; + + if (!g_LangCodeExpander.Lookup(info.language, strLanguage)) + strLanguage = g_localizeStrings.Get(13205); // Unknown + + if (info.name.length() == 0) + strItem = strLanguage; + else + strItem = StringUtils::Format("%s - %s", strLanguage.c_str(), info.name.c_str()); + + strItem += FormatFlags(info.flags); + strItem += StringUtils::Format(" (%i/%i)", i + 1, subtitleStreamCount); + + list.push_back(make_pair(strItem, i)); + } + + // no subtitle streams - just add a "None" entry + if (list.empty()) + { + list.push_back(make_pair(g_localizeStrings.Get(231), -1)); + current = -1; + } +} + +std::string CGUIDialogSubtitleSettings::SettingFormatterDelay(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum) +{ + if (!value.isDouble()) + return ""; + + float fValue = value.asFloat(); + float fStep = step.asFloat(); + + if (fabs(fValue) < 0.5f * fStep) + return StringUtils::Format(g_localizeStrings.Get(22003).c_str(), 0.0); + if (fValue < 0) + return StringUtils::Format(g_localizeStrings.Get(22004).c_str(), fabs(fValue)); + + return StringUtils::Format(g_localizeStrings.Get(22005).c_str(), fValue); +} + +std::string CGUIDialogSubtitleSettings::FormatFlags(StreamFlags flags) +{ + std::vector localizedFlags; + if (flags & StreamFlags::FLAG_DEFAULT) + localizedFlags.emplace_back(g_localizeStrings.Get(39105)); + if (flags & StreamFlags::FLAG_FORCED) + localizedFlags.emplace_back(g_localizeStrings.Get(39106)); + if (flags & StreamFlags::FLAG_HEARING_IMPAIRED) + localizedFlags.emplace_back(g_localizeStrings.Get(39107)); + if (flags & StreamFlags::FLAG_VISUAL_IMPAIRED) + localizedFlags.emplace_back(g_localizeStrings.Get(39108)); + + std::string formated = StringUtils::Join(localizedFlags, ", "); + + if (!formated.empty()) + formated = StringUtils::Format(" [%s]", formated); + + return formated; +} diff --git a/xbmc/video/dialogs/GUIDialogSubtitleSettings.h b/xbmc/video/dialogs/GUIDialogSubtitleSettings.h new file mode 100644 index 0000000000000..10c63f4c09411 --- /dev/null +++ b/xbmc/video/dialogs/GUIDialogSubtitleSettings.h @@ -0,0 +1,71 @@ +#pragma once + +/* + * Copyright (C) 2005-2014 Team XBMC + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * . + * + */ + +#include +#include +#include + +#include "settings/dialogs/GUIDialogSettingsManualBase.h" +#include "cores/VideoPlayer/Interface/StreamInfo.h" + +class CVariant; + +class CGUIDialogSubtitleSettings : public CGUIDialogSettingsManualBase +{ +public: + CGUIDialogSubtitleSettings(); + ~CGUIDialogSubtitleSettings() override; + + // specialization of CGUIWindow + void FrameMove() override; + + static std::string BrowseForSubtitle(); + +protected: + // implementations of ISettingCallback + void OnSettingChanged(std::shared_ptr setting) override; + void OnSettingAction(std::shared_ptr setting) override; + + // specialization of CGUIDialogSettingsBase + bool AllowResettingSettings() const override { return false; } + void Save() override; + void SetupView() override; + + // specialization of CGUIDialogSettingsManualBase + void InitializeSettings() override; + +private: + bool SupportsSubtitleFeature(int feature); + + void AddSubtitleStreams(std::shared_ptr group, const std::string &settingId); + + int m_subtitleStream; + bool m_subtitleVisible; + std::shared_ptr m_subtitleStreamSetting; + + std::vector m_subtitleCapabilities; + static std::string FormatFlags(StreamFlags flags); + + static void SubtitleStreamsOptionFiller(std::shared_ptr setting, std::vector< std::pair > &list, int ¤t, void *data); + + static std::string SettingFormatterDelay(std::shared_ptr control, const CVariant &value, const CVariant &minimum, const CVariant &step, const CVariant &maximum); +}; diff --git a/xbmc/video/dialogs/GUIDialogVideoOSD.cpp b/xbmc/video/dialogs/GUIDialogVideoOSD.cpp index a1c6a3dc41206..758320c46e0bf 100644 --- a/xbmc/video/dialogs/GUIDialogVideoOSD.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoOSD.cpp @@ -44,6 +44,7 @@ void CGUIDialogVideoOSD::FrameMove() // check for movement of mouse or a submenu open if (CServiceBroker::GetInputManager().IsMouseActive() || g_windowManager.IsWindowActive(WINDOW_DIALOG_AUDIO_OSD_SETTINGS) + || g_windowManager.IsWindowActive(WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS) || g_windowManager.IsWindowActive(WINDOW_DIALOG_AUDIO_DSP_OSD_SETTINGS) || g_windowManager.IsWindowActive(WINDOW_DIALOG_VIDEO_OSD_SETTINGS) || g_windowManager.IsWindowActive(WINDOW_DIALOG_CMS_OSD_SETTINGS) @@ -101,6 +102,9 @@ bool CGUIDialogVideoOSD::OnMessage(CGUIMessage& message) pDialog = g_windowManager.GetDialog(WINDOW_DIALOG_AUDIO_OSD_SETTINGS); if (pDialog && pDialog->IsDialogRunning()) pDialog->Close(true); + pDialog = g_windowManager.GetDialog(WINDOW_DIALOG_SUBTITLE_OSD_SETTINGS); + if (pDialog && pDialog->IsDialogRunning()) + pDialog->Close(true); } break; } diff --git a/xbmc/video/windows/GUIWindowFullScreen.cpp b/xbmc/video/windows/GUIWindowFullScreen.cpp index a6d63b41f0b20..f1e8adc3f378d 100644 --- a/xbmc/video/windows/GUIWindowFullScreen.cpp +++ b/xbmc/video/windows/GUIWindowFullScreen.cpp @@ -29,7 +29,7 @@ #include "guilib/GUIProgressControl.h" #include "guilib/GUILabelControl.h" #include "video/dialogs/GUIDialogVideoOSD.h" -#include "video/dialogs/GUIDialogAudioSubtitleSettings.h" +#include "video/dialogs/GUIDialogSubtitleSettings.h" #include "guilib/GUIWindowManager.h" #include "input/Key.h" #include "pvr/PVRGUIActions.h" @@ -174,7 +174,7 @@ bool CGUIWindowFullScreen::OnAction(const CAction &action) break; case ACTION_BROWSE_SUBTITLE: { - std::string path = CGUIDialogAudioSubtitleSettings::BrowseForSubtitle(); + std::string path = CGUIDialogSubtitleSettings::BrowseForSubtitle(); if (!path.empty()) g_application.GetAppPlayer().AddSubtitle(path); return true; From cb59f6d52925fc263e3d4ebc006169d0dad781d8 Mon Sep 17 00:00:00 2001 From: Thomas Amland Date: Sat, 10 Feb 2018 14:29:20 +0100 Subject: [PATCH 2/2] [estuary] use subtitle setting osd instead of custom dialog --- .../resource.language.en_gb/strings.po | 5 +-- .../xml/Custom_1101_SettingsList.xml | 44 ------------------- addons/skin.estuary/xml/VideoOSD.xml | 4 +- 3 files changed, 2 insertions(+), 51 deletions(-) diff --git a/addons/skin.estuary/language/resource.language.en_gb/strings.po b/addons/skin.estuary/language/resource.language.en_gb/strings.po index 314854acc889f..1cc02165cbc77 100644 --- a/addons/skin.estuary/language/resource.language.en_gb/strings.po +++ b/addons/skin.estuary/language/resource.language.en_gb/strings.po @@ -259,10 +259,7 @@ msgctxt "#31050" msgid "Press [B]OK[/B] to stop" msgstr "" -#: /xml/VideoOSD.xml -msgctxt "#31051" -msgid "Toggle language" -msgstr "" +#empty string with id 31051 #: /xml/Includes.xml msgctxt "#31052" diff --git a/addons/skin.estuary/xml/Custom_1101_SettingsList.xml b/addons/skin.estuary/xml/Custom_1101_SettingsList.xml index c0a5efd6287f5..eb2fef4b62eb8 100644 --- a/addons/skin.estuary/xml/Custom_1101_SettingsList.xml +++ b/addons/skin.estuary/xml/Custom_1101_SettingsList.xml @@ -74,50 +74,6 @@ Player.HasPrograms - - String.IsEqual(window(home).Property(settingslist_content),subtitle) - 700 - 360 - 0 - 12100 - 12100 - vertical - - 700 - DialogSettingButton - - 590 - ShowSubtitles - VideoPlayer.SubtitlesEnabled + VideoPlayer.HasSubtitles - VideoPlayer.HasSubtitles - - - Download with Subtitles script - 700 - - DialogSettingButton - Close - Dialog.Close(VideoOSD) - ActivateWindow(SubtitleSearch) - !VideoPlayer.Content(LiveTV) - - - 700 - DialogSettingButton - - $INFO[Player.SubtitleDelay,[B],[/B]] - SubtitleDelay - VideoPlayer.HasSubtitles + VideoPlayer.SubtitlesEnabled - - - 700 - DialogSettingButton - - $INFO[VideoPlayer.SubtitlesLanguage,[B],[/B]] - CycleSubtitle - VideoPlayer.HasSubtitles + VideoPlayer.SubtitlesEnabled - - String.IsEqual(window(home).Property(settingslist_content),3d) 700 diff --git a/addons/skin.estuary/xml/VideoOSD.xml b/addons/skin.estuary/xml/VideoOSD.xml index 66e24c6c9ae45..7b59b8c2cd357 100644 --- a/addons/skin.estuary/xml/VideoOSD.xml +++ b/addons/skin.estuary/xml/VideoOSD.xml @@ -161,9 +161,7 @@ - SetProperty(settingslist_content,subtitle,home) - SetProperty(settingslist_header,$LOCALIZE[24012],home) - ActivateWindow(1101) + ActivateWindow(osdsubtitlesettings) !VideoPlayer.Content(LiveTV) | VideoPlayer.HasSubtitles