diff options
| author | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-09-20 16:12:28 -0700 | 
|---|---|---|
| committer | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-09-20 16:12:28 -0700 | 
| commit | 381c13d0e51c3c054fdf2afeff8a8bcb6fc7aa11 (patch) | |
| tree | 53d1883c760ce238ab2e11146c505150b10be7ab /indra | |
| parent | 5cb0a6221613f1a2f1181cea0fb8bd526ab872bf (diff) | |
CHUI-283: Refactor of how the layout is determined for LLFolderViewItem. Changed constant members that defined the layout to non-const member varaibles, which are populated using a .xml file.
Diffstat (limited to 'indra')
10 files changed, 130 insertions, 53 deletions
| diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 11004fe390..ab4efea4dd 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -56,11 +56,7 @@  const S32 RENAME_WIDTH_PAD = 4;  const S32 RENAME_HEIGHT_PAD = 1;  const S32 AUTO_OPEN_STACK_DEPTH = 16; -const S32 MIN_ITEM_WIDTH_VISIBLE = LLFolderViewItem::ICON_WIDTH -			+ LLFolderViewItem::ICON_PAD  -			+ LLFolderViewItem::ARROW_SIZE  -			+ LLFolderViewItem::TEXT_PAD  -			+ /*first few characters*/ 40; +  const S32 MINIMUM_RENAMER_WIDTH = 80;  // *TODO: move in params in xml if necessary. Requires modification of LLFolderView & LLInventoryPanel Params. @@ -211,10 +207,11 @@ LLFolderView::LLFolderView(const Params& p)  	// Textbox  	LLTextBox::Params text_p;  	LLFontGL* font = getLabelFontForStyle(mLabelStyle); -	LLRect new_r = LLRect(rect.mLeft + ICON_PAD, -			      rect.mTop - TEXT_PAD, +    //mIconPad, mTextPad are set in folder_view_item.xml +	LLRect new_r = LLRect(rect.mLeft + mIconPad, +			      rect.mTop - mTextPad,  			      rect.mRight, -			      rect.mTop - TEXT_PAD - font->getLineHeight()); +			      rect.mTop - mTextPad - font->getLineHeight());  	text_p.rect(new_r);  	text_p.name(std::string(p.name));  	text_p.font(font); @@ -1652,12 +1649,13 @@ void LLFolderView::scrollToShowItem(LLFolderViewItem* item, const LLRect& constr  		S32 icon_height = mIcon.isNull() ? 0 : mIcon->getHeight();   		S32 label_height = getLabelFontForStyle(mLabelStyle)->getLineHeight();   		// when navigating with keyboard, only move top of opened folder on screen, otherwise show whole folder -		S32 max_height_to_show = item->isOpen() && mScrollContainer->hasFocus() ? (llmax( icon_height, label_height ) + ICON_PAD) : local_rect.getHeight();  +		S32 max_height_to_show = item->isOpen() && mScrollContainer->hasFocus() ? (llmax( icon_height, label_height ) + item->getIconPad()) : local_rect.getHeight();  		// get portion of item that we want to see...  		LLRect item_local_rect = LLRect(item->getIndentation(),   										local_rect.getHeight(),  -										llmin(MIN_ITEM_WIDTH_VISIBLE, local_rect.getWidth()),  +                                        //+32 is supposed to include few first characters +										llmin(item->getLabelXPos() + 32, local_rect.getWidth()),   										llmax(0, local_rect.getHeight() - max_height_to_show));  		LLRect item_doc_rect; @@ -1874,7 +1872,7 @@ void LLFolderView::updateRenamerPosition()  	if(mRenameItem)  	{  		// See also LLFolderViewItem::draw() -		S32 x = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mRenameItem->getIndentation(); +		S32 x = mRenameItem->getLabelXPos();  		S32 y = mRenameItem->getRect().getHeight() - mRenameItem->getItemHeight() - RENAME_HEIGHT_PAD;  		mRenameItem->localPointToScreen( x, y, &x, &y );  		screenPointToLocal( x, y, &x, &y ); diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 171af92e73..9632612752 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -90,7 +90,14 @@ LLFolderViewItem::Params::Params()  	item_height("item_height"),  	item_top_pad("item_top_pad"),  	creation_date(), -	allow_open("allow_open", true) +	allow_open("allow_open", true), +    left_pad("left_pad", 0), +    icon_pad("icon_pad", 0), +    icon_width("icon_width", 0), +    text_pad("text_pad", 0), +    text_pad_right("text_pad_right", 0), +    arrow_size("arrow_size", 0), +    max_folder_item_overlap("max_folder_item_overlap", 0)  {}  // Default constructor @@ -98,7 +105,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)  :	LLView(p),  	mLabelWidth(0),  	mLabelWidthDirty(false), -    mLabelPaddingRight(DEFAULT_TEXT_PADDING_RIGHT), +    mLabelPaddingRight(DEFAULT_LABEL_PADDING_RIGHT),  	mParentFolder( NULL ),  	mIsSelected( FALSE ),  	mIsCurSelection( FALSE ), @@ -114,7 +121,14 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)  	mRoot(p.root),  	mViewModelItem(p.listener),  	mIsMouseOverTitle(false), -	mAllowOpen(p.allow_open) +	mAllowOpen(p.allow_open), +    mLeftPad(p.left_pad), +    mIconPad(p.icon_pad), +    mIconWidth(p.icon_width), +    mTextPad(p.text_pad), +    mTextPadRight(p.text_pad_right), +    mArrowSize(p.arrow_size), +    mMaxFolderItemOverlap(p.max_folder_item_overlap)  {  	if (mViewModelItem)  	{ @@ -291,11 +305,11 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height )  		: 0;  	if (mLabelWidthDirty)  	{ -		mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight;  +		mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight;   		mLabelWidthDirty = false;  	} -	*width = llmax(*width, mLabelWidth + mIndentation);  +	*width = llmax(*width, mLabelWidth);   	// determine if we need to use ellipses to avoid horizontal scroll. EXT-719  	bool use_ellipses = getRoot()->getUseEllipses(); @@ -313,6 +327,21 @@ S32 LLFolderViewItem::getItemHeight()  	return mItemHeight;  } +S32 LLFolderViewItem::getLabelXPos() +{ +    return getIndentation() + mArrowSize + mTextPad + mIconWidth + mIconPad; +} + +S32 LLFolderViewItem::getIconPad() +{ +    return mIconPad; +} + +S32 LLFolderViewItem::getTextPad() +{ +    return mTextPad; +} +  // *TODO: This can be optimized a lot by simply recording that it is  // selected in the appropriate places, and assuming that set selection  // means 'deselect' for a leaf item. Do this optimization after @@ -734,8 +763,8 @@ void LLFolderViewItem::draw()  	{  		LLUIImage* arrow_image = default_params.folder_arrow_image;  		gl_draw_scaled_rotated_image( -			mIndentation, getRect().getHeight() - ARROW_SIZE - TEXT_PAD - TOP_PAD, -			ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, arrow_image->getImage(), sFgColor); +			mIndentation, getRect().getHeight() - mArrowSize - mTextPad - TOP_PAD, +			mArrowSize, mArrowSize, mControlLabelRotation, arrow_image->getImage(), sFgColor);  	} @@ -744,7 +773,7 @@ void LLFolderViewItem::draw()  	//--------------------------------------------------------------------------------//  	// Draw open icon  	// -	const S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD; +	const S32 icon_x = mIndentation + mArrowSize + mTextPad;  	if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) // For open folders   	{  		mIconOpen->draw(icon_x, getRect().getHeight() - mIconOpen->getHeight() - TOP_PAD + 1); @@ -769,8 +798,8 @@ void LLFolderViewItem::draw()  	std::string::size_type filter_string_length = mViewModelItem->hasFilterStringMatch() ? mViewModelItem->getFilterStringSize() : 0;  	F32 right_x  = 0; -	F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; -	F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation); +	F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; +	F32 text_left = (F32)getLabelXPos();  	std::string combined_string = mLabel + mLabelSuffix;  	if (filter_string_length > 0) @@ -804,11 +833,15 @@ void LLFolderViewItem::draw()      if (filter_string_length > 0)      {          F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); -        F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; +        F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD;          font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy,              sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,              filter_string_length, S32_MAX, &right_x, FALSE );      } + +    //Gilbert Linden 9-20-2012: Although this should be legal, removing it because it causes the mLabelSuffix rendering to +    //be distorted...oddly. I initially added this in but didn't need it after all. So removing to prevent unnecessary bug. +    //LLView::draw();  }  const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const @@ -984,7 +1017,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  			folders_t::iterator fit = iter++;  			// number of pixels that bottom of folder label is from top of parent folder  			if (getRect().getHeight() - (*fit)->getRect().mTop + (*fit)->getItemHeight()  -				> llround(mCurHeight) + MAX_FOLDER_ITEM_OVERLAP) +				> llround(mCurHeight) + mMaxFolderItemOverlap)  			{  				// hide if beyond current folder height  				(*fit)->setVisible(FALSE); @@ -997,7 +1030,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  			items_t::iterator iit = iter++;  			// number of pixels that bottom of item label is from top of parent folder  			if (getRect().getHeight() - (*iit)->getRect().mBottom -				> llround(mCurHeight) + MAX_FOLDER_ITEM_OVERLAP) +				> llround(mCurHeight) + mMaxFolderItemOverlap)  			{  				(*iit)->setVisible(FALSE);  			} @@ -1757,7 +1790,7 @@ BOOL LLFolderViewFolder::handleMouseDown( S32 x, S32 y, MASK mask )  	}  	if( !handled )  	{ -		if(mIndentation < x && x < mIndentation + ARROW_SIZE + TEXT_PAD) +		if(mIndentation < x && x < mIndentation + mArrowSize + mTextPad)  		{  			toggleOpen();  			handled = TRUE; @@ -1781,7 +1814,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )  	}  	if( !handled )  	{ -		if(mIndentation < x && x < mIndentation + ARROW_SIZE + TEXT_PAD) +		if(mIndentation < x && x < mIndentation + mArrowSize + mTextPad)  		{  			// don't select when user double-clicks plus sign  			// so as not to contradict single-click behavior diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index 5c97407bc1..b7e0091aca 100755 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -60,18 +60,18 @@ public:  		Optional<time_t>							creation_date;  		Optional<bool>								allow_open; +        Optional<S32>                               left_pad, +                                                    icon_pad, +                                                    icon_width, +                                                    text_pad, +                                                    text_pad_right, +                                                    arrow_size, +                                                    max_folder_item_overlap;  		Params();  	}; -	// layout constants -	static const S32	LEFT_PAD = 5, -						ICON_PAD = 2, -						ICON_WIDTH = 16, -						TEXT_PAD = 1, -                        DEFAULT_TEXT_PADDING_RIGHT = 4, -						ARROW_SIZE = 12, -						MAX_FOLDER_ITEM_OVERLAP = 2; -	 + +	static const S32    DEFAULT_LABEL_PADDING_RIGHT = 4;  	// animation parameters  	static const F32	FOLDER_CLOSE_TIME_CONSTANT,  						FOLDER_OPEN_TIME_CONSTANT; @@ -99,6 +99,14 @@ protected:  	S32							mDragStartX,  								mDragStartY; +    S32                         mLeftPad, +                                mIconPad, +                                mIconWidth, +                                mTextPad, +                                mTextPadRight, +                                mArrowSize, +                                mMaxFolderItemOverlap; +  	F32							mControlLabelRotation;  	LLFolderView*				mRoot;  	bool						mHasVisibleChildren, @@ -136,6 +144,9 @@ public:  	// makes sure that this view and it's children are the right size.  	virtual S32 arrange( S32* width, S32* height );  	virtual S32 getItemHeight(); +    virtual S32 getLabelXPos(); +    S32 getIconPad(); +    S32 getTextPad();  	// If 'selection' is 'this' then note that otherwise ignore.  	// Returns TRUE if this item ends up being selected. diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 721abd5892..6860415377 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -109,8 +109,8 @@ void LLConversationViewSession::draw()  	{  		LLUIImage* arrow_image = default_params.folder_arrow_image;  		gl_draw_scaled_rotated_image( -			mIndentation, getRect().getHeight() - ARROW_SIZE - TEXT_PAD - TOP_PAD, -			ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, arrow_image->getImage(), sFgColor); +			mIndentation, getRect().getHeight() - mArrowSize - mTextPad - TOP_PAD, +			mArrowSize, mArrowSize, mControlLabelRotation, arrow_image->getImage(), sFgColor);  	} @@ -227,7 +227,7 @@ void LLConversationViewSession::draw()  // virtual  S32 LLConversationViewSession::arrange(S32* width, S32* height)  { -	LLRect rect(getIndentation() + ARROW_SIZE, +	LLRect rect(getIndentation() + mArrowSize,  				getLocalRect().mTop,  				getLocalRect().mRight,  				getLocalRect().mTop - getItemHeight()); @@ -336,7 +336,7 @@ void LLConversationViewParticipant::initFromParams(const LLConversationViewParti      applyXUILayout(avatar_icon_params, this);      LLAvatarIconCtrl * avatarIcon = LLUICtrlFactory::create<LLAvatarIconCtrl>(avatar_icon_params);      addChild(avatarIcon);	 - +      	LLButton::Params info_button_params(params.info_button());      applyXUILayout(info_button_params, this);  	LLButton * button = LLUICtrlFactory::create<LLButton>(info_button_params); @@ -381,16 +381,11 @@ void LLConversationViewParticipant::draw()      const BOOL show_context = (getRoot() ? getRoot()->getShowSelectionContext() : FALSE);      const BOOL filled = show_context || (getRoot() ? getRoot()->getParentPanel()->hasFocus() : FALSE); // If we have keyboard focus, draw selection filled -    const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>(); -    const S32 TOP_PAD = default_params.item_top_pad; -      const LLFontGL* font = getLabelFontForStyle(mLabelStyle);      F32 right_x  = 0; -    //TEXT_PAD, TOP_PAD, ICON_PAD and mIndentation are temporary values and will non-const eventually since they don't -    //apply to every single layout -    F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; -    F32 text_left = (F32)(mAvatarIcon->getRect().mRight + ICON_PAD + mIndentation); +    F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; +    F32 text_left = (F32)getLabelXPos();      LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor;      drawHighlight(show_context, filled, sHighlightBgColor, sFocusOutlineColor, sMouseOverColor); @@ -448,6 +443,11 @@ void LLConversationViewParticipant::onMouseLeave(S32 x, S32 y, MASK mask)      LLFolderViewItem::onMouseEnter(x, y, mask);  } +S32 LLConversationViewParticipant::getLabelXPos() +{ +    return mAvatarIcon->getRect().mRight + mIconPad; +} +  // static  void LLConversationViewParticipant::initChildrenWidths(LLConversationViewParticipant* self)  { @@ -465,7 +465,7 @@ void LLConversationViewParticipant::initChildrenWidths(LLConversationViewPartici  void LLConversationViewParticipant::computeLabelRightPadding()  { -    mLabelPaddingRight = DEFAULT_TEXT_PADDING_RIGHT; +    mLabelPaddingRight = DEFAULT_LABEL_PADDING_RIGHT;      LLView* control;      S32 ctrl_width; diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index 075ad09d5b..5bc4678b7b 100755 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -101,6 +101,8 @@ public:      void onMouseEnter(S32 x, S32 y, MASK mask);      void onMouseLeave(S32 x, S32 y, MASK mask); +    /*virtual*/ S32 getLabelXPos(); +  protected:  	friend class LLUICtrlFactory;  	LLConversationViewParticipant( const Params& p ); diff --git a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml index 203febbf18..c80e5b168a 100644 --- a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml @@ -20,6 +20,13 @@                folder_indentation="8"                item_height="20"                item_top_pad="4" -              selection_image="Rounded_Square"/> +              selection_image="Rounded_Square" +              left_pad="5" +              icon_pad="2" +              icon_width="16" +              text_pad="1" +              text_pad_right="4" +              arrow_size="12" +              max_folder_item_overlap="2"/>        <item allow_open="false"/>  </inventory_panel> diff --git a/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml b/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml index 7ddcfe3b03..a28d6e0209 100755 --- a/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml +++ b/indra/newview/skins/default/xui/en/widgets/conversation_view_participant.xml @@ -1,12 +1,19 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <conversation_view_participant -  folder_arrow_image="ForSale_Badge" +  folder_arrow_image="Folder_Arrow"    folder_indentation="0"    item_height="24"  -  item_top_pad="4" +  item_top_pad="0"    selection_image="Rounded_Square"    mouse_opaque="true"    follows="left|top|right" +  left_pad="0" +  icon_pad="10" +  icon_width="20" +  text_pad="7" +  text_pad_right="4" +  arrow_size="12" +  max_folder_item_overlap="2"  >  <avatar_icon  	 follows="left" diff --git a/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml b/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml index f44731ea3d..b8c39eec1d 100644 --- a/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml +++ b/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml @@ -6,4 +6,11 @@    item_top_pad="4"    selection_image="Rounded_Square"    mouse_opaque="true" -  follows="left|top|right"/> +  follows="left|top|right" +  left_pad="5" +  icon_pad="2" +  icon_width="16" +  text_pad="1" +  text_pad_right="4" +  arrow_size="12" +  max_folder_item_overlap="2"/> diff --git a/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml b/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml index 6fa74f403d..bbd53ccb12 100644 --- a/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml @@ -7,4 +7,10 @@    selection_image="Rounded_Square"    mouse_opaque="true"    follows="left|top|right" -  /> +  left_pad="5" +  icon_pad="2" +  icon_width="16" +  text_pad="1" +  text_pad_right="4" +  arrow_size="12" +  max_folder_item_overlap="2"/> diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml index 77d8024cb2..590a4730a9 100644 --- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml +++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml @@ -5,7 +5,13 @@    item_height="20"     item_top_pad="4"    selection_image="Rounded_Square" -  > +  left_pad="5" +  icon_pad="2" +  icon_width="16" +  text_pad="1" +  text_pad_right="4" +  arrow_size="12" +  max_folder_item_overlap="2">  	<new_badge           label="New"           label_offset_horiz="-1" | 
