bool AddonHasSettings(const std::string &condition, const std::string &value, const std::string &settingId) { if (settingId.empty()) return false; CSettingAddon *setting = (CSettingAddon*)CSettings::Get().GetSetting(settingId); if (setting == NULL) return false; ADDON::AddonPtr addon; if (!ADDON::CAddonMgr::Get().GetAddon(setting->GetValue(), addon, setting->GetAddonType()) || addon == NULL) return false; return addon->HasSettings(); }
bool AddonHasSettings(const std::string &condition, const std::string &value, const std::string &settingId) { if (settingId.empty()) return false; CSettingAddon *setting = (CSettingAddon*)CSettings::Get().GetSetting(settingId); if (setting == NULL) return false; ADDON::AddonPtr addon; if (!ADDON::CAddonMgr::Get().GetAddon(setting->GetValue(), addon, setting->GetAddonType()) || addon == NULL) return false; if (addon->Type() == ADDON::ADDON_SKIN) return ((ADDON::CSkinInfo*)addon.get())->HasSkinFile("SkinSettings.xml"); return addon->HasSettings(); }
bool CGUIControlButtonSetting::OnClick() { if (m_pButton == NULL) return false; bool success = false; switch (m_pSetting->GetControl().GetFormat()) { case SettingControlFormatAddon: { // prompt for the addon CSettingAddon *setting = (CSettingAddon *)m_pSetting; CStdString addonID = setting->GetValue(); if (!CGUIWindowAddonBrowser::SelectAddonID(setting->GetAddonType(), addonID, setting->AllowEmpty()) == 1) return false; success = setting->SetValue(addonID); break; } case SettingControlFormatPath: { success = GetPath((CSettingPath *)m_pSetting); break; } case SettingControlFormatAction: { // simply call the OnSettingAction callback and whoever knows what to // do can do so (based on the setting's identification CSettingAction *pSettingAction = (CSettingAction *)m_pSetting; pSettingAction->OnSettingAction(pSettingAction); success = true; break; } default: return false; } return success; }
CSettingAddon* CGUIDialogSettingsManualBase::AddAddon(CSettingGroup *group, const std::string &id, int label, int level, std::string value, ADDON::TYPE addonType, bool allowEmpty /* = false */, int heading /* = -1 */, bool hideValue /* = false */, bool delayed /* = false */, bool visible /* = true */, int help /* = -1 */) { if (group == NULL || id.empty() || label < 0 || GetSetting(id) != NULL) return NULL; CSettingAddon *setting = new CSettingAddon(id, label, value, m_settingsManager); if (setting == NULL) return NULL; setting->SetControl(GetButtonControl("addon", delayed, heading, hideValue)); setting->SetAddonType(addonType); setting->SetAllowEmpty(allowEmpty); setSettingDetails(setting, level, visible, help); group->AddSetting(setting); return setting; }
bool CGUIControlButtonSetting::OnClick() { if (m_pButton == NULL) return false; const ISettingControl *control = m_pSetting->GetControl(); const std::string &controlType = control->GetType(); const std::string &controlFormat = control->GetFormat(); if (controlType == "button") { const CSettingControlButton *buttonControl = static_cast<const CSettingControlButton*>(control); if (controlFormat == "addon") { // prompt for the addon CSettingAddon *setting = (CSettingAddon *)m_pSetting; std::string addonID = setting->GetValue(); if (CGUIWindowAddonBrowser::SelectAddonID(setting->GetAddonType(), addonID, setting->AllowEmpty(), buttonControl->ShowAddonDetails(), buttonControl->ShowInstalledAddons(), buttonControl->ShowInstallableAddons(), buttonControl->ShowMoreAddons()) != 1) return false; SetValid(setting->SetValue(addonID)); } else if (controlFormat == "path") SetValid(GetPath((CSettingPath *)m_pSetting)); else if (controlFormat == "action") { // simply call the OnSettingAction callback and whoever knows what to // do can do so (based on the setting's identification CSettingAction *pSettingAction = (CSettingAction *)m_pSetting; pSettingAction->OnSettingAction(pSettingAction); SetValid(true); } } else if (controlType == "slider") { float value, min, step, max; if (m_pSetting->GetType() == SettingTypeInteger) { CSettingInt *settingInt = static_cast<CSettingInt*>(m_pSetting); value = (float)settingInt->GetValue(); min = (float)settingInt->GetMinimum(); step = (float)settingInt->GetStep(); max = (float)settingInt->GetMaximum(); } else if (m_pSetting->GetType() == SettingTypeNumber) { CSettingNumber *settingNumber = static_cast<CSettingNumber*>(m_pSetting); value = (float)settingNumber->GetValue(); min = (float)settingNumber->GetMinimum(); step = (float)settingNumber->GetStep(); max = (float)settingNumber->GetMaximum(); } else return false; const CSettingControlSlider *sliderControl = static_cast<const CSettingControlSlider*>(control); CGUIDialogSlider::ShowAndGetInput(g_localizeStrings.Get(sliderControl->GetHeading()), value, min, step, max, this, NULL); SetValid(true); } return IsValid(); }