diff options
| author | callum <none@none> | 2009-10-30 10:49:45 -0700 | 
|---|---|---|
| committer | callum <none@none> | 2009-10-30 10:49:45 -0700 | 
| commit | efd8e587c04ea61aa1f35ae231ea70d2428b6184 (patch) | |
| tree | c8b7b647fa40b0a1a066f57e015474aab7d8e842 | |
| parent | 91b54876b7422422326646e5b4581631883f1e69 (diff) | |
| parent | 4f29a87172127f6a54dd5b3ecac225e476095e2e (diff) | |
Merge
22 files changed, 720 insertions, 260 deletions
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index fd369730d6..a7946cacf5 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -486,6 +486,11 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)  	mNeedsHighlight = FALSE;  } +void LLButton::setHighlight(bool b) +{ +	mNeedsHighlight = b; +} +  BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)  {  	if (!childrenHandleHover(x, y, mask)) diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 5e2aea2b74..85580a98bf 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -176,6 +176,7 @@ public:  	BOOL			getToggleState() const;  	void			setToggleState(BOOL b); +	void			setHighlight(bool b);  	void			setFlashing( BOOL b );  	BOOL			getFlashing() const		{ return mFlashing; } diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp index 8dbcd6e229..a657ed039a 100644 --- a/indra/llui/llmenubutton.cpp +++ b/indra/llui/llmenubutton.cpp @@ -85,6 +85,8 @@ void LLMenuButton::toggleMenu()  void LLMenuButton::hideMenu()   {  +	if(!mMenu) +		return;  	mMenu->setVisible(FALSE);   } diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index c8094f9c7c..34501ae080 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -38,10 +38,11 @@  // Library includes  #include "lltextbox.h"  #include "lliconctrl.h" +#include "llbutton.h"  #include "llmenugl.h"       // hideMenus()  #include "llui.h"			// positionViewNearMouse()  #include "llwindow.h" - +#include "lltrans.h"  //  // Constants  // @@ -155,7 +156,10 @@ LLToolTip::Params::Params()  	visible_time_near("visible_time_near", LLUI::sSettingGroups["config"]->getF32( "ToolTipVisibleTimeNear" )),  	visible_time_far("visible_time_far", LLUI::sSettingGroups["config"]->getF32( "ToolTipVisibleTimeFar" )),  	sticky_rect("sticky_rect"), -	image("image") +	image("image"), +	time_based_media("time_based_media", false), +	web_based_media("web_based_media", false), +	media_playing("media_playing", false)  {  	name = "tooltip";  	font = LLFontGL::getFontSansSerif(); @@ -167,7 +171,11 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  :	LLPanel(p),  	mMaxWidth(p.max_width),  	mHasClickCallback(p.click_callback.isProvided()), -	mPadding(p.padding) +	mPadding(p.padding), +	mTextBox(NULL), +	mInfoButton(NULL), +	mPlayMediaButton(NULL), +	mHomePageButton(NULL)  {  	LLTextBox::Params params;  	params.initial_value = "tip_text"; @@ -186,25 +194,82 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  	params.allow_html = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips  	mTextBox = LLUICtrlFactory::create<LLTextBox> (params);  	addChild(mTextBox); - +	 +	S32 TOOLTIP_ICON_SIZE = 0; +	S32 TOOLTIP_PLAYBUTTON_SIZE = 0;  	if (p.image.isProvided())  	{ -		LLIconCtrl::Params icon_params; -		icon_params.name = "tooltip_icon"; +		LLButton::Params icon_params; +		icon_params.name = "tooltip_info";  		LLRect icon_rect;  		LLUIImage* imagep = p.image; -		const S32 TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16); +		TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16);  		icon_rect.setOriginAndSize(mPadding, mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);  		icon_params.rect = icon_rect; -		icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; -		icon_params.image = p.image; -		icon_params.mouse_opaque = false; -		addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params)); - +		//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; +		icon_params.image_unselected(imagep); +		icon_params.scale_image(true); +		icon_params.flash_color(icon_params.highlight_color()); +		mInfoButton  = LLUICtrlFactory::create<LLButton>(icon_params); +		if (p.click_callback.isProvided()) +		{ +			mInfoButton->setCommitCallback(boost::bind(p.click_callback())); +		} +		addChild(mInfoButton); +		  		// move text over to fit image in  		mTextBox->translate(TOOLTIP_ICON_SIZE + mPadding, 0);  	} - +	 +	if (p.time_based_media.isProvided() && p.time_based_media == true) +	{ +		LLButton::Params p_button; +		p_button.name(std::string("play_media")); +		TOOLTIP_PLAYBUTTON_SIZE = 16; +		LLRect button_rect; +		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); +		p_button.rect = button_rect; +		p_button.image_selected.name("button_anim_pause.tga"); +		p_button.image_unselected.name("button_anim_play.tga"); +		p_button.scale_image(true); +		 +		mPlayMediaButton = LLUICtrlFactory::create<LLButton>(p_button);  +		if(p.click_playmedia_callback.isProvided()) +		{ +			mPlayMediaButton->setCommitCallback(boost::bind(p.click_playmedia_callback())); +		} +		if(p.media_playing.isProvided()) +		{ +			mPlayMediaButton->setToggleState(p.media_playing); +		} +		addChild(mPlayMediaButton); +		 +		// move text over to fit image in +		mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0); +	} +	 +	if (p.web_based_media.isProvided() && p.web_based_media == true) +	{ +		LLButton::Params p_w_button; +		p_w_button.name(std::string("home_page")); +		TOOLTIP_PLAYBUTTON_SIZE = 16; +		LLRect button_rect; +		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); +		p_w_button.rect = button_rect; +		p_w_button.image_unselected.name("map_home.tga"); +		p_w_button.scale_image(true); +		 +		mHomePageButton = LLUICtrlFactory::create<LLButton>(p_w_button);  +		if(p.click_homepage_callback.isProvided()) +		{ +			mHomePageButton->setCommitCallback(boost::bind(p.click_homepage_callback())); +		} +		addChild(mHomePageButton); +		 +		// move text over to fit image in +		mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0); +	} +	  	if (p.click_callback.isProvided())  	{  		setMouseUpCallback(boost::bind(p.click_callback())); @@ -255,6 +320,10 @@ void LLToolTip::setVisible(BOOL visible)  BOOL LLToolTip::handleHover(S32 x, S32 y, MASK mask)  { +	//mInfoButton->setFlashing(true); +	if(mInfoButton) +		mInfoButton->setHighlight(true); +	  	LLPanel::handleHover(x, y, mask);  	if (mHasClickCallback)  	{ @@ -263,6 +332,14 @@ BOOL LLToolTip::handleHover(S32 x, S32 y, MASK mask)  	return TRUE;  } +void LLToolTip::onMouseLeave(S32 x, S32 y, MASK mask) +{ +	//mInfoButton->setFlashing(true); +	if(mInfoButton) +		mInfoButton->setHighlight(false); +	LLUICtrl::onMouseLeave(x, y, mask); +} +  void LLToolTip::draw()  {  	F32 alpha = 1.f; @@ -393,7 +470,9 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)  		&& LLUI::getMouseIdleTime() > params.delay_time)	// the mouse has been still long enough  	{  		bool tooltip_changed = mLastToolTipParams.message() != params.message() -								|| mLastToolTipParams.pos() != params.pos(); +								|| mLastToolTipParams.pos() != params.pos() +								|| mLastToolTipParams.time_based_media() != params.time_based_media() +								|| mLastToolTipParams.web_based_media() != params.web_based_media();  		bool tooltip_shown = mToolTip   							 && mToolTip->getVisible()  diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 63e7249a12..4a5f60f93d 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -81,6 +81,13 @@ public:  		Optional<click_callback_t>	click_callback;  		Optional<LLUIImage*>		image; +		 +		 +		Optional<bool>				time_based_media; +		Optional<bool>				web_based_media; +		Optional<bool>				media_playing; +		Optional<click_callback_t>	click_playmedia_callback; +		Optional<click_callback_t>	click_homepage_callback;  		Optional<S32>				max_width;  		Optional<S32>				padding;  		Optional<bool>				wrap; @@ -89,7 +96,7 @@ public:  	};  	/*virtual*/ void draw();  	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); - +	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);  	/*virtual*/ void setValue(const LLSD& value);  	/*virtual*/ void setVisible(BOOL visible); @@ -101,6 +108,10 @@ public:  private:  	class LLTextBox*	mTextBox; +	class LLButton*     mInfoButton; +	class LLButton*     mPlayMediaButton; +	class LLButton*     mHomePageButton; +  	LLFrameTimer	mFadeTimer;  	LLFrameTimer	mVisibleTimer;  	S32				mMaxWidth; diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 29cca14a7b..050a61c79b 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -35,10 +35,12 @@  // Viewer  #include "llinspect.h" +#include "llmediaentry.h"  #include "llnotifications.h"	// *TODO: Eliminate, add LLNotificationsUtil wrapper  #include "llselectmgr.h"  #include "llslurl.h"  #include "llviewermenu.h"		// handle_object_touch(), handle_buy() +#include "llviewermedia.h"  #include "llviewerobjectlist.h"	// to select the requested object  // Linden libraries @@ -92,8 +94,10 @@ private:  	void updateName(LLSelectNode* nodep);  	void updateDescription(LLSelectNode* nodep);  	void updatePrice(LLSelectNode* nodep); -	  	void updateCreator(LLSelectNode* nodep); +	 +	void updateMediaCurrentURL();	 +	void updateSecureBrowsing();  	void onClickBuy();  	void onClickPay(); @@ -106,13 +110,17 @@ private:  private:  	LLUUID				mObjectID; +	S32					mObjectFace; +	viewer_media_t		mMediaImpl;  	LLSafeHandle<LLObjectSelection> mObjectSelection;  };  LLInspectObject::LLInspectObject(const LLSD& sd)  :	LLInspect( LLSD() ),	// single_instance, doesn't really need key -	mObjectID(),			// set in onOpen() -	mObjectSelection() +	mObjectID(NULL),			// set in onOpen() +	mObjectFace(0), +	mObjectSelection(NULL), +	mMediaImpl(NULL)  {  	// can't make the properties request until the widgets are constructed  	// as it might return immediately, so do it in postBuild. @@ -139,7 +147,7 @@ BOOL LLInspectObject::postBuild(void)  	getChild<LLUICtrl>("object_name")->setValue("");  	getChild<LLUICtrl>("object_creator")->setValue("");  	getChild<LLUICtrl>("object_description")->setValue(""); - +	getChild<LLUICtrl>("object_media_url")->setValue("");  	// Set buttons invisible until we know what this object can do  	hideButtons(); @@ -182,7 +190,11 @@ void LLInspectObject::onOpen(const LLSD& data)  	// Extract appropriate avatar id  	mObjectID = data["object_id"]; - +	 +	if(data.has("object_face")) +	{ +		mObjectFace = data["object_face"]; +	}  	// Position the inspector relative to the mouse cursor  	// Similar to how tooltips are positioned  	// See LLToolTipMgr::createToolTip @@ -213,6 +225,17 @@ void LLInspectObject::onOpen(const LLSD& data)  			}  		} functor;  		mObjectSelection->applyToNodes(&functor); +		 +		// Does this face have media? +		const LLTextureEntry* tep = obj->getTE(mObjectFace); +		if (!tep) +			return; +		 +		const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +		if(!mep) +			return; +		 +		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());  	}  } @@ -243,6 +266,30 @@ void LLInspectObject::update()  	updateDescription(nodep);  	updateCreator(nodep);  	updatePrice(nodep); +	 +	LLViewerObject* obj = nodep->getObject(); +	if(!obj) +		return; +	 +	if ( mObjectFace < 0  +		||  mObjectFace >= obj->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = obj->getTE(mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	 +	updateMediaCurrentURL(); +	updateSecureBrowsing();  }  void LLInspectObject::hideButtons() @@ -381,6 +428,40 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)  	}  } +void LLInspectObject::updateMediaCurrentURL() +{	 +	LLTextBox* textbox = getChild<LLTextBox>("object_media_url"); +	std::string media_url = ""; +	textbox->setValue(media_url); +	textbox->setToolTip(media_url); +	 +	if(mMediaImpl.notNull() && mMediaImpl->hasMedia()) +	{ +		LLStringUtil::format_map_t args; +		LLPluginClassMedia* media_plugin = NULL; +		media_plugin = mMediaImpl->getMediaPlugin(); +		if(media_plugin) +		{ +			if(media_plugin->pluginSupportsMediaTime()) +			{ +				args["[CurrentURL]"] =  mMediaImpl->getMediaURL(); +			} +			else +			{ +				args["[CurrentURL]"] =  media_plugin->getLocation(); +			} +			media_url = LLTrans::getString("CurrentURL", args); +			textbox->setText(media_url); +			textbox->setToolTip(media_url); +		} +	} +	else +	{ +		textbox->setText(media_url); +		textbox->setToolTip(media_url); +	} +} +  void LLInspectObject::updateCreator(LLSelectNode* nodep)  {  	// final information for display @@ -453,6 +534,40 @@ void LLInspectObject::updatePrice(LLSelectNode* nodep)  	getChild<LLUICtrl>("price_icon")->setVisible(show_price_icon);  } +void LLInspectObject::updateSecureBrowsing() +{ +	bool is_secure_browsing = false; +	 +	if(mMediaImpl.notNull()  +	   && mMediaImpl->hasMedia()) +	{ +		LLPluginClassMedia* media_plugin = NULL; +		std::string current_url = ""; +		media_plugin = mMediaImpl->getMediaPlugin(); +		if(media_plugin) +		{ +			if(media_plugin->pluginSupportsMediaTime()) +			{ +				current_url = mMediaImpl->getMediaURL(); +			} +			else +			{ +				current_url =  media_plugin->getLocation(); +			} +		} +		 +		std::string prefix =  std::string("https://"); +		std::string test_prefix = current_url.substr(0, prefix.length()); +		LLStringUtil::toLower(test_prefix);	 +		if(test_prefix == prefix) +		{ +			is_secure_browsing = true; +		} +	} +	getChild<LLUICtrl>("secure_browsing")->setVisible(is_secure_browsing); +} + +  void LLInspectObject::onClickBuy()  {  	handle_buy(); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 4c552ee815..e4b32c4820 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -258,7 +258,8 @@ void LLPanelPrimMediaControls::updateShape()          LLUICtrl* zoom_ctrl					= getChild<LLUICtrl>("zoom_frame");  		LLPanel* media_loading_panel		= getChild<LLPanel>("media_progress_indicator");  		LLUICtrl* media_address_ctrl		= getChild<LLUICtrl>("media_address"); -		LLUICtrl* media_play_slider_ctrl	= getChild<LLUICtrl>("media_play_position"); +		LLUICtrl* media_play_slider_panel	= getChild<LLUICtrl>("media_play_position"); +		LLUICtrl* media_play_slider_ctrl	= getChild<LLUICtrl>("media_play_slider");  		LLUICtrl* volume_ctrl				= getChild<LLUICtrl>("media_volume");  		LLButton* volume_btn				= getChild<LLButton>("media_volume_button");  		LLUICtrl* volume_up_ctrl			= getChild<LLUICtrl>("volume_up"); @@ -282,7 +283,7 @@ void LLPanelPrimMediaControls::updateShape()  		close_ctrl->setVisible(has_focus);  		open_ctrl->setVisible(true);  		media_address_ctrl->setVisible(has_focus && !mini_controls); -		media_play_slider_ctrl->setVisible(has_focus && !mini_controls); +		media_play_slider_panel->setVisible(has_focus && !mini_controls);  		volume_ctrl->setVisible(false);  		volume_up_ctrl->setVisible(false);  		volume_down_ctrl->setVisible(false); @@ -309,8 +310,8 @@ void LLPanelPrimMediaControls::updateShape()  			fwd_ctrl->setEnabled(has_focus);  			media_address_ctrl->setVisible(false);  			media_address_ctrl->setEnabled(false); -			media_play_slider_ctrl->setVisible(!mini_controls); -			media_play_slider_ctrl->setEnabled(!mini_controls); +			media_play_slider_panel->setVisible(!mini_controls); +			media_play_slider_panel->setEnabled(!mini_controls);  			volume_ctrl->setVisible(has_focus);  			volume_up_ctrl->setVisible(has_focus); @@ -406,8 +407,8 @@ void LLPanelPrimMediaControls::updateShape()  			media_stop_ctrl->setVisible(FALSE);  			media_address_ctrl->setVisible(has_focus && !mini_controls);  			media_address_ctrl->setEnabled(has_focus && !mini_controls); -			media_play_slider_ctrl->setVisible(FALSE); -			media_play_slider_ctrl->setEnabled(FALSE); +			media_play_slider_panel->setVisible(FALSE); +			media_play_slider_panel->setEnabled(FALSE);  			volume_ctrl->setVisible(FALSE);  			volume_up_ctrl->setVisible(FALSE); @@ -594,9 +595,9 @@ void LLPanelPrimMediaControls::updateShape()  			mLastCursorPos = cursor_pos_window;  		} -		if(isMouseOver()) +		if(isMouseOver() || hasFocus())  		{ -			// Never fade the controls if the mouse is over them. +			// Never fade the controls if the mouse is over them or they have keyboard focus.  			mFadeTimer.stop();  		}  		else if(!mClearFaceOnFade && (mInactivityTimer.getElapsedTimeF32() < mInactiveTimeout)) @@ -629,9 +630,13 @@ void LLPanelPrimMediaControls::draw()  		if(mFadeTimer.getElapsedTimeF32() >= mControlFadeTime)  		{ -			setVisible(FALSE);  			if(mClearFaceOnFade)  			{ +				// Hiding this object makes scroll events go missing after it fades out  +				// (see DEV-41755 for a full description of the train wreck). +				// Only hide the controls when we're untargeting. +				setVisible(FALSE); +  				mClearFaceOnFade = false;  				mTargetImplID = LLUUID::null;  				mTargetObjectID = LLUUID::null; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 7c17699bf9..304f1dffaf 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -732,7 +732,47 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  				{  					tooltip_msg.append( nodep->mName );  				} - +				 +				bool is_time_based_media = false; +				bool is_web_based_media = false; +				bool is_media_playing = false; +				 +				// Does this face have media? +				const LLTextureEntry* tep = hover_object->getTE(mHoverPick.mObjectFace); +				 +				if(tep) +				{ +					const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +					if (mep) +					{ +						viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL; +						LLPluginClassMedia* media_plugin = NULL; +				 +						if (media_impl.notNull() && (media_impl->hasMedia())) +						{ +							LLStringUtil::format_map_t args; +					 +							media_plugin = media_impl->getMediaPlugin(); +							if(media_plugin) +							{	if(media_plugin->pluginSupportsMediaTime()) +								{ +									is_time_based_media = true; +									is_web_based_media = false; +									args["[CurrentURL]"] =  media_impl->getMediaURL(); +									is_media_playing = media_impl->isMediaPlaying(); +								} +								else +								{ +									is_time_based_media = false; +									is_web_based_media = true; +									args["[CurrentURL]"] =  media_plugin->getLocation(); +								} +								//tooltip_msg.append(LLTrans::getString("CurrentURL", args)); +							} +						} +					} +				} +				  				bool needs_tip = needs_tooltip(nodep);  				if (show_all_object_tips || needs_tip) @@ -741,8 +781,13 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  					mPick = mHoverPick;  					LLToolTipMgr::instance().show(LLToolTip::Params()  						.message(tooltip_msg) -						.image(LLUI::getUIImage("Info")) -						.click_callback(boost::bind(showObjectInspector, hover_object->getID())) +						.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)); @@ -925,6 +970,20 @@ static void show_inspector(const char* inspector, const char* param, const LLUUI  	LLFloaterReg::showInstance(inspector, params);  } + +static void show_inspector(const char* inspector,  LLSD& params) +{ +	if (LLToolTipMgr::instance().toolTipVisible()) +	{ +		LLRect rect = LLToolTipMgr::instance().getToolTipRect(); +		params["pos"]["x"] = rect.mLeft; +		params["pos"]["y"] = rect.mTop; +	} +	 +	LLFloaterReg::showInstance(inspector, params); +} + +  // static  void LLToolPie::showAvatarInspector(const LLUUID& avatar_id)  { @@ -937,6 +996,114 @@ void LLToolPie::showObjectInspector(const LLUUID& object_id)  	show_inspector("inspect_object", "object_id", object_id);  } + +// static +void LLToolPie::showObjectInspector(const LLUUID& object_id, const S32& object_face) +{ +	LLSD params; +	params["object_id"] = object_id; +	params["object_face"] = object_face; +	show_inspector("inspect_object", params); +} + +// static +void LLToolPie::playCurrentMedia(const LLPickInfo& info) +{ +	//FIXME: how do we handle object in different parcel than us? +	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); +	if (!parcel) return; +	 +	LLPointer<LLViewerObject> objectp = info.getObject(); +	 +	// Early out cases.  Must clear media hover.  +	// did not hit an object or did not hit a valid face +	if ( objectp.isNull() || +		info.mObjectFace < 0 ||  +		info.mObjectFace >= objectp->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = objectp->getTE(info.mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	LLPluginClassMedia* media_plugin = NULL; +	 +//	if (gSavedSettings.getBOOL("MediaOnAPrimUI")) +//	{		 +		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +		 +		if(media_impl.notNull() && media_impl->hasMedia()) +		{ +			media_plugin = media_impl->getMediaPlugin(); +			 +			if (media_plugin && media_plugin->pluginSupportsMediaTime()) +			{ +				if(media_impl->isMediaPlaying()) +				{ +					media_impl->pause(); +				} +				else //if(media_impl->isMediaPaused()) +				{ +					media_impl->play(); +				} +				 +			} +					 +		} +//	 } + +} + +// static +void LLToolPie::VisitHomePage(const LLPickInfo& info) +{ +	//FIXME: how do we handle object in different parcel than us? +	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); +	if (!parcel) return; +	 +	LLPointer<LLViewerObject> objectp = info.getObject(); +	 +	// Early out cases.  Must clear media hover.  +	// did not hit an object or did not hit a valid face +	if ( objectp.isNull() || +		info.mObjectFace < 0 ||  +		info.mObjectFace >= objectp->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = objectp->getTE(info.mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	LLPluginClassMedia* media_plugin = NULL; +	 +	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	 +	if(media_impl.notNull() && media_impl->hasMedia()) +	{ +		media_plugin = media_impl->getMediaPlugin(); +		 +		if (media_plugin && !(media_plugin->pluginSupportsMediaTime())) +		{ +			media_impl->navigateHome(); +		} +	} +} + +  void LLToolPie::handleDeselect()  {  	if(	hasMouseCapture() ) @@ -1035,12 +1202,17 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)  	// Does this face have media?  	const LLTextureEntry* tep = objectp->getTE(pick.mObjectFace); +	if(!tep) +		return false; +  	LLMediaEntry* mep = (tep->hasMedia()) ? tep->getMediaData() : NULL; +	 +	if(!mep) +		return false; +	  	viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL; -	if (tep  -		&& mep -		&& gSavedSettings.getBOOL("MediaOnAPrimUI") +	if (gSavedSettings.getBOOL("MediaOnAPrimUI")  		&& media_impl.notNull())  	{  		if (!LLViewerMediaFocus::getInstance()->isFocusedOnFace(pick.getObject(), pick.mObjectFace) ) @@ -1085,6 +1257,9 @@ bool LLToolPie::handleMediaHover(const LLPickInfo& pick)  	// Does this face have media?  	const LLTextureEntry* tep = objectp->getTE(pick.mObjectFace); +	if(!tep) +		return false; +	  	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;  	if (mep  		&& gSavedSettings.getBOOL("MediaOnAPrimUI")) diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index 5faedbec5a..3660c68552 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -78,6 +78,10 @@ public:  	static void			showAvatarInspector(const LLUUID& avatar_id);  	static void			showObjectInspector(const LLUUID& object_id); +	static void			showObjectInspector(const LLUUID& object_id, const S32& object_face); +	static void			playCurrentMedia(const LLPickInfo& info); +	static void			VisitHomePage(const LLPickInfo& info); +	  private:  	BOOL outsideSlop		(S32 x, S32 y, S32 start_x, S32 start_y);  	BOOL pickLeftMouseDownCallback(); diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 5d0b77d4fb..0ef4679057 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -48,6 +48,9 @@  #include "llviewerparcelmgr.h"  #include "llweb.h"  #include "llmediaentry.h" +#include "llkeyboard.h" +#include "lltoolmgr.h" +  //  // LLViewerMediaFocus  // @@ -114,13 +117,16 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac  	}  	else  	{ -		if(mFocusedImplID != LLUUID::null) +		if(mFocusedImplID.notNull())  		{  			if(mMediaControls.get())  			{  				mMediaControls.get()->resetZoomLevel();  			} +		} +		if(hasFocus()) +		{  			gFocusMgr.setKeyboardFocus(NULL);  		} @@ -298,8 +304,9 @@ BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)          // the scrollEvent() API's x and y are not the same as handleScrollWheel's x and y.          // The latter is the position of the mouse at the time of the event          // The former is the 'scroll amount' in x and y, respectively. -        // All we have for 'scroll amount' here is 'clicks', and no mask. -		media_impl->getMediaPlugin()->scrollEvent(0, clicks, /*mask*/0); +        // All we have for 'scroll amount' here is 'clicks'. +		// We're also not passed the keyboard modifier mask, but we can get that from gKeyboard. +		media_impl->getMediaPlugin()->scrollEvent(0, clicks, gKeyboard->currentMask(TRUE));  		retval = TRUE;  	}  	return retval; @@ -307,6 +314,30 @@ BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)  void LLViewerMediaFocus::update()  { +	if(mFocusedImplID.notNull() || mFocusedObjectID.notNull()) +	{ +		// We have a focused impl/face. +		if(!getFocus()) +		{ +			// We've lost keyboard focus -- check to see whether the media controls have it +			if(mMediaControls.get() && mMediaControls.get()->hasFocus()) +			{ +				// the media controls have focus -- don't clear. +			} +			else +			{ +				// Someone else has focus -- back off. +				clearFocus(); +			} +		} +		else if(LLToolMgr::getInstance()->inBuildMode()) +		{ +			// Build tools are selected -- clear focus. +			clearFocus(); +		} +	} +	 +	  	LLViewerMediaImpl *media_impl = getFocusedMediaImpl();  	LLViewerObject *viewer_object = getFocusedObject();  	S32 face = mFocusedObjectFace; diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 287c997c65..6e22472153 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -408,7 +408,7 @@       reference="White" />      <color       name="MapAvatarColor" -     reference="White" /> +     reference="Green" />      <color       name="MapAvatarFriendColor"       reference="Unused?" /> diff --git a/indra/newview/skins/default/textures/containers/Accordion_Selected.png b/indra/newview/skins/default/textures/containers/Accordion_Selected.png Binary files differnew file mode 100644 index 0000000000..0616dea6a3 --- /dev/null +++ b/indra/newview/skins/default/textures/containers/Accordion_Selected.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 401f32c908..f0d27ac11d 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -6,6 +6,8 @@    <texture name="Accordion_ArrowOpened_Press" file_name="containers/Accordion_ArrowOpened_Press.png" preload="false" />    <texture name="Accordion_Off" file_name="containers/Accordion_Off.png" preload="false" />    <texture name="Accordion_Press" file_name="containers/Accordion_Press.png" preload="false" /> +  <texture name="Accordion_Over" file_name="containers/Accordion_Over.png" preload="false" /> +  <texture name="Accordion_Selected" file_name="containers/Accordion_Selected.png" preload="false" />  <texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 26d5d4bedf..88712bda5e 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -4,10 +4,10 @@   can_minimize="false"   height="275"   layout="topleft" + title="Buy L$"   name="buy currency"   help_topic="buy_linden_dollars"   single_instance="true" - title="Buy L$"   width="350">      <floater.string       name="buy_currency"> diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 01a1b95a9a..02cbef5987 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -3,7 +3,7 @@   legacy_header_height="18"   can_dock="true"   can_close="true" - can_minimize="true" + can_minimize="false"   center_horiz="true"   follows="bottom"   height="110" @@ -38,7 +38,7 @@          Fly Backwards (press Down Arrow or S)      </string>      <panel -     border="true"  +     border="false"        height="83"       follows="left|top"        layout="topleft" @@ -136,7 +136,7 @@      </panel>  <!-- Width and height of this panel should be synchronized with panel_stand_stop_flying.xml -->      <panel -     border="true"  +     border="false"        height="27"       layout="topleft"       left="0" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 603ff55e6d..fe492e0ae8 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -71,7 +71,7 @@ owner James Linden     width="150">  L$300,000    </text> -    <text +   <text     follows="all"     height="30"     left="8" @@ -84,24 +84,35 @@ This is a really long description for an object being as how it is at least 80 c    </text>    <!-- Overlapping buttons for all default actions.  Show "Buy" if    for sale, "Sit" if can sit, etc. --> +   <text +   follows="all" +   height="15" +   left_delta="0" +   name="object_media_url" +   top_pad="-5" +   width="291" +   max_length = "50"  +   use_ellipses="true" +   word_wrap="true"/>    +        <button -     follows="top|left" -     font="SansSerif" -     height="23" -     label="Buy" -     left="10" -     name="buy_btn" -     top="114" -     width="100" /> +   follows="top|left" +   font="SansSerif" +   height="20" +   label="Buy" +   left="10" +   name="buy_btn" +   top="114" +   width="75" />    <button     follows="top|left"     font="SansSerif" -   height="23" +   height="20"     label="Pay"     left_delta="0"     name="pay_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerif" @@ -110,16 +121,16 @@ This is a really long description for an object being as how it is at least 80 c     left_delta="0"     name="take_free_copy_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerifSmall" -   height="23" +   height="20"     label="Touch"     left_delta="0"     name="touch_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerif" @@ -128,17 +139,27 @@ This is a really long description for an object being as how it is at least 80 c     left_delta="0"     name="sit_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerifSmall" -   height="23" +   height="20"     label="Open"     left_delta="0"     name="open_btn"     top_delta="0" -   width="100" /> -  <!-- non-overlapping buttons here --> +   width="75" /> +  <icon +   name="secure_browsing" +   image_name="map_infohub.tga" +   left_delta="80" +   width="16" +   height="16" +   top_delta="2" +   tool_tip="Secure Browsing" +   follows="left|top"/>  +    + <!--  non-overlapping buttons here -->      <menu_button       follows="top|left"       height="18" diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index 9bd240eccc..a85c55f9b2 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,15 +1,14 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - border="true"   follows="all" - height="445" + height="412"   label="General"   class="panel_group_general"   layout="topleft" - left="1" + left="0" + top="0"   name="general_tab" - top="500" - width="280"> + width="313">      <panel.string       name="help_text">          The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -18,7 +17,7 @@ Hover your mouse over the options for more help.      </panel.string>      <panel.string       name="group_info_unchanged"> -        General group information has changed. +        General group information has changed      </panel.string>      <panel.string       name="incomplete_member_data_str"> @@ -28,42 +27,28 @@ Hover your mouse over the options for more help.       type="string"       follows="left|top"       left="5" -     height="75" +     height="60"       layout="topleft"       max_length="511"       name="charter"       top="5" -     width="260" +     width="303"       word_wrap="true"> -        Group Charter +     Group Charter      </text_editor> -    <text -      follows="left|top" -     type="string" -     font="SansSerifBig" -     tool_tip="Owners are shown in bold." -     height="16" -     layout="topleft" -     left="5" -     name="text_owners_and_visible_members" -     text_color="EmphasisColor" -     top_pad="10" -     width="270"> -        Members -    </text>      <name_list       column_padding="0"       draw_heading="true"       follows="left|top" -     heading_height="14" -     height="80" +     heading_height="16" +     height="160"       layout="topleft"       left_delta="0"       name="visible_members"       top_pad="0" -     width="263"> +     width="303">          <name_list.columns -         label="Member Name" +         label="Member"           name="name"           relative_width="0.6" />          <name_list.columns @@ -71,27 +56,16 @@ Hover your mouse over the options for more help.           name="title"           relative_width="0.4" />        </name_list> -    <text -      follows="left|top" -      height="16" -     type="string" -     text_color="EmphasisColor" -     top_pad="10" -     font="SansSerifBig" -     layout="topleft" -     name="text_group_preferences"> -        Group Preferences -    </text>           <text           follows="left|top"           type="string" -         height="16" +         height="14"           layout="topleft"           left_delta="0"           name="active_title_label" -         top_pad="8" -         width="240"> -            My Active Title +         top_pad="5" +         width="303"> +            My Title          </text>          <combo_box           follows="left|top" @@ -100,58 +74,58 @@ Hover your mouse over the options for more help.           left_delta="0"           name="active_title"           tool_tip="Sets the title that appears in your avatar's name tag when this group is active." -         top_pad="0" -         width="240" /> +         top_pad="2" +         width="303" />          <check_box           height="16"           font="SansSerifSmall"           label="Receive notices"           layout="topleft" -         left_delta="0" +         left="5"           name="receive_notices"           tool_tip="Sets whether you want to receive Notices from this group.  Uncheck this box if this group is spamming you."           top_pad="5" -         width="240" /> +         width="303" />          <check_box           height="16"           label="Show in my profile"           layout="topleft" -         left_delta="0" +         left="5"           name="list_groups_in_profile"           tool_tip="Sets whether you want to show this group in your profile"           top_pad="5" -         width="240" /> +         width="303" />          <panel           background_visible="true"           bevel_style="in"           border="true"           bg_alpha_color="FloaterUnfocusBorderColor"           follows="left|top" -         height="125" +         height="93"           layout="topleft" -         left_delta="0" +         left="5"           name="preferences_container" -         top_pad="10" -         width="263"> +         top_pad="5" +         width="303">          <check_box           follows="right|top"           height="16"           label="Open enrollment"           layout="topleft" -         left_delta="0" +         left="10"           name="open_enrollement"           tool_tip="Sets whether this group allows new members to join without being invited."           top_pad="5"           width="90" />          <check_box           height="16" -         label="Enrollment fee:" +         label="Enrollment fee"           layout="topleft"           left_delta="0"           name="check_enrollment_fee"           tool_tip="Sets whether to require an enrollment fee to join the group"           top_pad="5" -         width="90" /> +         width="300" />          <spinner           decimal_digits="0"           follows="left|top" @@ -161,43 +135,38 @@ Hover your mouse over the options for more help.           label_width="20"           label="L$"           layout="topleft" -         left="25" +         right="-10"           max_val="99999" -         top_pad="5" +         left_pad="2"           name="spin_enrollment_fee"           tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." -         top_delta="-2"           width="105" />          <check_box           height="16"           initial_value="true"           label="Show in search"           layout="topleft" -         left="4" +         left="10"           name="show_in_group_list"           tool_tip="Let people see this group in search results"           top_pad="4" -         width="90" /> +         width="300" />          <combo_box           height="20"           layout="topleft"           left_delta="0"           name="group_mature_check"           tool_tip="Sets whether your group information is considered mature" -         top_pad="10" -         width="240"> -            <combo_box.item -             label="- Select Mature -" -             name="select_mature" -             value="Select" /> -            <combo_box.item -             label="Mature Content" -             name="mature" -             value="Mature" /> +         top_pad="5" +         width="190">              <combo_box.item               label="PG Content"               name="pg"               value="Not Mature" /> -        </combo_box>   +             <combo_box.item +             label="Mature Content" +             name="mature" +             value="Mature" /> +        </combo_box>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index da6cf8891a..d8d47c4008 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -1,20 +1,22 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -  <panel - 	follows="left|top|right|bottom" -	height="660" -	label="Group Info" - 	layout="topleft" -	name="panel_group_info" -	border="false" -	width="300"> +background_visible="true" + follows="all" + height="570" + label="Group Info" + layout="topleft" + min_height="350" + left="0" + top="20" + name="GroupInfo" + width="333">      <panel.string       name="default_needs_apply_text"> -        There are unapplied changes on the current tab. +        There are unsaved changes to the current tab      </panel.string>      <panel.string       name="want_apply_text"> -        Do you want to apply these changes? +        Do you want to save these changes?      </panel.string>      <panel.string       name="group_join_btn"> @@ -25,34 +27,34 @@          Free      </panel.string>      <button -     layout="topleft" -     name="back" -     right="-9" -     top="0" -     width="25" -     height="25" -     label=""       follows="top|right" +     height="23"       image_overlay="BackArrow_Off" -     tab_stop="false" /> -    <text       layout="topleft" -     top="0" +     name="back" +     picture_style="true"       left="10" -     width="250" -     height="20" +     tab_stop="false" +     top="2" +     width="23" /> +    <text +     follows="top|left|right"       font="SansSerifHugeBold" +     height="26" +     layout="topleft" +     left_pad="10" +     name="group_name"       text_color="white" -     follows="top|left|right" -     mouse_opaque="true" -     use_ellipses="true" -     name="group_name">(Loading...)</text> +     top="0" +     value="(Loading...)" +     use_elipsis="true" +     width="300" />      <line_editor       follows="left|top"       font="SansSerif"       label="Type your new group name here"       layout="topleft" -     left_delta="0" +     left_delta="10"       max_length="35"       name="group_name_editor"       top_delta="5" @@ -64,7 +66,7 @@       height="113"       label=""       layout="topleft" -	 left="10" +     left="20"       name="insignia"       tool_tip="Click to choose a picture"       top_pad="5" @@ -79,7 +81,7 @@       name="prepend_founded_by"       top_delta="0"       width="140"> -      Founded by: +      Founder:      </text>      <name_box       follows="left|top" @@ -88,10 +90,12 @@       layout="topleft"       left_delta="0"       name="founder_name" -     top_pad="10" +     top_pad="2"       use_ellipses="true"       width="140" />      <text +    font="SansSerifBig" +    text_color="EmphasisColor"       type="string"       follows="left|top"       height="16" @@ -106,22 +110,84 @@      <button       follows="left|top"       left_delta="0" -     top_pad="10" -     height="20" +     top_pad="6" +     height="23"       label="Join now!"       label_selected="Join now!"       name="btn_join"       visible="true" -     width="85" /> -    <button -     top="632" -     height="20" -     font="SansSerifSmall" -     label="Save" -     label_selected="Save" -     name="btn_apply" -     left="5" -     width="65" /> +     width="120" /> +   <accordion +             follows="all" +             height="405" +             layout="topleft" +             left="0" +             name="groups_accordion" +             top_pad="20" +             width="333"> +             <accordion_tab +                 can_resize="false" +                 layout="topleft" +                 name="tab_general" +                 title="General"> +        <panel +        border="false" +         filename="panel_group_general.xml" +         layout="topleft" +         left="0" +         help_topic="group_general_tab" +         name="general_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_roles" +                 title="Roles"> +        <panel +        border="false" +         filename="panel_group_roles.xml" +         layout="topleft" +         left="0" +         help_topic="group_roles_tab" +         name="roles_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_notices" +                 title="Notices"> +        <panel +         filename="panel_group_notices.xml" +         layout="topleft" +         left="0" +         help_topic="group_notices_tab" +         name="notices_tab" +         top="0" +         width="333" /> +         </accordion_tab> +                  <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_notices" +                 title="Land/Assets"> +        <panel +        border="false" +         filename="panel_group_land_money.xml" +         layout="topleft" +         left="0" +         help_topic="group_land_money_tab" +         name="land_money_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         </accordion>      <button       follows="top|left"       height="20" @@ -129,41 +195,31 @@       layout="topleft"       name="btn_refresh"       picture_style="true" -     top="632" -     left="75" +     left="5"       width="20" /> +     <button +     height="20" +     font="SansSerifSmall" +     label="Save" +     label_selected="Save" +     name="btn_apply" +     left_pad="5" +     width="65" />      <button -     top="632"       height="20"       label="Create"       label_selected="Create"       name="btn_create" -     left="5" +     left_pad="5"       visible="false"       width="65" />      <button -	 top="632" -	 left="75"	  +     left_pad="5"       height="20"       label="Cancel"       label_selected="Cancel"       name="btn_cancel"       visible="false"       width="65" /> -      <accordion layout="topleft" left="2" width="296" top="135" height="500" follows="all" name="group_accordion"> -		<accordion_tab min_height="445" title="General" name="group_general_tab"> -        	<panel class="panel_group_general" filename="panel_group_general.xml" name="group_general_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="380" title="Members & Roles" name="group_roles_tab" expanded="False" can_resize="false"> -        	<panel class="panel_group_roles" filename="panel_group_roles.xml" name="group_roles_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="530" title="Notices" name="group_notices_tab" expanded="False" can_resize="false"> -			<panel class="panel_group_notices" filename="panel_group_notices.xml" name="group_notices_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="270" title="Land & L$" name="group_land_tab" expanded="False" can_resize="false"> -			<panel class="panel_group_land_money" filename="panel_group_land_money.xml" name="group_land_tab_panel"/> -		</accordion_tab> -	  </accordion> -  </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index af1919bd8f..e2e4ca8b8f 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,20 +1,20 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - border="true" - height="490" + border="false" + height="412"   label="Members & Roles"   layout="topleft" - left="1" + left="0" + top="0"   name="roles_tab" - top="490" - width="280"> + width="313">      <panel.string       name="default_needs_apply_text"> -        There are unapplied changes on the current sub-tab. +        There are unsaved changes to the current tab      </panel.string>      <panel.string       name="want_apply_text"> -        Do you want to apply these changes? +        Do you want to save these changes?      </panel.string>      <panel.string       name="help_text" /> @@ -160,17 +160,19 @@          </text>      </panel> -->      <tab_container +    border="true"       follows="left|top" -     height="180" +     height="260"       layout="topleft"       left="5"       name="roles_tab_container"       tab_position="top" -     top="10" -     width="265"> +     tab_height="20" +     top="0" +     width="303">          <panel -         border="true" -         height="165" +         border="false" +         height="260"           label="Members"           layout="topleft"           left="1" @@ -179,7 +181,7 @@           tool_tip="Members"           top="17"           class="panel_group_members_subtab" -         width="265"> +         width="300">              <panel.string               name="help_text">                  You can add or remove Roles assigned to Members. @@ -190,77 +192,56 @@ clicking on their names.           layout="topleft"           top="10"           left="4" -         width="255" +         width="280"           height="20"           follows="left|top|right"           max_length="250"           label="Filter Members"           name="filter_input"           font="SansSerif" /> -            <!--<line_editor -             border_style="line" -             border_thickness="1" -             follows="left|top" -             height="16" -             layout="topleft" -             left="4" -             max_length="63" -             name="search_text" -             top="10" -             width="90" /> -            <button -             font="SansSerifSmall" -             height="20" -             label="Search" -             layout="topleft" -             left_pad="5" -             name="search_button" -             top_delta="-2" -             width="80" /> -            <button +          <!--  <button               enabled="false"               font="SansSerifSmall"               height="20"               label="Show All"               layout="topleft" -             left_pad="0" +             left_pad="-90"               name="show_all_button" -             top_delta="0" -             width="80" /> --> +             top_delta="-6" +             width="80" />-->              <name_list               column_padding="0"               draw_heading="true" -             heading_height="14" -             height="100" +             heading_height="20" +             height="160"               follows="left|top"               layout="topleft" -             left="4" +             left="0"               multi_select="true"               name="member_list" -             top_pad="6" -             width="255"> +             top_pad="2" +             width="300">                  <name_list.columns                   label="Member"                   name="name" -                 width="90" /> +               relative_width="0.45" />                  <name_list.columns                   label="Donations"                   name="donated" -                 width="95" /> +         relative_width="0.3" />                  <name_list.columns                   label="Online"                   name="online" -                 width="80" /> +         relative_width="0.2" />              </name_list>              <button               height="20"               font="SansSerifSmall"               label="Invite"               layout="topleft" -             left_delta="0"               name="member_invite" -             top_pad="6" -             width="125" /> +             top_pad="3" +             width="100" />              <button               height="20"               font="SansSerifSmall" @@ -268,18 +249,17 @@ clicking on their names.               layout="topleft"               left_pad="5"               name="member_eject" -             top_delta="0" -             width="125" /> +             width="100" />              <icon               height="16" -             image_name="inv_folder_plain_closed.tga" +             image_name="Inv_FolderClosed"               layout="topleft"               name="power_folder_icon"               visible="false"               width="16" />          </panel>          <panel -         border="true" +         border="false"           height="164"           label="Roles"           layout="topleft" @@ -292,7 +272,7 @@ clicking on their names.              <panel.string               name="help_text">                  Roles have a title and an allowed list of Abilities -that Members can perform. Members can belong to  +that Members can perform. Members can belong to  one or more Roles. A group can have up to 10 Roles,  including the Everyone and Owner Roles.              </panel.string> @@ -302,7 +282,7 @@ including the Everyone and Owner Roles.              </panel.string>              <panel.string               name="power_folder_icon"> -                inv_folder_plain_closed.tga +                Inv_FolderClosed              </panel.string>              <panel.string               name="power_all_have_icon"> @@ -316,7 +296,7 @@ including the Everyone and Owner Roles.              layout="topleft"              top="10"              left="4" -            width="255" +            width="260"              height="20"              follows="left|top|right"              max_length="250" @@ -357,13 +337,13 @@ including the Everyone and Owner Roles.               column_padding="0"               draw_heading="true"               follows="left|top" -             heading_height="14" -             height="100" +             heading_height="20" +             height="150"               layout="topleft"               left="4"               name="role_list"               top_pad="4" -             width="255"> +             width="300">                  <scroll_list.columns                   label="Role"                   name="name" @@ -397,7 +377,7 @@ including the Everyone and Owner Roles.               width="125" />          </panel>          <panel -         border="true" +         border="false"           height="164"           label="Abilities"           layout="topleft" @@ -407,7 +387,7 @@ including the Everyone and Owner Roles.           class="panel_group_actions_subtab"           top="17"           tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." -         width="265"> +         width="300">              <panel.string               name="help_text">                  Abilities allow Members in Roles to do specific @@ -486,13 +466,13 @@ things in this group. There's a broad variety of Abilities.          </panel>      </tab_container>      <panel -     height="190" +     height="150"       layout="topleft"       follows="left|top"       left="10"       name="members_footer" -     top_pad="10" -     width="265"> +     top_pad="2" +     width="300">          <text           type="string"           font="SansSerif" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4eacd72a7d..e842517853 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -74,6 +74,7 @@  	<string name="TooltipTeleportUrl">Click to teleport to this location</string>  	<string name="TooltipObjectIMUrl">Click to view this object's description</string>  	<string name="TooltipSLAPP">Click to run the secondlife:// command</string> +	<string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />  	<!-- ButtonToolTips, llfloater.cpp -->  	<string name="BUTTON_CLOSE_DARWIN">Close (⌘W)</string> @@ -636,7 +637,7 @@ Sets the script timer to zero  float llGetAndResetTime()  Returns the script time in seconds and then resets the script timer to zero  	</string> -	<string name="LSLTipText_llSound" translate="false"> +	<string name="LSLTipText_llSoplayund" translate="false">  llSound(string sound, float volume, integer queue, integer loop)  Plays sound at volume and whether it should loop or not  	</string> @@ -2187,6 +2188,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh  	<!-- media -->  	<string name="Multiple Media">Multiple Media</string> +	<string name="Play Media">Play/Pause Media</string>  	<!-- OSMessageBox messages -->  	<string name="MBCmdLineError"> diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml index dabcb1038b..fcfe89c653 100644 --- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml @@ -9,4 +9,5 @@      header_image="Accordion_Off"      header_image_over="Accordion_Over"      header_image_pressed="Accordion_Press" +    header_image_selected="Accordion_Selected"      /> diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml index 127f0f40e8..1bd5a5bda2 100644 --- a/indra/newview/skins/default/xui/en/widgets/panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/panel.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <!-- Optional parameters: +  border - show border around panel    bg_opaque_image - image name for "in-front" panel look    bg_alpha_image - image name for "in-back" or transparent panel look  -->  | 
