public function applySkin($control)
{
$type = get_class($control);
if (($id = $control->getSkinID()) === '') {
$id = 0;
}
if (isset($this->_skins[$type][$id])) {
foreach ($this->_skins[$type][$id] as $name => $value) {
Prado::trace("Applying skin {$name} to {$type}", 'Prado\\Web\\UI\\TThemeManager');
if (is_array($value)) {
switch ($value[0]) {
case TTemplate::CONFIG_EXPRESSION:
$value = $this->evaluateExpression($value[1]);
break;
case TTemplate::CONFIG_ASSET:
$value = $this->_themeUrl . '/' . ltrim($value[1], '/');
break;
case TTemplate::CONFIG_DATABIND:
$control->bindProperty($name, $value[1]);
break;
case TTemplate::CONFIG_PARAMETER:
$control->setSubProperty($name, $this->getApplication()->getParameters()->itemAt($value[1]));
break;
case TTemplate::CONFIG_TEMPLATE:
$control->setSubProperty($name, $value[1]);
break;
case TTemplate::CONFIG_LOCALIZATION:
$control->setSubProperty($name, Prado::localize($value[1]));
break;
default:
throw new TConfigurationException('theme_tag_unexpected', $name, $value[0]);
break;
}
}
if (!is_array($value)) {
if (strpos($name, '.') === false) {
if ($control->hasProperty($name)) {
if ($control->canSetProperty($name)) {
$setter = 'set' . $name;
$control->{$setter}($value);
} else {
throw new TConfigurationException('theme_property_readonly', $type, $name);
}
} else {
throw new TConfigurationException('theme_property_undefined', $type, $name);
}
} else {
// complex property
$control->setSubProperty($name, $value);
}
}
}
return true;
} else {
return false;
}
}