From d181b84dfdce83d1999d086c3eda2cdc51849a11 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 10 Nov 2009 17:10:47 -0800
Subject: [PATCH] EXT-1478   	 Tool-tip background and border colors are
 being ignored EXT-2082   	 Multifloater preview tab container extends
 outside window border EXT-773   	 odd notecard behaviour on closing an
 unsaved notcard reviewed by Richard

---
 indra/llui/llstyle.cpp                        |  1 +
 indra/llui/llstyle.h                          |  7 ++-
 indra/llui/lltabcontainer.cpp                 | 41 +++++++----------
 indra/llui/lltextbase.cpp                     |  5 +-
 indra/llui/lltexteditor.cpp                   |  3 +-
 indra/llui/lltooltip.cpp                      |  4 ++
 indra/llui/lltooltip.h                        |  6 +++
 indra/llui/lluiimage.cpp                      |  7 +++
 indra/newview/lltoolpie.cpp                   | 46 +++++++++++--------
 .../default/xui/en/widgets/inspector.xml      |  8 ++++
 10 files changed, 80 insertions(+), 48 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/inspector.xml

diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp
index fd3f88d1f61..71511f69a41 100644
--- a/indra/llui/llstyle.cpp
+++ b/indra/llui/llstyle.cpp
@@ -51,6 +51,7 @@ LLStyle::Params::Params()
 LLStyle::LLStyle(const LLStyle::Params& p)
 :	mVisible(p.visible),
 	mColor(p.color()),
+	mReadOnlyColor(p.readonly_color()),
 	mFont(p.font()),
 	mLink(p.link_href),
 	mDropShadow(p.drop_shadow),
diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h
index c7699641366..ee9ca730e94 100644
--- a/indra/llui/llstyle.h
+++ b/indra/llui/llstyle.h
@@ -46,7 +46,8 @@ class LLStyle : public LLRefCount
 	{
 		Optional<bool>					visible;
 		Optional<LLFontGL::ShadowType>	drop_shadow;
-		Optional<LLUIColor>				color;
+		Optional<LLUIColor>				color,
+										readonly_color;
 		Optional<const LLFontGL*>		font;
 		Optional<LLUIImage*>			image;
 		Optional<std::string>			link_href;
@@ -57,6 +58,8 @@ class LLStyle : public LLRefCount
 	const LLColor4& getColor() const { return mColor; }
 	void setColor(const LLColor4 &color) { mColor = color; }
 
+	const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; }
+
 	BOOL isVisible() const;
 	void setVisible(BOOL is_visible);
 
@@ -81,6 +84,7 @@ class LLStyle : public LLRefCount
 		return 
 			mVisible == rhs.mVisible
 			&& mColor == rhs.mColor
+			&& mReadOnlyColor == rhs.mReadOnlyColor
 			&& mFont == rhs.mFont
 			&& mLink == rhs.mLink
 			&& mImagep == rhs.mImagep
@@ -104,6 +108,7 @@ class LLStyle : public LLRefCount
 private:
 	BOOL		mVisible;
 	LLUIColor	mColor;
+	LLUIColor   mReadOnlyColor;
 	std::string	mFontName;
 	const LLFontGL*   mFont;		// cached for performance
 	std::string	mLink;
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index b67f753d394..44eff8d357c 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -346,7 +346,13 @@ void LLTabContainer::draw()
 		}
 	}
 
-	LLPanel::draw();
+	{
+		LLRect clip_rect = getLocalRect();
+		clip_rect.mLeft+=(LLPANEL_BORDER_WIDTH + 2);
+		clip_rect.mRight-=(LLPANEL_BORDER_WIDTH + 2);
+		LLLocalClipRect clip(clip_rect);
+		LLPanel::draw();
+	}
 
 	// if tabs are hidden, don't draw them and leave them in the invisible state
 	if (!getTabsHidden())
@@ -358,24 +364,6 @@ void LLTabContainer::draw()
 			tuple->mButton->setVisible( TRUE );
 		}
 
