[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / video / dialogs / GUIDialogCMSSettings.cpp
blobac1a7addfa0a3b7e4511151ea9fd7f57e0631857
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "GUIDialogCMSSettings.h"
11 #include "FileItem.h"
12 #include "GUIPassword.h"
13 #include "ServiceBroker.h"
14 #include "addons/Skin.h"
15 #include "cores/VideoPlayer/VideoRenderers/ColorManager.h"
16 #include "cores/VideoPlayer/VideoRenderers/RenderManager.h"
17 #include "filesystem/Directory.h"
18 #include "guilib/GUIWindowManager.h"
19 #include "profiles/ProfileManager.h"
20 #include "settings/Settings.h"
21 #include "settings/SettingsComponent.h"
22 #include "settings/lib/Setting.h"
23 #include "settings/lib/SettingDefinitions.h"
24 #include "settings/lib/SettingsManager.h"
25 #include "utils/URIUtils.h"
26 #include "utils/Variant.h"
27 #include "utils/log.h"
28 #include "video/VideoDatabase.h"
30 #include <vector>
32 #define SETTING_VIDEO_CMSENABLE "videoscreen.cmsenabled"
33 #define SETTING_VIDEO_CMSMODE "videoscreen.cmsmode"
34 #define SETTING_VIDEO_CMS3DLUT "videoscreen.cms3dlut"
35 #define SETTING_VIDEO_CMSWHITEPOINT "videoscreen.cmswhitepoint"
36 #define SETTING_VIDEO_CMSPRIMARIES "videoscreen.cmsprimaries"
37 #define SETTING_VIDEO_CMSGAMMAMODE "videoscreen.cmsgammamode"
38 #define SETTING_VIDEO_CMSGAMMA "videoscreen.cmsgamma"
39 #define SETTING_VIDEO_CMSLUTSIZE "videoscreen.cmslutsize"
41 CGUIDialogCMSSettings::CGUIDialogCMSSettings()
42 : CGUIDialogSettingsManualBase(WINDOW_DIALOG_CMS_OSD_SETTINGS, "DialogSettings.xml")
43 { }
45 CGUIDialogCMSSettings::~CGUIDialogCMSSettings() = default;
47 void CGUIDialogCMSSettings::SetupView()
49 CGUIDialogSettingsManualBase::SetupView();
51 SetHeading(36560);
52 SET_CONTROL_HIDDEN(CONTROL_SETTINGS_OKAY_BUTTON);
53 SET_CONTROL_HIDDEN(CONTROL_SETTINGS_CUSTOM_BUTTON);
54 SET_CONTROL_LABEL(CONTROL_SETTINGS_CANCEL_BUTTON, 15067);
57 void CGUIDialogCMSSettings::InitializeSettings()
59 CGUIDialogSettingsManualBase::InitializeSettings();
61 const std::shared_ptr<CSettingCategory> category = AddCategory("cms", -1);
62 if (category == NULL)
64 CLog::Log(LOGERROR, "CGUIDialogCMSSettings: unable to setup settings");
65 return;
68 // get all necessary setting groups
69 const std::shared_ptr<CSettingGroup> groupColorManagement = AddGroup(category);
70 if (groupColorManagement == NULL)
72 CLog::Log(LOGERROR, "CGUIDialogCMSSettings: unable to setup settings");
73 return;
76 bool usePopup = g_SkinInfo->HasSkinFile("DialogSlider.xml");
78 TranslatableIntegerSettingOptions entries;
80 // create "depsCmsEnabled" for settings depending on CMS being enabled
81 CSettingDependency dependencyCmsEnabled(SettingDependencyType::Enable, GetSettingsManager());
82 dependencyCmsEnabled.Or()
83 ->Add(CSettingDependencyConditionPtr(new CSettingDependencyCondition(SETTING_VIDEO_CMSENABLE, "true", SettingDependencyOperator::Equals, false, GetSettingsManager())));
84 SettingDependencies depsCmsEnabled;
85 depsCmsEnabled.push_back(dependencyCmsEnabled);
87 // create "depsCms3dlut" for 3dlut settings
88 CSettingDependency dependencyCms3dlut(SettingDependencyType::Visible, GetSettingsManager());
89 dependencyCms3dlut.And()
90 ->Add(CSettingDependencyConditionPtr(new CSettingDependencyCondition(SETTING_VIDEO_CMSMODE, std::to_string(CMS_MODE_3DLUT), SettingDependencyOperator::Equals, false, GetSettingsManager())));
91 SettingDependencies depsCms3dlut;
92 depsCms3dlut.push_back(dependencyCmsEnabled);
93 depsCms3dlut.push_back(dependencyCms3dlut);
95 // create "depsCmsIcc" for display settings with icc profile
96 CSettingDependency dependencyCmsIcc(SettingDependencyType::Visible, GetSettingsManager());
97 dependencyCmsIcc.And()
98 ->Add(CSettingDependencyConditionPtr(new CSettingDependencyCondition(SETTING_VIDEO_CMSMODE, std::to_string(CMS_MODE_PROFILE), SettingDependencyOperator::Equals, false, GetSettingsManager())));
99 SettingDependencies depsCmsIcc;
100 depsCmsIcc.push_back(dependencyCmsEnabled);
101 depsCmsIcc.push_back(dependencyCmsIcc);
103 // create "depsCmsGamma" for effective gamma adjustment (not available with bt.1886)
104 CSettingDependency dependencyCmsGamma(SettingDependencyType::Visible, GetSettingsManager());
105 dependencyCmsGamma.And()
106 ->Add(CSettingDependencyConditionPtr(new CSettingDependencyCondition(SETTING_VIDEO_CMSGAMMAMODE, std::to_string(CMS_TRC_BT1886), SettingDependencyOperator::Equals, true, GetSettingsManager())));
107 SettingDependencies depsCmsGamma;
108 depsCmsGamma.push_back(dependencyCmsEnabled);
109 depsCmsGamma.push_back(dependencyCmsIcc);
110 depsCmsGamma.push_back(dependencyCmsGamma);
112 const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings();
114 // color management settings
115 AddToggle(groupColorManagement, SETTING_VIDEO_CMSENABLE, 36560, SettingLevel::Basic, settings->GetBool(SETTING_VIDEO_CMSENABLE));
117 int currentMode = settings->GetInt(SETTING_VIDEO_CMSMODE);
118 entries.clear();
119 // entries.push_back(TranslatableIntegerSettingOption(16039, CMS_MODE_OFF)); // FIXME: get from CMS class
120 entries.push_back(TranslatableIntegerSettingOption(36580, CMS_MODE_3DLUT));
121 #ifdef HAVE_LCMS2
122 entries.push_back(TranslatableIntegerSettingOption(36581, CMS_MODE_PROFILE));
123 #endif
124 std::shared_ptr<CSettingInt> settingCmsMode = AddSpinner(groupColorManagement, SETTING_VIDEO_CMSMODE, 36562, SettingLevel::Basic, currentMode, entries);
125 settingCmsMode->SetDependencies(depsCmsEnabled);
127 std::string current3dLUT = settings->GetString(SETTING_VIDEO_CMS3DLUT);
128 std::shared_ptr<CSettingString> settingCms3dlut = AddList(groupColorManagement, SETTING_VIDEO_CMS3DLUT, 36564, SettingLevel::Basic, current3dLUT, Cms3dLutsFiller, 36564);
129 settingCms3dlut->SetDependencies(depsCms3dlut);
131 // display settings
132 int currentWhitepoint = settings->GetInt(SETTING_VIDEO_CMSWHITEPOINT);
133 entries.clear();
134 entries.push_back(TranslatableIntegerSettingOption(36586, CMS_WHITEPOINT_D65));
135 entries.push_back(TranslatableIntegerSettingOption(36587, CMS_WHITEPOINT_D93));
136 std::shared_ptr<CSettingInt> settingCmsWhitepoint = AddSpinner(groupColorManagement, SETTING_VIDEO_CMSWHITEPOINT, 36568, SettingLevel::Basic, currentWhitepoint, entries);
137 settingCmsWhitepoint->SetDependencies(depsCmsIcc);
139 int currentPrimaries = settings->GetInt(SETTING_VIDEO_CMSPRIMARIES);
140 entries.clear();
141 entries.push_back(TranslatableIntegerSettingOption(36588, CMS_PRIMARIES_AUTO));
142 entries.push_back(TranslatableIntegerSettingOption(36589, CMS_PRIMARIES_BT709));
143 entries.push_back(TranslatableIntegerSettingOption(36579, CMS_PRIMARIES_BT2020));
144 entries.push_back(TranslatableIntegerSettingOption(36590, CMS_PRIMARIES_170M));
145 entries.push_back(TranslatableIntegerSettingOption(36591, CMS_PRIMARIES_BT470M));
146 entries.push_back(TranslatableIntegerSettingOption(36592, CMS_PRIMARIES_BT470BG));
147 entries.push_back(TranslatableIntegerSettingOption(36593, CMS_PRIMARIES_240M));
148 std::shared_ptr<CSettingInt> settingCmsPrimaries = AddSpinner(groupColorManagement, SETTING_VIDEO_CMSPRIMARIES, 36570, SettingLevel::Basic, currentPrimaries, entries);
149 settingCmsPrimaries->SetDependencies(depsCmsIcc);
151 int currentGammaMode = settings->GetInt(SETTING_VIDEO_CMSGAMMAMODE);
152 entries.clear();
153 entries.push_back(TranslatableIntegerSettingOption(36582, CMS_TRC_BT1886));
154 entries.push_back(TranslatableIntegerSettingOption(36583, CMS_TRC_INPUT_OFFSET));
155 entries.push_back(TranslatableIntegerSettingOption(36584, CMS_TRC_OUTPUT_OFFSET));
156 entries.push_back(TranslatableIntegerSettingOption(36585, CMS_TRC_ABSOLUTE));
157 std::shared_ptr<CSettingInt> settingCmsGammaMode = AddSpinner(groupColorManagement, SETTING_VIDEO_CMSGAMMAMODE, 36572, SettingLevel::Basic, currentGammaMode, entries);
158 settingCmsGammaMode->SetDependencies(depsCmsIcc);
160 float currentGamma = settings->GetInt(SETTING_VIDEO_CMSGAMMA)/100.0f;
161 if (currentGamma == 0.0f)
162 currentGamma = 2.20f;
163 std::shared_ptr<CSettingNumber> settingCmsGamma = AddSlider(groupColorManagement, SETTING_VIDEO_CMSGAMMA, 36574, SettingLevel::Basic, currentGamma, 36597, 1.6, 0.05, 2.8, 36574, usePopup);
164 settingCmsGamma->SetDependencies(depsCmsGamma);
166 int currentLutSize = settings->GetInt(SETTING_VIDEO_CMSLUTSIZE);
167 entries.clear();
168 entries.push_back(TranslatableIntegerSettingOption(36594, 4));
169 entries.push_back(TranslatableIntegerSettingOption(36595, 6));
170 entries.push_back(TranslatableIntegerSettingOption(36596, 8));
171 std::shared_ptr<CSettingInt> settingCmsLutSize = AddSpinner(groupColorManagement, SETTING_VIDEO_CMSLUTSIZE, 36576, SettingLevel::Basic, currentLutSize, entries);
172 settingCmsLutSize->SetDependencies(depsCmsIcc);
175 void CGUIDialogCMSSettings::OnSettingChanged(const std::shared_ptr<const CSetting>& setting)
177 if (setting == NULL)
178 return;
180 CGUIDialogSettingsManualBase::OnSettingChanged(setting);
182 const std::string &settingId = setting->GetId();
183 if (settingId == SETTING_VIDEO_CMSENABLE)
184 CServiceBroker::GetSettingsComponent()->GetSettings()->SetBool(SETTING_VIDEO_CMSENABLE, (std::static_pointer_cast<const CSettingBool>(setting)->GetValue()));
185 else if (settingId == SETTING_VIDEO_CMSMODE)
186 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSMODE, std::static_pointer_cast<const CSettingInt>(setting)->GetValue());
187 else if (settingId == SETTING_VIDEO_CMS3DLUT)
188 CServiceBroker::GetSettingsComponent()->GetSettings()->SetString(SETTING_VIDEO_CMS3DLUT, std::static_pointer_cast<const CSettingString>(setting)->GetValue());
189 else if (settingId == SETTING_VIDEO_CMSWHITEPOINT)
190 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSWHITEPOINT, std::static_pointer_cast<const CSettingInt>(setting)->GetValue());
191 else if (settingId == SETTING_VIDEO_CMSPRIMARIES)
192 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSPRIMARIES, std::static_pointer_cast<const CSettingInt>(setting)->GetValue());
193 else if (settingId == SETTING_VIDEO_CMSGAMMAMODE)
194 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSGAMMAMODE, std::static_pointer_cast<const CSettingInt>(setting)->GetValue());
195 else if (settingId == SETTING_VIDEO_CMSGAMMA)
196 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSGAMMA, static_cast<float>(std::static_pointer_cast<const CSettingNumber>(setting)->GetValue())*100);
197 else if (settingId == SETTING_VIDEO_CMSLUTSIZE)
198 CServiceBroker::GetSettingsComponent()->GetSettings()->SetInt(SETTING_VIDEO_CMSLUTSIZE, std::static_pointer_cast<const CSettingInt>(setting)->GetValue());
201 bool CGUIDialogCMSSettings::OnBack(int actionID)
203 Save();
204 return CGUIDialogSettingsBase::OnBack(actionID);
207 bool CGUIDialogCMSSettings::Save()
209 CLog::Log(LOGINFO, "CGUIDialogCMSSettings: Save() called");
210 CServiceBroker::GetSettingsComponent()->GetSettings()->Save();
212 return true;
215 void CGUIDialogCMSSettings::Cms3dLutsFiller(const SettingConstPtr& setting,
216 std::vector<StringSettingOption>& list,
217 std::string& current,
218 void* data)
220 // get 3dLut directory from settings
221 CFileItemList items;
223 // list .3dlut files
224 std::string current3dlut = CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(SETTING_VIDEO_CMS3DLUT);
225 if (!current3dlut.empty())
226 current3dlut = URIUtils::GetDirectory(current3dlut);
227 XFILE::CDirectory::GetDirectory(current3dlut, items, ".3dlut", XFILE::DIR_FLAG_DEFAULTS);
229 for (int i = 0; i < items.Size(); i++)
231 list.emplace_back(items[i]->GetLabel(), items[i]->GetPath());