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
master
Ychebotarev ProductEngine 2010-02-22 13:58:00 +02:00
parent a8e9f7ab50
commit 6f98e0b972
7 changed files with 196 additions and 89 deletions

View File

@ -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)
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;
S32 collapsed_height = 0;
for(size_t i=0;i<mAccordionTabs.size();++i)
{
//We do not arrange if we do not have what should be arranged
return;
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if(accordion_tab->getVisible() == false) //skip hidden accordion tabs
continue;
if(!accordion_tab->isExpanded() )
{
collapsed_height+=mAccordionTabs[i]->getRect().getHeight();
}
}
//Calculate params
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]);
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
if(mAccordionTabs.size() == 1)
{
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;
}
//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 ();
}
//---------------------------------------------------------------------------------

View File

@ -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(); }

View File

@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
label="General"
follows="all"
height="604"
width="303"
width="304"
class="panel_group_general"
name="general_tab">
<panel.string
@ -26,7 +25,7 @@ Hover your mouse over the options for more help.
top="0"
left="0"
height="129"
width="313"
width="304"
layout="topleft">
<texture_picker
follows="left|top"

View File

@ -81,80 +81,129 @@ background_visible="true"
width="292"
border_size="0">
<layout_panel
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true"
name="group_accordions"
follows="all"
layout="topleft"
auto_resize="true"
>
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true"
name="group_accordions"
follows="all"
layout="topleft"
auto_resize="true">
<accordion
left="0"
top="0"
single_expansion="true"
follows="all"
layout="topleft"
name="groups_accordion">
<accordion_tab
single_expansion="true"
follows="all"
layout="topleft"
name="groups_accordion">
<accordion_tab
expanded="true"
layout="topleft"
name="group_general_tab"
title="General">
<panel
border="false"
class="panel_group_general"
filename="panel_group_general.xml"
layout="topleft"
left="0"
follows="all"
help_topic="group_general_tab"
name="group_general_tab_panel"
top="0" />
<scroll_container
color="DkGray2"
follows="all"
layout="topleft"
left="0"
name="profile_scroll"
opaque="true"
height="604"
width="304"
top="0">
<panel
border="false"
class="panel_group_general"
filename="panel_group_general.xml"
layout="topleft"
left="0"
follows="left|top|right"
help_topic="group_general_tab"
name="group_general_tab_panel"
top="0" />
</scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
layout="topleft"
name="group_roles_tab"
title="Roles">
<panel
border="false"
class="panel_group_roles"
filename="panel_group_roles.xml"
layout="topleft"
left="0"
name="group_roles_tab_panel"
top="0" />
<scroll_container
color="DkGray2"
follows="all"
layout="topleft"
left="0"
name="profile_scroll"
opaque="true"
height="680"
width="304"
top="0">
<panel
border="false"
class="panel_group_roles"
filename="panel_group_roles.xml"
follows="left|top|right"
layout="topleft"
left="0"
name="group_roles_tab_panel"
top="0" />
</scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
expanded="false"
layout="topleft"
name="group_notices_tab"
title="Notices">
<scroll_container
color="DkGray2"
follows="all"
layout="topleft"
name="group_notices_tab"
title="Notices">
<panel
border="false"
class="panel_group_notices"
filename="panel_group_notices.xml"
layout="topleft"
left="0"
help_topic="group_notices_tab"
name="group_notices_tab_panel"
top="0" />
left="0"
name="profile_scroll"
opaque="true"
height="530"
width="304"
top="0">
<panel
border="false"
class="panel_group_notices"
filename="panel_group_notices.xml"
follows="left|top|right"
layout="topleft"
left="0"
help_topic="group_notices_tab"
name="group_notices_tab_panel"
top="0" />
</scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
<accordion_tab
expanded="false"
layout="topleft"
name="group_land_tab"
title="Land/Assets">
<scroll_container
color="DkGray2"
follows="all"
layout="topleft"
name="group_land_tab"
title="Land/Assets">
<panel
border="false"
class="panel_group_land_money"
filename="panel_group_land_money.xml"
layout="topleft"
left="0"
name="group_land_tab_panel"
top="0" />
left="0"
name="profile_scroll"
opaque="true"
height="500"
width="304"
top="0">
<panel
border="false"
class="panel_group_land_money"
filename="panel_group_land_money.xml"
follows="left|top|right"
layout="topleft"
left="0"
name="group_land_tab_panel"
top="0" />
</scroll_container>
</accordion_tab>
</accordion>
</layout_panel>

View File

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
border="false"
follows="all"
height="500"
label="Land &amp; L$"
layout="topleft"
left="0"
name="land_money_tab"
top="0"
width="313">
width="304">
<panel.string
name="help_text">
A warning appears until the Total Land in Use is less than or = to the Total Contribution.

View File

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
height="530"
label="Notices"
layout="topleft"
left="0"
name="notices_tab"
top="0"
width="313">
width="304">
<panel.string
name="help_text">
Notices let you send a message and an optionally attached item.
@ -44,7 +43,7 @@ Maximum 200 per group daily
right="-1"
name="notice_list"
top_pad="0"
width="313">
width="304">
<scroll_list.columns
label=""
name="icon"

View File

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
height="680"
label="Members &amp; Roles"
layout="topleft"
left="0"
top="0"
name="roles_tab"
width="313">
width="304">
<panel.string
name="default_needs_apply_text">
There are unsaved changes
@ -31,7 +30,7 @@
tab_height="22"
tab_min_width="90"
top="0"
width="313">
width="304">
<panel
border="false"
follows="all"