-		// Draw some of the buttons...
-		LLRect clip_rect = getLocalRect();
-		if (has_scroll_arrows)
-		{
-			// ...but clip them.
-			if (mIsVertical)
-			{
-				clip_rect.mBottom = mNextArrowBtn->getRect().mTop + 3*tabcntrv_pad;
-				clip_rect.mTop = mPrevArrowBtn->getRect().mBottom - 3*tabcntrv_pad;
-			}
-			else
-			{
-				clip_rect.mLeft = mPrevArrowBtn->getRect().mRight;
-				clip_rect.mRight = mNextArrowBtn->getRect().mLeft;
-			}
-		}
-		LLLocalClipRect clip(clip_rect);
-
 		S32 max_scroll_visible = getTabCount() - getMaxScrollPos() + getScrollPos();
 		S32 idx = 0;
 		for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
@@ -403,7 +391,7 @@ void LLTabContainer::draw()
 						mNextArrowBtn->setFlashing( TRUE );
 					}
 				}
-			}
+			}
 
 			idx++;
 		}
@@ -1039,6 +1027,11 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 	{
 		LLUICtrl::addChild(child, 1);
 	}
+
+	sendChildToFront(mPrevArrowBtn);
+	sendChildToFront(mNextArrowBtn);
+	sendChildToFront(mJumpPrevArrowBtn);
+	sendChildToFront(mJumpNextArrowBtn);
 	
 	if( select )
 	{
@@ -1672,23 +1665,23 @@ void LLTabContainer::initButtons()
 		S32 btn_top = (getTabPosition() == TOP ) ? getRect().getHeight() - getTopBorderHeight() : tabcntr_arrow_btn_size + 1;
 
 		LLRect left_arrow_btn_rect;
-		left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1+tabcntr_arrow_btn_size, btn_top + arrow_fudge, tabcntr_arrow_btn_size, tabcntr_arrow_btn_size );
+		left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1+tabcntr_arrow_btn_size, btn_top + arrow_fudge, tabcntr_arrow_btn_size, mTabHeight );
 
 		LLRect jump_left_arrow_btn_rect;
-		jump_left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, tabcntr_arrow_btn_size, tabcntr_arrow_btn_size );
+		jump_left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, tabcntr_arrow_btn_size, mTabHeight );
 
 		S32 right_pad = tabcntr_arrow_btn_size + LLPANEL_BORDER_WIDTH + 1;
 
 		LLRect right_arrow_btn_rect;
 		right_arrow_btn_rect.setLeftTopAndSize( getRect().getWidth() - mRightTabBtnOffset - right_pad - tabcntr_arrow_btn_size,
 												btn_top + arrow_fudge,
-												tabcntr_arrow_btn_size, tabcntr_arrow_btn_size );
+												tabcntr_arrow_btn_size, mTabHeight );
 
 
 		LLRect jump_right_arrow_btn_rect;
 		jump_right_arrow_btn_rect.setLeftTopAndSize( getRect().getWidth() - mRightTabBtnOffset - right_pad,
 													 btn_top + arrow_fudge,
-													 tabcntr_arrow_btn_size, tabcntr_arrow_btn_size );
+													 tabcntr_arrow_btn_size, mTabHeight );
 
 		LLButton::Params p;
 		p.name(std::string("Jump Left Arrow"));
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 97ba6913418..8d36c9c616e 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -286,8 +286,7 @@ bool LLTextBase::truncate()
 
 LLStyle::Params LLTextBase::getDefaultStyle()
 {
-	LLColor4 text_color = ( mReadOnly ? mReadOnlyFgColor.get() : mFgColor.get() );
-	return LLStyle::Params().color(text_color).font(mDefaultFont).drop_shadow(mFontShadow);
+	return LLStyle::Params().color(mFgColor.get()).readonly_color(mReadOnlyFgColor.get()).font(mDefaultFont).drop_shadow(mFontShadow);
 }
 
 void LLTextBase::onValueChange(S32 start, S32 end)
@@ -2232,7 +2231,7 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele
 
 	const LLFontGL* font = mStyle->getFont();
 
-	LLColor4 color = mStyle->getColor() % alpha;
+	LLColor4 color = (mEditor.getReadOnly() ? mStyle->getReadOnlyColor() : mStyle->getColor())  % alpha;
 
 	font = mStyle->getFont();
 
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 3ce5a0320be..d136c6b49d6 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -2005,7 +2005,8 @@ void LLTextEditor::setEnabled(BOOL enabled)
 	bool read_only = !enabled;
 	if (read_only != mReadOnly)
 	{
-		mReadOnly = read_only;
+		//mReadOnly = read_only;
+		LLTextBase::setReadOnly(read_only);
 		updateSegments();
 		updateAllowingLanguageInput();
 	}
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 4bc9a9c0426..4431b2da487 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -137,6 +137,10 @@ void LLToolTipView::drawStickyRect()
 {
 	gl_rect_2d(LLToolTipMgr::instance().getMouseNearRect(), LLColor4::white, false);
 }
