summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes2
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page16
-rw-r--r--demos/quickstart/themes/Simple/style.css12
-rw-r--r--framework/Web/UI/WebControls/TCheckBoxList.php9
-rw-r--r--framework/Web/UI/WebControls/TRadioButton.php2
-rw-r--r--framework/Web/UI/WebControls/TRadioButtonList.php19
-rw-r--r--framework/Web/UI/WebControls/TRepeatInfo.php18
-rw-r--r--framework/Web/UI/WebControls/TTable.php449
8 files changed, 514 insertions, 13 deletions
diff --git a/.gitattributes b/.gitattributes
index 1cb1d8e2..e583b6d9 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -235,9 +235,11 @@ framework/Web/UI/WebControls/TLiteral.php -text
framework/Web/UI/WebControls/TPanel.php -text
framework/Web/UI/WebControls/TPlaceHolder.php -text
framework/Web/UI/WebControls/TRadioButton.php -text
+framework/Web/UI/WebControls/TRadioButtonList.php -text
framework/Web/UI/WebControls/TRepeatInfo.php -text
framework/Web/UI/WebControls/TStatements.php -text
framework/Web/UI/WebControls/TStyle.php -text
+framework/Web/UI/WebControls/TTable.php -text
framework/Web/UI/WebControls/TTextBox.php -text
framework/Web/UI/WebControls/TWebControl.php -text
framework/core.php -text
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page b/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page
index 04d6e91b..7f8772c8 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page
@@ -9,7 +9,7 @@
Check box list with initial items:
</td>
<td class="sampleaction">
-<com:TCheckBoxList RepeatLayout="Flow" RepeatDirection="Horizontal" RepeatColumns="2">
+<com:TCheckBoxList AutoPostBack="true" BorderWidth="1px" BorderStyle="solid" BorderColor="black" GridLines="Both" RepeatLayout="Table" RepeatDirection="Horizontal" RepeatColumns="2">
<com:TListItem Value="value 1" Text="item 1" />
<com:TListItem Value="value 2" Text="item 2" Selected="true" />
<com:TListItem Value="value 3" Text="item 3" />
@@ -18,6 +18,20 @@ Check box list with initial items:
</td>
</tr>
+<tr>
+<td class="samplenote">
+Check box list with initial items:
+</td>
+<td class="sampleaction">
+<com:TRadioButtonList AutoPostBack="true" BorderWidth="1px" BorderStyle="solid" BorderColor="black" GridLines="Both" RepeatLayout="Table" RepeatDirection="Horizontal" RepeatColumns="2">
+ <com:TListItem Value="value 1" Text="item 1" />
+ <com:TListItem Value="value 2" Text="item 2" Selected="true" />
+ <com:TListItem Value="value 3" Text="item 3" />
+ <com:TListItem Value="value 4" Text="item 4" Selected="true" />
+</com:TRadioButtonList>
+</td>
+</tr>
+
</table>
</com:TContent> \ No newline at end of file
diff --git a/demos/quickstart/themes/Simple/style.css b/demos/quickstart/themes/Simple/style.css
index c854e23a..8d75c077 100644
--- a/demos/quickstart/themes/Simple/style.css
+++ b/demos/quickstart/themes/Simple/style.css
@@ -181,18 +181,18 @@ tt {
border-collapse: collapse;
}
-.sampletable td {
- border: 1px solid silver;
- padding: 5px;
- vertical-align: top;
-}
-
td.samplenote {
width: 300px;
text-align: right;
background: #BFE4FF;
+ border: 1px solid silver;
+ padding: 5px;
+ vertical-align: top;
}
td.sampleaction {
background: #ffffee;
+ border: 1px solid silver;
+ padding: 5px;
+ vertical-align: top;
}
diff --git a/framework/Web/UI/WebControls/TCheckBoxList.php b/framework/Web/UI/WebControls/TCheckBoxList.php
index 31d06ef9..c4addcdd 100644
--- a/framework/Web/UI/WebControls/TCheckBoxList.php
+++ b/framework/Web/UI/WebControls/TCheckBoxList.php
@@ -2,7 +2,7 @@
Prado::using('System.Web.UI.WebControls.TRepeatInfo');
-class TCheckBoxList extends TListControl implements IRepeatInfoUser
+class TCheckBoxList extends TListControl implements IRepeatInfoUser, INamingContainer, IPostBackDataHandler
{
private $_repeatedControl;
private $_isEnabled;
@@ -10,12 +10,17 @@ class TCheckBoxList extends TListControl implements IRepeatInfoUser
public function __construct()
{
parent::__construct();
- $this->_repeatedControl=new TCheckBox;
+ $this->_repeatedControl=$this->createRepeatedControl();
$this->_repeatedControl->setEnableViewState(false);
$this->_repeatedControl->setID('0');
$this->getControls()->add($this->_repeatedControl);
}
+ protected function createRepeatedControl()
+ {
+ return new TCheckBox;
+ }
+
public function findControl($id)
{
return $this;
diff --git a/framework/Web/UI/WebControls/TRadioButton.php b/framework/Web/UI/WebControls/TRadioButton.php
index d7901ec8..83f52f69 100644
--- a/framework/Web/UI/WebControls/TRadioButton.php
+++ b/framework/Web/UI/WebControls/TRadioButton.php
@@ -131,7 +131,7 @@ class TRadioButton extends TCheckBox
if(($value=$this->getAttribute('value'))===null)
{
$value=$this->getID();
- return empty($value)?$this->getUniqueID():$value;
+ return $value===''?$this->getUniqueID():$value;
}
else
return $value;
diff --git a/framework/Web/UI/WebControls/TRadioButtonList.php b/framework/Web/UI/WebControls/TRadioButtonList.php
new file mode 100644
index 00000000..8d80745e
--- /dev/null
+++ b/framework/Web/UI/WebControls/TRadioButtonList.php
@@ -0,0 +1,19 @@
+<?php
+
+class TRadioButtonList extends TCheckBoxList
+{
+ protected function createRepeatedControl()
+ {
+ return new TRadioButton;
+ }
+
+ public function loadPostData($key,$values)
+ {
+ }
+
+ public function raisePostDataChangedEvent()
+ {
+ }
+}
+
+?> \ No newline at end of file
diff --git a/framework/Web/UI/WebControls/TRepeatInfo.php b/framework/Web/UI/WebControls/TRepeatInfo.php
index 66584ded..14b57cfb 100644
--- a/framework/Web/UI/WebControls/TRepeatInfo.php
+++ b/framework/Web/UI/WebControls/TRepeatInfo.php
@@ -86,6 +86,7 @@ class TRepeatInfo extends TComponent
if($user->getHasStyle())
$control->getStyle()->copyFrom($user->getStyle());
$control->renderBeginTag($writer);
+ $writer->writeLine();
if($this->_repeatDirection==='Vertical')
$this->renderVerticalContents($writer,$user);
@@ -120,6 +121,7 @@ class TRepeatInfo extends TComponent
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Item',$i);
$writer->renderEndTag();
+ $writer->writeLine();
if($hasSeparators && $i!=$itemCount-1)
{
if(($style=$user->getItemStyle('Separator',$i))!==null)
@@ -127,6 +129,7 @@ class TRepeatInfo extends TComponent
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Separator',$i);
$writer->renderEndTag();
+ $writer->writeLine();
}
$column++;
if($i==$itemCount-1)
@@ -135,11 +138,12 @@ class TRepeatInfo extends TComponent
if($hasSeparators)
$restColumns=$restColumns?$restColumns+$restColumns+1:1;
for($j=0;$j<$restColumns;++$j)
- $writer->write('<td></td>');
+ $writer->write("<td></td>\n");
}
if($column==$columns || $i==$itemCount-1)
{
$writer->renderEndTag();
+ $writer->writeLine();
$column=0;
}
}
@@ -159,6 +163,7 @@ class TRepeatInfo extends TComponent
$writer->writeBreak();
$column=0;
}
+ $writer->writeLine();
}
}
@@ -216,6 +221,7 @@ class TRepeatInfo extends TComponent
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Item',$index);
$writer->renderEndTag();
+ $writer->writeLine();
if(!$hasSeparators)
continue;
if($renderedItems<$itemCount-1)
@@ -230,9 +236,10 @@ class TRepeatInfo extends TComponent
$writer->renderBeginTag('td');
$user->renderItem($writer,$this,'Separator',$index);
$writer->renderEndTag();
+ $writer->writeLine();
}
else if($columns>1)
- $writer->write('<td></td>');
+ $writer->write("<td></td>\n");
}
if($row==$rows-1)
{
@@ -240,9 +247,10 @@ class TRepeatInfo extends TComponent
if($hasSeparators)
$restColumns+=$restColumns;
for($col=0;$col<$restColumns;++$col)
- $writer->write('<td></td>');
+ $writer->write("<td></td>\n");
}
$writer->renderEndTag();
+ $writer->writeLine();
}
}
else
@@ -264,6 +272,7 @@ class TRepeatInfo extends TComponent
if($index>=$itemCount)
continue;
$user->renderItem($writer,$this,'Item',$index);
+ $writer->writeLine();
if(!$hasSeparators)
continue;
if($renderedItems<$itemCount-1)
@@ -272,6 +281,7 @@ class TRepeatInfo extends TComponent
$writer->writeBreak();
$user->renderItem($writer,$this,'Separator',$index);
}
+ $writer->writeLine();
}
if($row<$rows-1 || $user->getHasFooter())
$writer->writeBreak();
@@ -304,6 +314,7 @@ class TRepeatInfo extends TComponent
if($needBreak)
$writer->writeBreak();
}
+ $writer->writeLine();
}
protected function renderFooter($writer,$user,$tableLayout,$columns)
@@ -322,6 +333,7 @@ class TRepeatInfo extends TComponent
}
else
$user->renderItem($writer,$this,'Footer',-1);
+ $writer->writeLine();
}
}
diff --git a/framework/Web/UI/WebControls/TTable.php b/framework/Web/UI/WebControls/TTable.php
new file mode 100644
index 00000000..4a5e84b1
--- /dev/null
+++ b/framework/Web/UI/WebControls/TTable.php
@@ -0,0 +1,449 @@
+<?php
+
+class TTable extends TWebControl
+{
+ private $_rows=null;
+
+ protected function getTagName()
+ {
+ return 'table';
+ }
+
+ public function addParsedObject($object)
+ {
+ if($object instanceof TTableRow)
+ $this->getRows()->add($object);
+ }
+
+ protected function createStyle()
+ {
+ return new TTableStyle;
+ }
+
+ protected function addAttributesToRender($writer)
+ {
+ parent::addAttributesToRender($writer);
+ $border=0;
+ if($this->getHasStyle())
+ {
+ if($this->getGridLines()!=='None')
+ {
+ if(($border=$this->getBorderWidth())==='')
+ $border=1;
+ else
+ $border=(int)$border;
+ }
+ }
+ $writer->addAttribute('border',"$border");
+ }
+
+ /**
+ * @return array list of TTableRow components
+ */
+ public function getRows()
+ {
+ if(!$this->_rows)
+ $this->_rows=new TTableRowCollection($this);
+ return $this->_rows;
+ }
+
+ public function getCaption()
+ {
+ return $this->getViewState('Caption','');
+ }
+
+ public function setCaption($value)
+ {
+ $this->setViewState('Caption',$value,'');
+ }
+
+ public function getCaptionAlign()
+ {
+ return $this->getViewState('CaptionAlign','');
+ }
+
+ public function setCaptionAlign($value)
+ {
+ $this->setViewState('CaptionAlign',TPropertyValue::ensureEnum($value,'NotSet','Top','Bottom','Left','Right'),'NotSet');
+ }
+
+ /**
+ * @return integer the cellspacing for the table keeping the checkbox list. Defaults to -1, meaning not set.
+ */
+ public function getCellSpacing()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getCellSpacing();
+ else
+ return -1;
+ }
+
+ /**
+ * Sets the cellspacing for the table keeping the checkbox list.
+ * @param integer the cellspacing for the table keeping the checkbox list.
+ */
+ public function setCellSpacing($value)
+ {
+ $this->getStyle()->setCellSpacing($value);
+ }
+
+ /**
+ * @return integer the cellpadding for the table keeping the checkbox list. Defaults to -1, meaning not set.
+ */
+ public function getCellPadding()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getCellPadding();
+ else
+ return -1;
+ }
+
+ /**
+ * Sets the cellpadding for the table keeping the checkbox list.
+ * @param integer the cellpadding for the table keeping the checkbox list.
+ */
+ public function setCellPadding($value)
+ {
+ $this->getStyle()->setCellPadding($value);
+ }
+
+ public function getHorizontalAlign()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getHorizontalAlign();
+ else
+ return 'NotSet';
+ }
+
+ public function setHorizontalAlign($value)
+ {
+ $this->getStyle()->setHorizontalAlign($value);
+ }
+
+ public function getGridLines()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getGridLines();
+ else
+ return 'None';
+ }
+
+ public function setGridLines($value)
+ {
+ $this->getStyle()->setGridLines($value);
+ }
+
+ public function getBackImageUrl()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getBackImageUrl();
+ else
+ return 'None';
+ }
+
+ public function setBackImageUrl($value)
+ {
+ $this->getStyle()->setBackImageUrl($value);
+ }
+
+ public function renderBeginTag($writer)
+ {
+ parent::renderBeginTag($writer);
+ if(($caption=$this->getCaption())!=='')
+ {
+ if(($align=$this->getCaptionAlign())!=='NotSet')
+ $writer->addAttribute('align',$align);
+ $writer->renderBeginTag('caption');
+ $writer->write($caption);
+ $writer->renderEndTag();
+ }
+ }
+
+ protected function renderContents($writer)
+ {
+ if($this->_rows)
+ {
+ foreach($this->_rows as $row)
+ {
+ $row->renderControl($writer);
+ $writer->writeLine();
+ }
+ }
+ }
+}
+
+
+class TTableRow extends TWebControl
+{
+ private $_cells=null;
+
+ protected function getTagName()
+ {
+ return 'tr';
+ }
+
+ public function addParsedObject($object)
+ {
+ if($object instanceof TTableCell)
+ $this->getCells()->add($object);
+ }
+
+ protected function createStyle()
+ {
+ return new TTableItemStyle;
+ }
+
+ protected function addAttributesToRender($writer)
+ {
+ parent::addAttributesToRender($writer);
+ $border=0;
+ if($this->getHasStyle())
+ {
+ if($this->getGridLines()!=='None')
+ {
+ if(($border=$this->getBorderWidth())==='')
+ $border=1;
+ else
+ $border=(int)$border;
+ }
+ }
+ $writer->addAttribute('border',"$border");
+ }
+
+ public function getCells()
+ {
+ if(!$this->_cells)
+ $this->_cells=new TTableCellCollection($this);
+ return $this->_cells;
+ }
+
+ public function getHorizontalAlign()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getHorizontalAlign();
+ else
+ return 'NotSet';
+ }
+
+ public function setHorizontalAlign($value)
+ {
+ $this->getStyle()->setHorizontalAlign($value);
+ }
+
+ public function getVerticalAlign()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getVerticalAlign();
+ else
+ return 'NotSet';
+ }
+
+ public function setVerticalAlign($value)
+ {
+ $this->getStyle()->setVerticalAlign($value);
+ }
+
+ protected function renderContents($writer)
+ {
+ if($this->_cells)
+ {
+ foreach($this->_cells as $cell)
+ {
+ $cell->renderControl($writer);
+ $writer->writeLine();
+ }
+ }
+ }
+}
+
+
+class TTableCell extends TWebControl
+{
+ protected function getTagName()
+ {
+ return 'td';
+ }
+
+ protected function createStyle()
+ {
+ return new TTableItemStyle;
+ }
+
+ public function getHorizontalAlign()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getHorizontalAlign();
+ else
+ return 'NotSet';
+ }
+
+ public function setHorizontalAlign($value)
+ {
+ $this->getStyle()->setHorizontalAlign($value);
+ }
+
+ public function getVerticalAlign()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getVerticalAlign();
+ else
+ return 'NotSet';
+ }
+
+ public function setVerticalAlign($value)
+ {
+ $this->getStyle()->setVerticalAlign($value);
+ }
+
+ /**
+ * @return integer the columnspan for the table cell, 0 if not set.
+ */
+ public function getColumnSpan()
+ {
+ return $this->getViewState('ColumnSpan', 0);
+ }
+
+ /**
+ * Sets the columnspan for the table cell.
+ * @param integer the columnspan for the table cell, 0 if not set.
+ */
+ public function setColumnSpan($value)
+ {
+ $this->setViewState('ColumnSpan', TPropertyValue::ensureInteger($value), 0);
+ }
+
+ /**
+ * @return integer the rowspan for the table cell, 0 if not set.
+ */
+ public function getRowSpan()
+ {
+ return $this->getViewState('RowSpan', 0);
+ }
+
+ /**
+ * Sets the rowspan for the table cell.
+ * @param integer the rowspan for the table cell, 0 if not set.
+ */
+ public function setRowSpan($value)
+ {
+ $this->setViewState('RowSpan', TPropertyValue::ensureInteger($value), 0);
+ }
+
+ /**
+ * @return boolean whether the text content wraps within a table cell.
+ */
+ public function getWrap()
+ {
+ if($this->getHasStyle())
+ return $this->getStyle()->getWrap();
+ else
+ return true;
+ }
+
+ /**
+ * Sets the value indicating whether the text content wraps within a table cell.
+ * @param boolean whether the text content wraps within a table cell.
+ */
+ public function setWrap($value)
+ {
+ $this->getStyle()->setWrap($value);
+ }
+
+ /**
+ * @return string the text content of the table cell.
+ */
+ public function getText()
+ {
+ return $this->getViewState('Text','');
+ }
+
+ /**
+ * Sets the text content of the table cell.
+ * @param string the text content
+ */
+ public function setText($value)
+ {
+ $this->setViewState('Text',$value,'');
+ }
+
+ protected function addAttributesToRender($writer)
+ {
+ parent::addAttributesToRender($writer);
+ if(($colspan=$this->getColumnSpan())>0)
+ $writer->addAttribute('colspan',"$colspan");
+ if(($rowspan=$this->getColumnSpan())>0)
+ $writer->addAttribute('rowspan',"$rowspan");
+ }
+
+ protected function renderContents($writer)
+ {
+ if(($text=$this->getText())==='')
+ parent::renderContents($writer);
+ else
+ $writer->write($text);
+ }
+
+ /**
+ * Renders the body content of this cell.
+ * @return string the rendering result
+ */
+ protected function renderBody()
+ {
+ $text=$this->getText();
+ if($text!=='')
+ return $text;
+ else
+ return parent::renderBody();
+ }
+}
+
+
+class TTableHeaderCell extends TTableCell
+{
+ protected function getTagName()
+ {
+ return 'th';
+ }
+
+ protected function addAttributesToRender($writer)
+ {
+ parent::addAttributesToRender($writer);
+ if(($scope=$this->getScope())!=='NotSet')
+ $writer->addAttribute('scope',$scope==='Row'?'row':'col');
+ if(($text=$this->getAbbreviatedText())!=='')
+ $writer->addAttribute('abbr',$text);
+ if(($text=$this->getCategoryText())!=='')
+ $writer->addAttribute('axis',$text);
+ }
+
+ public function getScope()
+ {
+ return $this->getViewState('Scope','NotSet');
+ }
+
+ public function setScope($value)
+ {
+ $this->setViewState('Scope',TPropertyValue::ensureEnum($value,'NotSet','Row','Column'),'NotSet');
+ }
+
+ public function getAbbreviatedText()
+ {
+ return $this->getViewState('AbbreviatedText','');
+ }
+
+ public function setAbbreviatedText($value)
+ {
+ $this->setViewState('AbbreviatedText',$value,'');
+ }
+
+ public function getCategoryText()
+ {
+ return $this->getViewState('CategoryText','');
+ }
+
+ public function setCategoryText($value)
+ {
+ $this->setViewState('CategoryText',$value,'');
+ }
+}
+?> \ No newline at end of file