From 423f4e6fb0afba2685589b700d30055cb6dcd099 Mon Sep 17 00:00:00 2001 From: xue <> Date: Mon, 2 Jan 2006 04:54:31 +0000 Subject: Added TRadioButtonList, TTable related controls. --- .gitattributes | 2 + .../pages/Controls/Samples/TCheckBoxList/Home.page | 16 +- demos/quickstart/themes/Simple/style.css | 12 +- framework/Web/UI/WebControls/TCheckBoxList.php | 9 +- framework/Web/UI/WebControls/TRadioButton.php | 2 +- framework/Web/UI/WebControls/TRadioButtonList.php | 19 + framework/Web/UI/WebControls/TRepeatInfo.php | 18 +- framework/Web/UI/WebControls/TTable.php | 449 +++++++++++++++++++++ 8 files changed, 514 insertions(+), 13 deletions(-) create mode 100644 framework/Web/UI/WebControls/TRadioButtonList.php create mode 100644 framework/Web/UI/WebControls/TTable.php 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: - + @@ -18,6 +18,20 @@ Check box list with initial items: + + +Check box list with initial items: + + + + + + + + + + + \ 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 @@ + \ 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(''); + $writer->write("\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(''); + $writer->write("\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(''); + $writer->write("\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 @@ +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 -- cgit v1.2.3