IncrementOffset(); throw $objExc; } $this->blnExpanded = $blnExpanded; $this->blnUseAjax = $blnUseAjax; if(!$strImagesPath) $this->strImagesPath = __QUASI_CONTRIB_IMAGES__; else $this->strImagesPath = $strImagesPath; $this->strExpandedImageUri = $this->strImagesPath . $strExpandedImageUri; $this->strCollapsedImageUri = $this->strImagesPath . $strCollapsedImageUri; $this->AutoRenderChildren = true; $this->pnlHeader = new QPanel($this); $this->pnlHeader->CssClass = 'CollapsableHeader'; $this->pnlBody = new QPanel($this); $this->pnlBody->CssClass = 'CollapsableBody'; $this->btnToggle = new QImageButton($this->pnlHeader); $this->pnlHeader->AutoRenderChildren = true; $this->pnlBody->AutoRenderChildren = true; $this->setButtonAction(); //fake a click to set the initial state - interesting breakage happens if you use this // $this->btnToggle_Click(null,null,null); } protected function setButtonAction() { $this->btnToggle->RemoveAllActions(QClickEvent::EventName); if ($this->blnUseAjax) { $this->btnToggle->AddAction(new QClickEvent(), new QAjaxControlAction($this, "btnToggle_Click")); ///fixme - why doesn't this work?? // $this->pnlHeader->AddAction(new QClickEvent(), new QAjaxControlAction($this, "btnToggle_Click")); } else { $onclick = "el=document.getElementById('".$this->pnlBody->ControlId."'); imgEl=document.getElementById('".$this->btnToggle->ControlId."'); if (el.style.display=='block') {el.style.display='none'; imgEl.src = '".$this->strCollapsedImageUri."';} else {el.style.display='block'; imgEl.src = '".$this->strExpandedImageUri."';}"; $this->btnToggle->AddAction(new QClickEvent(), new QJavaScriptAction($onclick)); } } public function btnToggle_Click($strFormId, $strControlId, $strParameter) { if ($this->blnExpanded) $this->CollapseBody(); else $this->ExpandBody(); } public function ExpandBody() { if ($this->blnUseAjax) $this->pnlBody->Visible = true; else $this->pnlBody->DisplayStyle = QDisplayStyle::Block; if ($this->btnToggle instanceof QImageButton) $this->btnToggle->ImageUrl = $this->strExpandedImageUri; $this->blnExpanded = true; $this->MarkAsModified(); } public function CollapseBody() { if ($this->blnUseAjax) $this->pnlBody->Visible = false; else $this->pnlBody->DisplayStyle = QDisplayStyle::None; $this->btnToggle->ImageUrl = $this->strCollapsedImageUri; $this->blnExpanded = false; $this->MarkAsModified(); } ///////////////////////// // Public Properties: GET ///////////////////////// public function __get($strName) { switch ($strName) { case "Header": return $this->pnlHeader; case "Body": return $this->pnlBody; case "Button": return $this->btnToggle; case "Expanded": return $this->blnExpanded; case "UseAjax": return $this->blnUseAjax; case "ImagesPath": return $this->strImagesPath; case "ExpandedImageUri": return $this->strExpandedImageUri; case "CollapsedImageUri": return $this->strCollapsedImageUri; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } } ///////////////////////// // Public Properties: SET ///////////////////////// public function __set($strName, $mixValue) { $this->blnModified = true; switch ($strName) { case "Expanded": try { $this->blnExpanded = QType::Cast($mixValue, QType::Boolean); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } if ($this->blnExpanded) $this->ExpandBody(); else $this->CollapseBody(); break; case "UseAjax": try { $this->blnUseAjax = QType::Cast($mixValue, QType::Boolean); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } $this->setButtonAction(); break; case "ExpandedImageUri": try { $tmp = QType::Cast($mixValue, QType::String); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } if( '/' != $tmp[0] ) $tmp = '/' . $tmp; $this->strExpandedImageUri = $this->strImagesPath . $tmp; break; case "CollapsedImageUri": try { $tmp = QType::Cast($mixValue, QType::String); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } if( '/' != $tmp[0] ) $tmp = '/' . $tmp; $this->strCollapsedImageUri = $this->strImagesPath . $tmp; break; case "ImagesPath": try { return ($this->strImagesPath = QType::Cast($mixValue, QType::String)); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } default: try { parent::__set($strName, $mixValue); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } } } ?>