diff options
78 files changed, 873 insertions, 871 deletions
| diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 00fb276f19..f87534fa76 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -91,10 +91,10 @@ public:  		Optional<bool>			selection_enabled; -		Optional<S32>			padding_left; -		Optional<S32>			padding_right; -		Optional<S32>			padding_top; -		Optional<S32>			padding_bottom; +		Optional<S32>			padding_left, +								padding_right, +								padding_top, +								padding_bottom;  		Params();  	}; @@ -176,7 +176,7 @@ public:  	virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks ); -	virtual bool addChild(LLView* child, S32 tab_group); +	virtual bool addChild(LLView* child, S32 tab_group = 0 );  	bool isExpanded() const { return mDisplayChildren; } diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 0cd692b4a4..e7d0950846 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2780,7 +2780,8 @@ LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");  bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)  {  	Params params(LLUICtrlFactory::getDefaultParams<LLFloater>()); -	LLXUIParser::instance().readXUI(node, params, filename); // *TODO: Error checking +	LLXUIParser parser; +	parser.readXUI(node, params, filename); // *TODO: Error checking  	if (output_node)  	{ @@ -2788,8 +2789,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str  		setupParamsForExport(output_params, parent);          Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());  		output_node->setName(node->getName()->mString); -		LLXUIParser::instance().writeXUI( -			output_node, output_params, &default_params); +		parser.writeXUI(output_node, output_params, &default_params);  	}  	// Default floater position to top-left corner of screen diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 4512091371..15a0369eb9 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -41,92 +41,63 @@  #include "llresizebar.h"  #include "llcriticaldamp.h" -static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack", &LLLayoutStack::fromXML); - +static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack"); +static LLLayoutStack::LayoutStackRegistry::Register<LLLayoutPanel> register_layout_panel("layout_panel");  // -// LLLayoutStack +// LLLayoutPanel  // -struct LLLayoutStack::LayoutPanel +LLLayoutPanel::LLLayoutPanel(const Params& p)	 +:	LLPanel(p), + 	mMinDim(p.min_dim),  + 	mMaxDim(p.max_dim),  + 	mAutoResize(p.auto_resize), + 	mUserResize(p.user_resize), + 	mCollapsed(FALSE), + 	mCollapseAmt(0.f), + 	mVisibleAmt(1.f), // default to fully visible + 	mResizeBar(NULL)   { -	LayoutPanel(LLPanel* panelp, ELayoutOrientation orientation, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize)	:	mPanel(panelp),  -		mMinWidth(min_width),  -		mMinHeight(min_height), -		mMaxWidth(max_width),  -		mMaxHeight(max_height), -		mAutoResize(auto_resize), -		mUserResize(user_resize), -		mOrientation(orientation), -		mCollapsed(FALSE), -		mCollapseAmt(0.f), -		mVisibleAmt(1.f), // default to fully visible -		mResizeBar(NULL)  +	// panels initialized as hidden should not start out partially visible +	if (!getVisible())  	{ -		LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM; -		LLRect resize_bar_rect = panelp->getRect(); - -		S32 min_dim; -		if (orientation == HORIZONTAL) -		{ -			min_dim = mMinHeight; -		} -		else -		{ -			min_dim = mMinWidth; -		} -		LLResizeBar::Params p; -		p.name("resize"); -			p.resizing_view(mPanel); -		p.min_size(min_dim); -		p.side(side); -		p.snapping_enabled(false); -		mResizeBar = LLUICtrlFactory::create<LLResizeBar>(p); -		// panels initialized as hidden should not start out partially visible -		if (!mPanel->getVisible()) -		{ -			mVisibleAmt = 0.f; -		} +		mVisibleAmt = 0.f;  	} +} -	~LayoutPanel() -	{ -		// probably not necessary, but... -		delete mResizeBar; -		mResizeBar = NULL; -	} +void LLLayoutPanel::initFromParams(const Params& p) +{ +	LLPanel::initFromParams(p); +	setFollowsNone(); +} + + +LLLayoutPanel::~LLLayoutPanel() +{ +	// probably not necessary, but... +	delete mResizeBar; +	mResizeBar = NULL; +} -	F32 getCollapseFactor() +F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation) +{ +	if (orientation == LLLayoutStack::HORIZONTAL)  	{ -		if (mOrientation == HORIZONTAL) -		{ -			F32 collapse_amt =  -				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinWidth / (F32)llmax(1, mPanel->getRect().getWidth())); -			return mVisibleAmt * collapse_amt; -		} -		else +		F32 collapse_amt =  +			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinDim / (F32)llmax(1, getRect().getWidth())); +		return mVisibleAmt * collapse_amt; +	} +	else  	{ -			F32 collapse_amt =  -				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinHeight / (F32)llmax(1, mPanel->getRect().getHeight()))); -			return mVisibleAmt * collapse_amt; -		} +		F32 collapse_amt =  +			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinDim / (F32)llmax(1, getRect().getHeight()))); +		return mVisibleAmt * collapse_amt;  	} +} -	LLPanel* mPanel; -	S32 mMinWidth; -	S32 mMinHeight; - -	// mMaxWidth & mMaxHeight are added to make configurable max width of the nearby chat bar. EXT-5589 -	// they are not processed by LLLayoutStack but they can be if necessary -	S32 mMaxWidth; -	S32 mMaxHeight; -	BOOL mAutoResize; -	BOOL mUserResize; -	BOOL mCollapsed; -	LLResizeBar* mResizeBar; -	ELayoutOrientation mOrientation; -	F32 mVisibleAmt; -	F32 mCollapseAmt; -}; +// +// LLLayoutStack +//  LLLayoutStack::Params::Params()  :	orientation("orientation", std::string("vertical")), @@ -163,18 +134,18 @@ void LLLayoutStack::draw()  	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{  		// clip to layout rectangle, not bounding rectangle -		LLRect clip_rect = (*panel_it)->mPanel->getRect(); +		LLRect clip_rect = (*panel_it)->getRect();  		// scale clipping rectangle by visible amount  		if (mOrientation == HORIZONTAL)  		{ -			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor()); +			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor(mOrientation));  		}  		else  		{ -			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor()); +			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor(mOrientation));  		} -		LLPanel* panelp = (*panel_it)->mPanel; +		LLPanel* panelp = (*panel_it);  		LLLocalClipRect clip(clip_rect, mClip);  		// only force drawing invisible children if visible amount is non-zero @@ -185,7 +156,7 @@ void LLLayoutStack::draw()  void LLLayoutStack::removeChild(LLView* view)  { -	LayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view)); +	LLLayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view));  	if (embedded_panelp)  	{ @@ -206,149 +177,16 @@ BOOL LLLayoutStack::postBuild()  	return TRUE;  } -static void get_attribute_s32_and_write(LLXMLNodePtr node, -										const char* name, -										S32 *value, -										S32 default_value, -										LLXMLNodePtr output_child) -{ -	BOOL has_attr = node->getAttributeS32(name, *value); -	if (has_attr && *value != default_value && output_child) -	{ -		// create an attribute child node -		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE); -		child_attr->setIntValue(*value); -	} -} - -static void get_attribute_bool_and_write(LLXMLNodePtr node, -										const char* name, -										BOOL *value, -										BOOL default_value, -										LLXMLNodePtr output_child) +bool LLLayoutStack::addChild(LLView* child, S32 tab_group)  { -	BOOL has_attr = node->getAttributeBOOL(name, *value); -	if (has_attr && *value != default_value && output_child) +	LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child); +	if (panelp)  	{ -		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE); -		child_attr->setBoolValue(*value); +		mPanels.push_back(panelp);  	} +	return LLView::addChild(child, tab_group);  } -//static  -LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node) -{ -	LLLayoutStack::Params p(LLUICtrlFactory::getDefaultParams<LLLayoutStack>()); -	LLXUIParser::instance().readXUI(node, p, LLUICtrlFactory::getInstance()->getCurFileName()); -	// Export must happen before setupParams() mungles rectangles and before -	// this item gets added to parent (otherwise screws up last_child_rect -	// logic). JC -	if (output_node) -	{ -		Params output_params(p); -		setupParamsForExport(output_params, parent); -		LLLayoutStack::Params default_params(LLUICtrlFactory::getDefaultParams<LLLayoutStack>()); -		output_node->setName(node->getName()->mString); -		LLXUIParser::instance().writeXUI( -			output_node, output_params, &default_params); -	} - -	p.from_xui = true; -	applyXUILayout(p, parent); -	LLLayoutStack* layout_stackp = LLUICtrlFactory::create<LLLayoutStack>(p); - -	if (parent && layout_stackp) -	{ -		S32 tab_group = p.tab_group.isProvided() ? p.tab_group() : parent->getLastTabGroup(); - -		parent->addChild(layout_stackp, tab_group); -	} - -	for (LLXMLNodePtr child_node = node->getFirstChild(); child_node.notNull(); child_node = child_node->getNextSibling()) -	{ -		const S32 DEFAULT_MIN_WIDTH = 0; -		const S32 DEFAULT_MIN_HEIGHT = 0; -		const S32 DEFAULT_MAX_WIDTH = S32_MAX; -		const S32 DEFAULT_MAX_HEIGHT = S32_MAX; -		const BOOL DEFAULT_AUTO_RESIZE = TRUE; - -		S32 min_width = DEFAULT_MIN_WIDTH; -		S32 min_height = DEFAULT_MIN_HEIGHT; -		S32 max_width = DEFAULT_MAX_WIDTH; -		S32 max_height = DEFAULT_MAX_HEIGHT; -		BOOL auto_resize = DEFAULT_AUTO_RESIZE; - -		LLXMLNodePtr output_child; -		if (output_node)  -		{ -			output_child = output_node->createChild("", FALSE); -		} - -		// Layout stack allows child nodes to acquire additional attributes, -		// such as "min_width" in:  <button label="Foo" min_width="100"/> -		// If these attributes exist and have non-default values, write them -		// to the output node. -		get_attribute_s32_and_write(child_node, "min_width", &min_width, -			DEFAULT_MIN_WIDTH, output_child); -		get_attribute_s32_and_write(child_node, "min_height", &min_height, -			DEFAULT_MIN_HEIGHT, output_child); -		get_attribute_s32_and_write(child_node, "max_width", &max_width, -			DEFAULT_MAX_WIDTH, output_child); -		get_attribute_s32_and_write(child_node, "max_height", &max_height, -			DEFAULT_MAX_HEIGHT, output_child); -		get_attribute_bool_and_write(child_node, "auto_resize", &auto_resize, -			DEFAULT_AUTO_RESIZE, output_child); - -		if (child_node->hasName("layout_panel")) -		{ -			BOOL user_resize = TRUE; -			get_attribute_bool_and_write(child_node, "user_resize", &user_resize, -				TRUE, output_child); -			LLPanel* panelp = (LLPanel*)LLPanel::fromXML(child_node, layout_stackp, output_child); -			if (panelp) -			{ -				panelp->setFollowsNone(); -				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize); -			} -		} -		else -		{ -			BOOL user_resize = FALSE; -			get_attribute_bool_and_write(child_node, "user_resize", &user_resize, -				FALSE, output_child); - -			LLPanel::Params p; -			p.mouse_opaque(false); -			LLPanel* panelp = LLUICtrlFactory::create<LLPanel>(p); -			LLView* new_child = LLUICtrlFactory::getInstance()->createFromXML(child_node, panelp, LLStringUtil::null, LLPanel::child_registry_t::instance(), output_child); -			if (new_child) -			{ -				// put child in new embedded panel -				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize); -				// resize panel to contain widget and move widget to be contained in panel -				panelp->setRect(new_child->getRect()); -				new_child->setOrigin(0, 0); -			} -			else -			{ -				panelp->die(); -			} -		} -		 -		if (output_child && !output_child->mChildren && output_child->mAttributes.empty() && output_child->getValue().empty()) -		{ -			output_node->deleteChild(output_child); -		} -	} - -	if (!layout_stackp->postBuild()) -	{ -		delete layout_stackp; -		return NULL; -	} - -	return layout_stackp; -}  S32 LLLayoutStack::getDefaultHeight(S32 cur_height)  { @@ -374,34 +212,14 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)  	return cur_width;  } -void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index) +void LLLayoutStack::addPanel(LLLayoutPanel* panel, EAnimate animate)  { -	// panel starts off invisible (collapsed) -	if (animate == ANIMATE) -	{ -		panel->setVisible(FALSE); -	} -	LayoutPanel* embedded_panel = new LayoutPanel(panel, mOrientation, min_width, min_height, max_width, max_height, auto_resize, user_resize); -	 -	mPanels.insert(mPanels.begin() + llclamp(index, 0, (S32)mPanels.size()), embedded_panel); -	 -	if (panel->getParent() != this)  -	{ -		addChild(panel); -	} -	addChild(embedded_panel->mResizeBar); - -	// bring all resize bars to the front so that they are clickable even over the panels -	// with a bit of overlap -	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it) -	{ -		LLResizeBar* resize_barp = (*panel_it)->mResizeBar; -		sendChildToFront(resize_barp); -	} +	addChild(panel); -	// start expanding panel animation +	// panel starts off invisible (collapsed)  	if (animate == ANIMATE)  	{ +		panel->mVisibleAmt = 0.f;  		panel->setVisible(TRUE);  	}  } @@ -413,7 +231,7 @@ void LLLayoutStack::removePanel(LLPanel* panel)  void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)  { -	LayoutPanel* panel_container = findEmbeddedPanel(panel); +	LLLayoutPanel* panel_container = findEmbeddedPanel(panel);  	if (!panel_container) return;  	panel_container->mCollapsed = collapsed; @@ -421,7 +239,7 @@ void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)  void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize)  { -	LayoutPanel* panel = findEmbeddedPanelByName(panel_name); +	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);  	if (panel)  	{ @@ -431,7 +249,7 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au  void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_resize)  { -	LayoutPanel* panel = findEmbeddedPanelByName(panel_name); +	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);  	if (panel)  	{ @@ -439,27 +257,25 @@ void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_  	}  } -bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp) +bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp)  { -	LayoutPanel* panel = findEmbeddedPanelByName(panel_name); +	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);  	if (panel)  	{ -		if (min_widthp) *min_widthp = panel->mMinWidth; -		if (min_heightp) *min_heightp = panel->mMinHeight; +		if (min_dimp) *min_dimp = panel->mMinDim;  	}  	return NULL != panel;  } -bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_widthp, S32* max_heightp) +bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_dimp)  { -	LayoutPanel* panel = findEmbeddedPanelByName(panel_name); +	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);  	if (panel)  	{ -		if (max_widthp) *max_widthp = panel->mMaxWidth; -		if (max_heightp) *max_heightp = panel->mMaxHeight; +		if (max_dimp) *max_dimp = panel->mMaxDim;  	}  	return NULL != panel; @@ -471,6 +287,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  	LLFastTimer ft(FTM_UPDATE_LAYOUT);  	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);  	calcMinExtents(); +	createResizeBars();  	// calculate current extents  	S32 total_width = 0; @@ -482,7 +299,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  	e_panel_list_t::iterator panel_it;  	for (panel_it = mPanels.begin(); panel_it != mPanels.end();	++panel_it)  	{ -		LLPanel* panelp = (*panel_it)->mPanel; +		LLPanel* panelp = (*panel_it);  		if (panelp->getVisible())   		{  			if (mAnimate) @@ -532,11 +349,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  		if (mOrientation == HORIZONTAL)  		{  			// enforce minimize size constraint by default -			if (panelp->getRect().getWidth() < (*panel_it)->mMinWidth) +			if (panelp->getRect().getWidth() < (*panel_it)->mMinDim)  			{ -				panelp->reshape((*panel_it)->mMinWidth, panelp->getRect().getHeight()); +				panelp->reshape((*panel_it)->mMinDim, panelp->getRect().getHeight());  			} -        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor()); +        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor(mOrientation));          	// want n-1 panel gaps for n panels  			if (panel_it != mPanels.begin())  			{ @@ -546,11 +363,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  		else //VERTICAL  		{  			// enforce minimize size constraint by default -			if (panelp->getRect().getHeight() < (*panel_it)->mMinHeight) +			if (panelp->getRect().getHeight() < (*panel_it)->mMinDim)  			{ -				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinHeight); +				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinDim);  			} -			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor()); +			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor(mOrientation));  			if (panel_it != mPanels.begin())  			{  				total_height += mPanelSpacing; @@ -564,7 +381,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{  		// panels that are not fully visible do not count towards shrink headroom -		if ((*panel_it)->getCollapseFactor() < 1.f)  +		if ((*panel_it)->getCollapseFactor(mOrientation) < 1.f)   		{  			continue;  		} @@ -577,11 +394,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  		{  			if (mOrientation == HORIZONTAL)  			{ -				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth; +				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;  			}  			else //VERTICAL  			{ -				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight; +				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;  			}  		}  		else @@ -589,13 +406,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  			num_resizable_panels++;  			if (mOrientation == HORIZONTAL)  			{ -				shrink_headroom_available += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth; -				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth; +				shrink_headroom_available += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim; +				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;  			}  			else //VERTICAL  			{ -				shrink_headroom_available += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight; -				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight; +				shrink_headroom_available += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim; +				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;  			}  		}  	} @@ -618,17 +435,25 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{ -		LLPanel* panelp = (*panel_it)->mPanel; +		LLPanel* panelp = (*panel_it);  		S32 cur_width = panelp->getRect().getWidth();  		S32 cur_height = panelp->getRect().getHeight(); -		S32 new_width = llmax((*panel_it)->mMinWidth, cur_width); -		S32 new_height = llmax((*panel_it)->mMinHeight, cur_height);  +		S32 new_width = cur_width; +		S32 new_height = cur_height;  +		if (mOrientation == HORIZONTAL) +		{ +			new_width = llmax((*panel_it)->mMinDim, new_width); +		} +		else +		{ +			new_height = llmax((*panel_it)->mMinDim, new_height); +		}  		S32 delta_size = 0;  		// if panel can automatically resize (not animating, and resize flag set)... -		if ((*panel_it)->getCollapseFactor() == 1.f  +		if ((*panel_it)->getCollapseFactor(mOrientation) == 1.f   			&& (force_resize || (*panel_it)->mAutoResize)   			&& !(*panel_it)->mResizeBar->hasMouseCapture())   		{ @@ -639,8 +464,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  				{  					// shrink proportionally to amount over minimum  					// so we can do this in one pass -					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinWidth) / (F32)shrink_headroom_available)) : 0; -					shrink_headroom_available -= (cur_width - (*panel_it)->mMinWidth); +					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0; +					shrink_headroom_available -= (cur_width - (*panel_it)->mMinDim);  				}  				else  				{ @@ -649,7 +474,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  					num_resizable_panels--;  				}  				pixels_to_distribute -= delta_size; -				new_width = llmax((*panel_it)->mMinWidth, cur_width + delta_size); +				new_width = llmax((*panel_it)->mMinDim, cur_width + delta_size);  			}  			else  			{ @@ -662,8 +487,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  				{  					// shrink proportionally to amount over minimum  					// so we can do this in one pass -					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinHeight) / (F32)shrink_headroom_available)) : 0; -					shrink_headroom_available -= (cur_height - (*panel_it)->mMinHeight); +					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0; +					shrink_headroom_available -= (cur_height - (*panel_it)->mMinDim);  				}  				else  				{ @@ -671,7 +496,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  					num_resizable_panels--;  				}  				pixels_to_distribute -= delta_size; -				new_height = llmax((*panel_it)->mMinHeight, cur_height + delta_size); +				new_height = llmax((*panel_it)->mMinDim, cur_height + delta_size);  			}  			else  			{ @@ -712,11 +537,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  		if (mOrientation == HORIZONTAL)  		{ -			cur_x += llround(new_width * (*panel_it)->getCollapseFactor()) + mPanelSpacing; +			cur_x += llround(new_width * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;  		}  		else //VERTICAL  		{ -			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor()) + mPanelSpacing; +			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;  		}  	} @@ -724,19 +549,19 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  	LLResizeBar* last_resize_bar = NULL;  	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{ -		LLPanel* panelp = (*panel_it)->mPanel; +		LLPanel* panelp = (*panel_it);  		if (mOrientation == HORIZONTAL)  		{  			(*panel_it)->mResizeBar->setResizeLimits( -				(*panel_it)->mMinWidth,  -				(*panel_it)->mMinWidth + shrink_headroom_total); +				(*panel_it)->mMinDim,  +				(*panel_it)->mMinDim + shrink_headroom_total);  		}  		else //VERTICAL  		{  			(*panel_it)->mResizeBar->setResizeLimits( -				(*panel_it)->mMinHeight,  -				(*panel_it)->mMinHeight + shrink_headroom_total); +				(*panel_it)->mMinDim,  +				(*panel_it)->mMinDim + shrink_headroom_total);  		}  		// toggle resize bars based on panel visibility, resizability, etc @@ -772,14 +597,14 @@ void LLLayoutStack::updateLayout(BOOL force_resize)  } // end LLLayoutStack::updateLayout -LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const +LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const  {  	if (!panelp) return NULL;  	e_panel_list_t::const_iterator panel_it;  	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{ -		if ((*panel_it)->mPanel == panelp) +		if ((*panel_it) == panelp)  		{  			return *panel_it;  		} @@ -787,15 +612,15 @@ LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) co  	return NULL;  } -LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const +LLLayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const  { -	LayoutPanel* result = NULL; +	LLLayoutPanel* result = NULL;  	for (e_panel_list_t::const_iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)  	{ -		LayoutPanel* p = *panel_it; +		LLLayoutPanel* p = *panel_it; -		if (p->mPanel->getName() == name) +		if (p->getName() == name)  		{  			result = p;  			break; @@ -816,9 +641,7 @@ void LLLayoutStack::calcMinExtents()  	{  		if (mOrientation == HORIZONTAL)  		{ -			mMinHeight = llmax(	mMinHeight,  -								(*panel_it)->mMinHeight); -            mMinWidth += (*panel_it)->mMinWidth; +            mMinWidth += (*panel_it)->mMinDim;  			if (panel_it != mPanels.begin())  			{  				mMinWidth += mPanelSpacing; @@ -826,9 +649,7 @@ void LLLayoutStack::calcMinExtents()  		}  		else //VERTICAL  		{ -	        mMinWidth = llmax(	mMinWidth,  -								(*panel_it)->mMinWidth); -			mMinHeight += (*panel_it)->mMinHeight; +			mMinHeight += (*panel_it)->mMinDim;  			if (panel_it != mPanels.begin())  			{  				mMinHeight += mPanelSpacing; @@ -837,6 +658,37 @@ void LLLayoutStack::calcMinExtents()  	}  } +void LLLayoutStack::createResizeBars() +{ +	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it) +	{ +		LLLayoutPanel* lp = (*panel_it); +		if (lp->mResizeBar == NULL) +		{ +			LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM; +			LLRect resize_bar_rect = getRect(); + +			LLResizeBar::Params resize_params; +			resize_params.name("resize"); +			resize_params.resizing_view(lp); +			resize_params.min_size(lp->mMinDim); +			resize_params.side(side); +			resize_params.snapping_enabled(false); +			LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params); +			lp->mResizeBar = resize_bar; +			LLView::addChild(resize_bar, 0); + +			// bring all resize bars to the front so that they are clickable even over the panels +			// with a bit of overlap +			for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it) +			{ +				LLResizeBar* resize_barp = (*panel_it)->mResizeBar; +				sendChildToFront(resize_barp); +			} +		} +	} +} +  // update layout stack animations, etc. once per frame  // NOTE: we use this to size world view based on animating UI, *before* we draw the UI  // we might still need to call updateLayout during UI draw phase, in case UI elements diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index e454454fe2..9bcfa2c957 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -34,13 +34,18 @@  #ifndef LL_LLLAYOUTSTACK_H  #define LL_LLLAYOUTSTACK_H -#include "llview.h" +#include "llpanel.h"  class LLPanel; +class LLLayoutPanel; +  class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>  {  public: +	struct LayoutStackRegistry : public LLChildRegistry<LayoutStackRegistry> +	{}; +  	struct Params : public LLInitParam::Block<Params, LLView::Params>  	{  		Optional<std::string>	orientation; @@ -51,6 +56,8 @@ public:  		Params();  	}; +	typedef LayoutStackRegistry child_registry_t; +  	typedef enum e_layout_orientation  	{  		HORIZONTAL, @@ -62,6 +69,7 @@ public:  	/*virtual*/ void draw();  	/*virtual*/ void removeChild(LLView*);  	/*virtual*/ BOOL postBuild(); +	/*virtual*/ bool addChild(LLView* child, S32 tab_group = 0);  	static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL); @@ -74,7 +82,7 @@ public:  		ANIMATE  	} EAnimate; -	void addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate = NO_ANIMATE, S32 index = S32_MAX); +	void addPanel(LLLayoutPanel* panel, EAnimate animate = NO_ANIMATE);  	void removePanel(LLPanel* panel);  	void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);  	S32 getNumPanels() { return mPanels.size(); } @@ -83,20 +91,18 @@ public:  	void setPanelUserResize(const std::string& panel_name, BOOL user_resize);  	/** -	 * Gets minimal width and/or height of the specified by name panel. +	 * Gets minimal dimension along layout_stack axis of the specified by name panel.  	 * -	 * If it is necessary to get only the one dimension pass NULL for another one.  	 * @returns true if specified by panel_name internal panel exists, false otherwise.  	 */ -	bool getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp); +	bool getPanelMinSize(const std::string& panel_name, S32* min_dimp);  	/** -	 * Gets maximal width and/or height of the specified by name panel. +	 * Gets maximal dimension along layout_stack axis of the specified by name panel.  	 * -	 * If it is necessary to get only the one dimension pass NULL for another one.  	 * @returns true if specified by panel_name internal panel exists, false otherwise.  	 */ -	bool getPanelMaxSize(const std::string& panel_name, S32* max_width, S32* max_height); +	bool getPanelMaxSize(const std::string& panel_name, S32* max_dim);  	void updateLayout(BOOL force_resize = FALSE); @@ -111,19 +117,18 @@ protected:  	friend class LLUICtrlFactory;  private: -	struct LayoutPanel; - +	void createResizeBars();  	void calcMinExtents();  	S32 getDefaultHeight(S32 cur_height);  	S32 getDefaultWidth(S32 cur_width);  	const ELayoutOrientation mOrientation; -	typedef std::vector<LayoutPanel*> e_panel_list_t; +	typedef std::vector<LLLayoutPanel*> e_panel_list_t;  	e_panel_list_t mPanels; -	LayoutPanel* findEmbeddedPanel(LLPanel* panelp) const; -	LayoutPanel* findEmbeddedPanelByName(const std::string& name) const; +	LLLayoutPanel* findEmbeddedPanel(LLPanel* panelp) const; +	LLLayoutPanel* findEmbeddedPanelByName(const std::string& name) const;  	S32 mMinWidth;  // calculated by calcMinExtents  	S32 mMinHeight;  // calculated by calcMinExtents @@ -135,4 +140,49 @@ private:  	bool mClip;  }; // end class LLLayoutStack +class LLLayoutPanel : public LLPanel +{ +friend LLLayoutStack; +friend class LLUICtrlFactory; +public: +	struct Params : public LLInitParam::Block<Params, LLPanel::Params> +	{ +		Optional<S32>			min_dim, +								max_dim; +		Optional<bool>			user_resize, +								auto_resize; + +		Params() +		:	min_dim("min_dim", 0), +			max_dim("max_dim", 0), +			user_resize("user_resize", true), +			auto_resize("auto_resize", true) +		{ +			addSynonym(min_dim, "min_width"); +			addSynonym(min_dim, "min_height"); +			addSynonym(max_dim, "max_width"); +			addSynonym(max_dim, "max_height"); +		} +	}; + +	~LLLayoutPanel(); + +	void initFromParams(const Params& p); +protected: +	LLLayoutPanel(const Params& p)	; + +	 +	F32 getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation); + +	S32 mMinDim; +	S32 mMaxDim; +	BOOL mAutoResize; +	BOOL mUserResize; +	BOOL mCollapsed; +	class LLResizeBar* mResizeBar; +	F32 mVisibleAmt; +	F32 mCollapseAmt; +}; + +  #endif diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index c93ca1af88..e6a07b02cc 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1277,7 +1277,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)  			if( mCurrentHistoryLine > mLineHistory.begin() )  			{  				mText.assign( *(--mCurrentHistoryLine) ); -				setCursor(llmin((S32)mText.length(), getCursor())); +				setCursorToEnd();  			}  			else  			{ @@ -1294,7 +1294,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)  			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 )  			{  				mText.assign( *(++mCurrentHistoryLine) ); -				setCursor(llmin((S32)mText.length(), getCursor())); +				setCursorToEnd();  			}  			else  			{ diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 51c8f6c743..4471f315c0 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -389,8 +389,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_  	LLPanel* panelp = NULL; -	{ -		LLFastTimer timer(FTM_PANEL_CONSTRUCTION); +	{	LLFastTimer _(FTM_PANEL_CONSTRUCTION);  		if(!class_attr.empty())  		{ @@ -512,6 +511,8 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  			setXMLFilename(xml_filename);  		} +		LLXUIParser parser; +  		if (!xml_filename.empty())  		{  			LLUICtrlFactory::instance().pushFileName(xml_filename); @@ -521,12 +522,11 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  			{  				//if we are exporting, we want to export the current xml  				//not the referenced xml -				LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName()); +				parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());  				Params output_params(params);  				setupParamsForExport(output_params, parent);  				output_node->setName(node->getName()->mString); -				LLXUIParser::instance().writeXUI( -					output_node, output_params, &default_params); +				parser.writeXUI(output_node, output_params, &default_params);  				return TRUE;  			} @@ -537,7 +537,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  				return FALSE;  			} -			LLXUIParser::instance().readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName()); +			parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());  			// add children using dimensions from referenced xml for consistent layout  			setShape(params.rect); @@ -547,15 +547,14 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  		}  		// ask LLUICtrlFactory for filename, since xml_filename might be empty -		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName()); +		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());  		if (output_node)  		{  			Params output_params(params);  			setupParamsForExport(output_params, parent);  			output_node->setName(node->getName()->mString); -			LLXUIParser::instance().writeXUI( -				output_node, output_params, &default_params); +			parser.writeXUI(output_node, output_params, &default_params);  		}  		params.from_xui = true; diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp index 7e3d4b92d3..718c10d2f8 100644 --- a/indra/llui/llrngwriter.cpp +++ b/indra/llui/llrngwriter.cpp @@ -36,10 +36,15 @@  #include "lluicolor.h"  #include "lluictrlfactory.h" +static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs; +static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs; +static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs; +  //  // LLRNGWriter - writes Relax NG schema files based on a param block  //  LLRNGWriter::LLRNGWriter() +: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)  {  	// register various callbacks for inspecting the contents of a param block  	registerInspectFunc<bool>(boost::bind(&LLRNGWriter::writeAttribute, this, "boolean", _1, _2, _3, _4)); diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index d356f061f9..844278e41c 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -2568,7 +2568,8 @@ BOOL	LLScrollListCtrl::canDeselect() const  void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)  {  	LLScrollListColumn::Params p; -	LLParamSDParser::instance().readSD(column, p); +	LLParamSDParser parser; +	parser.readSD(column, p);  	addColumn(p, pos);  } @@ -2759,7 +2760,8 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition  {  	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);  	LLScrollListItem::Params item_params; -	LLParamSDParser::instance().readSD(element, item_params); +	LLParamSDParser parser; +	parser.readSD(element, item_params);  	item_params.userdata = userdata;  	return addRow(item_params, pos);  } diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp index 7d37127584..69976004e6 100644 --- a/indra/llui/llsdparam.cpp +++ b/indra/llui/llsdparam.cpp @@ -36,31 +36,40 @@  // Project includes  #include "llsdparam.h" +static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs; +static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs; +static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs; +  //  // LLParamSDParser  //  LLParamSDParser::LLParamSDParser() +: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)  {  	using boost::bind; -	registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2)); -	registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2)); -	registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); -	registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2)); -	registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); -	registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2)); -	registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2)); -	registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2)); -	registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2)); -	registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2)); +	if (sReadFuncs.empty()) +	{ +		registerParserFuncs<S32>(readS32, &LLParamSDParser::writeTypedValue<S32>); +		registerParserFuncs<U32>(readU32, &LLParamSDParser::writeU32Param); +		registerParserFuncs<F32>(readF32, &LLParamSDParser::writeTypedValue<F32>); +		registerParserFuncs<F64>(readF64, &LLParamSDParser::writeTypedValue<F64>); +		registerParserFuncs<bool>(readBool, &LLParamSDParser::writeTypedValue<F32>); +		registerParserFuncs<std::string>(readString, &LLParamSDParser::writeTypedValue<std::string>); +		registerParserFuncs<LLUUID>(readUUID, &LLParamSDParser::writeTypedValue<LLUUID>); +		registerParserFuncs<LLDate>(readDate, &LLParamSDParser::writeTypedValue<LLDate>); +		registerParserFuncs<LLURI>(readURI, &LLParamSDParser::writeTypedValue<LLURI>); +		registerParserFuncs<LLSD>(readSD, &LLParamSDParser::writeTypedValue<LLSD>); +	}  }  // special case handling of U32 due to ambiguous LLSD::assign overload -bool LLParamSDParser::writeU32Param(const void* val_ptr, const parser_t::name_stack_t& name_stack) +bool LLParamSDParser::writeU32Param(LLParamSDParser::parser_t& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)  { -	if (!mWriteSD) return false; +	LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser); +	if (!sdparser.mWriteSD) return false; -	LLSD* sd_to_write = getSDWriteNode(name_stack); +	LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);  	if (!sd_to_write) return false;  	sd_to_write->assign((S32)*((const U32*)val_ptr)); diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h index d8af3c9bce..83c958d67d 100644 --- a/indra/llui/llsdparam.h +++ b/indra/llui/llsdparam.h @@ -37,17 +37,14 @@  #include "llinitparam.h"  class LLParamSDParser  -:	public LLInitParam::Parser,  -	public LLSingleton<LLParamSDParser> +:	public LLInitParam::Parser  {  LOG_CLASS(LLParamSDParser);  typedef LLInitParam::Parser parser_t; -protected: -	LLParamSDParser(); -	friend class LLSingleton<LLParamSDParser>;  public: +	LLParamSDParser();  	void readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool silent = false);  	void writeSD(LLSD& sd, const LLInitParam::BaseBlock& block); @@ -57,11 +54,12 @@ private:  	void readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block);  	template<typename T> -	bool writeTypedValue(const void* val_ptr, const parser_t::name_stack_t& name_stack) +	static bool writeTypedValue(Parser& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)  	{ -		if (!mWriteSD) return false; +		LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser); +		if (!sdparser.mWriteSD) return false; -		LLSD* sd_to_write = getSDWriteNode(name_stack); +		LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);  		if (!sd_to_write) return false;  		sd_to_write->assign(*((const T*)val_ptr)); @@ -70,7 +68,7 @@ private:  	LLSD* getSDWriteNode(const parser_t::name_stack_t& name_stack); -	bool writeU32Param(const void* value_ptr, const parser_t::name_stack_t& name_stack); +	static bool writeU32Param(Parser& parser, const void* value_ptr, const parser_t::name_stack_t& name_stack);  	static bool readS32(Parser& parser, void* val_ptr);  	static bool readU32(Parser& parser, void* val_ptr); diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 5d8b628776..85fdfbb312 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1802,7 +1802,8 @@ void LLUI::setupPaths()  	LLXMLNodePtr root;  	BOOL success  = LLXMLNode::parseFile(filename, root, NULL);  	Paths paths; -	LLXUIParser::instance().readXUI(root, paths, filename); +	LLXUIParser parser; +	parser.readXUI(root, paths, filename);  	sXUIPaths.clear(); diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp index 1b64ef3abe..88140f1a49 100644 --- a/indra/llui/lluicolortable.cpp +++ b/indra/llui/lluicolortable.cpp @@ -243,7 +243,8 @@ void LLUIColorTable::saveUserSettings() const  	}  	LLXMLNodePtr output_node = new LLXMLNode("colors", false); -	LLXUIParser::instance().writeXUI(output_node, params); +	LLXUIParser parser; +	parser.writeXUI(output_node, params);  	if(!output_node->isNull())  	{ @@ -309,7 +310,8 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename, string_color_  	}  	Params params; -	LLXUIParser::instance().readXUI(root, params, filename); +	LLXUIParser parser; +	parser.readXUI(root, params, filename);  	if(params.validateBlock())  	{ diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index ee700ee6eb..2a2fa21ec0 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -103,7 +103,8 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa  	if (!full_filename.empty())  	{  		LLUICtrlFactory::instance().pushFileName(full_filename); -		LLSimpleXUIParser::instance().readXUI(full_filename, block); +		LLSimpleXUIParser parser; +		parser.readXUI(full_filename, block);  		LLUICtrlFactory::instance().popFileName();  	}  } diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 207f74c89a..6b5d055b78 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -273,7 +273,8 @@ private:  		typename T::Params params(getDefaultParams<T>()); -		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName()); +		LLXUIParser parser; +		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());  		if (output_node)  		{ @@ -283,8 +284,7 @@ private:  			// Export only the differences between this any default params  			typename T::Params default_params(getDefaultParams<T>());  			copyName(node, output_node); -			LLXUIParser::instance().writeXUI( -				output_node, output_params, &default_params); +			parser.writeXUI(output_node, output_params, &default_params);  		}  		// Apply layout transformations, usually munging rect diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 3ee4a85de0..878def07ae 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -108,11 +108,7 @@ LLView::Params::Params()  	left_pad("left_pad"),  	left_delta("left_delta", S32_MAX),  	from_xui("from_xui", false), -	user_resize("user_resize"), -	auto_resize("auto_resize"),  	needs_translate("translate"), -	min_width("min_width"), -	max_width("max_width"),  	xmlns("xmlns"),  	xmlns_xsi("xmlns:xsi"),  	xsi_schemaLocation("xsi:schemaLocation"), diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 0f796fb408..fa4f4c8ae2 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -145,11 +145,7 @@ public:  									left_delta;		// from last left to my left  		//FIXME: get parent context involved in parsing traversal -		Ignored						user_resize,		// nested attribute for LLLayoutPanel -									auto_resize,		// nested attribute for LLLayoutPanel -									needs_translate,	// cue for translation tools -									min_width,			// nested attribute for LLLayoutPanel -									max_width,			// nested attribute for LLLayoutPanel +		Ignored						needs_translate,	// cue for translation tools  									xmlns,				// xml namespace  									xmlns_xsi,			// xml namespace  									xsi_schemaLocation,	// xml schema diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp index 99191d2dbe..922a91b609 100644 --- a/indra/llxuixml/llinitparam.cpp +++ b/indra/llxuixml/llinitparam.cpp @@ -74,7 +74,6 @@ namespace LLInitParam  	void BlockDescriptor::aggregateBlockData(BlockDescriptor& src_block_data)   	{  		mNamedParams.insert(src_block_data.mNamedParams.begin(), src_block_data.mNamedParams.end()); -		mSynonyms.insert(src_block_data.mSynonyms.begin(), src_block_data.mSynonyms.end());  		std::copy(src_block_data.mUnnamedParams.begin(), src_block_data.mUnnamedParams.end(), std::back_inserter(mUnnamedParams));  		std::copy(src_block_data.mValidationList.begin(), src_block_data.mValidationList.end(), std::back_inserter(mValidationList));  		std::copy(src_block_data.mAllParams.begin(), src_block_data.mAllParams.end(), std::back_inserter(mAllParams)); @@ -277,22 +276,6 @@ namespace LLInitParam  			}  		} -		for(BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin(); -			it != block_data.mSynonyms.end(); -			++it) -		{ -			param_handle_t param_handle = it->second->mParamHandle; -			const Param* param = getParamFromHandle(param_handle); -			ParamDescriptor::inspect_func_t inspect_func = it->second->mInspectFunc; -			if (inspect_func) -			{ -				// use existing serial number for param -				name_stack.push_back(std::make_pair(it->first, it->second->mGeneration)); -				inspect_func(*param, parser, name_stack, it->second->mMinCount, it->second->mMaxCount); -				name_stack.pop_back(); -			} -		} -  		return true;  	} @@ -314,22 +297,9 @@ namespace LLInitParam  				// find pointer to member parameter from offset table  				paramp = getParamFromHandle(found_it->second->mParamHandle);  				deserialize_func = found_it->second->mDeserializeFunc; -			} -			else -			{ -				BlockDescriptor::param_map_t::iterator found_it = block_data.mSynonyms.find(top_name); -				if (found_it != block_data.mSynonyms.end()) -				{ -					// find pointer to member parameter from offset table -					paramp = getParamFromHandle(found_it->second->mParamHandle); -					deserialize_func = found_it->second->mDeserializeFunc; -				} -			} -			Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second); -			++new_name_stack.first; -			if (deserialize_func) -			{ +				Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second); +				++new_name_stack.first;  				return deserialize_func(*paramp, p, new_name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second);  			}  		} @@ -404,7 +374,7 @@ namespace LLInitParam  				}  				else  				{ -					block_data.mSynonyms[synonym] = param_descriptor; +					block_data.mNamedParams[synonym] = param_descriptor;  				}  			}  		} @@ -429,14 +399,6 @@ namespace LLInitParam  			}  		} -		for (BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin(); it != block_data.mSynonyms.end(); ++it) -		{ -			if (it->second->mParamHandle == handle) -			{ -				return it->first; -			} -		} -  		return LLStringUtil::null;  	} diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index 5461ad9d05..51dbd99fb1 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -204,23 +204,26 @@ namespace LLInitParam  		typedef std::vector<std::string>							possible_values_t;  		typedef bool (*parser_read_func_t)(Parser& parser, void* output); -		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t; +		typedef bool (*parser_write_func_t)(Parser& parser, const void*, const name_stack_t&);  		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t;  		typedef std::map<const std::type_info*, parser_read_func_t, CompareTypeID>		parser_read_func_map_t;  		typedef std::map<const std::type_info*, parser_write_func_t, CompareTypeID>		parser_write_func_map_t;  		typedef std::map<const std::type_info*, parser_inspect_func_t, CompareTypeID>	parser_inspect_func_map_t; -		Parser() +		Parser(parser_read_func_map_t& read_map, parser_write_func_map_t& write_map, parser_inspect_func_map_t& inspect_map)  		:	mParseSilently(false), -			mParseGeneration(0) +			mParseGeneration(0), +			mParserReadFuncs(&read_map), +			mParserWriteFuncs(&write_map), +			mParserInspectFuncs(&inspect_map)  		{}  		virtual ~Parser();  		template <typename T> bool readValue(T& param)  	    { -		    parser_read_func_map_t::iterator found_it = mParserReadFuncs.find(&typeid(T)); -		    if (found_it != mParserReadFuncs.end()) +		    parser_read_func_map_t::iterator found_it = mParserReadFuncs->find(&typeid(T)); +		    if (found_it != mParserReadFuncs->end())  		    {  			    return found_it->second(*this, (void*)¶m);  		    } @@ -229,10 +232,10 @@ namespace LLInitParam  		template <typename T> bool writeValue(const T& param, const name_stack_t& name_stack)  		{ -		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs.find(&typeid(T)); -		    if (found_it != mParserWriteFuncs.end()) +		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs->find(&typeid(T)); +		    if (found_it != mParserWriteFuncs->end())  		    { -			    return found_it->second((const void*)¶m, name_stack); +			    return found_it->second(*this, (const void*)¶m, name_stack);  		    }  		    return false;  		} @@ -240,8 +243,8 @@ namespace LLInitParam  		// dispatch inspection to registered inspection functions, for each parameter in a param block  		template <typename T> bool inspectValue(const name_stack_t& name_stack, S32 min_count, S32 max_count, const possible_values_t* possible_values)  		{ -		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs.find(&typeid(T)); -		    if (found_it != mParserInspectFuncs.end()) +		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs->find(&typeid(T)); +		    if (found_it != mParserInspectFuncs->end())  		    {  			    found_it->second(name_stack, min_count, max_count, possible_values);  				return true; @@ -253,7 +256,6 @@ namespace LLInitParam  		virtual void parserWarning(const std::string& message);  		virtual void parserError(const std::string& message);  		void setParseSilently(bool silent) { mParseSilently = silent; } -		bool getParseSilently() { return mParseSilently; }  		S32 getParseGeneration() { return mParseGeneration; }  		S32 newParseGeneration() { return ++mParseGeneration; } @@ -261,24 +263,24 @@ namespace LLInitParam  	protected:  		template <typename T> -		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func) +		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func = NULL)  		{ -			mParserReadFuncs.insert(std::make_pair(&typeid(T), read_func)); -			mParserWriteFuncs.insert(std::make_pair(&typeid(T), write_func)); +			mParserReadFuncs->insert(std::make_pair(&typeid(T), read_func)); +			mParserWriteFuncs->insert(std::make_pair(&typeid(T), write_func));  		}  		template <typename T>  		void registerInspectFunc(parser_inspect_func_t inspect_func)  		{ -			mParserInspectFuncs.insert(std::make_pair(&typeid(T), inspect_func)); +			mParserInspectFuncs->insert(std::make_pair(&typeid(T), inspect_func));  		}  		bool				mParseSilently;  	private: -		parser_read_func_map_t		mParserReadFuncs; -		parser_write_func_map_t		mParserWriteFuncs; -		parser_inspect_func_map_t	mParserInspectFuncs; +		parser_read_func_map_t*		mParserReadFuncs; +		parser_write_func_map_t*	mParserWriteFuncs; +		parser_inspect_func_map_t*	mParserInspectFuncs;  		S32	mParseGeneration;  	}; @@ -394,7 +396,6 @@ namespace LLInitParam  		typedef std::vector<std::pair<param_handle_t, ParamDescriptor::validation_func_t> > param_validation_list_t;  		param_map_t						mNamedParams;			// parameters with associated names -		param_map_t						mSynonyms;				// parameters with alternate names  		param_list_t					mUnnamedParams;			// parameters with_out_ associated names  		param_validation_list_t			mValidationList;		// parameters that must be validated  		all_params_list_t				mAllParams;				// all parameters, owns descriptors @@ -581,7 +582,7 @@ namespace LLInitParam  			// no further names in stack, attempt to parse value now  			if (name_stack.first == name_stack.second)  			{ -				if (parser.readValue<T>(typed_param.mData.mValue)) +				if (parser.readValue(typed_param.mData.mValue))  				{  					typed_param.mData.clearKey();  					typed_param.setProvided(true); @@ -594,7 +595,7 @@ namespace LLInitParam  				{  					// try to parse a known named value  					std::string name; -					if (parser.readValue<std::string>(name)) +					if (parser.readValue(name))  					{  						// try to parse a per type named value  						if (NAME_VALUE_LOOKUP::get(name, typed_param.mData.mValue)) @@ -629,7 +630,7 @@ namespace LLInitParam  			{  				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))  				{ -					if (!parser.writeValue<std::string>(key, name_stack)) +					if (!parser.writeValue(key, name_stack))  					{  						return;  					} @@ -637,7 +638,7 @@ namespace LLInitParam  			}  			// then try to serialize value directly  			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), static_cast<const self_t*>(diff_param)->get()))					{ -				if (!parser.writeValue<T>(typed_param.mData.mValue, name_stack))  +				if (!parser.writeValue(typed_param.mData.mValue, name_stack))   				{  					return;  				} @@ -750,7 +751,7 @@ namespace LLInitParam  			{  				// try to parse a known named value  				std::string name; -				if (parser.readValue<std::string>(name)) +				if (parser.readValue(name))  				{  					// try to parse a per type named value  					if (NAME_VALUE_LOOKUP::get(name, typed_param)) @@ -777,7 +778,7 @@ namespace LLInitParam  			std::string key = typed_param.mData.getKey();  			if (!key.empty() && typed_param.mData.mKeyVersion == typed_param.getLastChangeVersion())  			{ -				if (!parser.writeValue<std::string>(key, name_stack)) +				if (!parser.writeValue(key, name_stack))  				{  					return;  				} @@ -924,7 +925,7 @@ namespace LLInitParam  			if (name_stack.first == name_stack.second)  			{  				// attempt to read value directly -				if (parser.readValue<value_t>(value)) +				if (parser.readValue(value))  				{  					typed_param.mValues.push_back(value);  					// save an empty name/value key as a placeholder @@ -939,7 +940,7 @@ namespace LLInitParam  				{  					// try to parse a known named value  					std::string name; -					if (parser.readValue<std::string>(name)) +					if (parser.readValue(name))  					{  						// try to parse a per type named value  						if (NAME_VALUE_LOOKUP::get(name, typed_param.mValues)) @@ -973,13 +974,13 @@ namespace LLInitParam  				if(!key.empty())  				{ -					if(!parser.writeValue<std::string>(key, name_stack)) +					if(!parser.writeValue(key, name_stack))  					{  						return;  					}  				}  				// not parse via name values, write out value directly -				else if (!parser.writeValue<VALUE_TYPE>(*it, name_stack)) +				else if (!parser.writeValue(*it, name_stack))  				{  					return;  				} @@ -1126,7 +1127,7 @@ namespace LLInitParam  			{  				// try to parse a known named value  				std::string name; -				if (parser.readValue<std::string>(name)) +				if (parser.readValue(name))  				{  					// try to parse a per type named value  					if (NAME_VALUE_LOOKUP::get(name, value)) @@ -1159,7 +1160,7 @@ namespace LLInitParam  				std::string key = key_it->getKey();  				if (!key.empty() && key_it->mKeyVersion == it->getLastChangeVersion())  				{ -					if(!parser.writeValue<std::string>(key, name_stack)) +					if(!parser.writeValue(key, name_stack))  					{  						return;  					} @@ -1624,7 +1625,7 @@ namespace LLInitParam  			// type to apply parse direct value T  			if (name_stack.first == name_stack.second)  			{ -				if(parser.readValue<T>(typed_param.mData.mValue)) +				if(parser.readValue(typed_param.mData.mValue))  				{  					typed_param.enclosingBlock().setLastChangedParam(param, true);  					typed_param.setProvided(true); @@ -1639,7 +1640,7 @@ namespace LLInitParam  				{  					// try to parse a known named value  					std::string name; -					if (parser.readValue<std::string>(name)) +					if (parser.readValue(name))  					{  						// try to parse a per type named value  						if (TypeValues<T>::get(name, typed_param.mData.mValue)) @@ -1681,7 +1682,7 @@ namespace LLInitParam  			{  				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))  				{ -					if (!parser.writeValue<std::string>(key, name_stack)) +					if (!parser.writeValue(key, name_stack))  					{  						return;  					} @@ -1691,7 +1692,7 @@ namespace LLInitParam  			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), (static_cast<const self_t*>(diff_param))->get()))	              { -				if (parser.writeValue<T>(typed_param.mData.mValue, name_stack))  +				if (parser.writeValue(typed_param.mData.mValue, name_stack))   				{  					return;  				} diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp index d6f17dbb08..bf38e925c6 100644 --- a/indra/llxuixml/lltrans.cpp +++ b/indra/llxuixml/lltrans.cpp @@ -72,7 +72,8 @@ bool LLTrans::parseStrings(LLXMLNodePtr &root, const std::set<std::string>& defa  	}  	StringTable string_table; -	LLXUIParser::instance().readXUI(root, string_table, xml_filename); +	LLXUIParser parser; +	parser.readXUI(root, string_table, xml_filename);  	if (!string_table.validateBlock())  	{ @@ -115,7 +116,8 @@ bool LLTrans::parseLanguageStrings(LLXMLNodePtr &root)  	}  	StringTable string_table; -	LLXUIParser::instance().readXUI(root, string_table, xml_filename); +	LLXUIParser parser; +	parser.readXUI(root, string_table, xml_filename);  	if (!string_table.validateBlock())  	{ diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp index d856efb008..9bda96713e 100644 --- a/indra/llxuixml/llxuiparser.cpp +++ b/indra/llxuixml/llxuiparser.cpp @@ -47,10 +47,16 @@ using namespace BOOST_SPIRIT_CLASSIC_NS;  const S32 MAX_STRING_ATTRIBUTE_SIZE = 40; +static 	LLInitParam::Parser::parser_read_func_map_t sXSDReadFuncs; +static 	LLInitParam::Parser::parser_write_func_map_t sXSDWriteFuncs; +static 	LLInitParam::Parser::parser_inspect_func_map_t sXSDInspectFuncs; + +  //  // LLXSDWriter  //  LLXSDWriter::LLXSDWriter() +: Parser(sXSDReadFuncs, sXSDWriteFuncs, sXSDInspectFuncs)  {  	registerInspectFunc<bool>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:boolean", _1, _2, _3, _4));  	registerInspectFunc<std::string>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:string", _1, _2, _3, _4)); @@ -368,27 +374,35 @@ void LLXUIXSDWriter::writeXSD(const std::string& type_name, const std::string& p  	fclose(xsd_file);  } +static 	LLInitParam::Parser::parser_read_func_map_t sXUIReadFuncs; +static 	LLInitParam::Parser::parser_write_func_map_t sXUIWriteFuncs; +static 	LLInitParam::Parser::parser_inspect_func_map_t sXUIInspectFuncs; +  //  // LLXUIParser  //  LLXUIParser::LLXUIParser() -:	mLastWriteGeneration(-1), +:	Parser(sXUIReadFuncs, sXUIWriteFuncs, sXUIInspectFuncs), +	mLastWriteGeneration(-1),  	mCurReadDepth(0)  { -	registerParserFuncs<bool>(readBoolValue, boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2)); -	registerParserFuncs<std::string>(readStringValue, boost::bind(&LLXUIParser::writeStringValue, this, _1, _2)); -	registerParserFuncs<U8>(readU8Value, boost::bind(&LLXUIParser::writeU8Value, this, _1, _2)); -	registerParserFuncs<S8>(readS8Value, boost::bind(&LLXUIParser::writeS8Value, this, _1, _2)); -	registerParserFuncs<U16>(readU16Value, boost::bind(&LLXUIParser::writeU16Value, this, _1, _2)); -	registerParserFuncs<S16>(readS16Value, boost::bind(&LLXUIParser::writeS16Value, this, _1, _2)); -	registerParserFuncs<U32>(readU32Value, boost::bind(&LLXUIParser::writeU32Value, this, _1, _2)); -	registerParserFuncs<S32>(readS32Value, boost::bind(&LLXUIParser::writeS32Value, this, _1, _2)); -	registerParserFuncs<F32>(readF32Value, boost::bind(&LLXUIParser::writeF32Value, this, _1, _2)); -	registerParserFuncs<F64>(readF64Value, boost::bind(&LLXUIParser::writeF64Value, this, _1, _2)); -	registerParserFuncs<LLColor4>(readColor4Value, boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2)); -	registerParserFuncs<LLUIColor>(readUIColorValue, boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2)); -	registerParserFuncs<LLUUID>(readUUIDValue, boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2)); -	registerParserFuncs<LLSD>(readSDValue, boost::bind(&LLXUIParser::writeSDValue, this, _1, _2)); +	if (sXUIReadFuncs.empty()) +	{ +		registerParserFuncs<bool>(readBoolValue, writeBoolValue); +		registerParserFuncs<std::string>(readStringValue, writeStringValue); +		registerParserFuncs<U8>(readU8Value, writeU8Value); +		registerParserFuncs<S8>(readS8Value, writeS8Value); +		registerParserFuncs<U16>(readU16Value, writeU16Value); +		registerParserFuncs<S16>(readS16Value, writeS16Value); +		registerParserFuncs<U32>(readU32Value, writeU32Value); +		registerParserFuncs<S32>(readS32Value, writeS32Value); +		registerParserFuncs<F32>(readF32Value, writeF32Value); +		registerParserFuncs<F64>(readF64Value, writeF64Value); +		registerParserFuncs<LLColor4>(readColor4Value, writeColor4Value); +		registerParserFuncs<LLUIColor>(readUIColorValue, writeUIColorValue); +		registerParserFuncs<LLUUID>(readUUIDValue, writeUUIDValue); +		registerParserFuncs<LLSD>(readSDValue, writeSDValue); +	}  }  static LLFastTimer::DeclareTimer FTM_PARSE_XUI("XUI Parsing"); @@ -397,6 +411,7 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons  {  	LLFastTimer timer(FTM_PARSE_XUI);  	mNameStack.clear(); +	mRootNodeName = node->getName()->mString;  	mCurFileName = filename;  	mCurReadDepth = 0;  	setParseSilently(silent); @@ -407,11 +422,11 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons  	}  	else  	{ -		readXUIImpl(node, std::string(node->getName()->mString), block); +		readXUIImpl(node, block);  	}  } -bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLInitParam::BaseBlock& block) +bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block)  {  	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;  	boost::char_separator<char> sep("."); @@ -478,7 +493,15 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn  			}  			// check for proper nesting -			if(!scope.empty() && *name_token_it != scope) +			if (mNameStack.empty()) +			{ +				if (*name_token_it != mRootNodeName) +				{ +					childp = childp->getNextSibling(); +					continue; +				} +			} +			else if(mNameStack.back().first != *name_token_it)  			{  				childp = childp->getNextSibling();  				continue; @@ -496,7 +519,7 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn  		}  		// recurse and visit children XML nodes -		if(readXUIImpl(childp, mNameStack.empty() ? scope : mNameStack.back().first, block)) +		if(readXUIImpl(childp, block))  		{  			// child node successfully parsed, remove from DOM @@ -621,9 +644,10 @@ bool LLXUIParser::readBoolValue(Parser& parser, void* val_ptr)  	return success;  } -bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setBoolValue(*((bool*)val_ptr)); @@ -639,9 +663,10 @@ bool LLXUIParser::readStringValue(Parser& parser, void* val_ptr)  	return true;  } -bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		const std::string* string_val = reinterpret_cast<const std::string*>(val_ptr); @@ -676,9 +701,10 @@ bool LLXUIParser::readU8Value(Parser& parser, void* val_ptr)  	return self.mCurReadNode->getByteValue(1, (U8*)val_ptr);  } -bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setUnsignedValue(*((U8*)val_ptr)); @@ -699,9 +725,10 @@ bool LLXUIParser::readS8Value(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setIntValue(*((S8*)val_ptr)); @@ -722,9 +749,10 @@ bool LLXUIParser::readU16Value(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setUnsignedValue(*((U16*)val_ptr)); @@ -745,9 +773,10 @@ bool LLXUIParser::readS16Value(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setIntValue(*((S16*)val_ptr)); @@ -762,9 +791,10 @@ bool LLXUIParser::readU32Value(Parser& parser, void* val_ptr)  	return self.mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);  } -bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setUnsignedValue(*((U32*)val_ptr)); @@ -779,9 +809,10 @@ bool LLXUIParser::readS32Value(Parser& parser, void* val_ptr)  	return self.mCurReadNode->getIntValue(1, (S32*)val_ptr);  } -bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setIntValue(*((S32*)val_ptr)); @@ -796,9 +827,10 @@ bool LLXUIParser::readF32Value(Parser& parser, void* val_ptr)  	return self.mCurReadNode->getFloatValue(1, (F32*)val_ptr);  } -bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setFloatValue(*((F32*)val_ptr)); @@ -813,9 +845,10 @@ bool LLXUIParser::readF64Value(Parser& parser, void* val_ptr)  	return self.mCurReadNode->getDoubleValue(1, (F64*)val_ptr);  } -bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setDoubleValue(*((F64*)val_ptr)); @@ -836,9 +869,10 @@ bool LLXUIParser::readColor4Value(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		LLColor4 color = *((LLColor4*)val_ptr); @@ -862,9 +896,10 @@ bool LLXUIParser::readUIColorValue(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		LLUIColor color = *((LLUIColor*)val_ptr); @@ -890,9 +925,10 @@ bool LLXUIParser::readUUIDValue(Parser& parser, void* val_ptr)  	return false;  } -bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		node->setStringValue(((LLUUID*)val_ptr)->asString()); @@ -908,9 +944,11 @@ bool LLXUIParser::readSDValue(Parser& parser, void* val_ptr)  	return true;  } -bool LLXUIParser::writeSDValue(const void* val_ptr, const name_stack_t& stack) +bool LLXUIParser::writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)  { -	LLXMLNodePtr node = getNode(stack); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); + +	LLXMLNodePtr node = self.getNode(stack);  	if (node.notNull())  	{  		std::string string_val = ((LLSD*)val_ptr)->asString(); @@ -1007,25 +1045,33 @@ struct ScopedFile  	LLFILE* mFile;  }; +static 	LLInitParam::Parser::parser_read_func_map_t sSimpleXUIReadFuncs; +static 	LLInitParam::Parser::parser_write_func_map_t sSimpleXUIWriteFuncs; +static 	LLInitParam::Parser::parser_inspect_func_map_t sSimpleXUIInspectFuncs; -LLSimpleXUIParser::LLSimpleXUIParser() -:	mLastWriteGeneration(-1), -	mCurReadDepth(0) +LLSimpleXUIParser::LLSimpleXUIParser(LLSimpleXUIParser::element_start_callback_t element_cb) +:	Parser(sSimpleXUIReadFuncs, sSimpleXUIWriteFuncs, sSimpleXUIInspectFuncs), +	mLastWriteGeneration(-1), +	mCurReadDepth(0), +	mElementCB(element_cb)  { -	registerParserFuncs<bool>(readBoolValue, NULL); -	registerParserFuncs<std::string>(readStringValue, NULL); -	registerParserFuncs<U8>(readU8Value, NULL); -	registerParserFuncs<S8>(readS8Value, NULL); -	registerParserFuncs<U16>(readU16Value, NULL); -	registerParserFuncs<S16>(readS16Value, NULL); -	registerParserFuncs<U32>(readU32Value, NULL); -	registerParserFuncs<S32>(readS32Value, NULL); -	registerParserFuncs<F32>(readF32Value, NULL); -	registerParserFuncs<F64>(readF64Value, NULL); -	registerParserFuncs<LLColor4>(readColor4Value, NULL); -	registerParserFuncs<LLUIColor>(readUIColorValue, NULL); -	registerParserFuncs<LLUUID>(readUUIDValue, NULL); -	registerParserFuncs<LLSD>(readSDValue, NULL); +	if (sSimpleXUIReadFuncs.empty()) +	{ +		registerParserFuncs<bool>(readBoolValue); +		registerParserFuncs<std::string>(readStringValue); +		registerParserFuncs<U8>(readU8Value); +		registerParserFuncs<S8>(readS8Value); +		registerParserFuncs<U16>(readU16Value); +		registerParserFuncs<S16>(readS16Value); +		registerParserFuncs<U32>(readU32Value); +		registerParserFuncs<S32>(readS32Value); +		registerParserFuncs<F32>(readF32Value); +		registerParserFuncs<F64>(readF64Value); +		registerParserFuncs<LLColor4>(readColor4Value); +		registerParserFuncs<LLUIColor>(readUIColorValue); +		registerParserFuncs<LLUUID>(readUUIDValue); +		registerParserFuncs<LLSD>(readSDValue); +	}  }  LLSimpleXUIParser::~LLSimpleXUIParser() @@ -1042,7 +1088,7 @@ bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBl  	XML_SetElementHandler(			mParser,	startElementHandler, endElementHandler);  	XML_SetCharacterDataHandler(	mParser,	characterDataHandler); -	mBlock = █ +	mOutputStack.push_back(std::make_pair(&block, 0));  	mNameStack.clear();  	mCurFileName = filename;  	mCurReadDepth = 0; @@ -1108,16 +1154,25 @@ void LLSimpleXUIParser::startElement(const char *name, const char **atts)  	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;  	boost::char_separator<char> sep("."); -	mCurReadDepth++; +	if (mElementCB)  +	{ +		LLInitParam::BaseBlock* blockp = mElementCB(*this, name); +		if (blockp) +		{ +			mOutputStack.push_back(std::make_pair(blockp, 0)); +		} +	} + +	mOutputStack.back().second++;  	S32 num_tokens_pushed = 0;  	std::string child_name(name); -	if (mCurReadDepth > 1) -	{ -		// for non "dotted" child nodes	check to see if child node maps to another widget type -		// and if not, treat as a child element of the current node -		// e.g. <button><rect left="10"/></button> will interpret <rect> as "button.rect" -		// since there is no widget named "rect" +	if (mOutputStack.back().second == 1) +	{	// root node for this block +		mScope.push_back(child_name); +	} +	else +	{	// compound attribute  		if (child_name.find(".") == std::string::npos)   		{  			mNameStack.push_back(std::make_pair(child_name, newParseGeneration())); @@ -1153,10 +1208,6 @@ void LLSimpleXUIParser::startElement(const char *name, const char **atts)  			mScope.push_back(mNameStack.back().first);  		}  	} -	else -	{ -		mScope.push_back(child_name); -	}  	mTokenSizeStack.push_back(num_tokens_pushed);  	readAttributes(atts); @@ -1183,8 +1234,7 @@ bool LLSimpleXUIParser::readAttributes(const char **atts)  		}  		// child nodes are not necessarily valid attributes, so don't complain once we've recursed -		bool silent = mCurReadDepth > 1; -		any_parsed |= mBlock->submitValue(mNameStack, *this, silent); +		any_parsed |= mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);  		while(num_tokens_pushed-- > 0)  		{ @@ -1204,12 +1254,21 @@ void LLSimpleXUIParser::endElement(const char *name)  		{  			mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));  			mCurAttributeValueBegin = mTextContents.c_str(); -			mBlock->submitValue(mNameStack, *this, false); +			mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);  			mNameStack.pop_back();  			mTextContents.clear();  		}  	} -	mCurReadDepth--; + +	if (--mOutputStack.back().second == 0) +	{ +		if (mOutputStack.empty()) +		{ +			LL_ERRS("ReadXUI") << "Parameter block output stack popped while empty." << LL_ENDL; +		} +		mOutputStack.pop_back(); +	} +  	S32 num_tokens_to_pop = mTokenSizeStack.back();  	mTokenSizeStack.pop_back();  	while(num_tokens_to_pop-- > 0) diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h index eb7147f49e..1a4a7c49d1 100644 --- a/indra/llxuixml/llxuiparser.h +++ b/indra/llxuixml/llxuiparser.h @@ -102,14 +102,12 @@ public: -class LLXUIParser : public LLInitParam::Parser, public LLSingleton<LLXUIParser> +class LLXUIParser : public LLInitParam::Parser  {  LOG_CLASS(LLXUIParser); -protected: -	LLXUIParser(); -	friend class LLSingleton<LLXUIParser>;  public: +	LLXUIParser();  	typedef LLInitParam::Parser::name_stack_t name_stack_t;  	/*virtual*/ std::string getCurrentElementName(); @@ -120,7 +118,7 @@ public:  	void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);  private: -	bool readXUIImpl(LLXMLNodePtr node, const std::string& scope, LLInitParam::BaseBlock& block); +	bool readXUIImpl(LLXMLNodePtr node, LLInitParam::BaseBlock& block);  	bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);  	//reader helper functions @@ -140,20 +138,20 @@ private:  	static bool readSDValue(Parser& parser, void* val_ptr);  	//writer helper functions -	bool writeBoolValue(const void* val_ptr, const name_stack_t&); -	bool writeStringValue(const void* val_ptr, const name_stack_t&); -	bool writeU8Value(const void* val_ptr, const name_stack_t&); -	bool writeS8Value(const void* val_ptr, const name_stack_t&); -	bool writeU16Value(const void* val_ptr, const name_stack_t&); -	bool writeS16Value(const void* val_ptr, const name_stack_t&); -	bool writeU32Value(const void* val_ptr, const name_stack_t&); -	bool writeS32Value(const void* val_ptr, const name_stack_t&); -	bool writeF32Value(const void* val_ptr, const name_stack_t&); -	bool writeF64Value(const void* val_ptr, const name_stack_t&); -	bool writeColor4Value(const void* val_ptr, const name_stack_t&); -	bool writeUIColorValue(const void* val_ptr, const name_stack_t&); -	bool writeUUIDValue(const void* val_ptr, const name_stack_t&); -	bool writeSDValue(const void* val_ptr, const name_stack_t&); +	static bool writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t&); +	static bool writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t&);  	LLXMLNodePtr getNode(const name_stack_t& stack); @@ -169,6 +167,7 @@ private:  	LLXMLNodePtr					mLastWrittenChild;  	S32								mCurReadDepth;  	std::string						mCurFileName; +	std::string						mRootNodeName;  };  // LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization  @@ -182,23 +181,22 @@ private:  // of coroutines to perform matching of xml nodes during parsing.  Not sure if the overhead  // of coroutines would offset the gain from SAX parsing -class LLSimpleXUIParser : public LLInitParam::Parser, public LLSingleton<LLSimpleXUIParser> +class LLSimpleXUIParser : public LLInitParam::Parser  {  LOG_CLASS(LLSimpleXUIParser); - -protected: -	LLSimpleXUIParser(); -	virtual ~LLSimpleXUIParser(); -	friend class LLSingleton<LLSimpleXUIParser>;  public:  	typedef LLInitParam::Parser::name_stack_t name_stack_t; +	typedef LLInitParam::BaseBlock* (*element_start_callback_t)(LLSimpleXUIParser&, const char* block_name); + +	LLSimpleXUIParser(element_start_callback_t element_cb = NULL); +	virtual ~LLSimpleXUIParser();  	/*virtual*/ std::string getCurrentElementName();  	/*virtual*/ void parserWarning(const std::string& message);  	/*virtual*/ void parserError(const std::string& message);  	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false); -	void setBlock(LLInitParam::BaseBlock* block); +  private:  	//reader helper functions @@ -227,7 +225,6 @@ private:  	void characterData(const char *s, int len);  	bool readAttributes(const char **atts); -	LLInitParam::BaseBlock*			mBlock;  	Parser::name_stack_t			mNameStack;  	struct XML_ParserStruct*		mParser;  	S32								mLastWriteGeneration; @@ -238,6 +235,9 @@ private:  	const char*						mCurAttributeValueBegin;  	std::vector<S32>				mTokenSizeStack;  	std::vector<std::string>		mScope; +	element_start_callback_t		mElementCB; + +	std::vector<std::pair<LLInitParam::BaseBlock*, S32> > mOutputStack;  }; diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index c4eda5f107..07c711644d 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -76,7 +76,7 @@ namespace  		llassert(stack);  		if ( stack && panel && panel->getVisible() )  		{ -			stack->getPanelMinSize(panel->getName(), &minimal_width, NULL); +			stack->getPanelMinSize(panel->getName(), &minimal_width);  		}  		return minimal_width;  	} @@ -87,7 +87,7 @@ namespace  		llassert(stack);  		if ( stack && panel && panel->getVisible() )  		{ -			stack->getPanelMaxSize(panel->getName(), &max_width, NULL); +			stack->getPanelMaxSize(panel->getName(), &max_width);  		}  		return max_width;  	} @@ -108,8 +108,9 @@ class LLBottomTrayLite  {  public:  	LLBottomTrayLite() -		: mNearbyChatBar(NULL), -		  mGesturePanel(NULL) +	:	mNearbyChatBar(NULL), +		mChatBarContainer(NULL), +		mGesturePanel(NULL)  	{  		mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);  		buildFromFile("panel_bottomtray_lite.xml"); @@ -120,6 +121,7 @@ public:  	BOOL postBuild()  	{  		mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar"); +		mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");  		mGesturePanel = getChild<LLPanel>("gesture_panel");  		// Hide "show_nearby_chat" button  @@ -141,6 +143,7 @@ public:  	}  	LLNearbyChatBar*	mNearbyChatBar; +	LLLayoutPanel*		mChatBarContainer;  	LLPanel*			mGesturePanel;  }; @@ -149,13 +152,14 @@ LLBottomTray::LLBottomTray(const LLSD&)  	mSpeakPanel(NULL),  	mSpeakBtn(NULL),  	mNearbyChatBar(NULL), -	mToolbarStack(NULL) -,	mMovementButton(NULL) -,	mResizeState(RS_NORESIZE) -,	mBottomTrayContextMenu(NULL) -,	mCamButton(NULL) -,	mBottomTrayLite(NULL) -,	mIsInLiteMode(false) +	mChatBarContainer(NULL), +	mToolbarStack(NULL), +	mMovementButton(NULL), +	mResizeState(RS_NORESIZE), +	mBottomTrayContextMenu(NULL), +	mCamButton(NULL), +	mBottomTrayLite(NULL), +	mIsInLiteMode(false)  {  	// Firstly add ourself to IMSession observers, so we catch session events  	// before chiclets do that. @@ -192,7 +196,7 @@ LLBottomTray::~LLBottomTray()  	if (mNearbyChatBar)  	{  		// store custom width of chatbar panel. -		S32 custom_width = mNearbyChatBar->getRect().getWidth(); +		S32 custom_width = mChatBarContainer->getRect().getWidth();  		gSavedSettings.setS32("ChatBarCustomWidth", custom_width);  	} @@ -387,7 +391,7 @@ S32 LLBottomTray::notifyParent(const LLSD& info)  		const std::string& name = info["view_name"];  		// expected only resize of nearby chatbar -		if (mNearbyChatBar->getName() != name) return LLPanel::notifyParent(info); +		if (mChatBarContainer->getName() != name) return LLPanel::notifyParent(info);  		const S32 new_width = info["new_width"]; @@ -417,8 +421,8 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask)  {  	LLUICtrl* edit_box = mNearbyChatBar->getChild<LLUICtrl>("chat_box"); -	S32 local_x = x - mNearbyChatBar->getRect().mLeft - edit_box->getRect().mLeft; -	S32 local_y = y - mNearbyChatBar->getRect().mBottom - edit_box->getRect().mBottom; +	S32 local_x = x - mChatBarContainer->getRect().mLeft - edit_box->getRect().mLeft; +	S32 local_y = y - mChatBarContainer->getRect().mBottom - edit_box->getRect().mBottom;  	bool in_edit_box = edit_box->pointInView(local_x, local_y); @@ -472,6 +476,7 @@ BOOL LLBottomTray::postBuild()  	gMenuHolder->addChild(mBottomTrayContextMenu);  	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar"); +	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");  	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");  	mMovementButton = getChild<LLButton>("movement_btn"); @@ -677,14 +682,14 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)  	// we can not to do this from postBuild because reshape is called from parent view on startup  	// creation after it and reset width according to resize logic.  	static bool needs_restore_custom_state = true; -	if (mNearbyChatBar && needs_restore_custom_state) +	if (mChatBarContainer && needs_restore_custom_state)  	{  		// restore custom width of chatbar panel.  		S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth");  		if (new_width > 0)  		{  			processChatbarCustomization(new_width); -			mNearbyChatBar->reshape(new_width, mNearbyChatBar->getRect().getHeight()); +			mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight());  		}  		needs_restore_custom_state = false;  	} @@ -723,7 +728,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)  			<< llendl;  	} -	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); +	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();  	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);  	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)  	{ @@ -737,7 +742,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)  		still_should_be_processed = delta_width < 0; -		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); +		mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight());  		log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel"); @@ -765,7 +770,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)  		if (buttons_freed_width > 0)  		{  			log(mNearbyChatBar, "before applying compensative width"); -			mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() ); +			mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + buttons_freed_width, mChatBarContainer->getRect().getHeight() );  			log(mNearbyChatBar, "after applying compensative width");  			lldebugs << buttons_freed_width << llendl;  		} @@ -781,9 +786,9 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();  	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); -	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); -	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar); -	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar); +	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth(); +	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mChatBarContainer); +	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mChatBarContainer);  	const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width;  	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; @@ -821,7 +826,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  		}  		log(mNearbyChatBar, "increase width: before applying compensative width"); -		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() ); +		mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() - chatbar_shrink_width, mChatBarContainer->getRect().getHeight() );  		if (mNearbyChatBar)			log(mNearbyChatBar, "after applying compensative width");  		lldebugs << chatbar_shrink_width << llendl; @@ -842,7 +847,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  	// how many space can nearby chatbar take? -	S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); +	S32 chatbar_panel_width_ = mChatBarContainer->getRect().getWidth();  	if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width)  	{  		S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; @@ -853,7 +858,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  			<< llendl;  		delta_width -= delta_panel_max; -		mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); +		mChatBarContainer->reshape(chatbar_panel_width_ + delta_panel, mChatBarContainer->getRect().getHeight());  		log(mNearbyChatBar, "applied unprocessed delta width");  	}  } @@ -975,7 +980,7 @@ void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_  		S32 panel_min_width = 0;  		std::string panel_name = mSpeakPanel->getName(); -		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL); +		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);  		if (!success)  		{  			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl; @@ -1021,7 +1026,7 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32&  		S32 panel_width = panel->getRect().getWidth();  		S32 panel_min_width = 0;  		std::string panel_name = panel->getName(); -		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL); +		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);  		S32 possible_shrink_width = panel_width - panel_min_width;  		if (!success) @@ -1310,7 +1315,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible  		{  			// Calculate the possible shrunk width as difference between current and minimal widths  			const S32 chatbar_shrunk_width = -				mNearbyChatBar->getRect().getWidth() - get_panel_min_width(mToolbarStack, mNearbyChatBar); +				mChatBarContainer->getRect().getWidth() - get_panel_min_width(mToolbarStack, mChatBarContainer);  			S32 sum_of_min_widths = get_panel_min_width(mToolbarStack, mSpeakPanel);  			S32 sum_of_curr_widths = get_curr_width(mSpeakPanel); @@ -1330,7 +1335,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible  			// Minimal width of current panel  			S32 minimal_width = 0; -			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width, NULL); +			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width);  			if ( (available_width + possible_shrunk_width) >= minimal_width)  			{ @@ -1407,7 +1412,7 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)  {  	if (NULL == mNearbyChatBar) return; -	const S32 delta_width = mNearbyChatBar->getRect().getWidth() - new_width; +	const S32 delta_width = mChatBarContainer->getRect().getWidth() - new_width;  	if (delta_width == 0) return; diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 05fed53936..792355600b 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -33,20 +33,17 @@  #ifndef LL_LLBOTTOMPANEL_H  #define LL_LLBOTTOMPANEL_H -#include "llmenugl.h" -  #include "llpanel.h"  #include "llimview.h" -#include "llcombobox.h"  class LLChicletPanel; -class LLLineEditor;  class LLLayoutStack; -class LLNotificationChiclet;  class LLSpeakButton;  class LLNearbyChatBar;  class LLIMChiclet;  class LLBottomTrayLite; +class LLLayoutPanel; +class LLMenuGL;  // Build time optimization, generate once in .cpp file  #ifndef LLBOTTOMTRAY_CPP @@ -381,6 +378,7 @@ protected:  	LLPanel*			mSpeakPanel;  	LLSpeakButton* 		mSpeakBtn;  	LLNearbyChatBar*	mNearbyChatBar; +	LLLayoutPanel*		mChatBarContainer;  	LLLayoutStack*		mToolbarStack;  	LLMenuGL*			mBottomTrayContextMenu;  	LLButton*			mCamButton; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index e1e425fa8c..162b12cd5e 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -502,12 +502,17 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)  	const S32 NEW_TEXT_NOTICE_HEIGHT = 20; -	LLPanel::Params panel_p; +	LLLayoutPanel::Params panel_p;  	panel_p.name = "spacer";  	panel_p.background_visible = false;  	panel_p.has_border = false;  	panel_p.mouse_opaque = false; -	stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, S32_MAX, S32_MAX, true, false, LLLayoutStack::ANIMATE); +	panel_p.min_dim = 30; +	panel_p.max_dim = S32_MAX; +	panel_p.auto_resize = true; +	panel_p.user_resize = false; + +	stackp->addPanel(LLUICtrlFactory::create<LLLayoutPanel>(panel_p), LLLayoutStack::ANIMATE);  	panel_p.name = "new_text_notice_holder";  	LLRect new_text_notice_rect = getLocalRect(); @@ -516,7 +521,10 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)  	panel_p.background_opaque = true;  	panel_p.background_visible = true;  	panel_p.visible = false; -	mMoreChatPanel = LLUICtrlFactory::create<LLPanel>(panel_p); +	panel_p.min_dim = 0; +	panel_p.auto_resize = false; +	panel_p.user_resize = false; +	mMoreChatPanel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);  	LLTextBox::Params text_p(p.more_chat_text);  	text_p.rect = mMoreChatPanel->getLocalRect(); @@ -525,7 +533,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)  	mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel);  	mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this)); -	stackp->addPanel(mMoreChatPanel, 0, 0, S32_MAX, S32_MAX, false, false, LLLayoutStack::ANIMATE); +	stackp->addPanel(mMoreChatPanel, LLLayoutStack::ANIMATE);  } diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index fa1f2e04a4..ddc456a5d2 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -144,7 +144,7 @@ class LLChatHistory : public LLUICtrl  		S32 mTopHeaderPad;  		S32 mBottomHeaderPad; -		LLPanel*		mMoreChatPanel; +		class LLLayoutPanel*	mMoreChatPanel;  		LLTextBox*		mMoreChatText;  		LLTextEditor*	mEditor;  		typedef std::set<std::string> unread_chat_source_t; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 18a6ac031f..751d5b8fcd 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -667,9 +667,10 @@ const LLButton::Params& LLFavoritesBarCtrl::getButtonParams()  	{  		LLXMLNodePtr button_xml_node;  		if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node)) -	{ -			LLXUIParser::instance().readXUI(button_xml_node, button_params, "favorites_bar_button.xml"); -	} +		{ +			LLXUIParser parser; +			parser.readXUI(button_xml_node, button_params, "favorites_bar_button.xml"); +		}  		params_initialized = true;  	} diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index 3d37c878ad..0a4d5b64f3 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -43,10 +43,10 @@  const S32 NOTIFICATION_PANEL_HEADER_HEIGHT = 20;  const S32 HEADER_PADDING = 38; -class LLNotificationChannelPanel : public LLPanel +class LLNotificationChannelPanel : public LLLayoutPanel  {  public: -	LLNotificationChannelPanel(const std::string& channel_name); +	LLNotificationChannelPanel(const Params& p);  	BOOL postBuild();  private: @@ -58,12 +58,12 @@ private:  	LLNotificationChannelPtr mChannelRejectsPtr;  }; -LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channel_name)  -	: LLPanel() +LLNotificationChannelPanel::LLNotificationChannelPanel(const LLNotificationChannelPanel::Params& p)  +:	LLLayoutPanel(p)  { -	mChannelPtr = LLNotifications::instance().getChannel(channel_name); +	mChannelPtr = LLNotifications::instance().getChannel(p.name);  	mChannelRejectsPtr = LLNotificationChannelPtr( -		LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(), +		LLNotificationChannel::buildChannel(p.name() + "rejects", mChannelPtr->getParentChannelName(),  											!boost::bind(mChannelPtr->getFilter(), _1)));  	buildFromFile( "panel_notifications_channel.xml");  } @@ -207,8 +207,13 @@ BOOL LLFloaterNotificationConsole::postBuild()  void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open)  {  	LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels"); -	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name); -	stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, S32_MAX, S32_MAX, TRUE, TRUE, LLLayoutStack::ANIMATE); +	LLNotificationChannelPanel::Params p; +	p.min_dim = NOTIFICATION_PANEL_HEADER_HEIGHT; +	p.auto_resize = true; +	p.user_resize = true; +	p.name = name; +	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(p); +	stack.addPanel(panelp, LLLayoutStack::ANIMATE);  	LLButton& header_button = panelp->getChildRef<LLButton>("header");  	header_button.setToggleState(!open); diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp index 11b7ffe1af..a90131499d 100644 --- a/indra/newview/llhints.cpp +++ b/indra/newview/llhints.cpp @@ -297,7 +297,8 @@ void LLHints::show(LLNotificationPtr hint)  {  	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>()); -	LLParamSDParser::instance().readSD(hint->getPayload(), p, true); +	LLParamSDParser parser; +	parser.readSD(hint->getPayload(), p, true);  	p.notification = hint;  	if (p.validateBlock()) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 967f38bfd2..a7a348f072 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -257,14 +257,14 @@ BOOL LLIMFloater::postBuild()  	}  	mControlPanel->setSessionId(mSessionID); -	mControlPanel->setVisible(gSavedSettings.getBOOL("IMShowControlPanel")); +	mControlPanel->getParent()->setVisible(gSavedSettings.getBOOL("IMShowControlPanel"));  	LLButton* slide_left = getChild<LLButton>("slide_left_btn"); -	slide_left->setVisible(mControlPanel->getVisible()); +	slide_left->setVisible(mControlPanel->getParent()->getVisible());  	slide_left->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));  	LLButton* slide_right = getChild<LLButton>("slide_right_btn"); -	slide_right->setVisible(!mControlPanel->getVisible()); +	slide_right->setVisible(!mControlPanel->getParent()->getVisible());  	slide_right->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));  	mInputEditor = getChild<LLLineEditor>("chat_editor"); @@ -363,12 +363,12 @@ void* LLIMFloater::createPanelAdHocControl(void* userdata)  void LLIMFloater::onSlide()  { -	mControlPanel->setVisible(!mControlPanel->getVisible()); +	mControlPanel->getParent()->setVisible(!mControlPanel->getParent()->getVisible()); -	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getVisible()); +	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getParent()->getVisible()); -	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getVisible()); -	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getVisible()); +	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getParent()->getVisible()); +	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getParent()->getVisible());  	LLLayoutStack* stack = getChild<LLLayoutStack>("im_panels");  	if (stack) stack->setAnimate(true); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index d09f729943..b4c4d4a2ee 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -259,7 +259,8 @@ void LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition po  LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)  {  	LLNameListCtrl::NameItem item_params; -	LLParamSDParser::instance().readSD(element, item_params); +	LLParamSDParser parser; +	parser.readSD(element, item_params);  	item_params.userdata = userdata;  	return addNameItemRow(item_params, pos);  } diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 41a19a54a8..fa3a627736 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -398,8 +398,7 @@ LLCtrlListInterface* LLGestureComboList::getListInterface()  }  LLNearbyChatBar::LLNearbyChatBar()  -	: LLPanel() -	, mChatBox(NULL) +:	mChatBox(NULL)  {  	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();  } diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index d35739d436..8a2073e661 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -68,9 +68,18 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL  	return name1 < name2;  } -const LLAccordionCtrlTab::Params& get_accordion_tab_params() +struct outfit_accordion_tab_params : public LLInitParam::Block<outfit_accordion_tab_params, LLAccordionCtrlTab::Params>  { -	static LLAccordionCtrlTab::Params tab_params; +	Mandatory<LLWearableItemsList::Params> wearable_list; + +	outfit_accordion_tab_params() +	:	wearable_list("wearable_items_list") +	{} +}; + +const outfit_accordion_tab_params& get_accordion_tab_params() +{ +	static outfit_accordion_tab_params tab_params;  	static bool initialized = false;  	if (!initialized)  	{ @@ -79,7 +88,8 @@ const LLAccordionCtrlTab::Params& get_accordion_tab_params()  		LLXMLNodePtr xmlNode;  		if (LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode))  		{ -			LLXUIParser::instance().readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml"); +			LLXUIParser parser; +			parser.readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml");  		}  		else  		{ @@ -465,8 +475,11 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)  		std::string name = cat->getName(); -		LLAccordionCtrlTab::Params tab_params(get_accordion_tab_params()); +		outfit_accordion_tab_params tab_params(get_accordion_tab_params());  		LLAccordionCtrlTab* tab = LLUICtrlFactory::create<LLAccordionCtrlTab>(tab_params); +		LLWearableItemsList* wearable_list = LLUICtrlFactory::create<LLWearableItemsList>(tab_params.wearable_list); +		wearable_list->setShape(tab->getLocalRect()); +		tab->addChild(wearable_list);  		tab->setName(name);  		tab->setTitle(name); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 02097ea06d..181c5b4c81 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1550,7 +1550,8 @@ bool LLUIImageList::initFromFile()  	}  	UIImageDeclarations images; -	LLXUIParser::instance().readXUI(root, images, base_file_path); +	LLXUIParser parser; +	parser.readXUI(root, images, base_file_path);  	if (!images.validateBlock()) return false; diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml index aa7df6ad2b..16df7e4b03 100644 --- a/indra/newview/skins/default/xui/da/floater_im_session.xml +++ b/indra/newview/skins/default/xui/da/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="IM kontrol panel" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="Til" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml index 2e59dfd649..4c956f13a7 100644 --- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Min avatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Forlad opkald" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Forlad opkald" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml index 5b3a2d0906..00128497ba 100644 --- a/indra/newview/skins/default/xui/da/panel_notes.xml +++ b/indra/newview/skins/default/xui/da/panel_notes.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Noter & Privatliv" name="panel_notes">  	<layout_stack name="layout"> -		<panel name="notes_stack"> +		<layout_panel name="notes_stack">  			<scroll_container name="profile_scroll">  				<panel name="profile_scroll_panel">  					<text name="status_message" value="Min private noter:"/> @@ -11,13 +11,13 @@  					<check_box label="Editére, slette og tage mine objekter" name="objects_check"/>  				</panel>  			</scroll_container> -		</panel> -		<panel name="notes_buttons_panel"> +		</layout_panel> +		<layout_panel name="notes_buttons_panel">  			<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/>  			<button label="IM" name="im" tool_tip="Åben session med personlig besked (IM)"/>  			<button label="Kald" name="call" tool_tip="Opkald til denne beboer"/>  			<button label="Kort" name="show_on_map_btn" tool_tip="Vis beboer på kort"/>  			<button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/> -		</panel> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml index d3b3c7e21e..cfb32500c6 100644 --- a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml @@ -13,9 +13,9 @@  		50  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Medie hentes"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml index c69bb600ea..abaf275651 100644 --- a/indra/newview/skins/default/xui/de/floater_im_session.xml +++ b/indra/newview/skins/default/xui/de/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="IM Steuerkonsole" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="An" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml index 07b7689cd0..22f2fd93ab 100644 --- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Mein Avatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Anruf beenden" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Anruf beenden" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml index e2166f7baf..35bd76ce70 100644 --- a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml @@ -1,15 +1,19 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="notifications_panel">  	<layout_stack name="stack1"> -		<scroll_list name="notifications_list"> -			<column label="Name" name="name"/> -			<column label="Inhalt" name="content"/> -			<column label="Datum" name="date"/> -		</scroll_list> -		<scroll_list name="notification_rejects_list"> -			<column label="Name" name="name"/> -			<column label="Inhalt" name="content"/> -			<column label="Datum" name="date"/> -		</scroll_list> +	     <layout_panel name="notifications_list_panel" > +			<scroll_list name="notifications_list"> +				<column label="Name" name="name"/> +				<column label="Inhalt" name="content"/> +				<column label="Datum" name="date"/> +			</scroll_list> +		</layout_panel> +	     <layout_panel name="rejects_list_panel" > +			<scroll_list name="notification_rejects_list"> +				<column label="Name" name="name"/> +				<column label="Inhalt" name="content"/> +				<column label="Datum" name="date"/> +			</scroll_list> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml index 0a19483f8b..c85f2762b1 100644 --- a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml @@ -7,9 +7,9 @@  		0.2  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Medien werden geladen"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml index b365040c20..e7dd62eb64 100644 --- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml +++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml @@ -22,6 +22,6 @@   pad_right="9"   scale_image="true"   tab_stop="false" - top="0" + bottom="0"   use_ellipses="true"   width="140" /> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index cae6146880..930bbaa8cb 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -20,7 +20,7 @@    <string name="nudge_parabuild" translate="false">Nudge 1</string>    <string name="test_the_vlt">This string CHANGE2 is extracted.</string>    <string name="testing_eli">Just a test. changes.</string> -  <chat_history +  <text_editor     parse_urls="true"     bg_readonly_color="ChatHistoryBgColor"     bg_writeable_color="ChatHistoryBgColor"  @@ -32,26 +32,51 @@     layout="topleft"  	 height="260"     name="chat_history" +   max_length="200000"      parse_highlights="true"     text_color="ChatHistoryTextColor"     text_readonly_color="ChatHistoryTextColor"     translate="false" +   track_end="true"  +   wrap="true"      width="320"> -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -  </chat_history> +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    Really long line that is long enough to wrap once with jyg descenders. +    </text_editor>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 6c1214f152..a371e98322 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -30,12 +30,19 @@    top="20"    left="0">      <layout_panel -      name="panel_im_control_panel" -      layout="topleft" -      follows="left" -      min_width="115"  +      name="im_control_panel_holder" +      min_width="115" +      width="150"  +      height="320"         auto_resize="false" -      user_resize="true" /> +      user_resize="false"> +      <panel +        name="panel_im_control_panel" +        layout="topleft" +        height="320" +        width="150"  +        follows="all"/> +      </layout_panel>      <layout_panel         default_tab_group="3"         left="0" diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index bf5bd87ad6..a46604c834 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -86,6 +86,7 @@               visible="true"               width="20" />          </layout_panel> +        <layout_panel name="leave_call_panel">          <layout_stack           clip="true"           auto_resize="false" @@ -96,7 +97,7 @@           name="voice_effect_and_leave_call_stack"           orientation="horizontal"           width="262"> -          <panel +          <layout_panel             class="panel_voice_effect"             name="panel_voice_effect"             visiblity_control="VoiceMorphingEnabled" @@ -118,6 +119,7 @@               width="100" />            </layout_panel>          </layout_stack> +          </layout_panel>        <layout_panel            follows="all"            layout="topleft" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 01ee8264e6..8d9ebf6e06 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -20,6 +20,7 @@                    mouse_opaque="false"                    name="nav_bar_container"                    tab_stop="false" +                  min_height="10"                     width="1024"                    user_resize="false"                     visible="false"> @@ -65,25 +66,24 @@                          mouse_opaque="false"                          name="world_stack"                          orientation="vertical"> -            <panel auto_resize="true" -                   follows="all" -                   height="500" -                   layout="topleft" -                   tab_stop="false" -                   mouse_opaque="false" -                name="hud container" -                   width="500"> -            <panel auto_resize="false" -                   follows="left|top" -                   height="19" -                   left="0" -                   mouse_opaque="false" -                   name="topinfo_bar_container" -                   tab_stop="false" -                   top="0" -                   user_resize="false" -                   visible="false" -                   width="1024"/> +            <layout_panel auto_resize="true" +                          follows="all" +                          height="500" +                          layout="topleft" +                          tab_stop="false" +                          mouse_opaque="false" +                          user_resize="false"  +                          name="hud container" +                          width="500"> +              <panel follows="left|top" +                     height="19" +                     left="0" +                     mouse_opaque="false" +                     name="topinfo_bar_container" +                     tab_stop="false" +                     top="0" +                     visible="false" +                     width="1024"/>                <panel follows="right|top|bottom"                       height="500"                       mouse_opaque="false" @@ -101,10 +101,10 @@                       name="stand_stop_flying_container"                       visible="false"                       width="500"/> -            </panel> +            </layout_panel>              <layout_panel auto_resize="false" -                   follows="all"                     min_height="33" +                   height="33"                      mouse_opaque="false"                     name="bottom_tray_container"                     visible="false"/> @@ -112,7 +112,7 @@          </layout_panel>          <!-- side tray -->          <layout_panel auto_resize="false" -                      follows="all" +                      follows="top|bottom"                        height="500"                        min_width="333"                        mouse_opaque="false" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 4b622691b3..b06a72f584 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -29,31 +29,32 @@       orientation="horizontal"       top="0"       width="1310"> -        <icon +        <layout_panel           auto_resize="false" -         follows="left|right" -         height="10" -         image_name="spacer24.tga" -         layout="topleft" -         left="0" +         user_resize="false"            min_width="2" -         top="0"           width="2" />          <layout_panel           auto_resize="false" -         filename="panel_nearby_chat_bar.xml" -         follows="left|right" -         height="28"           layout="topleft" -         left="0"           max_width="320" -         min_height="23"           min_width="214" +         height="28"            mouse_opaque="false" -         name="chat_bar" -         top="4" +		 name="chat_bar_layout_panel"           user_resize="true" -         width="308" /> +         width="308" > +          <panel +            name="chat_bar" +            filename="panel_nearby_chat_bar.xml" +            left="0" +            height="28" +            width="308" +            top="0" +            mouse_opaque="false" +            follows="left|right" +          /> +        </layout_panel>          <!--          There is resize bar between chatbar and Speak button. It has 2px width (is is set as 2*UIResizeBarOverlap)          --> @@ -400,18 +401,10 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.                   width="7" />              </chiclet_panel>          </layout_panel> -        <icon -         auto_resize="false" -         color="0 0 0 0" -         follows="left|right" -         height="10" -         image_name="spacer24.tga" -         layout="topleft" -         left="0" -         min_width="4" -         name="DUMMY" -         top="0" -         width="4" /> +        <layout_panel auto_resize="false" +                      user_resize="false"  +                      width="4" +                      min_width="4"/>          <layout_panel           auto_resize="false"           follows="right" @@ -503,17 +496,11 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well                  </button>              </chiclet_notification>          </layout_panel> -      <icon +      <layout_panel           auto_resize="false" -         color="0 0 0 0" -         follows="left|right" -         height="10" -         image_name="spacer24.tga" -         layout="topleft" -         left="0" +         user_resize="false"            min_width="4"           name="DUMMY2" -         top="0"           width="8" />      </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml index 6e9476f814..efb1da4c05 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml @@ -28,30 +28,28 @@       orientation="horizontal"       top="0"       width="1000"> -        <icon +        <layout_panel           auto_resize="false" -         follows="left|right" -         height="10" -         image_name="spacer24.tga" -         layout="topleft" +         user_resize="false"            min_width="2" -         left="0" -         top="0"           width="2" />          <layout_panel           mouse_opaque="false"           auto_resize="true" -         follows="left|right"           height="28"           layout="topleft" -         left="0" -         min_height="23"           width="310" -         top="4"           min_width="188" -         name="chat_bar" -         user_resize="false" -         filename="panel_nearby_chat_bar.xml" /> +         user_resize="false"> +          <panel +            left="0" +            filename="panel_nearby_chat_bar.xml" +            follows="left|right" +            top="4" +            width="310" +            name="chat_bar" +            mouse_opaque="false"/> +        </layout_panel>          <layout_panel           mouse_opaque="false"           auto_resize="false" @@ -79,17 +77,11 @@                   use_ellipses="true" />              </gesture_combo_list>          </layout_panel> -        <icon +        <layout_panel           auto_resize="false" -         color="0 0 0 0" -         follows="left|right" -         height="10" -         image_name="spacer24.tga" -         layout="topleft" -         left="0" +         user_resize="false"            min_width="3"           name="after_gesture_panel" -         top="0"           width="3"/>      </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 33a5e01e4c..aa0edbfb8a 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -3,11 +3,11 @@   border="false"   height="300"   name="panel_im_control_panel" - width="119"> + width="150">      <avatar_icon       follows="left|top"       height="105" -     left_delta="5" +     left_delta="20"       name="avatar_icon"       top="-5"       width="114"/> @@ -22,7 +22,7 @@       name="button_stack"       orientation="vertical"       top_pad="5" -     width="114"> +     width="145">          <layout_panel           mouse_opaque="false"           auto_resize="true" @@ -31,7 +31,7 @@           layout="topleft"           left="2"           min_height="0" -         width="109" +         width="140"           top="0"           name="spacer"           user_resize="false" /> @@ -41,7 +41,7 @@           height="20"           layout="topleft"           min_height="20" -         width="109" +         width="140"           name="view_profile_btn_panel"           user_resize="false">              <button @@ -50,7 +50,7 @@               label="Profile"               name="view_profile_btn"               top="0" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -58,7 +58,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="add_friend_btn_panel"           user_resize="false">              <button @@ -67,7 +67,7 @@               label="Add Friend"               name="add_friend_btn"               top="5" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -75,7 +75,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="teleport_btn_panel"           user_resize="false">          <button @@ -85,7 +85,7 @@               label="Teleport"               name="teleport_btn"               tool_tip = "Offer to teleport this person" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -93,7 +93,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="share_btn_panel"           user_resize="false">             <button @@ -102,7 +102,7 @@               height="23"               label="Share"               name="share_btn" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -110,7 +110,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="pay_btn_panel"           user_resize="false">             <button @@ -119,7 +119,7 @@               height="23"               label="Pay"               name="pay_btn" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -127,7 +127,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="call_btn_panel"           user_resize="false">              <button @@ -135,7 +135,7 @@               height="23"               label="Call"               name="call_btn" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -143,7 +143,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="end_call_btn_panel"           user_resize="false"           visible="false"> @@ -152,7 +152,7 @@               height="23"               label="End Call"               name="end_call_btn" -             width="109" /> +             width="140" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -160,7 +160,7 @@           height="25"           layout="topleft"           min_height="25" -         width="109" +         width="140"           name="voice_ctrls_btn_panel"           user_resize="false"           visible="false"> @@ -169,7 +169,7 @@               height="23"               label="Voice Controls"               name="voice_ctrls_btn" -             width="109" /> +             width="140" />          </layout_panel>      </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml index 3143b0a40c..c3dc588ba2 100644 --- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml @@ -14,6 +14,9 @@       orientation="horizontal"       top="20"       width="100"> +      <layout_panel name="notifications_list_panel"  +                    width="100" +                    user_resize="true">          <scroll_list           draw_heading="true"           follows="left|right|top|bottom" @@ -24,7 +27,6 @@           sort_ascending="false"           sort_column="2"           top="0" -         user_resize="true"           width="100">              <scroll_list.columns               label="Name" @@ -39,6 +41,10 @@               name="date"               width="150" />          </scroll_list> +      </layout_panel> +      <layout_panel name="rejects_list_panel" +                    width="100" +                    user_resize="true">          <scroll_list           draw_heading="true"           follows="left|right|top|bottom" @@ -49,7 +55,6 @@           sort_ascending="false"           sort_column="2"           top="0" -         user_resize="true"           width="100">              <scroll_list.columns               label="Name" @@ -64,6 +69,7 @@               name="date"               width="150" />          </scroll_list> +      </layout_panel>      </layout_stack>      <button       follows="left|right|top" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 113d5fb6dc..7ae717d0e3 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -291,7 +291,7 @@        control_name="RenderReflectionDetail"        height="23"        layout="topleft" -      left_="10" +      left_delta="10"        top_pad ="0"        name="Reflections"        width="150"> diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index 6bf00373ea..b25fd695c9 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -33,10 +33,9 @@  		mouse_opaque="false"  		layout="topleft"  		user_resize="false" /> -	<panel +	<layout_panel  		name="media_progress_indicator"  		mouse_opaque="false" -		follows="left|right|top"  		height="8"  		layout="topleft"  		left="0" @@ -55,7 +54,7 @@  		  top="0"  		  left="0"  		  tool_tip="Media is Loading"/> -	</panel> +	</layout_panel>  	<layout_panel  		name="right_bookend_bottom"  		width="0" diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml index 48bc021e6d..830ea12e41 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml @@ -8,18 +8,18 @@              thickness="15">    <up_button image_unselected="ScrollArrow_Up"               image_selected="ScrollArrow_Up" -             scale_image="true" thickness="15" +             scale_image="true"               hover_glow_amount="0.35"/>    <down_button image_unselected="ScrollArrow_Down"                 image_selected="ScrollArrow_Down" -               scale_image="true" thickness="15" +               scale_image="true"                 hover_glow_amount="0.35"/>    <left_button image_unselected="ScrollArrow_Left"                 image_selected="ScrollArrow_Left" -               scale_image="true" thickness="15" +               scale_image="true"                 hover_glow_amount="0.35"/>    <right_button image_unselected="ScrollArrow_Right"                 image_selected="ScrollArrow_Right" -               scale_image="true" thickness="15" +               scale_image="true"                 hover_glow_amount="0.35"/>  </scroll_bar> diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml index 3878c7a144..a120b1aec8 100644 --- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml @@ -23,7 +23,4 @@    bg_writeable_color="TextBgWriteableColor"    bg_selected_color="EmphasisColor"    bg_focus_color="TextBgFocusColor"> -  <simple_text_editor.border -    bevel_style="in" -    follows="all" />  </simple_text_editor> diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml index c7312e609b..3d9d17fc81 100644 --- a/indra/newview/skins/default/xui/es/floater_im_session.xml +++ b/indra/newview/skins/default/xui/es/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="Panel de control de MI" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="A" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml index 51adeb4dff..6f4782417d 100644 --- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Mi avatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Colgar" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Colgar" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml index 8de2afa767..da98e1b15e 100644 --- a/indra/newview/skins/default/xui/es/panel_notes.xml +++ b/indra/newview/skins/default/xui/es/panel_notes.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Notas y Privacidad" name="panel_notes">  	<layout_stack name="layout"> -		<panel name="notes_stack"> +		<layout_panel name="notes_stack">  			<scroll_container name="profile_scroll">  				<panel name="profile_scroll_panel">  					<text name="status_message" value="Mis notas privadas:"/> @@ -11,13 +11,13 @@  					<check_box label="Edite, borre o coja mis objetos" name="objects_check"/>  				</panel>  			</scroll_container> -		</panel> -		<panel name="notes_buttons_panel"> +		</layout_panel> +		<layout_panel name="notes_buttons_panel">  			<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>  			<button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/>  			<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>  			<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>  			<button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/> -		</panel> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml index 174922e28e..90b9e475e7 100644 --- a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml @@ -13,9 +13,9 @@  		50  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml index c3df4a869c..516eb41362 100644 --- a/indra/newview/skins/default/xui/fr/floater_im_session.xml +++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="Panneau de contrôle IM" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="À" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml index 5c26527ed6..8397dc4263 100644 --- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Mon avatar :"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Quitter l'appel" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Quitter l'appel" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml index 5beb71981c..110e017050 100644 --- a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml @@ -1,15 +1,19 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="notifications_panel">  	<layout_stack name="stack1"> -		<scroll_list name="notifications_list"> -			<column label="Nom" name="name"/> -			<column label="Contenu" name="content"/> -			<column label="Date" name="date"/> -		</scroll_list> -		<scroll_list name="notification_rejects_list"> -			<column label="Nom" name="name"/> -			<column label="Contenu" name="content"/> -			<column label="Date" name="date"/> -		</scroll_list> +	     <layout_panel name="notifications_list_panel" > +			<scroll_list name="notifications_list"> +				<column label="Nom" name="name"/> +				<column label="Contenu" name="content"/> +				<column label="Date" name="date"/> +			</scroll_list> +		</layout_panel> +	     <layout_panel name="rejects_list_panel" > +			<scroll_list name="notification_rejects_list"> +				<column label="Nom" name="name"/> +				<column label="Contenu" name="content"/> +				<column label="Date" name="date"/> +			</scroll_list> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml index f6b9bdcb81..f16fcebd02 100644 --- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml @@ -7,9 +7,9 @@  		0.2  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Le média est en cours de chargement"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml index 8d395ea04b..3d9d17fc81 100644 --- a/indra/newview/skins/default/xui/it/floater_im_session.xml +++ b/indra/newview/skins/default/xui/it/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="A" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml index d2fd462062..4741d8d32f 100644 --- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Il mio avatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Abbandona chiamata" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +				<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Abbandona chiamata" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +        </layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml index 9ce6b47a32..945bff1603 100644 --- a/indra/newview/skins/default/xui/it/panel_notes.xml +++ b/indra/newview/skins/default/xui/it/panel_notes.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Note e Privacy" name="panel_notes">  	<layout_stack name="layout"> -		<panel name="notes_stack"> +		<layout_panel name="notes_stack">  			<scroll_container name="profile_scroll">  				<panel name="profile_scroll_panel">  					<text name="status_message" value="Le mie note private:"/> @@ -11,13 +11,13 @@  					<check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/>  				</panel>  			</scroll_container> -		</panel> -		<panel name="notes_buttons_panel"> +		</layout_panel> +		<layout_panel name="notes_buttons_panel">  			<button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>  			<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>  			<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>  			<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>  			<button label="Teleport" name="teleport" tool_tip="Offri teleport"/> -		</panel> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml index ef7aaf2e8c..4620d72977 100644 --- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml @@ -13,9 +13,9 @@  		50  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="L'elemento multimediale è in caricamento"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml index 6646cc0b25..dfa1c85ca2 100644 --- a/indra/newview/skins/default/xui/ja/floater_im_session.xml +++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="IM コントロールパネル" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="宛先" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml index 4b95aa544f..0caca22bc1 100644 --- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="マイ アバター:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="コール終了" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="コール終了" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml index 5723535fd2..aff427ed49 100644 --- a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml @@ -1,15 +1,19 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="notifications_panel">  	<layout_stack name="stack1"> -		<scroll_list name="notifications_list"> -			<column label="名前" name="name"/> -			<column label="コンテンツ" name="content"/> -			<column label="日付" name="date"/> -		</scroll_list> -		<scroll_list name="notification_rejects_list"> -			<column label="名前" name="name"/> -			<column label="コンテンツ" name="content"/> -			<column label="日付" name="date"/> -		</scroll_list> +		<layout_panel name="notifications_list_panel"> +			<scroll_list name="notifications_list"> +				<column label="名前" name="name"/> +				<column label="コンテンツ" name="content"/> +				<column label="日付" name="date"/> +			</scroll_list> +		</layout_panel> +		<layout_panel name="rejects_list_panel"> +			<scroll_list name="notification_rejects_list"> +				<column label="名前" name="name"/> +				<column label="コンテンツ" name="content"/> +				<column label="日付" name="date"/> +			</scroll_list> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml index a9897c7ae4..5506373eb0 100644 --- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml @@ -7,9 +7,9 @@  		0.2  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="ローディング"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml index db513f787c..9041ff7416 100644 --- a/indra/newview/skins/default/xui/pl/floater_im_session.xml +++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="Do" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml index c222e4edbb..80200cfb21 100644 --- a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Mój awatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Zakończ rozmowę" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Zakończ rozmowę" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml index 35cb7e1bce..ec6008065f 100644 --- a/indra/newview/skins/default/xui/pl/panel_notes.xml +++ b/indra/newview/skins/default/xui/pl/panel_notes.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Notatki & Prywatność" name="panel_notes">  	<layout_stack name="layout"> -		<panel name="notes_stack"> +		<layout_panel name="notes_stack">  			<scroll_container name="profile_scroll">  				<panel name="profile_scroll_panel">  					<text name="status_message" value="Notatki:"/> @@ -11,13 +11,13 @@  					<check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/>  				</panel>  			</scroll_container> -		</panel> -		<panel name="notes_buttons_panel"> +		</layout_panel> +		<layout_panel name="notes_buttons_panel">  			<button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>  			<button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>  			<button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/>  			<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>  			<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/> -		</panel> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml index f10ce5ea4d..7f66ac5d93 100644 --- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml @@ -13,9 +13,9 @@  		50  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml index 39dde3408b..5543ffa41d 100644 --- a/indra/newview/skins/default/xui/pt/floater_im_session.xml +++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater name="panel_im">  	<layout_stack name="im_panels"> -		<layout_panel label="Painel de controle de MI" name="panel_im_control_panel"/>  		<layout_panel>  			<line_editor label="Para" name="chat_editor"/>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml index 44f08b76b5..2337ee3074 100644 --- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml @@ -19,10 +19,12 @@  		<layout_panel name="my_panel">  			<text name="user_text" value="Meu avatar:"/>  		</layout_panel> -		<layout_stack name="voice_effect_and_leave_call_stack"> -			<layout_panel name="leave_call_btn_panel"> -				<button label="Desligar" name="leave_call_btn"/> -			</layout_panel> -		</layout_stack> +        <layout_panel name="leave_call_panel"> +			<layout_stack name="voice_effect_and_leave_call_stack"> +				<layout_panel name="leave_call_btn_panel"> +					<button label="Desligar" name="leave_call_btn"/> +				</layout_panel> +			</layout_stack> +		</layout_panel>  	</layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml index 9aa842d9a5..6fb614a8c4 100644 --- a/indra/newview/skins/default/xui/pt/panel_notes.xml +++ b/indra/newview/skins/default/xui/pt/panel_notes.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Anotações e Privacidade" name="panel_notes">  	<layout_stack name="layout"> -		<panel name="notes_stack"> +		<layout_panel name="notes_stack">  			<scroll_container name="profile_scroll">  				<panel name="profile_scroll_panel">  					<text name="status_message" value="Minhas anotações privadas:"/> @@ -11,13 +11,13 @@  					<check_box label="Pegar, editar ou excluir objetos meus" name="objects_check"/>  				</panel>  			</scroll_container> -		</panel> -		<panel name="notes_buttons_panel"> +		</layout_panel> +		<layout_panel name="notes_buttons_panel">  			<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>  			<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>  			<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>  			<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>  			<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/> -		</panel> +		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml index a1254b4da0..9e07b6772f 100644 --- a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml @@ -13,9 +13,9 @@  		50  	</string>  	<layout_stack name="progress_indicator_area"> -		<panel name="media_progress_indicator"> +		<layout_panel name="media_progress_indicator">  			<progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/> -		</panel> +		</layout_panel>  	</layout_stack>  	<layout_stack name="media_controls">  		<layout_panel name="back"> | 
