diff options
| -rw-r--r-- | indra/llui/lltextbase.cpp | 58 | ||||
| -rw-r--r-- | indra/llui/lltextbase.h | 19 | ||||
| -rw-r--r-- | indra/llui/llurlentry.cpp | 19 | ||||
| -rw-r--r-- | indra/llui/llurlentry.h | 5 | ||||
| -rw-r--r-- | indra/llui/llurlmatch.cpp | 6 | ||||
| -rw-r--r-- | indra/llui/llurlmatch.h | 6 | ||||
| -rw-r--r-- | indra/llui/llurlregistry.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarkinfo.cpp | 65 | ||||
| -rw-r--r-- | indra/newview/llpanelplaceinfo.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/skins/default/colors.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_places_gear_folder.xml | 6 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 30 | 
12 files changed, 188 insertions, 50 deletions
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 617c496d6a..34d58db7f8 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1642,7 +1642,7 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para  			}  			else  			{ -				appendAndHighlightText(match.getLabel(), part, link_params); +				appendAndHighlightText(match.getLabel(), part, link_params, match.underlineOnHoverOnly());  				// set the tooltip for the Url label  				if (! match.getTooltip().empty()) @@ -1725,7 +1725,7 @@ void LLTextBase::appendWidget(const LLInlineViewSegment::Params& params, const s  	insertStringNoUndo(getLength(), widget_wide_text, &segments);  } -void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params) +void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only)  {  	// Save old state  	S32 selection_start = mSelectionStart; @@ -1756,7 +1756,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig  			S32 cur_length = getLength();  			LLStyleConstSP sp(new LLStyle(highlight_params)); -			LLTextSegmentPtr segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this); +			LLTextSegmentPtr segmentp; +			if(underline_on_hover_only) +			{ +				highlight_params.font.style("NORMAL"); +				LLStyleConstSP normal_sp(new LLStyle(highlight_params)); +				segmentp = new LLOnHoverChangeableTextSegment(sp, normal_sp, cur_length, cur_length + wide_text.size(), *this); +			} +			else +			{ +				segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this); +			}  			segment_vec_t segments;  			segments.push_back(segmentp);  			insertStringNoUndo(cur_length, wide_text, &segments); @@ -1771,7 +1781,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig  		S32 segment_start = old_length;  		S32 segment_end = old_length + wide_text.size();  		LLStyleConstSP sp(new LLStyle(style_params)); -		segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this )); +		if (underline_on_hover_only) +		{ +			LLStyle::Params normal_style_params(style_params); +			normal_style_params.font.style("NORMAL"); +			LLStyleConstSP normal_sp(new LLStyle(normal_style_params)); +			segments.push_back(new LLOnHoverChangeableTextSegment(sp, normal_sp, segment_start, segment_end, *this )); +		} +		else +		{ +			segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this )); +		}  		insertStringNoUndo(getLength(), wide_text, &segments);  	} @@ -1795,7 +1815,7 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig  	}  } -void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params) +void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only)  {  	if (new_text.empty()) return;  @@ -1807,7 +1827,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig  		if(pos!=start)  		{  			std::string str = std::string(new_text,start,pos-start); -			appendAndHighlightTextImpl(str,highlight_part, style_params); +			appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only);  		}  		appendLineBreakSegment(style_params);  		start = pos+1; @@ -1815,7 +1835,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig  	}  	std::string str = std::string(new_text,start,new_text.length()-start); -	appendAndHighlightTextImpl(str,highlight_part, style_params); +	appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only);  } @@ -2675,6 +2695,30 @@ void LLNormalTextSegment::dump() const  		llendl;  } +// +// LLOnHoverChangeableTextSegment +// + +LLOnHoverChangeableTextSegment::LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor ): +	  LLNormalTextSegment(normal_style, start, end, editor), +	  mHoveredStyle(style), +	  mNormalStyle(normal_style){} + +/*virtual*/  +F32 LLOnHoverChangeableTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect) +{ +	F32 result = LLNormalTextSegment::draw(start, end, selection_start, selection_end, draw_rect); +	mStyle = mNormalStyle; +	return result; +} + +/*virtual*/ +BOOL LLOnHoverChangeableTextSegment::handleHover(S32 x, S32 y, MASK mask) +{ +	mStyle = mHoveredStyle; +	return LLNormalTextSegment::handleHover(x, y, mask); +} +  //  // LLInlineViewSegment diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 86f0e55a1d..4b83d5effb 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -145,6 +145,21 @@ protected:  	boost::signals2::connection mImageLoadedConnection;  }; +// Text segment that changes it's style depending of mouse pointer position ( is it inside or outside segment) +class LLOnHoverChangeableTextSegment : public LLNormalTextSegment +{ +public: +	LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor ); +	/*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect); +	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); +protected: +	// Style used for text when mouse pointer is over segment +	LLStyleConstSP		mHoveredStyle; +	// Style used for text when mouse pointer is outside segment +	LLStyleConstSP		mNormalStyle; + +}; +  class LLIndexSegment : public LLTextSegment  {  public: @@ -443,7 +458,7 @@ protected:  	S32								insertStringNoUndo(S32 pos, const LLWString &wstr, segment_vec_t* segments = NULL); // returns num of chars actually inserted  	S32 							removeStringNoUndo(S32 pos, S32 length);  	S32								overwriteCharNoUndo(S32 pos, llwchar wc); -	void							appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep); +	void							appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep, bool underline_on_hover_only = false);  	// manage segments  @@ -486,7 +501,7 @@ protected:  	void							replaceUrlLabel(const std::string &url, const std::string &label);  	void							appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params = LLStyle::Params()); -	void							appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params); +	void							appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only = false);  protected: diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index e075699a6e..17d211fb36 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -363,6 +363,12 @@ std::string LLUrlEntryAgent::getTooltip(const std::string &string) const  	return LLTrans::getString("TooltipAgentUrl");  } +bool LLUrlEntryAgent::underlineOnHoverOnly(const std::string &string) const +{ +	std::string url = getUrl(string); +	return LLStringUtil::endsWith(url, "/about"); +} +  std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)  {  	if (!gCacheName) @@ -730,6 +736,19 @@ std::string LLUrlEntrySLLabel::getTooltip(const std::string &string) const  	return LLUrlEntryBase::getTooltip(string);  } +bool LLUrlEntrySLLabel::underlineOnHoverOnly(const std::string &string) const +{ +	std::string url = getUrl(string); +	LLUrlMatch match; +	if (LLUrlRegistry::instance().findUrl(url, match)) +	{ +		return match.underlineOnHoverOnly(); +	} + +	// unrecognized URL? should not happen +	return LLUrlEntryBase::underlineOnHoverOnly(string); +} +  //  // LLUrlEntryWorldMap Describes secondlife:///<location> URLs  // diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 7d718b67a9..f8588dd760 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -94,6 +94,9 @@ public:  	/// is this a match for a URL that should not be hyperlinked?  	bool isLinkDisabled() const { return mDisabledLink; } +	/// Should this link text be underlined only when mouse is hovered over it? +	virtual bool underlineOnHoverOnly(const std::string &string) const { return false; } +  	virtual LLUUID	getID(const std::string &string) const { return LLUUID::null; }  protected: @@ -173,6 +176,7 @@ public:  	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);  	/*virtual*/ std::string getTooltip(const std::string &string) const;  	/*virtual*/ LLUUID	getID(const std::string &string) const; +	/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;  private:  	void onAgentNameReceived(const LLUUID& id, const std::string& first,  							 const std::string& last, BOOL is_group); @@ -275,6 +279,7 @@ public:  	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);  	/*virtual*/ std::string getUrl(const std::string &string) const;  	/*virtual*/ std::string getTooltip(const std::string &string) const; +	/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;  };  /// diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp index 7c96665ce4..a6d3dcb40f 100644 --- a/indra/llui/llurlmatch.cpp +++ b/indra/llui/llurlmatch.cpp @@ -43,7 +43,8 @@ LLUrlMatch::LLUrlMatch() :  	mIcon(""),  	mMenuName(""),  	mLocation(""), -	mDisabledLink(false) +	mDisabledLink(false), +	mUnderlineOnHoverOnly(false)  {  } @@ -51,7 +52,7 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,  						   const std::string &label, const std::string &tooltip,  						   const std::string &icon, const LLUIColor& color,  						   const std::string &menu, const std::string &location, -						   bool disabled_link, const LLUUID& id) +						   bool disabled_link, const LLUUID& id, bool underline_on_hover_only)  {  	mStart = start;  	mEnd = end; @@ -64,4 +65,5 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,  	mLocation = location;  	mDisabledLink = disabled_link;  	mID = id; +	mUnderlineOnHoverOnly = underline_on_hover_only;  } diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h index 78dd2c528f..7090dd3f93 100644 --- a/indra/llui/llurlmatch.h +++ b/indra/llui/llurlmatch.h @@ -86,12 +86,15 @@ public:  	/// is this a match for a URL that should not be hyperlinked?  	bool isLinkDisabled() const { return mDisabledLink; } +	/// Should this link text be underlined only when mouse is hovered over it? +	bool underlineOnHoverOnly() const { return mUnderlineOnHoverOnly; } +  	/// Change the contents of this match object (used by LLUrlRegistry)  	void setValues(U32 start, U32 end, const std::string &url, const std::string &label,  	               const std::string &tooltip, const std::string &icon,  				   const LLUIColor& color, const std::string &menu,   				   const std::string &location, bool disabled_link -				   , const LLUUID& id ); +				   , const LLUUID& id, bool underline_on_hover_only  = false );  	const LLUUID& getID() const { return mID;} @@ -108,6 +111,7 @@ private:  	LLUUID		mID;  	LLUIColor	mColor;  	bool        mDisabledLink; +	bool		mUnderlineOnHoverOnly;  };  #endif diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 1f86f72faa..b37a52cad2 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -184,7 +184,8 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL  						match_entry->getMenuName(),  						match_entry->getLocation(url),  						match_entry->isLinkDisabled(), -						match_entry->getID(url)); +						match_entry->getID(url), +						match_entry->underlineOnHoverOnly(url));  		return true;  	} @@ -219,7 +220,8 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr  						match.getMenuName(),  						match.getLocation(),  						match.isLinkDisabled(), -						match.getID()); +						match.getID(), +						match.underlineOnHoverOnly());  		return true;  	}  	return false; diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 4ffd43cb0f..c05cffc59e 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -123,11 +123,54 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)  	switch(type)  	{  		case CREATE_LANDMARK: +		{  			mCurrentTitle = getString("title_create_landmark");  			mLandmarkTitle->setVisible(FALSE);  			mLandmarkTitleEditor->setVisible(TRUE);  			mNotesEditor->setEnabled(TRUE); + +			LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); +			std::string name = parcel_mgr->getAgentParcelName(); +			LLVector3 agent_pos = gAgent.getPositionAgent(); + +			if (name.empty()) +			{ +				S32 region_x = llround(agent_pos.mV[VX]); +				S32 region_y = llround(agent_pos.mV[VY]); +				S32 region_z = llround(agent_pos.mV[VZ]); + +				std::string region_name; +				LLViewerRegion* region = parcel_mgr->getSelectionRegion(); +				if (region) +				{ +					region_name = region->getName(); +				} +				else +				{ +					region_name = getString("unknown"); +				} + +				mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)", +									  region_name.c_str(), region_x, region_y, region_z)); +			} +			else +			{ +				mLandmarkTitleEditor->setText(name); +			} + +			std::string desc; +			LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, agent_pos); +			mNotesEditor->setText(desc); + +			// Moved landmark creation here from LLPanelLandmarkInfo::processParcelInfo() +			// because we use only agent's current coordinates instead of waiting for +			// remote parcel request to complete. +			if (!LLLandmarkActions::landmarkAlreadyExists()) +			{ +				createLandmark(LLUUID()); +			} +		}  		break;  		case LANDMARK: @@ -192,28 +235,6 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)  	info["global_y"] = parcel_data.global_y;  	info["global_z"] = parcel_data.global_z;  	notifyParent(info); - -	if (mInfoType == CREATE_LANDMARK) -	{ -		if (parcel_data.name.empty()) -		{ -			mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)", -								  parcel_data.sim_name.c_str(), region_x, region_y, region_z)); -		} -		else -		{ -			mLandmarkTitleEditor->setText(parcel_data.name); -		} - -		std::string desc; -		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent()); -		mNotesEditor->setText(desc); - -		if (!LLLandmarkActions::landmarkAlreadyExists()) -		{ -			createLandmark(mFolderCombo->getValue().asUUID()); -		} -	}  }  void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem) diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 99e48cca6d..1ca4a048a4 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -104,11 +104,11 @@ void LLPanelPlaceInfo::resetLocation()  	mPosRegion.clearVec();  	std::string loading = LLTrans::getString("LoadingData"); -	mMaturityRatingIcon->setValue(loading);  	mMaturityRatingText->setValue(loading);  	mRegionName->setText(loading);  	mParcelName->setText(loading);  	mDescEditor->setText(loading); +	mMaturityRatingIcon->setValue(LLUUID::null);  	mSnapshotCtrl->setImageAssetID(LLUUID::null);  } @@ -186,7 +186,21 @@ void LLPanelPlaceInfo::setErrorStatus(U32 status, const std::string& reason)  	{  		error_text = getString("server_forbidden_text");  	} +	else +	{ +		error_text = getString("server_error_text"); +	} +  	mDescEditor->setText(error_text); + +	std::string not_available = getString("not_available"); +	mMaturityRatingText->setValue(not_available); +	mRegionName->setText(not_available); +	mParcelName->setText(not_available); +	mMaturityRatingIcon->setValue(LLUUID::null); + +	// Enable "Back" button that was disabled when parcel request was sent. +	getChild<LLButton>("back_btn")->setEnabled(TRUE);  }  // virtual diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 2188c71ff9..5ba1fc9b21 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -113,7 +113,7 @@       reference="LtYellow" />      <color       name="AgentLinkColor" -     reference="White" /> +     reference="EmphasisColor" />      <color       name="AlertTextColor"       value="0.58 0.66 0.84 1" /> diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml index 3e38503e43..77cc3910fd 100644 --- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml @@ -94,6 +94,9 @@          <on_enable           function="Places.LandmarksGear.Enable"           parameter="expand" /> +        <on_visible +         function="Places.LandmarksGear.Enable" +         parameter="expand" />      </menu_item_call>      <menu_item_call       label="Collapse" @@ -105,6 +108,9 @@          <on_enable           function="Places.LandmarksGear.Enable"           parameter="collapse" /> +        <on_visible +         function="Places.LandmarksGear.Enable" +         parameter="collapse" />      </menu_item_call>      <menu_item_call       label="Expand all folders" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 67b8c81a01..bf1707c13e 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -951,17 +951,6 @@       name="Advanced"       tear_off="true"       visible="false"> -        <menu_item_check -         label="Show Advanced Menu" -         name="Show Advanced Menu" -         shortcut="control|alt|D"> -          <on_check -           function="CheckControl" -           parameter="UseDebugMenus" /> -          <on_click -           function="ToggleControl" -           parameter="UseDebugMenus" /> -        </menu_item_check>          <menu_item_call           label="Stop Animating Me"           name="Stop Animating My Avatar"> @@ -1681,7 +1670,24 @@                  <menu_item_call.on_click                   function="View.ZoomOut" />              </menu_item_call> -        </menu> +            <menu_item_separator +             visible="false"/> +            <!-- Made invisible to avoid a dissonance: menu item toggle menu where it is located. EXT-8069. +              Can't be removed to keep sortcut workable. +            --> +            <menu_item_check +             label="Show Advanced Menu" +             name="Show Advanced Menu" +             shortcut="control|alt|D" +             visible="false"> +                <on_check +                 function="CheckControl" +                 parameter="UseDebugMenus" /> +                <on_click +                 function="ToggleControl" +                 parameter="UseDebugMenus" /> +        </menu_item_check> +        </menu> <!--Shortcuts-->          <menu_item_separator/>  | 
