bool CGUIControlRangeSetting::OnClick() { if (m_pSlider == NULL || m_pSetting->GetType() != SettingTypeList) return false; CSettingList *settingList = static_cast<CSettingList*>(m_pSetting); const SettingPtrList &settingListValues = settingList->GetValue(); if (settingListValues.size() != 2) return false; std::vector<CVariant> values; const CSetting *listDefintion = settingList->GetDefinition(); switch (listDefintion->GetType()) { case SettingTypeInteger: values.push_back(m_pSlider->GetIntValue(CGUISliderControl::RangeSelectorLower)); values.push_back(m_pSlider->GetIntValue(CGUISliderControl::RangeSelectorUpper)); break; case SettingTypeNumber: values.push_back(m_pSlider->GetFloatValue(CGUISliderControl::RangeSelectorLower)); values.push_back(m_pSlider->GetFloatValue(CGUISliderControl::RangeSelectorUpper)); break; default: return false; } if (values.size() != 2) return false; SetValid(CSettingUtils::SetList(settingList, values)); return IsValid(); }
std::vector<CVariant> CSettings::GetList(const std::string &id) const { CSetting *setting = m_settingsManager->GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeList) return std::vector<CVariant>(); CSettingList *listSetting = static_cast<CSettingList*>(setting); return ListToValues(listSetting, listSetting->GetValue()); }
void CGUIControlRangeSetting::Update(bool updateDisplayOnly /* = false */) { if (m_pSlider == NULL || m_pSetting->GetType() != SettingTypeList) return; CGUIControlBaseSetting::Update(); CSettingList *settingList = static_cast<CSettingList*>(m_pSetting); const SettingPtrList &settingListValues = settingList->GetValue(); if (settingListValues.size() != 2) return; const CSetting *listDefintion = settingList->GetDefinition(); const CSettingControlRange *controlRange = static_cast<const CSettingControlRange*>(m_pSetting->GetControl()); const std::string &controlFormat = controlRange->GetFormat(); std::string strText; std::string strTextLower, strTextUpper; std::string formatString = g_localizeStrings.Get(controlRange->GetFormatLabel() > -1 ? controlRange->GetFormatLabel() : 21469); std::string valueFormat = controlRange->GetValueFormat(); if (controlRange->GetValueFormatLabel() > -1) valueFormat = g_localizeStrings.Get(controlRange->GetValueFormatLabel()); switch (listDefintion->GetType()) { case SettingTypeInteger: { int valueLower, valueUpper; if (updateDisplayOnly) { valueLower = m_pSlider->GetIntValue(CGUISliderControl::RangeSelectorLower); valueUpper = m_pSlider->GetIntValue(CGUISliderControl::RangeSelectorUpper); } else { valueLower = static_cast<CSettingInt*>(settingListValues[0].get())->GetValue(); valueUpper = static_cast<CSettingInt*>(settingListValues[1].get())->GetValue(); m_pSlider->SetIntValue(valueLower, CGUISliderControl::RangeSelectorLower); m_pSlider->SetIntValue(valueUpper, CGUISliderControl::RangeSelectorUpper); } if (controlFormat == "date" || controlFormat == "time") { CDateTime dateLower = (time_t)valueLower; CDateTime dateUpper = (time_t)valueUpper; if (controlFormat == "date") { if (valueFormat.empty()) { strTextLower = dateLower.GetAsLocalizedDate(); strTextUpper = dateUpper.GetAsLocalizedDate(); } else { strTextLower = dateLower.GetAsLocalizedDate(valueFormat); strTextUpper = dateUpper.GetAsLocalizedDate(valueFormat); } } else { if (valueFormat.empty()) valueFormat = "mm:ss"; strTextLower = dateLower.GetAsLocalizedTime(valueFormat); strTextUpper = dateUpper.GetAsLocalizedTime(valueFormat); } } else { strTextLower = StringUtils::Format(valueFormat.c_str(), valueLower); strTextUpper = StringUtils::Format(valueFormat.c_str(), valueUpper); } if (valueLower != valueUpper) strText = StringUtils::Format(formatString.c_str(), strTextLower.c_str(), strTextUpper.c_str()); else strText = strTextLower; break; } case SettingTypeNumber: { double valueLower, valueUpper; if (updateDisplayOnly) { valueLower = static_cast<double>(m_pSlider->GetFloatValue(CGUISliderControl::RangeSelectorLower)); valueUpper = static_cast<double>(m_pSlider->GetFloatValue(CGUISliderControl::RangeSelectorUpper)); } else { valueLower = static_cast<CSettingNumber*>(settingListValues[0].get())->GetValue(); valueUpper = static_cast<CSettingNumber*>(settingListValues[1].get())->GetValue(); m_pSlider->SetFloatValue((float)valueLower, CGUISliderControl::RangeSelectorLower); m_pSlider->SetFloatValue((float)valueUpper, CGUISliderControl::RangeSelectorUpper); } strTextLower = StringUtils::Format(valueFormat.c_str(), valueLower); if (valueLower != valueUpper) { strTextUpper = StringUtils::Format(valueFormat.c_str(), valueUpper); strText = StringUtils::Format(formatString.c_str(), strTextLower.c_str(), strTextUpper.c_str()); } else strText = strTextLower; break; } default: strText.clear(); break; } if (!strText.empty()) m_pSlider->SetTextValue(strText); }