_caption;
}
public function setCaption($value)
{
$this->_caption=$value;
}
public function getCaptionAlign()
{
return $this->_captionAlign;
}
public function setCaptionAlign($value)
{
$this->_captionAlign=TPropertyValue::ensureEnum($value,array('NotSet','Top','Bottom','Left','Right'));
}
public function getRepeatColumns()
{
return $this->_repeatColumns;
}
public function setRepeatColumns($value)
{
$this->_repeatColumns=TPropertyValue::ensureInteger($value);
}
public function getRepeatDirection()
{
return $this->_repeatDirection;
}
public function setRepeatDirection($value)
{
$this->_repeatDirection=TPropertyValue::ensureEnum($value,array('Horizontal','Vertical'));
}
public function getRepeatLayout()
{
return $this->_repeatLayout;
}
public function setRepeatLayout($value)
{
$this->_repeatLayout=TPropertyValue::ensureEnum($value,array('Table','Flow'));
}
public function renderRepeater($writer, IRepeatInfoUser $user)
{
if($this->_repeatLayout==='Table')
{
$control=new TTable;
if($this->_caption!=='')
{
$control->setCaption($this->_caption);
$control->setCaptionAlign($this->_captionAlign);
}
}
else
$control=new TWebControl;
$control->setID($user->getClientID());
$control->copyBaseAttributes($user);
if($user->getHasStyle())
$control->getStyle()->copyFrom($user->getStyle());
$control->renderBeginTag($writer);
if($this->_repeatDirection==='Vertical')
$this->renderVerticalContents($writer,$user);
else
$this->renderHorizontalContents($writer,$user);
$control->renderEndTag($writer);
}
protected function renderHorizontalContents($writer,$user)
{
$tableLayout=($this->_repeatLayout==='Table');
$hasSeparators=$user->getHasSeparators();
$itemCount=$user->getRepeatedItemCount();
$columns=$this->_repeatColumns===0?$itemCount:$this->_repeatColumns;
$totalColumns=$hasSeparators?$columns+$columns:$columns;
$needBreak=$columns<$itemCount;
if($user->getHasHeader())
$this->renderHeader($writer,$user,$tableLayout,$totalColumns,$needBreak);
// render items
if($tableLayout)
{
$column=0;
for($i=0;$i<$itemCount;++$i)
{
if($column==0)
$writer->renderBeginTag('tr');
if(($style=$user->getItemStyle('Item',$i))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Item',$i);
$writer->renderEndTag();
if($hasSeparators && $i!=$itemCount-1)
{
if(($style=$user->getItemStyle('Separator',$i))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Separator',$i);
$writer->renderEndTag();
}
$column++;
if($i==$itemCount-1)
{
$restColumns=$columns-$column;
if($hasSeparators)
$restColumns=$restColumns?$restColumns+$restColumns+1:1;
for($j=0;$j<$restColumns;++$j)
$writer->write('
| ');
}
if($column==$columns || $i==$itemCount-1)
{
$writer->renderEndTag();
$column=0;
}
}
}
else
{
$column=0;
for($i=0;$i<$itemCount;++$i)
{
$user->renderItem($writer,$this,'Item',$i);
if($hasSeparators && $i!=$itemCount-1)
$user->renderItem($writer,$this,'Separator',$i);
$column++;
if($column==$columns || $i==$itemCount-1)
{
if($needBreak)
$writer->writeBreak();
$column=0;
}
}
}
if($user->getHasFooter())
$this->renderFooter($writer,$user,$tableLayout,$totalColumns,$needBreak);
}
protected function renderVerticalContents($writer,$user)
{
$tableLayout=($this->_repeatLayout==='Table');
$hasSeparators=$user->getHasSeparators();
$itemCount=$user->getRepeatedItemCount();
if($this->_repeatColumns<=1)
{
$rows=$itemCount;
$columns=1;
$lastColumns=1;
}
else
{
$columns=$this->_repeatColumns;
$rows=(int)(($itemCount+$columns-1)/$columns);
if($rows==0 && $itemCount>0)
$rows=1;
if(($lastColumns=$itemCount%$columns)==0)
$lastColumns=$columns;
}
$totalColumns=$hasSeparators?$columns+$columns:$columns;
if($user->getHasHeader())
$this->renderHeader($writer,$user,$tableLayout,$totalColumns,false);
if($tableLayout)
{
$renderedItems=0;
for($row=0;$row<$rows;++$row)
{
$index=$row;
$writer->renderBeginTag('tr');
for($col=0;$col<$columns;++$col)
{
if($renderedItems>=$itemCount)
break;
if($col>0)
{
$index+=$rows;
if($col-1>=$lastColumns)
$index--;
}
if($index>=$itemCount)
continue;
$renderedItems++;
if(($style=$user->getItemStyle('Item',$index))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Item',$index);
$writer->renderEndTag();
if(!$hasSeparators)
continue;
if($renderedItems<$itemCount-1)
{
if($columns==1)
{
$writer->renderEndTag();
$writer->renderBeginTag('tr');
}
if(($style=$user->getItemStyle('Separator',$index))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Separator',$index);
$writer->renderEndTag();
}
else if($columns>1)
$writer->write(' | ');
}
if($row==$rows-1)
{
$restColumns=$columns-$lastColumns;
if($hasSeparators)
$restColumns+=$restColumns;
for($col=0;$col<$restColumns;++$col)
$writer->write(' | ');
}
$writer->renderEndTag();
}
}
else
{
$renderedItems=0;
for($row=0;$row<$rows;++$row)
{
$index=$row;
for($col=0;$col<$columns;++$col)
{
if($renderedItems>=$itemCount)
break;
if($col>0)
{
$index+=$rows;
if($col-1>=$lastColumns)
$index--;
}
if($index>=$itemCount)
continue;
$user->renderItem($writer,$this,'Item',$index);
if(!$hasSeparators)
continue;
if($renderedItems<$itemCount-1)
{
if($columns==1)
$writer->writeBreak();
$user->renderItem($writer,$this,'Separator',$index);
}
}
if($row<$rows-1 || $user->getHasFooter())
$writer->writeBreak();
}
}
if($user->getHasFooter())
$this->renderFooter($writer,$user,$tableLayout,$totalColumns,false);
}
protected function renderHeader($writer,$user,$tableLayout,$columns,$needBreak)
{
if($tableLayout)
{
$writer->renderBeginTag('tr');
if($columns>1)
$writer->addAttribute('colspan',"$columns");
$writer->addAttribute('scope','col');
if(($style=$user->getItemStyle('Header',-1))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('th');
$user->renderItem($writer,$this,'Header',-1);
$writer->renderEndTag();
$writer->renderEndTag();
}
else
{
$user->renderItem($writer,$this,'Header',-1);
if($needBreak)
$writer->writeBreak();
}
}
protected function renderFooter($writer,$user,$tableLayout,$columns)
{
if($tableLayout)
{
$writer->renderBeginTag('tr');
if($columns>1)
$writer->addAttribute('colspan',"$columns");
if(($style=$user->getItemStyle('Footer',-1))!==null)
$style->addAttributesToRender($writer);
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Footer',-1);
$writer->renderEndTag();
$writer->renderEndTag();
}
else
$user->renderItem($writer,$this,'Footer',-1);
}
}
?>