From 37c9cac197c788e7bdb0aa9b454a199068d2f18e Mon Sep 17 00:00:00 2001 From: "ctrlaltca@gmail.com" <> Date: Sun, 15 May 2011 16:26:11 +0000 Subject: TTabPanel: correctly calculate the current active TTabView index when one or more items are not visible; ensure at least one TTabView is always visible, also if the current one has just being hidden. fixes #324 --- framework/Web/UI/WebControls/TTabPanel.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'framework/Web/UI') diff --git a/framework/Web/UI/WebControls/TTabPanel.php b/framework/Web/UI/WebControls/TTabPanel.php index 63710e56..e17008ba 100644 --- a/framework/Web/UI/WebControls/TTabPanel.php +++ b/framework/Web/UI/WebControls/TTabPanel.php @@ -412,7 +412,11 @@ class TTabPanel extends TWebControl implements IPostBackDataHandler $cs->registerPradoScript('tabpanel'); $code="new $className($options);"; $cs->registerEndScript("prado:$id", $code); - $cs->registerHiddenField($id.'_1',$this->getActiveViewIndex()); + // ensure an item is always active and visible + $index = $this->getActiveViewIndex(); + if(!$this->getViews()->itemAt($index)->Visible) + $index=0; + $cs->registerHiddenField($id.'_1', $index); $page->registerRequiresPostData($this); $page->registerRequiresPostData($id."_1"); } @@ -435,13 +439,16 @@ class TTabPanel extends TWebControl implements IPostBackDataHandler $options['ID']=$this->getClientID(); $options['ActiveCssClass']=$this->getActiveTabCssClass(); $options['NormalCssClass']=$this->getTabCssClass(); - $viewIDs=array(); + $views=''; foreach($this->getViews() as $view) { - if($view->getVisible()) - $viewIDs[]=$view->getClientID(); + if($views!='') + $views.=', '; + $views.= '"'.$view->getClientID().'":'.($view->getVisible() ? '1': '0' ); } - $options['Views']='[\''.implode('\',\'',$viewIDs).'\']'; + + $options['Views']='{'.$views.='}'; + $viewIDs=array(); return $options; } -- cgit v1.2.3