+
+// defaults for floater param block pulled from widgets/floater.xml
+static LLWidgetNameRegistry::StaticRegistrar sRegisterInspectorParams(&typeid(LLInspector::Params), "inspector");
+
 //
 // LLToolTip
 //
diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h
index 30d251266c0..774ca507c15 100644
--- a/indra/llui/lltooltip.h
+++ b/indra/llui/lltooltip.h
@@ -116,6 +116,12 @@ class LLToolTip : public LLPanel
 	S32				mPadding;	// pixels
 };
 
+// used for the inspector tooltips which need different background images etc.
+class LLInspector : public LLToolTip
+{
+public:
+	struct Params : public LLInitParam::Block<Params, LLToolTip::Params> {};
+};
 
 class LLToolTipMgr : public LLSingleton<LLToolTipMgr>
 {
diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp
index 6c1a32722f1..a8683e55c35 100644
--- a/indra/llui/lluiimage.cpp
+++ b/indra/llui/lluiimage.cpp
@@ -142,6 +142,13 @@ namespace LLInitParam
 {
 	LLUIImage* TypedParam<LLUIImage*>::getValueFromBlock() const
 	{
+		// The keyword "none" is specifically requesting a null image
+		// do not default to current value. Used to overwrite template images. 
+		if (name() == "none")
+		{
+			return NULL;
+		}
+
 		LLUIImage* imagep =  LLUI::getUIImage(name());
 		if (!imagep)
 		{
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 93da32b115f..d49ea5109dd 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -700,13 +700,17 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 
 				// *HACK: We may select this object, so pretend it was clicked
 				mPick = mHoverPick;
-				LLToolTipMgr::instance().show(LLToolTip::Params()
-					.message(avatar_name)
-					.image(LLUI::getUIImage("Info"))
-					.click_callback(boost::bind(showAvatarInspector, hover_object->getID()))
-					.visible_time_near(6.f)
-					.visible_time_far(3.f)
-					.wrap(false));
+				LLInspector::Params p;
+				p.message(avatar_name);
+				p.image(LLUI::getUIImage("Info"));
+				p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
+				p.visible_time_near(6.f);
+				p.visible_time_far(3.f);
+				p.wrap(false);
+
+				p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
+				
+				LLToolTipMgr::instance().show(p);
 			}
 		}
 		else
@@ -787,18 +791,22 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 				{
 					// We may select this object, so pretend it was clicked
 					mPick = mHoverPick;
-					LLToolTipMgr::instance().show(LLToolTip::Params()
-						.message(tooltip_msg)
-						.image(LLUI::getUIImage("Info_Off"))
-						.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace))
-						.time_based_media(is_time_based_media)
-						.web_based_media(is_web_based_media)						  
-						.media_playing(is_media_playing)						  
-						.click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick))
-						.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick))						
-						.visible_time_near(6.f)
-						.visible_time_far(3.f)
-						.wrap(false));
+					LLInspector::Params p;
+					p.message(tooltip_msg);
+					p.image(LLUI::getUIImage("Info_Off"));
+					p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace));
+					p.time_based_media(is_time_based_media);
+					p.web_based_media(is_web_based_media);
+					p.media_playing(is_media_playing);
+					p.click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick));
+					p.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick));
+					p.visible_time_near(6.f);
+					p.visible_time_far(3.f);
+					p.wrap(false);
+
+					p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
+					
+					LLToolTipMgr::instance().show(p);
 				}
 			}
 		}
diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml
new file mode 100644
index 00000000000..61950d7554e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inspector.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- See also settings.xml UIFloater* settings for configuration -->
+<inspector name="inspector"
+          bg_opaque_color="ToolTipBgColor"
+          background_visible="true"
+          bg_opaque_image="none"
+          bg_alpha_image="none"
+ />
-- 
GitLab