/** * Inserts an item at the specified position. * This overrides the parent implementation by performing additional * operations for each newly added child control. * @param integer the speicified position. * @param mixed new item * @throws TInvalidDataTypeException if the item to be inserted is neither a string nor a TControl. */ public function insertAt($index, $item) { if ($item instanceof TControl) { parent::insertAt($index, $item); $this->_o->addedControl($item); } else { if (is_string($item) || $item instanceof IRenderable) { parent::insertAt($index, $item); } else { throw new TInvalidDataTypeException('controlcollection_control_required'); } } }