diff options
author | xue <> | 2006-02-03 06:11:57 +0000 |
---|---|---|
committer | xue <> | 2006-02-03 06:11:57 +0000 |
commit | 0efe2d3e9e02ada6fe297af823b90fa967de85df (patch) | |
tree | c286c9af063072bf9f9aa6dd0edd6031fb12eef4 /framework/Web/UI/WebControls | |
parent | 13b32e41bbda0a22bc0d886841a210dbf7c13b3a (diff) |
Added TCheckBoxColumn.
Diffstat (limited to 'framework/Web/UI/WebControls')
-rw-r--r-- | framework/Web/UI/WebControls/TBoundColumn.php | 2 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TCheckBoxColumn.php | 109 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TDataGrid.php | 117 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TDataGridColumn.php | 15 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TEditCommandColumn.php | 12 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TStyle.php | 28 |
6 files changed, 233 insertions, 50 deletions
diff --git a/framework/Web/UI/WebControls/TBoundColumn.php b/framework/Web/UI/WebControls/TBoundColumn.php index e9dc0412..c30d3ff6 100644 --- a/framework/Web/UI/WebControls/TBoundColumn.php +++ b/framework/Web/UI/WebControls/TBoundColumn.php @@ -127,7 +127,7 @@ class TBoundColumn extends TDataGridColumn if(($field=$this->getDataField())!=='')
$value=$this->formatDataValue($formatString,$this->getDataFieldValue($data,$field));
else
- $value=$this->formatDataValue($data);
+ $value=$this->formatDataValue($formatString,$data);
if(($sender instanceof TTableCell) || ($sender instanceof TTextBox))
$sender->setText($value);
}
diff --git a/framework/Web/UI/WebControls/TCheckBoxColumn.php b/framework/Web/UI/WebControls/TCheckBoxColumn.php new file mode 100644 index 00000000..4f8c5ff3 --- /dev/null +++ b/framework/Web/UI/WebControls/TCheckBoxColumn.php @@ -0,0 +1,109 @@ +<?php
+/**
+ * TCheckBoxColumn class file
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright © 2005 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ */
+
+/**
+ * TDataGridColumn class file
+ */
+Prado::using('System.Web.UI.WebControls.TDataGridColumn');
+
+/**
+ * TCheckBoxColumn class
+ *
+ * TCheckBoxColumn represents a column that is bound to a field in a data source.
+ * The cells in the column will be displayed using the data indexed by
+ * <b>DataField</b>. You can customize the display by setting <b>DataFormatString</b>.
+ *
+ * If <b>ReadOnly</b> is false, TCheckBoxColumn will display cells in edit mode
+ * with textboxes. Otherwise, a static text is displayed.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ * @since 3.0
+ */
+class TCheckBoxColumn extends TDataGridColumn
+{
+ /**
+ * @return string the field name from the data source to bind to the column
+ */
+ public function getDataField()
+ {
+ return $this->getViewState('DataField','');
+ }
+
+ /**
+ * @param string the field name from the data source to bind to the column
+ */
+ public function setDataField($value)
+ {
+ $this->setViewState('DataField',$value,'');
+ $this->onColumnChanged();
+ }
+
+ /**
+ * @return boolean whether the items in the column can be edited. Defaults to false.
+ */
+ public function getReadOnly()
+ {
+ return $this->getViewState('ReadOnly',false);
+ }
+
+ /**
+ * @param boolean whether the items in the column can be edited
+ */
+ public function setReadOnly($value)
+ {
+ $this->setViewState('ReadOnly',TPropertyValue::ensureBoolean($value),false);
+ $this->onColumnChanged();
+ }
+
+ /**
+ * Initializes the specified cell to its initial values.
+ * This method overrides the parent implementation.
+ * It creates a textbox for item in edit mode and the column is not read-only.
+ * Otherwise it displays a static text.
+ * The caption of the button and the static text are retrieved
+ * from the datasource.
+ * @param TTableCell the cell to be initialized.
+ * @param integer the index to the Columns property that the cell resides in.
+ * @param string the type of cell (Header,Footer,Item,AlternatingItem,EditItem,SelectedItem)
+ */
+ public function initializeCell($cell,$columnIndex,$itemType)
+ {
+ parent::initializeCell($cell,$columnIndex,$itemType);
+ if($itemType==='EditItem' || $itemType==='Item'
+ || $itemType==='AlternatingItem' || $itemType==='SelectedItem')
+ {
+ $checkBox=Prado::createComponent('System.Web.UI.WebControls.TCheckBox');
+ if($this->getReadOnly() || $itemType!=='EditItem')
+ $checkBox->setEnabled(false);
+ $cell->setHorizontalAlign('Center');
+ $cell->getControls()->add($checkBox);
+ if(($dataField=$this->getDataField())!=='')
+ $checkBox->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
+ }
+ }
+
+ public function dataBindColumn($sender,$param)
+ {
+ $item=$sender->getNamingContainer();
+ $data=$item->getDataItem();
+ if(($field=$this->getDataField())!=='')
+ $value=TPropertyValue::ensureBoolean($this->getDataFieldValue($data,$field));
+ else
+ $value=TPropertyValue::ensureBoolean($data);
+ if($sender instanceof TCheckBox)
+ $sender->setChecked($value);
+ }
+}
+
+?>
\ No newline at end of file diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php index 2636bd05..81fe2ce1 100644 --- a/framework/Web/UI/WebControls/TDataGrid.php +++ b/framework/Web/UI/WebControls/TDataGrid.php @@ -722,6 +722,8 @@ class TDataGrid extends TBaseDataList public function saveState()
{
parent::saveState();
+ if(!$this->getEnableViewState(true))
+ return;
if($this->_items)
$this->setViewState('ItemCount',$this->_items->getCount(),0);
else
@@ -731,10 +733,19 @@ class TDataGrid extends TBaseDataList $state=array();
foreach($this->_autoColumns as $column)
$state[]=$column->saveState();
- $this->setViewState('ColumnState',$state,array());
+ $this->setViewState('AutoColumns',$state,array());
}
else
- $this->clearViewState('ColumnState');
+ $this->clearViewState('AutoColumns');
+ if($this->_columns)
+ {
+ $state=array();
+ foreach($this->_columns as $column)
+ $state[]=$column->saveState();
+ $this->setViewState('Columns',$state,array());
+ }
+ else
+ $this->clearViewState('Columns');
}
/**
@@ -744,15 +755,32 @@ class TDataGrid extends TBaseDataList public function loadState()
{
parent::loadState();
+ if(!$this->getEnableViewState(true))
+ return;
if(!$this->getIsDataBound())
{
- $state=$this->getViewState('ColumnState',array());
- $columns=$this->getAutoColumns();
- foreach($state as $st)
+ $state=$this->getViewState('AutoColumns',array());
+ if(!empty($state))
{
- $column=new TBoundColumn;
- $column->loadState($st);
- $columns->add($column);
+ $this->_autoColumns=new TDataGridColumnCollection;
+ foreach($state as $st)
+ {
+ $column=new TBoundColumn;
+ $column->loadState($st);
+ $this->_autoColumns->add($column);
+ }
+ }
+ else
+ $this->_autoColumns=null;
+ $state=$this->getViewState('Columns',array());
+ if($this->_columns)
+ {
+ $i=0;
+ foreach($this->_columns as $column)
+ {
+ $column->loadState($state[$i]);
+ $i++;
+ }
}
$this->restoreGridFromViewState();
}
@@ -787,7 +815,8 @@ class TDataGrid extends TBaseDataList if(($itemCount=$this->getViewState('ItemCount',0))<=0)
return;
$this->_pagedDataSource=$ds=$this->createPagedDataSource();
- if($ds->getAllowCustomPaging())
+ $allowPaging=$ds->getAllowPaging();
+ if($allowPaging)
$ds->setDataSource(new TDummyDataSource($itemCount));
else
$ds->setDataSource(new TDummyDataSource($this->getViewState('DataSourceCount',0)));
@@ -846,8 +875,11 @@ class TDataGrid extends TBaseDataList throw new TInvalidDataValueException('datagrid_currentpageindex_invalid');
// get all columns
$columns=new TList($this->getColumns());
- $autoColumns=$this->createAutoColumns($ds);
- $columns->mergeWith($autoColumns);
+ if($this->getAutoGenerateColumns())
+ {
+ $autoColumns=$this->createAutoColumns($ds);
+ $columns->mergeWith($autoColumns);
+ }
$items=$this->getItems();
@@ -888,9 +920,9 @@ class TDataGrid extends TBaseDataList }
else
{
- $this->setViewState('ItemCount',$index,0);
- $this->setViewState('PageCount',0,0);
- $this->setViewState('DataSourceCount',0,0);
+ $this->clearViewState('ItemCount');
+ $this->clearViewState('PageCount');
+ $this->clearViewState('DataSourceCount');
}
$this->_pagedDataSource=null;
}
@@ -1134,8 +1166,9 @@ class TDataGrid extends TBaseDataList if($itemStyle!==null)
{
if($alternatingItemStyle===null)
- $alternatingItemStyle=new TTableItemStyle;
- $alternatingItemStyle->mergeWith($itemStyle);
+ $alternatingItemStyle=$itemStyle;
+ else
+ $alternatingItemStyle->mergeWith($itemStyle);
}
$selectedItemStyle=$this->getViewState('SelectedItemStyle',null);
if($alternatingItemStyle!==null)
@@ -1152,62 +1185,86 @@ class TDataGrid extends TBaseDataList $editItemStyle->mergeWith($selectedItemStyle);
}
- foreach($this->getControls() as $index=>$control)
+ foreach($this->getControls() as $index=>$item)
{
- switch($control->getItemType())
+ $itemType=$item->getItemType();
+ switch($itemType)
{
case 'Header':
if($headerStyle)
- $control->getStyle()->mergeWith($headerStyle);
+ $item->getStyle()->mergeWith($headerStyle);
if(!$this->getShowHeader())
- $control->setVisible(false);
+ $item->setVisible(false);
break;
case 'Footer':
if($footerStyle)
- $control->getStyle()->mergeWith($footerStyle);
+ $item->getStyle()->mergeWith($footerStyle);
if(!$this->getShowFooter())
- $control->setVisible(false);
+ $item->setVisible(false);
break;
case 'Separator':
if($separatorStyle)
- $control->getStyle()->mergeWith($separatorStyle);
+ $item->getStyle()->mergeWith($separatorStyle);
break;
case 'Item':
if($itemStyle)
- $control->getStyle()->mergeWith($itemStyle);
+ $item->getStyle()->mergeWith($itemStyle);
break;
case 'AlternatingItem':
if($alternatingItemStyle)
- $control->getStyle()->mergeWith($alternatingItemStyle);
+ $item->getStyle()->mergeWith($alternatingItemStyle);
break;
case 'SelectedItem':
if($selectedItemStyle)
- $control->getStyle()->mergeWith($selectedItemStyle);
+ $item->getStyle()->mergeWith($selectedItemStyle);
break;
case 'EditItem':
if($editItemStyle)
- $control->getStyle()->mergeWith($editItemStyle);
+ $item->getStyle()->mergeWith($editItemStyle);
break;
case 'Pager':
if($pagerStyle)
{
- $control->getStyle()->mergeWith($pagerStyle);
+ $item->getStyle()->mergeWith($pagerStyle);
$mode=$pagerStyle->getMode();
if($index===0)
{
if($mode==='Bottom')
- $control->setVisible(false);
+ $item->setVisible(false);
}
else
{
if($mode==='Top')
- $control->setVisible(false);
+ $item->setVisible(false);
}
}
break;
default:
break;
}
+ if($this->_columns && $itemType!=='Pager')
+ {
+ $n=$this->_columns->getCount();
+ $cells=$item->getCells();
+ for($i=0;$i<$n;++$i)
+ {
+ $cell=$cells->itemAt($i);
+ $column=$this->_columns->itemAt($i);
+ if(!$column->getVisible())
+ $cell->setVisible(false);
+ else
+ {
+ if($itemType==='Header')
+ $style=$column->getHeaderStyle(false);
+ else if($itemType==='Footer')
+ $style=$column->getFooterStyle(false);
+ else
+ $style=$column->getItemStyle(false);
+ if($style!==null)
+ $cell->getStyle()->mergeWith($style);
+ }
+ }
+ }
}
}
diff --git a/framework/Web/UI/WebControls/TDataGridColumn.php b/framework/Web/UI/WebControls/TDataGridColumn.php index a48efa1d..a5e939ef 100644 --- a/framework/Web/UI/WebControls/TDataGridColumn.php +++ b/framework/Web/UI/WebControls/TDataGridColumn.php @@ -79,11 +79,12 @@ abstract class TDataGridColumn extends TComponent }
/**
+ * @param boolean whether to create a style if previously not existing
* @return TTableItemStyle the style for header
*/
- public function getHeaderStyle()
+ public function getHeaderStyle($createStyle=true)
{
- if(($style=$this->getViewState('HeaderStyle',null))===null)
+ if(($style=$this->getViewState('HeaderStyle',null))===null && $createStyle)
{
$style=new TTableItemStyle;
$this->setViewState('HeaderStyle',$style,null);
@@ -109,11 +110,12 @@ abstract class TDataGridColumn extends TComponent }
/**
+ * @param boolean whether to create a style if previously not existing
* @return TTableItemStyle the style for footer
*/
- public function getFooterStyle()
+ public function getFooterStyle($createStyle=true)
{
- if(($style=$this->getViewState('FooterStyle',null))===null)
+ if(($style=$this->getViewState('FooterStyle',null))===null && $createStyle)
{
$style=new TTableItemStyle;
$this->setViewState('FooterStyle',$style,null);
@@ -122,11 +124,12 @@ abstract class TDataGridColumn extends TComponent }
/**
+ * @param boolean whether to create a style if previously not existing
* @return TTableItemStyle the style for item
*/
- public function getItemStyle()
+ public function getItemStyle($createStyle=true)
{
- if(($style=$this->getViewState('ItemStyle',null))===null)
+ if(($style=$this->getViewState('ItemStyle',null))===null && $createStyle)
{
$style=new TTableItemStyle;
$this->setViewState('ItemStyle',$style,null);
diff --git a/framework/Web/UI/WebControls/TEditCommandColumn.php b/framework/Web/UI/WebControls/TEditCommandColumn.php index a51b703f..b0814a1a 100644 --- a/framework/Web/UI/WebControls/TEditCommandColumn.php +++ b/framework/Web/UI/WebControls/TEditCommandColumn.php @@ -62,7 +62,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function getEditText()
{
- return $this->getViewState('EditText','');
+ return $this->getViewState('EditText','Edit');
}
/**
@@ -70,7 +70,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function setEditText($value)
{
- $this->setViewState('EditText',$value,'');
+ $this->setViewState('EditText',$value,'Edit');
$this->onColumnChanged();
}
@@ -79,7 +79,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function getUpdateText()
{
- return $this->getViewState('UpdateText','');
+ return $this->getViewState('UpdateText','Update');
}
/**
@@ -87,7 +87,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function setUpdateText($value)
{
- $this->setViewState('UpdateText',$value,'');
+ $this->setViewState('UpdateText',$value,'Update');
$this->onColumnChanged();
}
@@ -96,7 +96,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function getCancelText()
{
- return $this->getViewState('CancelText','');
+ return $this->getViewState('CancelText','Cancel');
}
/**
@@ -104,7 +104,7 @@ class TEditCommandColumn extends TDataGridColumn */
public function setCancelText($value)
{
- $this->setViewState('CancelText',$value,'');
+ $this->setViewState('CancelText',$value,'Cancel');
$this->onColumnChanged();
}
diff --git a/framework/Web/UI/WebControls/TStyle.php b/framework/Web/UI/WebControls/TStyle.php index fd92df8a..fa3bcb28 100644 --- a/framework/Web/UI/WebControls/TStyle.php +++ b/framework/Web/UI/WebControls/TStyle.php @@ -45,6 +45,15 @@ class TStyle extends TComponent private $_customStyle=null;
/**
+ * Constructor.
+ * @param TStyle style to copy from
+ */
+ public function __construct($style=null)
+ {
+ $this->copyFrom($style);
+ }
+
+ /**
* @return string the background color of the control
*/
public function getBackColor()
@@ -260,7 +269,6 @@ class TStyle extends TComponent */
public function reset()
{
- parent::reset();
$this->_fields=array();
$this->_font=null;
$this->_class=null;
@@ -274,9 +282,9 @@ class TStyle extends TComponent */
public function copyFrom($style)
{
- if($style!==null)
+ $this->reset();
+ if($style instanceof TStyle)
{
- $this->reset();
$this->_fields=$style->_fields;
$this->_class=$style->_class;
$this->_customStyle=$style->_customStyle;
@@ -295,9 +303,12 @@ class TStyle extends TComponent {
if($style!==null)
{
+ //$this->_fields=array_merge($this->_fields,$style->_fields);
$this->_fields=array_merge($style->_fields,$this->_fields);
if($this->_class===null)
$this->_class=$style->_class;
+ if($this->_customStyle===null)
+ $this->_customStyle=$style->_customStyle;
if($this->_font===null && $style->_font!==null)
$this->getFont()->mergeWith($style->_font);
}
@@ -309,7 +320,7 @@ class TStyle extends TComponent */
public function addAttributesToRender($writer)
{
- if($this->_customStyle!=='')
+ if($this->_customStyle!==null)
{
foreach(explode(';',$this->_customStyle) as $style)
{
@@ -594,9 +605,12 @@ class TTableItemStyle extends TStyle public function copyFrom($style)
{
parent::copyFrom($style);
- $this->_verticalAlign=$style->_verticalAlign;
- $this->_horizontalAlign=$style->_horizontalAlign;
- $this->_wrap=$style->_wrap;
+ if($style instanceof TTableItemStyle)
+ {
+ $this->_verticalAlign=$style->_verticalAlign;
+ $this->_horizontalAlign=$style->_horizontalAlign;
+ $this->_wrap=$style->_wrap;
+ }
}
/**
|