diff options
| author | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-22 13:58:00 +0200 | 
|---|---|---|
| committer | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-22 13:58:00 +0200 | 
| commit | 6f98e0b9721515065b84d32428b0e55a4bde89d3 (patch) | |
| tree | 3e5f613d4ed88cfc1d991b88658f5ba646a17e6f /indra/llui | |
| parent | a8e9f7ab5010bd4f9d80fbd0002a16bcb802716c (diff) | |
fix for EXT-5128 Groups accordions should all appear on-screen w/out scrolling (open accordion should fill space)
fix is not complete since we got horizontal scrolbar which I think is not intended...need to fix croll_container.
--HG--
branch : product-engine
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llaccordionctrl.cpp | 97 | ||||
| -rw-r--r-- | indra/llui/llaccordionctrl.h | 3 | 
2 files changed, 81 insertions, 19 deletions
| diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index d0c73fbfbc..ae218c28c4 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -103,6 +103,13 @@ void LLAccordionCtrl::draw()  	LLLocalClipRect clip(local_rect);  	LLPanel::draw(); +	/*
 +	S32 width = getRect().getWidth();
 +	S32 height = getRect().getHeight();
 +
 +	gl_rect_2d(0, 0 , width - 1 ,height - 1,LLColor4::green,true);
 +	gl_line_2d(0, 0 , width - 1 ,height - 1,LLColor4::black);
 +	*/
  } @@ -338,36 +345,55 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLView* view)  } - -void LLAccordionCtrl::arrange() +void	LLAccordionCtrl::arrangeSinge()  { -	if( mAccordionTabs.size() == 0) -	{ -		//We do not arrange if we do not have what should be arranged -		return; -	} - -	//Calculate params	  	S32 panel_left = BORDER_MARGIN;	  // Margin from left side of Splitter  	S32 panel_top = getRect().getHeight() - BORDER_MARGIN;		  // Top coordinate of the first panel  	S32 panel_width = getRect().getWidth() - 4;		  // Top coordinate of the first panel +	S32 panel_height; -	 -	if(mAccordionTabs.size() == 1) +	S32 collapsed_height = 0; + +	for(size_t i=0;i<mAccordionTabs.size();++i)  	{ -		LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[0]); -		 -		LLRect panel_rect = accordion_tab->getRect(); +		LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]); -		S32 panel_height = getRect().getHeight() - 2*BORDER_MARGIN; +		if(accordion_tab->getVisible() == false) //skip hidden accordion tabs +			continue; +		if(!accordion_tab->isExpanded() ) +		{ +			collapsed_height+=mAccordionTabs[i]->getRect().getHeight(); +		} +	} -		ctrlSetLeftTopAndSize(accordion_tab,panel_rect.mLeft,panel_top,panel_width,panel_height); +	S32 expanded_height = getRect().getHeight() - BORDER_MARGIN - collapsed_height; +	 +	for(size_t i=0;i<mAccordionTabs.size();++i) +	{ +		LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]); -		show_hide_scrollbar(getRect().getWidth(),getRect().getHeight()); -		return; - +		if(accordion_tab->getVisible() == false) //skip hidden accordion tabs +			continue; +		if(!accordion_tab->isExpanded() ) +		{ +			panel_height = accordion_tab->getRect().getHeight(); +		} +		else +		{ +			panel_height = expanded_height; +		} +		ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, panel_height); +		panel_top-=mAccordionTabs[i]->getRect().getHeight();  	} +} + +void	LLAccordionCtrl::arrangeMultiple() +{ +	S32 panel_left = BORDER_MARGIN;	  // Margin from left side of Splitter +	S32 panel_top = getRect().getHeight() - BORDER_MARGIN;		  // Top coordinate of the first panel +	S32 panel_width = getRect().getWidth() - 4;		  // Top coordinate of the first panel +	//Calculate params	  	for(size_t i = 0; i < mAccordionTabs.size(); i++ )  	{  		LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]); @@ -415,7 +441,40 @@ void LLAccordionCtrl::arrange()  	show_hide_scrollbar(getRect().getWidth(),getRect().getHeight());  	updateLayout(getRect().getWidth(),getRect().getHeight()); +} + + +void LLAccordionCtrl::arrange() +{ +	if( mAccordionTabs.size() == 0) +	{ +		//We do not arrange if we do not have what should be arranged +		return; +	} + +	if(mAccordionTabs.size() == 1) +	{ +		S32 panel_top = getRect().getHeight() - BORDER_MARGIN;		  // Top coordinate of the first panel +		S32 panel_width = getRect().getWidth() - 4;		  // Top coordinate of the first panel +		 +		LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[0]); +		 +		LLRect panel_rect = accordion_tab->getRect(); +		 +		S32 panel_height = getRect().getHeight() - 2*BORDER_MARGIN; + +		ctrlSetLeftTopAndSize(accordion_tab,panel_rect.mLeft,panel_top,panel_width,panel_height); +		 +		show_hide_scrollbar(getRect().getWidth(),getRect().getHeight()); +		return; + +	} + +	if(mSingleExpansion) +		arrangeSinge (); +	else +		arrangeMultiple ();  }  //--------------------------------------------------------------------------------- diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h index d57a42df32..7c29e545b7 100644 --- a/indra/llui/llaccordionctrl.h +++ b/indra/llui/llaccordionctrl.h @@ -105,6 +105,9 @@ public:  	void	reset		();  private: +	void	arrangeSinge(); +	void	arrangeMultiple(); +  	// Calc Splitter's height that is necessary to display all child content  	S32		calcRecuiredHeight();  	S32		getRecuiredHeight() const { return mInnerRect.getHeight(); } | 
