diff options
Diffstat (limited to 'indra')
104 files changed, 1384 insertions, 567 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 254a44287f..8918fc3018 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -157,7 +157,6 @@ set(viewer_SOURCE_FILES      llfloaterbuycontents.cpp      llfloaterbuycurrency.cpp      llfloaterbuyland.cpp -    llfloatercall.cpp      llfloatercamera.cpp      llfloaterchat.cpp      llfloaterchatterbox.cpp @@ -228,6 +227,7 @@ set(viewer_SOURCE_FILES      llgesturemgr.cpp      llglsandbox.cpp      llgroupactions.cpp +    llgroupiconctrl.cpp      llgrouplist.cpp      llgroupmgr.cpp      llhomelocationresponder.cpp @@ -302,7 +302,6 @@ set(viewer_SOURCE_FILES      lloutputmonitorctrl.cpp      lloverlaybar.cpp      llpanelavatar.cpp -    llpanelavatarrow.cpp      llpanelavatartag.cpp      llpanelblockedlist.cpp      llpanelclassified.cpp @@ -516,7 +515,6 @@ set(viewer_SOURCE_FILES      llvoground.cpp      llvoicechannel.cpp      llvoiceclient.cpp -    llvoicecontrolpanel.cpp      llvoiceremotectrl.cpp      llvoicevisualizer.cpp      llvoinventorylistener.cpp @@ -668,7 +666,6 @@ set(viewer_HEADER_FILES      llfloaterbuycontents.h      llfloaterbuycurrency.h      llfloaterbuyland.h -    llfloatercall.h      llfloatercamera.h      llfloaterchat.h      llfloaterchatterbox.h @@ -738,6 +735,7 @@ set(viewer_HEADER_FILES      llfriendcard.h      llgesturemgr.h      llgroupactions.h +    llgroupiconctrl.h      llgrouplist.h      llgroupmgr.h      llhomelocationresponder.h @@ -807,7 +805,6 @@ set(viewer_HEADER_FILES      lloutputmonitorctrl.h      lloverlaybar.h      llpanelavatar.h -    llpanelavatarrow.h      llpanelavatartag.h      llpanelblockedlist.h      llpanelclassified.h @@ -1022,7 +1019,6 @@ set(viewer_HEADER_FILES      llvoground.h      llvoicechannel.h      llvoiceclient.h -    llvoicecontrolpanel.h      llvoiceremotectrl.h      llvoicevisualizer.h      llvoinventorylistener.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ba78d80ad1..e24e1a8605 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -265,6 +265,17 @@        <key>Value</key>        <real>0.5</real>      </map> +    <key>AudioLevelWind</key> +    <map> +      <key>Comment</key> +      <string>Audio level of wind noise when standing still</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>F32</string> +      <key>Value</key> +      <real>0.5</real> +    </map>  	<key>AudioSteamingMedia</key>      <map>        <key>Comment</key> @@ -2344,6 +2355,17 @@        <key>Value</key>        <string>89556747-24cb-43ed-920b-47caed15465f</string>      </map> +    <key>DefaultUploadCost</key> +    <map> +      <key>Comment</key> +      <string>Default sound/image/file upload cost(in case economy data is not available).</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>U32</string> +      <key>Value</key> +      <integer>10</integer> +    </map>      <key>DisableCameraConstraints</key>      <map>        <key>Comment</key> @@ -3224,6 +3246,17 @@        <key>Value</key>        <real>0.75</real>      </map> +    <key>FolderIndentation</key> +    <map> +      <key>Comment</key> +      <string>Number of pixels to indent subfolders in inventory</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <integer>8</integer> +    </map>      <key>FolderLoadingMessageWaitTime</key>      <map>        <key>Comment</key> @@ -8727,6 +8760,17 @@        <key>Value</key>        <real>20.0</real>      </map> +    <key>TextureDecodeDisabled</key> +    <map> +      <key>Comment</key> +      <string>If TRUE, do not fetch and decode any textures</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>TextureDisable</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 628982973c..d2a56f65dd 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -747,7 +747,12 @@ void LLAgent::setFlying(BOOL fly)  {  	if (mAvatarObject.notNull())  	{ -		if(mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != mAvatarObject->mSignaledAnimations.end()) +		// *HACK: Don't allow to start the flying mode if we got ANIM_AGENT_STANDUP signal +		// because in this case we won't get a signal to start avatar flying animation and +		// it will be walking with flying mode "ON" indication. However we allow to switch +		// the flying mode off if we get ANIM_AGENT_STANDUP signal. See process_avatar_animation(). +		// See EXT-2781. +		if(fly && mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != mAvatarObject->mSignaledAnimations.end())  		{  			return;  		} diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 79ba3fb51d..dc1598aacd 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -100,6 +100,7 @@ public:  	LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false) {}  	~LLLibraryOutfitsFetch() {}  	virtual void done();	 +	void doneIdle();  protected:  	void folderDone(void);  	void outfitsDone(void); @@ -2084,51 +2085,50 @@ void LLAgentWearables::populateMyOutfitsFolder(void)  {	  	LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch(); -	// What we do here is get the complete information on the items in -	// the inventory, and set up an observer that will wait for that to -	// happen. +	// Get the complete information on the items in the inventory and  +	// setup an observer that will wait for that to happen.  	LLInventoryFetchDescendentsObserver::folder_ref_t folders;  	const LLUUID my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);  	folders.push_back(my_outfits_id); +	gInventory.addObserver(outfits);  	outfits->fetchDescendents(folders); -	if(outfits->isEverythingComplete()) -	{ -		// everything is already here - call done. -		outfits->done(); -	} -	else -	{ -		// it's all on it's way - add an observer, and the inventory -		// will call done for us when everything is here. -		gInventory.addObserver(outfits); -	}  }  void LLLibraryOutfitsFetch::done()  { -	switch (mCurrFetchStep){ +	// Delay this until idle() routine, since it's a heavy operation and +	// we also can't have it run within notifyObservers. +	doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); +	gInventory.removeObserver(this); // Prevent doOnIdle from being added twice. +} + +void LLLibraryOutfitsFetch::doneIdle() +{ +	gInventory.addObserver(this); // Add this back in since it was taken out during ::done() +	switch (mCurrFetchStep) +	{  		case LOFS_FOLDER: -			mCurrFetchStep = LOFS_OUTFITS;  			folderDone();  			break;  		case LOFS_OUTFITS: -			mCurrFetchStep = LOFS_CONTENTS;  			outfitsDone();  			break;  		case LOFS_CONTENTS: -			// No longer need this observer hanging around. -			gInventory.removeObserver(this);  			contentsDone();  			break;  		default: -			gInventory.removeObserver(this); -			delete this; -			return; +			llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl; +			mOutfitsPopulated = TRUE; +			break;  	} + +	// We're completely done.  Cleanup.  	if (mOutfitsPopulated)  	{ +		gInventory.removeObserver(this);  		delete this; +		return;  	}  } @@ -2142,7 +2142,6 @@ void LLLibraryOutfitsFetch::folderDone(void)  	if (cat_array.count() > 0 || wearable_array.count() > 0)  	{  		mOutfitsPopulated = true; -		gInventory.removeObserver(this);  		return;  	} @@ -2151,17 +2150,11 @@ void LLLibraryOutfitsFetch::folderDone(void)  	mCompleteFolders.clear(); -	// What we do here is get the complete information on the items in -	// the inventory, and set up an observer that will wait for that to -	// happen. +	// Get the complete information on the items in the inventory.  	LLInventoryFetchDescendentsObserver::folder_ref_t folders;  	folders.push_back(library_clothing_id); +	mCurrFetchStep = LOFS_OUTFITS;  	fetchDescendents(folders); -	if(isEverythingComplete()) -	{ -		// everything is already here - call done. -		outfitsDone(); -	}  }  void LLLibraryOutfitsFetch::outfitsDone(void) @@ -2172,20 +2165,23 @@ void LLLibraryOutfitsFetch::outfitsDone(void)  								  LLInventoryModel::EXCLUDE_TRASH);  	LLInventoryFetchDescendentsObserver::folder_ref_t folders; -	for(S32 i = 0; i < cat_array.count(); ++i) +	 +	llassert(cat_array.count() > 0); +	for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin(); +		 iter != cat_array.end(); +		 ++iter)  	{ -		if (cat_array.get(i)->getName() != "More Outfits" && cat_array.get(i)->getName() != "Ruth"){ -			folders.push_back(cat_array.get(i)->getUUID()); -			mOutfits.push_back( std::make_pair(cat_array.get(i)->getUUID(), cat_array.get(i)->getName() )); +		const LLViewerInventoryCategory *cat = iter->get(); +		if (cat->getName() != "More Outfits" && cat->getName() != "Ruth") +		{ +			folders.push_back(cat->getUUID()); +			mOutfits.push_back(std::make_pair(cat->getUUID(), cat->getName()));  		}  	}  	mCompleteFolders.clear(); + +	mCurrFetchStep = LOFS_CONTENTS;  	fetchDescendents(folders); -	if(isEverythingComplete()) -	{ -		// everything is already here - call done. -		contentsDone(); -	}  }  void LLLibraryOutfitsFetch::contentsDone(void) @@ -2197,9 +2193,7 @@ void LLLibraryOutfitsFetch::contentsDone(void)  		LLUUID folder_id = gInventory.createNewCategory(parent_id,  														LLFolderType::FT_OUTFIT,  														mOutfits[i].second); -		  		LLAppearanceManager::getInstance()->shallowCopyCategory(mOutfits[i].first, folder_id, NULL); -		gInventory.notifyObservers();  	}  	mOutfitsPopulated = true;  } diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 44cbbbb6b2..42ae122ff9 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -38,7 +38,6 @@  #include "llavatarconstants.h"  #include "llcallingcard.h" // for LLAvatarTracker  #include "llavataractions.h" -#include "llimview.h"  #include "llmenugl.h"  #include "lluictrlfactory.h" diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index b3ef6464f6..5df73a994e 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -165,6 +165,7 @@ void LLAvatarList::clear()  {  	getIDs().clear();  	setDirty(true); +	LLFlatListView::clear();  }  void LLAvatarList::setNameFilter(const std::string& filter) diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 8bc11b0c1c..6945ac6932 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -165,7 +165,7 @@ void LLAvatarListItem::setOnline(bool online)  	mOnlineStatus = (EOnlineStatus) online;  	// Change avatar name font style depending on the new online status. -	setStyle(online ? IS_ONLINE : IS_OFFLINE); +	setState(online ? IS_ONLINE : IS_OFFLINE);  }  void LLAvatarListItem::setName(const std::string& name) @@ -178,7 +178,7 @@ void LLAvatarListItem::setHighlight(const std::string& highlight)  	setNameInternal(mAvatarName->getText(), mHighlihtSubstring = highlight);  } -void LLAvatarListItem::setStyle(EItemStyle item_style) +void LLAvatarListItem::setState(EItemState item_style)  {  	item_style_map_t& item_styles_params_map = getItemStylesParams(); diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 79303b55cc..96097bc9b5 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -46,14 +46,14 @@ class LLAvatarIconCtrl;  class LLAvatarListItem : public LLPanel, public LLFriendObserver  {  public: -	typedef enum e_item_style_type { +	typedef enum e_item_state_type {  		IS_DEFAULT,  		IS_VOICE_INVITED,  		IS_VOICE_JOINED,  		IS_VOICE_LEFT,  		IS_ONLINE,  		IS_OFFLINE, -	} EItemStyle; +	} EItemState;  	class ContextMenu  	{ @@ -82,7 +82,7 @@ public:  	void setOnline(bool online);  	void setName(const std::string& name);  	void setHighlight(const std::string& highlight); -	void setStyle(EItemStyle item_style); +	void setState(EItemState item_style);  	void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);  	void setLastInteractionTime(U32 secs_since);  	//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly @@ -129,10 +129,10 @@ private:  	std::string formatSeconds(U32 secs); -	typedef std::map<EItemStyle, LLStyle::Params> item_style_map_t; +	typedef std::map<EItemState, LLStyle::Params> item_style_map_t;  	static item_style_map_t& getItemStylesParams(); -	typedef std::map<EItemStyle, LLColor4> icon_color_map_t; +	typedef std::map<EItemState, LLColor4> icon_color_map_t;  	static icon_color_map_t& getItemIconColorMap();  	LLTextBox* mAvatarName; diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 1b4c274bfb..a402f59fa1 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -48,6 +48,8 @@  #include "llparticipantlist.h"  #include "llspeakers.h"  #include "lltransientfloatermgr.h" +#include "llviewerwindow.h" +#include "llvoicechannel.h"  static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids); @@ -99,8 +101,10 @@ BOOL LLCallFloater::LLAvatarListItemRemoveTimer::tick()  	return TRUE;  } +LLVoiceChannel* LLCallFloater::sCurrentVoiceCanel = NULL; +  LLCallFloater::LLCallFloater(const LLSD& key) -: LLDockableFloater(NULL, false, key) +: LLTransientDockableFloater(NULL, false, key)  , mSpeakerManager(NULL)  , mParticipants(NULL)  , mAvatarList(NULL) @@ -128,6 +132,7 @@ LLCallFloater::~LLCallFloater()  	mParticipants = NULL;  	mAvatarListRefreshConnection.disconnect(); +	mVoiceChannelStateChangeConnection.disconnect();  	// Don't use LLVoiceClient::getInstance() here   	// singleton MAY have already been destroyed. @@ -141,15 +146,16 @@ LLCallFloater::~LLCallFloater()  // virtual  BOOL LLCallFloater::postBuild()  { -	LLDockableFloater::postBuild(); +	LLTransientDockableFloater::postBuild();  	mAvatarList = getChild<LLAvatarList>("speakers_list");  	mAvatarListRefreshConnection = mAvatarList->setRefreshCompleteCallback(boost::bind(&LLCallFloater::onAvatarListRefreshed, this));  	childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this));  	mNonAvatarCaller = getChild<LLNonAvatarCaller>("non_avatar_caller"); +	mNonAvatarCaller->setVisible(FALSE); -	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_panel"); +	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_flyout_btn");  	setDockControl(new LLDockControl(  		anchor_panel, this, @@ -157,8 +163,8 @@ BOOL LLCallFloater::postBuild()  	initAgentData(); -	// update list for current session -	updateSession(); + +	connectToChannel(LLVoiceChannel::getCurrentVoiceChannel());  	return TRUE;  } @@ -192,7 +198,7 @@ void LLCallFloater::draw()  	if (mParticipants)  		mParticipants->updateRecentSpeakersOrder(); -	LLDockableFloater::draw(); +	LLTransientDockableFloater::draw();  }  // virtual @@ -211,6 +217,15 @@ void LLCallFloater::onChange()  	}  } +S32 LLCallFloater::notifyParent(const LLSD& info) +{ +	if("size_changes" == info["action"]) +	{ +		reshapeToFitContent(); +		return 1; +	} +	return LLDockableFloater::notifyParent(info); +}  //////////////////////////////////////////////////////////////////////////  /// PRIVATE SECTION @@ -306,17 +321,6 @@ void LLCallFloater::updateSession()  void LLCallFloater::refreshParticipantList()  { -	// lets forget states from the previous session -	// for timers... -	resetVoiceRemoveTimers(); - -	// ...and for speaker state -	mSpeakerStateMap.clear(); - -	delete mParticipants; -	mParticipants = NULL; -	mAvatarList->clear(); -  	bool non_avatar_caller = false;  	if (VC_PEER_TO_PEER == mVoiceType)  	{ @@ -361,21 +365,19 @@ void LLCallFloater::onAvatarListRefreshed()  	}  } +// static  void LLCallFloater::sOnCurrentChannelChanged(const LLUUID& /*session_id*/)  { -	// Don't update participant list if no channel info is available. -	// Fix for ticket EXT-3427 -	// @see LLParticipantList::~LLParticipantList() -	if(LLVoiceChannel::getCurrentVoiceChannel() &&  -		LLVoiceChannel::STATE_NO_CHANNEL_INFO == LLVoiceChannel::getCurrentVoiceChannel()->getState()) -	{ -		return; -	} +	LLVoiceChannel* channel = LLVoiceChannel::getCurrentVoiceChannel(); + +	// *NOTE: if signal was sent for voice channel with LLVoiceChannel::STATE_NO_CHANNEL_INFO +	// it sill be sent for the same channel again (when state is changed). +	// So, lets ignore this call. +	if (channel == sCurrentVoiceCanel) return; +  	LLCallFloater* call_floater = LLFloaterReg::getTypedInstance<LLCallFloater>("voice_controls"); -	// Forget speaker manager from the previous session to avoid using it after session was destroyed. -	call_floater->mSpeakerManager = NULL; -	call_floater->updateSession(); +	call_floater->connectToChannel(channel);  }  void LLCallFloater::updateTitle() @@ -573,23 +575,15 @@ void LLCallFloater::updateParticipantsVoiceState()  			// HAS LEFT the call.  			if ((getState(participant_id) == STATE_JOINED))  			{ -				if (mVoiceType == VC_LOCAL_CHAT) +				setState(item, STATE_LEFT); + +				LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(item->getAvatarId()); +				if (speaker.isNull())  				{ -					// Don't display avatars that aren't in our nearby chat range anymore as "left". Remove them immediately. -					removeVoiceLeftParticipant(participant_id); +					continue;  				} -				else -				{ -					setState(item, STATE_LEFT); - -					LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(item->getAvatarId()); -					if (speaker.isNull()) -					{ -						continue; -					} -					speaker->mHasLeftCurrentCall = TRUE; -				} +				speaker->mHasLeftCurrentCall = TRUE;  			}  			// If an avatarID is not found in a speakers list from VoiceClient and  			// a panel with this ID has a LEFT status this means that this person @@ -626,16 +620,16 @@ void LLCallFloater::setState(LLAvatarListItem* item, ESpeakerState state)  	switch (state)  	{  	case STATE_INVITED: -		item->setStyle(LLAvatarListItem::IS_VOICE_INVITED); +		item->setState(LLAvatarListItem::IS_VOICE_INVITED);  		break;  	case STATE_JOINED:  		removeVoiceRemoveTimer(item->getAvatarId()); -		item->setStyle(LLAvatarListItem::IS_VOICE_JOINED); +		item->setState(LLAvatarListItem::IS_VOICE_JOINED);  		break;  	case STATE_LEFT:  		{  			setVoiceRemoveTimer(item->getAvatarId()); -			item->setStyle(LLAvatarListItem::IS_VOICE_LEFT); +			item->setState(LLAvatarListItem::IS_VOICE_LEFT);  		}  		break;  	default: @@ -721,4 +715,141 @@ bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)  	return std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end();  } +void LLCallFloater::connectToChannel(LLVoiceChannel* channel) +{ +	mVoiceChannelStateChangeConnection.disconnect(); + +	sCurrentVoiceCanel = channel; + +	mVoiceChannelStateChangeConnection = sCurrentVoiceCanel->setStateChangedCallback(boost::bind(&LLCallFloater::onVoiceChannelStateChanged, this, _1, _2)); + +	updateState(channel->getState()); +} + +void LLCallFloater::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state) +{ +	updateState(new_state); +} + +void LLCallFloater::updateState(const LLVoiceChannel::EState& new_state) +{ +	LL_DEBUGS("Voice") << "Updating state: " << new_state << ", session name: " << sCurrentVoiceCanel->getSessionName() << LL_ENDL; +	if (LLVoiceChannel::STATE_CONNECTED == new_state) +	{ +		updateSession(); +	} +	else +	{ +		reset(); +	} +} + +void LLCallFloater::reset() +{ +	// lets forget states from the previous session +	// for timers... +	resetVoiceRemoveTimers(); + +	// ...and for speaker state +	mSpeakerStateMap.clear(); + +	delete mParticipants; +	mParticipants = NULL; +	mAvatarList->clear(); + +	// update floater to show Loading while waiting for data. +	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData")); +	mAvatarList->setVisible(TRUE); +	mNonAvatarCaller->setVisible(FALSE); + +	mSpeakerManager = NULL; +} + +void reshape_floater(LLCallFloater* floater, S32 delta_height) +{ +	// Try to update floater top side if it is docked(to bottom bar). +	// Try to update floater bottom side or top side if it is un-docked. +	// If world rect is too small, floater will not be reshaped at all. + +	LLRect floater_rect = floater->getRect(); +	LLRect world_rect = gViewerWindow->getWorldViewRectScaled(); + +	// floater is docked to bottom bar +	if(floater->isDocked()) +	{ +		// can update floater top side +		if(floater_rect.mTop + delta_height < world_rect.mTop) +		{ +			floater_rect.set(floater_rect.mLeft, floater_rect.mTop + delta_height,  +				floater_rect.mRight, floater_rect.mBottom); +		} +	} +	// floater is un-docked +	else +	{ +		// can update floater bottom side +		if( floater_rect.mBottom - delta_height >= world_rect.mBottom ) +		{ +			floater_rect.set(floater_rect.mLeft, floater_rect.mTop,  +				floater_rect.mRight, floater_rect.mBottom - delta_height); +		} +		// could not update floater bottom side, check if we can update floater top side +		else if( floater_rect.mTop + delta_height < world_rect.mTop ) +		{ +			floater_rect.set(floater_rect.mLeft, floater_rect.mTop + delta_height,  +				floater_rect.mRight, floater_rect.mBottom); +		} +	} + +	floater->reshape(floater_rect.getWidth(), floater_rect.getHeight()); +	floater->setRect(floater_rect); +} + +void LLCallFloater::reshapeToFitContent() +{ +	const S32 ITEM_HEIGHT = getParticipantItemHeight(); +	static const S32 MAX_VISIBLE_ITEMS = getMaxVisibleItems(); + +	static S32 items_pad = mAvatarList->getItemsPad(); +	S32 list_height = mAvatarList->getRect().getHeight(); +	S32 items_height = mAvatarList->getItemsRect().getHeight(); +	if(items_height <= 0) +	{ +		// make "no one near" text visible +		items_height = ITEM_HEIGHT + items_pad; +	} +	S32 max_list_height = MAX_VISIBLE_ITEMS * ITEM_HEIGHT + items_pad * (MAX_VISIBLE_ITEMS - 1); +	max_list_height += 2* mAvatarList->getBorderWidth(); + +	S32 delta = items_height - list_height;	 +	// too many items, don't reshape floater anymore, let scroll bar appear. +	if(items_height >  max_list_height) +	{ +		delta = max_list_height - list_height; +	} + +	reshape_floater(this, delta); +} + +S32 LLCallFloater::getParticipantItemHeight() +{ +	std::vector<LLPanel*> items; +	mAvatarList->getItems(items); +	if(items.size() > 0) +	{ +		return items[0]->getRect().getHeight(); +	} +	else +	{ +		return getChild<LLPanel>("non_avatar_caller")->getRect().getHeight(); +	} +} + +S32 LLCallFloater::getMaxVisibleItems() +{ +	S32 value = 5; // default value, in case convertToS32() fails. +	LLStringUtil::convertToS32(getString("max_visible_items"), value); +	return value; +} +  //EOF diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index 3df9e333c5..8aba93fc43 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -34,7 +34,8 @@  #ifndef LL_LLCALLFLOATER_H  #define LL_LLCALLFLOATER_H -#include "lldockablefloater.h" +#include "lltransientdockablefloater.h" +#include "llvoicechannel.h"  #include "llvoiceclient.h"  class LLAvatarList; @@ -54,7 +55,7 @@ class LLSpeakerMgr;   * When the Resident is engaged in any chat except Nearby Chat, the Voice Control Panel also provides an    * 'Leave Call' button to allow the Resident to leave that voice channel.   */ -class LLCallFloater : public LLDockableFloater, LLVoiceClientParticipantObserver +class LLCallFloater : public LLTransientDockableFloater, LLVoiceClientParticipantObserver  {  public: @@ -74,6 +75,11 @@ public:  	 */  	/*virtual*/ void onChange(); +	/** +	* Will reshape floater when participant list size changes +	*/ +	/*virtual*/ S32 notifyParent(const LLSD& info); +  	static void sOnCurrentChannelChanged(const LLUUID& session_id);  private: @@ -192,6 +198,43 @@ private:  	 */  	bool validateSpeaker(const LLUUID& speaker_id); +	/** +	 * Connects to passed channel to be updated according to channel's voice states. +	 */ +	void connectToChannel(LLVoiceChannel* channel); + +	/** +	 * Callback to process changing of voice channel's states. +	 */ +	void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state); + +	/** +	 * Updates floater according to passed channel's voice state. +	 */ +	void updateState(const LLVoiceChannel::EState& new_state); + +	/** +	 * Resets floater to be ready to show voice participants. +	 * +	 * Clears all data from the latest voice session. +	 */ +	void reset(); + +	/** +	* Reshapes floater to fit participant list height +	*/ +	void reshapeToFitContent(); + +	/** +	* Returns height of participant list item +	*/ +	S32 getParticipantItemHeight(); + +	/** +	* Returns predefined max visible participants. +	*/ +	S32 getMaxVisibleItems(); +  private:  	speaker_state_map_t mSpeakerStateMap;  	LLSpeakerMgr* mSpeakerManager; @@ -242,6 +285,16 @@ private:  	timers_map		mVoiceLeftTimersMap;  	S32				mVoiceLeftRemoveDelay; + +	/** +	 * Stores reference to current voice channel. +	 * +	 * Is used to ignore voice channel changed callback for the same channel. +	 * +	 * @see sOnCurrentChannelChanged() +	 */ +	static LLVoiceChannel* sCurrentVoiceCanel; +	boost::signals2::connection mVoiceChannelStateChangeConnection;  }; diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 82413878ad..d988770f90 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -62,7 +62,6 @@  #include "llviewerobjectlist.h"  #include "llviewerwindow.h"  #include "llvoavatar.h" -#include "llimview.h"  ///----------------------------------------------------------------------------  /// Local function declarations, constants, enums, and typedefs diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index cbb566b3a7..769387c26c 100644 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -36,7 +36,6 @@  #include "llappviewer.h"  #include "llviewercontrol.h" -#include "llimview.h"  #include "llviewerwindow.h"  #include "llrootview.h"  #include "llsyswellwindow.h" diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index b1ddddc4b1..21cadda6e3 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -31,12 +31,14 @@   */  #include "llviewerprecompiledheaders.h" + +#include "llinstantmessage.h" +  #include "llchathistory.h"  #include "llpanel.h"  #include "lluictrlfactory.h"  #include "llscrollcontainer.h"  #include "llavatariconctrl.h" -#include "llimview.h"  #include "llcallingcard.h" //for LLAvatarTracker  #include "llagentdata.h"  #include "llavataractions.h" diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index c01202bb82..dc2e22f899 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -49,7 +49,6 @@  #include "llscriptfloater.h"  #include "lltextbox.h"  #include "llvoiceclient.h" -#include "llvoicecontrolpanel.h"  #include "llgroupmgr.h"  #include "llnotificationmanager.h"  #include "lltransientfloatermgr.h" @@ -225,6 +224,10 @@ void LLSysWellChiclet::setNewMessagesState(bool new_messages)  	mIsNewMessagesState = new_messages;  } +void LLSysWellChiclet::updateWidget(bool is_window_empty) +{ +	mButton->setEnabled(!is_window_empty); +}  // virtual  BOOL LLSysWellChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)  { @@ -374,6 +377,13 @@ void LLNotificationChiclet::createMenu()  		 LLViewerMenuHolderGL::child_registry_t::instance());  } +/*virtual*/ +void LLNotificationChiclet::setCounter(S32 counter) +{ +	LLSysWellChiclet::setCounter(counter); +	updateWidget(getCounter() == 0); +	 +}  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index ee9db10525..3665e4d093 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -41,7 +41,6 @@  #include "llgroupmgr.h"  #include "llimview.h" -class LLVoiceControlPanel;  class LLMenuGL;  class LLIMFloater; @@ -825,6 +824,8 @@ public:  	void setToggleState(BOOL toggled);  	void setNewMessagesState(bool new_messages); +	//this method should change a widget according to state of the SysWellWindow  +	virtual void updateWidget(bool is_window_empty);  protected: @@ -930,7 +931,7 @@ protected:  	// methods for updating a number of unread System notifications  	void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications); }  	void decUreadSystemNotifications() { setCounter(--mUreadSystemNotifications); } - +	/*virtual*/ void setCounter(S32 counter);  	S32 mUreadSystemNotifications;  }; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 68eee061b8..e12b64a2f2 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -105,6 +105,9 @@ public:  	F32				getVirtualSize() const { return mVSize; }  	F32				getPixelArea() const { return mPixelArea; } +	S32             getIndexInTex() const {return mIndexInTex ;} +	void            setIndexInTex(S32 index) { mIndexInTex = index ;} +  	void			renderSetColor() const;  	S32				renderElements(const U16 *index_array) const;  	S32				renderIndexed (); @@ -236,6 +239,7 @@ private:  	U16			mGeomIndex;			// index into draw pool  	U32			mIndicesCount;  	U32			mIndicesIndex;		// index into draw pool for indices (yeah, I know!) +	S32         mIndexInTex ;  	//previous rebuild's geometry info  	U16			mLastGeomCount; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index ee33c189f9..6ae6b4877a 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -773,9 +773,9 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem  	 * WORKAROUND:  	 * there are some problem with displaying of fonts in buttons.   	 * Empty space (or ...) is displaying instead of last symbols, even though the width of the button is enough. -	 * Problem will gone, if we  stretch out the button. For that reason I have to put additional  10 pixels.  +	 * Problem will gone, if we  stretch out the button. For that reason I have to put additional  20 pixels.  	 */ -	int requred_width = mFont->getWidth(item->getDisplayName()) + 10;  +	int requred_width = mFont->getWidth(item->getDisplayName()) + 20;  	int width = requred_width > def_button_width? def_button_width : requred_width;  	LLFavoriteLandmarkButton* fav_btn = NULL; diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index e80499688e..aa343b2f69 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -167,20 +167,21 @@ BOOL LLFloaterAbout::postBuild()  	// Now build the various pieces  	support << getString("AboutHeader", args); -	if (info.has("COMPILER")) -	{ -		support << "\n\n" << getString("AboutCompiler", args); -	}  	if (info.has("REGION"))  	{  		support << "\n\n" << getString("AboutPosition", args);  	}  	support << "\n\n" << getString("AboutSystem", args); +	support << "\n";  	if (info.has("GRAPHICS_DRIVER_VERSION"))  	{ -		support << "\n\n" << getString("AboutDriver", args); +		support << "\n" << getString("AboutDriver", args); +	} +	support << "\n" << getString("AboutLibs", args); +	if (info.has("COMPILER")) +	{ +		support << "\n" << getString("AboutCompiler", args);  	} -	support << "\n\n" << getString("AboutLibs", args);  	if (info.has("PACKETS_IN"))  	{  		support << '\n' << getString("AboutTraffic", args); @@ -193,11 +194,11 @@ BOOL LLFloaterAbout::postBuild()  	support_widget->blockUndo();  	// Fix views -	support_widget->setCursorPos(0);  	support_widget->setEnabled(FALSE); +	support_widget->startOfDoc(); -	credits_widget->setCursorPos(0);  	credits_widget->setEnabled(FALSE); +	credits_widget->startOfDoc();  	return TRUE;  } diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 6e3d5499a2..a0b2de85f0 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -51,8 +51,7 @@  #include "lluictrlfactory.h"  #include "message.h" -LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(callback_t callback,  -												   void* userdata, +LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,  												   BOOL allow_multiple,  												   BOOL closeOnSelect)  { @@ -60,8 +59,7 @@ LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(callback_t callback,  	LLFloaterAvatarPicker* floater =   		LLFloaterReg::showTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); -	floater->mCallback = callback; -	floater->mCallbackUserdata = userdata; +	floater->mSelectionCallback = callback;  	floater->setAllowMultiple(allow_multiple);  	floater->mNearMeListComplete = FALSE;  	floater->mCloseOnSelect = closeOnSelect; @@ -82,8 +80,6 @@ LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(callback_t callback,  LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)    : LLFloater(key),  	mNumResultsReturned(0), -	mCallback(NULL), -	mCallbackUserdata(NULL),  	mNearMeListComplete(FALSE),  	mCloseOnSelect(FALSE)  { @@ -93,29 +89,29 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)  BOOL LLFloaterAvatarPicker::postBuild()  { -	getChild<LLLineEditor>("Edit")->setKeystrokeCallback(editKeystroke, this); +	getChild<LLLineEditor>("Edit")->setKeystrokeCallback( boost::bind(&LLFloaterAvatarPicker::editKeystroke, this, _1, _2),NULL); -	childSetAction("Find", onBtnFind, this); +	childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));  	childDisable("Find"); -	childSetAction("Refresh", onBtnRefresh, this); -	childSetCommitCallback("near_me_range", onRangeAdjust, this); +	childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this)); +	getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, this));  	LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults"); -	searchresults->setDoubleClickCallback(onBtnSelect, this); -	childSetCommitCallback("SearchResults", onList, this); +	searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); +	searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));  	childDisable("SearchResults");  	LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe"); -	nearme->setDoubleClickCallback(onBtnSelect, this); -	childSetCommitCallback("NearMe", onList, this); +	nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); +	nearme->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));  	LLScrollListCtrl* friends = getChild<LLScrollListCtrl>("Friends"); -	friends->setDoubleClickCallback(onBtnSelect, this); -	childSetCommitCallback("Friends", onList, this); +	friends->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); +	getChild<LLUICtrl>("Friends")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this)); -	childSetAction("ok_btn", onBtnSelect, this); +	childSetAction("ok_btn", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));  	childDisable("ok_btn"); -	childSetAction("cancel_btn", onBtnClose, this); +	childSetAction("cancel_btn", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this));  	childSetFocus("Edit"); @@ -156,10 +152,9 @@ LLFloaterAvatarPicker::~LLFloaterAvatarPicker()  	gFocusMgr.releaseFocusIfNeeded( this );  } -void LLFloaterAvatarPicker::onBtnFind(void* userdata) +void LLFloaterAvatarPicker::onBtnFind()  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; -	if(self) self->find(); +	find();  }  static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, std::vector<LLUUID>& avatar_ids) @@ -176,34 +171,33 @@ static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std:  	}  } -void LLFloaterAvatarPicker::onBtnSelect(void* userdata) +void LLFloaterAvatarPicker::onBtnSelect()  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata;  	// If select btn not enabled then do not callback -	if (!self || !self->isSelectBtnEnabled()) +	if (!isSelectBtnEnabled())  		return; -	if(self->mCallback) +	if(mSelectionCallback)  	{  		std::string acvtive_panel_name;  		LLScrollListCtrl* list =  NULL; -		LLPanel* active_panel = self->childGetVisibleTab("ResidentChooserTabs"); +		LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs");  		if(active_panel)  		{  			acvtive_panel_name = active_panel->getName();  		}  		if(acvtive_panel_name == "SearchPanel")  		{ -			list = self->getChild<LLScrollListCtrl>("SearchResults"); +			list = getChild<LLScrollListCtrl>("SearchResults");  		}  		else if(acvtive_panel_name == "NearMePanel")  		{ -			list =self->getChild<LLScrollListCtrl>("NearMe"); +			list = getChild<LLScrollListCtrl>("NearMe");  		}  		else if (acvtive_panel_name == "FriendsPanel")  		{ -			list =self->getChild<LLScrollListCtrl>("Friends"); +			list = getChild<LLScrollListCtrl>("Friends");  		}  		if(list) @@ -211,50 +205,39 @@ void LLFloaterAvatarPicker::onBtnSelect(void* userdata)  			std::vector<std::string>	avatar_names;  			std::vector<LLUUID>			avatar_ids;  			getSelectedAvatarData(list, avatar_names, avatar_ids); -			self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); +			mSelectionCallback(avatar_names, avatar_ids);  		}  	} -	self->getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE); -	self->getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE); -	self->getChild<LLScrollListCtrl>("Friends")->deselectAllItems(TRUE); -	if(self->mCloseOnSelect) +	getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE); +	getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE); +	getChild<LLScrollListCtrl>("Friends")->deselectAllItems(TRUE); +	if(mCloseOnSelect)  	{ -		self->mCloseOnSelect = FALSE; -		self->closeFloater();		 +		mCloseOnSelect = FALSE; +		closeFloater();		  	}  } -void LLFloaterAvatarPicker::onBtnRefresh(void* userdata) +void LLFloaterAvatarPicker::onBtnRefresh()  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; -	if (!self) -	{ -		return; -	} -	 -	self->getChild<LLScrollListCtrl>("NearMe")->deleteAllItems(); -	self->getChild<LLScrollListCtrl>("NearMe")->setCommentText(self->getString("searching")); -	self->mNearMeListComplete = FALSE; +	getChild<LLScrollListCtrl>("NearMe")->deleteAllItems(); +	getChild<LLScrollListCtrl>("NearMe")->setCommentText(getString("searching")); +	mNearMeListComplete = FALSE;  } -void LLFloaterAvatarPicker::onBtnClose(void* userdata) +void LLFloaterAvatarPicker::onBtnClose()  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; -	if(self) self->closeFloater(); +	closeFloater();  } -void LLFloaterAvatarPicker::onRangeAdjust(LLUICtrl* source, void* data) +void LLFloaterAvatarPicker::onRangeAdjust()  { -	LLFloaterAvatarPicker::onBtnRefresh(data); +	onBtnRefresh();  } -void LLFloaterAvatarPicker::onList(LLUICtrl* ctrl, void* userdata) +void LLFloaterAvatarPicker::onList()  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; -	if (self) -	{ -		self->childSetEnabled("ok_btn", self->isSelectBtnEnabled()); -	} +	childSetEnabled("ok_btn", isSelectBtnEnabled());  }  void LLFloaterAvatarPicker::populateNearMe() @@ -297,7 +280,7 @@ void LLFloaterAvatarPicker::populateNearMe()  		childEnable("NearMe");  		childEnable("ok_btn");  		near_me_scroller->selectFirstItem(); -		onList(near_me_scroller, this); +		onList();  		near_me_scroller->setFocus(TRUE);  	} @@ -451,7 +434,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*  	{  		floater->childEnable("ok_btn");  		search_results->selectFirstItem(); -		floater->onList(search_results, floater); +		floater->onList();  		search_results->setFocus(TRUE);  	}  } @@ -459,8 +442,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*  //static  void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)  { -	LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)user_data; -	self->childSetEnabled("Find", caller->getText().size() >= 3); +	childSetEnabled("Find", caller->getText().size() >= 3);  }  // virtual @@ -470,11 +452,11 @@ BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask)  	{  		if (childHasFocus("Edit"))  		{ -			onBtnFind(this); +			onBtnFind();  		}  		else  		{ -			onBtnSelect(this); +			onBtnSelect();  		}  		return TRUE;  	} diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h index 13e491834e..e35466cec8 100644 --- a/indra/newview/llfloateravatarpicker.h +++ b/indra/newview/llfloateravatarpicker.h @@ -43,11 +43,10 @@ public:  	typedef boost::signals2::signal<bool(const std::vector<LLUUID>&), boost_boolean_combiner> validate_signal_t;  	typedef validate_signal_t::slot_type validate_callback_t; -	// Call this to select an avatar.  	// The callback function will be called with an avatar name and UUID. -	typedef void(*callback_t)(const std::vector<std::string>&, const std::vector<LLUUID>&, void*); -	static LLFloaterAvatarPicker* show(callback_t callback,  -									   void* userdata, +	typedef boost::function<void (const std::vector<std::string>&, const std::vector<LLUUID>&)> select_callback_t; +	// Call this to select an avatar.	 +	static LLFloaterAvatarPicker* show(select_callback_t callback,   									   BOOL allow_multiple = FALSE,  									   BOOL closeOnSelect = FALSE); @@ -61,16 +60,16 @@ public:  	static void processAvatarPickerReply(class LLMessageSystem* msg, void**);  private: -	static void editKeystroke(class LLLineEditor* caller, void* user_data); +	void editKeystroke(class LLLineEditor* caller, void* user_data); -	static void onBtnFind(void* userdata); -	static void onBtnSelect(void* userdata); -	static void onBtnRefresh(void* userdata); -	static void onRangeAdjust(LLUICtrl* source, void* data); -	static void onBtnClose(void* userdata); -	static void onList(class LLUICtrl* ctrl, void* userdata); -		   void onTabChanged(); -		   bool isSelectBtnEnabled(); +	void onBtnFind(); +	void onBtnSelect(); +	void onBtnRefresh(); +	void onRangeAdjust(); +	void onBtnClose(); +	void onList(); +	void onTabChanged(); +	bool isSelectBtnEnabled();  	void populateNearMe();  	void populateFriend(); @@ -87,9 +86,8 @@ private:  	BOOL				mNearMeListComplete;  	BOOL				mCloseOnSelect; -	void (*mCallback)(const std::vector<std::string>& name, const std::vector<LLUUID>& id, void* userdata); -	void* mCallbackUserdata;  	validate_signal_t mOkButtonValidateSignal; +	select_callback_t mSelectionCallback;  };  #endif diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp index 1b14ca573a..9108cfb72b 100644 --- a/indra/newview/llfloaterchatterbox.cpp +++ b/indra/newview/llfloaterchatterbox.cpp @@ -44,6 +44,7 @@  #include "llviewercontrol.h"  #include "llvoicechannel.h"  #include "llimpanel.h" +#include "llimview.h"  //  // LLFloaterMyFriends diff --git a/indra/newview/llfloaterchatterbox.h b/indra/newview/llfloaterchatterbox.h index 3929e6e36c..ab44281d81 100644 --- a/indra/newview/llfloaterchatterbox.h +++ b/indra/newview/llfloaterchatterbox.h @@ -36,8 +36,8 @@  #define LL_LLFLOATERCHATTERBOX_H  #include "llfloater.h" +#include "llmultifloater.h"  #include "llstring.h" -#include "llimview.h"  #include "llimpanel.h"  class LLTabContainer; diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index 56291c57a6..ccc5cab85a 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -572,8 +572,7 @@ void LLPanelFriends::onClickIM(void* user_data)  // static  void LLPanelFriends::onPickAvatar(const std::vector<std::string>& names, -									const std::vector<LLUUID>& ids, -									void* ) +									const std::vector<LLUUID>& ids)  {  	if (names.empty()) return;  	if (ids.empty()) return; @@ -585,7 +584,7 @@ void LLPanelFriends::onClickAddFriend(void* user_data)  {  	LLPanelFriends* panelp = (LLPanelFriends*)user_data;  	LLFloater* root_floater = gFloaterView->getParentFloater(panelp); -	LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(onPickAvatar, user_data, FALSE, TRUE); +	LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelFriends::onPickAvatar, _1,_2), FALSE, TRUE);  	if (root_floater)  	{  		root_floater->addDependentFloater(picker); diff --git a/indra/newview/llfloaterfriends.h b/indra/newview/llfloaterfriends.h index 9c6660c0dc..0042da48d3 100644 --- a/indra/newview/llfloaterfriends.h +++ b/indra/newview/llfloaterfriends.h @@ -116,7 +116,7 @@ private:  	static void onSelectName(LLUICtrl* ctrl, void* user_data);  	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);  	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response); -	static void onPickAvatar(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* user_data); +	static void onPickAvatar(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	static void onMaximumSelect();  	static void onClickIM(void* user_data); diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index e1409b8ad5..c2b0bd18fa 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -1165,7 +1165,7 @@ bool LLPanelObjectTools::callbackSimWideDeletes( const LLSD& notification, const  void LLPanelObjectTools::onClickSet()  {  	// grandparent is a floater, which can have a dependent -	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarID, this)); +	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelObjectTools::callbackAvatarID, this, _1,_2)));  }  void LLPanelObjectTools::onClickSetBySelection(void* data) @@ -1189,14 +1189,12 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)  	panelp->childSetValue("target_avatar_name", name);  } -// static -void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) +void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  { -	LLPanelObjectTools* object_tools = (LLPanelObjectTools*) data;  	if (ids.empty() || names.empty()) return; -	object_tools->mTargetAvatar = ids[0]; -	object_tools->childSetValue("target_avatar_name", names[0]); -	object_tools->refresh(); +	mTargetAvatar = ids[0]; +	childSetValue("target_avatar_name", names[0]); +	refresh();  }  void LLPanelObjectTools::onChangeAnything() diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h index ebab1fde11..ef5ce02749 100644 --- a/indra/newview/llfloatergodtools.h +++ b/indra/newview/llfloatergodtools.h @@ -234,7 +234,7 @@ public:  	void onChangeAnything();  	void onApplyChanges();  	void onClickSet(); -	static void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); +	void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	void onClickDeletePublicOwnedBy();  	void onClickDeleteAllScriptedOwnedBy();  	void onClickDeleteAllOwnedBy(); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 02884575b0..598a13de15 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2284,9 +2284,9 @@ BOOL LLPanelLandAccess::postBuild()  	childSetCommitCallback("PriceSpin", onCommitAny, this);  	childSetCommitCallback("HoursSpin", onCommitAny, this); -	childSetAction("add_allowed", onClickAddAccess, this); +	childSetAction("add_allowed", boost::bind(&LLPanelLandAccess::onClickAddAccess, this));  	childSetAction("remove_allowed", onClickRemoveAccess, this); -	childSetAction("add_banned", onClickAddBanned, this); +	childSetAction("add_banned", boost::bind(&LLPanelLandAccess::onClickAddBanned, this));  	childSetAction("remove_banned", onClickRemoveBanned, this);  	mListAccess = getChild<LLNameListCtrl>("AccessList"); @@ -2694,29 +2694,22 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)  	self->refresh();  } -// static -void LLPanelLandAccess::onClickAddAccess(void* data) +void LLPanelLandAccess::onClickAddAccess()  { -	LLPanelLandAccess* panelp = (LLPanelLandAccess*)data; -	if (panelp) -	{ -		gFloaterView->getParentFloater(panelp)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarCBAccess, data) ); -	} +	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1,_2)) );  } -// static -void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) +void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  { -	LLPanelLandAccess* panelp = (LLPanelLandAccess*)userdata;  	if (!names.empty() && !ids.empty())  	{  		LLUUID id = ids[0]; -		LLParcel* parcel = panelp->mParcel->getParcel(); +		LLParcel* parcel = mParcel->getParcel();  		if (parcel)  		{  			parcel->addToAccessList(id, 0);  			LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS); -			panelp->refresh(); +			refresh();  		}  	}  } @@ -2745,25 +2738,23 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data)  }  // static -void LLPanelLandAccess::onClickAddBanned(void* data) +void LLPanelLandAccess::onClickAddBanned()  { -	LLPanelLandAccess* panelp = (LLPanelLandAccess*)data; -	gFloaterView->getParentFloater(panelp)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarCBBanned, data) ); +	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1,_2)));  }  // static -void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) +void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  { -	LLPanelLandAccess* panelp = (LLPanelLandAccess*)userdata;  	if (!names.empty() && !ids.empty())  	{  		LLUUID id = ids[0]; -		LLParcel* parcel = panelp->mParcel->getParcel(); +		LLParcel* parcel = mParcel->getParcel();  		if (parcel)  		{  			parcel->addToBanList(id, 0);  			LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN); -			panelp->refresh(); +			refresh();  		}  	}  } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index eb47fbe15b..d7d02ba1a3 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -367,14 +367,15 @@ public:  	static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata);  	static void onCommitAny(LLUICtrl* ctrl, void *userdata); -	static void onClickAddAccess(void*); -	static void callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);  	static void onClickRemoveAccess(void*); -	static void onClickAddBanned(void*); -	static void callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);  	static void onClickRemoveBanned(void*);  	virtual BOOL postBuild(); +	 +	void onClickAddAccess(); +	void onClickAddBanned(); +	void callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); +	void callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  protected:  	LLNameListCtrl*		mListAccess; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 496fa62d05..c4b87c1b2d 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -586,7 +586,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild()  	initCtrl("restrict_pushobject");  	initCtrl("block_parcel_search_check"); -	childSetAction("kick_btn", onClickKick, this); +	childSetAction("kick_btn", boost::bind(&LLPanelRegionGeneralInfo::onClickKick, this));  	childSetAction("kick_all_btn", onClickKickAll, this);  	childSetAction("im_btn", onClickMessage, this);  //	childSetAction("manage_telehub_btn", onClickManageTelehub, this); @@ -594,27 +594,22 @@ BOOL LLPanelRegionGeneralInfo::postBuild()  	return LLPanelRegionInfo::postBuild();  } -// static -void LLPanelRegionGeneralInfo::onClickKick(void* userdata) +void LLPanelRegionGeneralInfo::onClickKick()  {  	llinfos << "LLPanelRegionGeneralInfo::onClickKick" << llendl; -	LLPanelRegionGeneralInfo* panelp = (LLPanelRegionGeneralInfo*)userdata;  	// this depends on the grandparent view being a floater  	// in order to set up floater dependency -	LLFloater* parent_floater = gFloaterView->getParentFloater(panelp); -	LLFloater* child_floater = LLFloaterAvatarPicker::show(onKickCommit, userdata, FALSE, TRUE); +	LLFloater* parent_floater = gFloaterView->getParentFloater(this); +	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelRegionGeneralInfo::onKickCommit, this, _1,_2), FALSE, TRUE);  	parent_floater->addDependentFloater(child_floater);  } -// static -void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) +void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  {  	if (names.empty() || ids.empty()) return;  	if(ids[0].notNull())  	{ -		LLPanelRegionGeneralInfo* self = (LLPanelRegionGeneralInfo*)userdata; -		if(!self) return;  		strings_t strings;  		// [0] = our agent id  		// [1] = target agent id @@ -626,7 +621,7 @@ void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& name  		strings.push_back(strings_t::value_type(buffer));  		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); -		self->sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings); +		sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings);  	}  } @@ -790,7 +785,7 @@ BOOL LLPanelRegionDebugInfo::postBuild()  	initCtrl("disable_collisions_check");  	initCtrl("disable_physics_check"); -	childSetAction("choose_avatar_btn", onClickChooseAvatar, this); +	childSetAction("choose_avatar_btn", boost::bind(&LLPanelRegionDebugInfo::onClickChooseAvatar, this));  	childSetAction("return_btn", onClickReturn, this);  	childSetAction("top_colliders_btn", onClickTopColliders, this);  	childSetAction("top_scripts_btn", onClickTopScripts, this); @@ -842,19 +837,18 @@ BOOL LLPanelRegionDebugInfo::sendUpdate()  	return TRUE;  } -void LLPanelRegionDebugInfo::onClickChooseAvatar(void* data) +void LLPanelRegionDebugInfo::onClickChooseAvatar()  { -	LLFloaterAvatarPicker::show(callbackAvatarID, data, FALSE, TRUE); +	LLFloaterAvatarPicker::show(boost::bind(&LLPanelRegionDebugInfo::callbackAvatarID, this, _1, _2), FALSE, TRUE);  } -// static -void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) + +void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  { -	LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*) data;  	if (ids.empty() || names.empty()) return; -	self->mTargetAvatar = ids[0]; -	self->childSetValue("target_avatar_name", LLSD(names[0])); -	self->refreshFromRegion( gAgent.getRegion() ); +	mTargetAvatar = ids[0]; +	childSetValue("target_avatar_name", LLSD(names[0])); +	refreshFromRegion( gAgent.getRegion() );  }  // static @@ -1528,18 +1522,16 @@ struct LLKickFromEstateInfo  	LLUUID      mAgentID;  }; -void LLPanelEstateInfo::onClickKickUser(void *user_data) +void LLPanelEstateInfo::onClickKickUser()  { -	LLPanelEstateInfo* panelp = (LLPanelEstateInfo*)user_data; -  	// this depends on the grandparent view being a floater  	// in order to set up floater dependency -	LLFloater* parent_floater = gFloaterView->getParentFloater(panelp); -	LLFloater* child_floater = LLFloaterAvatarPicker::show(LLPanelEstateInfo::onKickUserCommit, user_data, FALSE, TRUE); +	LLFloater* parent_floater = gFloaterView->getParentFloater(this); +	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::onKickUserCommit, this, _1, _2), FALSE, TRUE);  	parent_floater->addDependentFloater(child_floater);  } -void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) +void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  {  	if (names.empty() || ids.empty()) return; @@ -1550,12 +1542,9 @@ void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names,  		return;  	} -	LLPanelEstateInfo* self = (LLPanelEstateInfo*)userdata; -	if(!self) return; -  	//keep track of what user they want to kick and other misc info  	LLKickFromEstateInfo *kick_info = new LLKickFromEstateInfo(); -	kick_info->mEstatePanelp = self; +	kick_info->mEstatePanelp = this;  	kick_info->mAgentID     = ids[0];  	//Bring up a confirmation dialog @@ -1563,7 +1552,7 @@ void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names,  	args["EVIL_USER"] = names[0];  	LLSD payload;  	payload["agent_id"] = ids[0]; -	LLNotificationsUtil::add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, self, _1, _2)); +	LLNotificationsUtil::add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, this, _1, _2));  } @@ -1727,7 +1716,7 @@ bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& res  	LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]);  	// avatar picker yes multi-select, yes close-on-select -	LLFloaterAvatarPicker::show(accessAddCore3, (void*)change_info, TRUE, TRUE); +	LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::accessAddCore3, _1, _2, (void*)change_info), TRUE, TRUE);  	return false;  } @@ -2107,7 +2096,7 @@ BOOL LLPanelEstateInfo::postBuild()  	childSetAction("add_estate_manager_btn", onClickAddEstateManager, this);  	childSetAction("remove_estate_manager_btn", onClickRemoveEstateManager, this);  	childSetAction("message_estate_btn", onClickMessageEstate, this); -	childSetAction("kick_user_from_estate_btn", onClickKickUser, this); +	childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));  	childSetAction("WLEditSky", onClickEditSky, this);  	childSetAction("WLEditDayCycle", onClickEditDayCycle, this); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index a21b96bf16..8d315bdb78 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -167,8 +167,8 @@ public:  protected:  	virtual BOOL sendUpdate(); -	static void onClickKick(void* userdata); -	static void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata); +	void onClickKick(); +	void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	static void onClickKickAll(void* userdata);  	bool onKickAllCommit(const LLSD& notification, const LLSD& response);  	static void onClickMessage(void* userdata); @@ -192,8 +192,8 @@ public:  protected:  	virtual BOOL sendUpdate(); -	static void onClickChooseAvatar(void*); -	static void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); +	void onClickChooseAvatar(); +	void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	static void onClickReturn(void *);  	bool callbackReturn(const LLSD& notification, const LLSD& response);  	static void onClickTopColliders(void*); @@ -275,7 +275,7 @@ public:  	static void onClickRemoveBannedAgent(void* user_data);  	static void onClickAddEstateManager(void* user_data);  	static void onClickRemoveEstateManager(void* user_data); -	static void onClickKickUser(void* userdata); +	void onClickKickUser();  	// Group picker callback is different, can't use core methods below  	bool addAllowedGroup(const LLSD& notification, const LLSD& response); @@ -296,7 +296,7 @@ public:  	// Send the actual EstateOwnerRequest "estateaccessdelta" message  	static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id); -	static void onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata); +	void onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	static void onClickMessageEstate(void* data);  	bool onMessageCommit(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 9f3dcae8ef..e0f2fca580 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -57,7 +57,6 @@  #include "llfloaterreg.h"  #include "lltexturectrl.h"  #include "llscrolllistctrl.h" -#include "llimview.h"  #include "lldispatcher.h"  #include "llviewerobject.h"  #include "llviewerregion.h" @@ -173,7 +172,7 @@ BOOL LLFloaterReporter::postBuild()  						std::string("tool_face_active.tga") );  	childSetAction("pick_btn", onClickObjPicker, this); -	childSetAction("select_abuser", onClickSelectAbuser, this); +	childSetAction("select_abuser", boost::bind(&LLFloaterReporter::onClickSelectAbuser, this));  	childSetAction("send_btn", onClickSend, this);  	childSetAction("cancel_btn", onClickCancel, this); @@ -307,26 +306,20 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)  } -// static -void LLFloaterReporter::onClickSelectAbuser(void *userdata) +void LLFloaterReporter::onClickSelectAbuser()  { -	LLFloaterReporter *self = (LLFloaterReporter *)userdata; - -	gFloaterView->getParentFloater(self)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarID, userdata, FALSE, TRUE )); +	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE ));  } -// static -void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) +void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  { -	LLFloaterReporter* self = (LLFloaterReporter*) data; -  	if (ids.empty() || names.empty()) return; -	self->childSetText("abuser_name_edit", names[0] ); +	childSetText("abuser_name_edit", names[0] ); -	self->mAbuserID = ids[0]; +	mAbuserID = ids[0]; -	self->refresh(); +	refresh();  } diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index a3776f3d27..cc2dfb2f98 100644 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -97,7 +97,7 @@ public:  	static void onClickSend			(void *userdata);  	static void onClickCancel		(void *userdata);  	static void onClickObjPicker	(void *userdata); -	static void onClickSelectAbuser (void *userdata); +	void onClickSelectAbuser ();  	static void closePickTool	(void *userdata);  	static void uploadDoneCallback(const LLUUID &uuid, void* user_data, S32 result, LLExtStat ext_status);  	static void addDescription(const std::string& description, LLMeanCollisionData *mcd = NULL); @@ -120,7 +120,7 @@ private:  	void setPosBox(const LLVector3d &pos);  	void enableControls(BOOL own_avatar);  	void getObjectInfo(const LLUUID& object_id); -	static void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); +	void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  private:  	EReportType		mReportType; diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 595d84f9f0..c6d9fee630 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -77,6 +77,15 @@ void LLFloaterSearch::onOpen(const LLSD& key)  	search(key);  } +void LLFloaterSearch::onClose(bool app_quitting) +{ +	if (! app_quitting) +	{ +		// Show the blank home page ready for the next onOpen() +		mBrowser->navigateHome(); +	} +} +  void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)  {  	switch (event)  @@ -110,6 +119,11 @@ void LLFloaterSearch::search(const LLSD &key)  		return;  	} +	// display the blank home page first, to clear the display of  +	// any previous search results while the new results load. +	// The home page is set in floater_search.xml as start_url. +	mBrowser->navigateHome(); +  	// reset the god level warning as we're sending the latest state  	childHide("refresh_search");  	mSearchGodLevel = gAgent.getGodLevel(); diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index ba817adf7f..0a8d9bbe36 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -59,6 +59,8 @@ public:  	/// see search() for details on the key parameter.  	/*virtual*/ void onOpen(const LLSD& key); +	/*virtual*/ void onClose(bool app_quitting); +  	/// perform a search with the specific search term.  	/// The key should be a map that can contain the following keys:  	///  - "id": specifies the text phrase to search for diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index e5260aa7b9..e2b0c4b66f 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -89,14 +89,14 @@ private:  	void setBadge(const char* id, Badge badge);  	static void onChangeValue(LLUICtrl *ctrl, void *userdata); -	static void doSelectAgent(void *userdata); +	void doSelectAgent();  	static void doCancel(void *userdata);  	static void doSellLand(void *userdata);  	bool onConfirmSale(const LLSD& notification, const LLSD& response);  	static void doShowObjects(void *userdata);  	static bool callbackHighlightTransferable(const LLSD& notification, const LLSD& response); -	static void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); +	void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  public:  	virtual BOOL postBuild(); @@ -165,7 +165,7 @@ BOOL LLFloaterSellLandUI::postBuild()  	childSetCommitCallback("price", onChangeValue, this);  	childSetPrevalidate("price", LLLineEditor::prevalidateNonNegativeS32);  	childSetCommitCallback("sell_objects", onChangeValue, this); -	childSetAction("sell_to_select_agent", doSelectAgent, this); +	childSetAction("sell_to_select_agent", boost::bind( &LLFloaterSellLandUI::doSelectAgent, this));  	childSetAction("cancel_btn", doCancel, this);  	childSetAction("sell_btn", doSellLand, this);  	childSetAction("show_objects", doShowObjects, this); @@ -361,7 +361,7 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata)  		self->mSellToBuyer = true;  		if (self->mAuthorizedBuyer.isNull())  		{ -			doSelectAgent(self); +			self->doSelectAgent();  		}  	}  	else if (sell_to == "anyone") @@ -384,30 +384,26 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata)  	self->refreshUI();  } -// static -void LLFloaterSellLandUI::doSelectAgent(void *userdata) +void LLFloaterSellLandUI::doSelectAgent()  { -	LLFloaterSellLandUI* floaterp = (LLFloaterSellLandUI*)userdata;  	// grandparent is a floater, in order to set up dependency -	floaterp->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarPick, floaterp, FALSE, TRUE)); +	addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE));  } -// static -void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) +void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  {	 -	LLFloaterSellLandUI* floaterp = (LLFloaterSellLandUI*)data; -	LLParcel* parcel = floaterp->mParcelSelection->getParcel(); +	LLParcel* parcel = mParcelSelection->getParcel();  	if (names.empty() || ids.empty()) return;  	LLUUID id = ids[0];  	parcel->setAuthorizedBuyerID(id); -	floaterp->mAuthorizedBuyer = ids[0]; +	mAuthorizedBuyer = ids[0]; -	floaterp->childSetText("sell_to_agent", names[0]); +	childSetText("sell_to_agent", names[0]); -	floaterp->refreshUI(); +	refreshUI();  }  // static diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 474d2ca21f..112b23d2df 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -206,7 +206,8 @@ LLFolderView::LLFolderView(const Params& p)  	mAutoOpenCandidate = NULL;  	mAutoOpenTimer.stop();  	mKeyboardSelection = FALSE; -	mIndentation = -LEFT_INDENTATION; // children start at indentation 0 +    static LLUICachedControl<S32> indentation("FolderIndentation", 0); +	mIndentation = -indentation; // children start at indentation 0  	gIdleCallbacks.addFunction(idle, this);  	//clear label diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 720c2c7b1a..9d54aafd67 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -392,10 +392,11 @@ BOOL LLFolderViewItem::addToFolder(LLFolderViewFolder* folder, LLFolderView* roo  // makes sure that this view and it's children are the right size.  S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)  { +    static LLUICachedControl<S32> indentation("FolderIndentation", 0);  	mIndentation = (getParentFolder()   					&& getParentFolder()->getParentFolder()   					&& getParentFolder()->getParentFolder()->getParentFolder()) -		? mParentFolder->getIndentation() + LEFT_INDENTATION  +		? mParentFolder->getIndentation() + indentation  		: 0;  	if (mLabelWidthDirty)  	{ diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 21e24c2a4d..6f8c738a59 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -93,7 +93,6 @@ public:  	static void initClass();  	static void cleanupClass(); -	// jamesdebug was LLUICtrl::Params  	struct Params : public LLInitParam::Block<Params, LLView::Params>  	{  		Optional<LLUIImage*>					icon; @@ -111,7 +110,7 @@ public:  	// layout constants  	static const S32 LEFT_PAD = 5; -	static const S32 LEFT_INDENTATION = 2; +    // LEFT_INDENTATION is set via settings.xml FolderIndentation  	static const S32 ICON_PAD = 2;  	static const S32 ICON_WIDTH = 16;  	static const S32 TEXT_PAD = 1; diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp new file mode 100644 index 0000000000..0b03d49cbc --- /dev/null +++ b/indra/newview/llgroupiconctrl.cpp @@ -0,0 +1,145 @@ +/**  + * @file llgroupiconctrl.cpp + * @brief LLGroupIconCtrl class implementation + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llgroupiconctrl.h" + +#include "llagent.h" +/* +#include "llavatarconstants.h" +#include "llcallingcard.h" // for LLAvatarTracker +#include "llavataractions.h" +#include "llmenugl.h" +#include "lluictrlfactory.h" + +#include "llcachename.h" +#include "llagentdata.h" +#include "llimfloater.h" +*/ + +static LLDefaultChildRegistry::Register<LLGroupIconCtrl> g_i("group_icon"); + +LLGroupIconCtrl::Params::Params() +:	group_id("group_id") +,	draw_tooltip("draw_tooltip", true) +,	default_icon_name("default_icon_name") +{ +} + + +LLGroupIconCtrl::LLGroupIconCtrl(const LLGroupIconCtrl::Params& p) +:	LLIconCtrl(p) +,	mGroupId(LLUUID::null) +,	mDrawTooltip(p.draw_tooltip) +,	mDefaultIconName(p.default_icon_name) +{ +	mPriority = LLViewerFetchedTexture::BOOST_ICON; + +	if (p.group_id.isProvided()) +	{ +		LLSD value(p.group_id); +		setValue(value); +	} +	else +	{ +		LLIconCtrl::setValue(mDefaultIconName); +	} +} + +LLGroupIconCtrl::~LLGroupIconCtrl() +{ +	LLGroupMgr::getInstance()->removeObserver(this); +} + +void LLGroupIconCtrl::setValue(const LLSD& value) +{ +	if (value.isUUID()) +	{ +		LLGroupMgr* gm = LLGroupMgr::getInstance(); +		if (mGroupId.notNull()) +		{ +			gm->removeObserver(this); +		} + +		if (mGroupId != value.asUUID()) +		{ +			mGroupId = value.asUUID(); + +			// Check if cache already contains image_id for that group +			if (!updateFromCache()) +			{ +				LLIconCtrl::setValue(mDefaultIconName); +				gm->addObserver(this); +				gm->sendGroupPropertiesRequest(mGroupId); +			} +		} +	} +	else +	{ +		LLIconCtrl::setValue(value); +	} +} + +void LLGroupIconCtrl::changed(LLGroupChange gc) +{ +	if (GC_PROPERTIES == gc) +	{ +		updateFromCache(); +	} +} + +bool LLGroupIconCtrl::updateFromCache() +{ +	LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mGroupId); +	if (!group_data) return false; + +	if (group_data->mInsigniaID.notNull()) +	{ +		LLIconCtrl::setValue(group_data->mInsigniaID); +	} +	else +	{ +		LLIconCtrl::setValue(mDefaultIconName); +	} + +	if (mDrawTooltip && !group_data->mName.empty()) +	{ +		setToolTip(group_data->mName); +	} +	else +	{ +		setToolTip(LLStringUtil::null); +	} +	return true; +} + diff --git a/indra/newview/llgroupiconctrl.h b/indra/newview/llgroupiconctrl.h new file mode 100644 index 0000000000..7ac2ca0219 --- /dev/null +++ b/indra/newview/llgroupiconctrl.h @@ -0,0 +1,92 @@ +/**  + * @file llgroupiconctrl.h + * @brief LLGroupIconCtrl class declaration + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLGROUPICONCTRL_H +#define LL_LLGROUPICONCTRL_H + +#include "lliconctrl.h" + +#include "llgroupmgr.h" + +/** + * Extends IconCtrl to show group icon wherever it is needed. + *  + * It gets icon id by group id from the LLGroupMgr. + * If group data is not loaded yet it subscribes as LLGroupMgr observer and requests necessary data. + */ +class LLGroupIconCtrl +	: public LLIconCtrl, public LLGroupMgrObserver +{ +public: +	struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params> +	{ +		Optional <LLUUID> group_id; +		Optional <bool> draw_tooltip; +		Optional <std::string> default_icon_name; +		Params(); +	}; + +protected: +	LLGroupIconCtrl(const Params&); +	friend class LLUICtrlFactory; + +public: +	virtual ~LLGroupIconCtrl(); + +	/** +	 * Determines group icon id by group id and sets it as icon value. +	 * +	 * Icon id is got from the appropriate LLGroupMgrGroupData specified by group UUID. +	 * If necessary it requests necessary data from the LLGroupMgr. +	 * +	 * @params value - if LLUUID - it is processed as group id otherwise base method is called. +	 */ +	virtual void setValue(const LLSD& value); + +	// LLGroupMgrObserver observer trigger +	virtual void changed(LLGroupChange gc); + +	const std::string&	getGroupName() const { return mGroupName; } +	void setDrawTooltip(bool value) { mDrawTooltip = value;} + +	const LLUUID&		getGroupId() const	{ return mGroupId; } + +protected: +	LLUUID				mGroupId; +	std::string			mGroupName; +	bool				mDrawTooltip; +	std::string			mDefaultIconName; + +	bool updateFromCache(); +}; + +#endif  // LL_LLGROUPICONCTRL_H diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 8b6762ce38..029ddbaf2c 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -55,15 +55,12 @@  #include "llgroupactions.h"  #include "llfloater.h"  #include "llfloateractivespeakers.h" -#include "llfloatercall.h"  #include "llavataractions.h" -#include "llimview.h"  #include "llinventory.h"  #include "llinventorymodel.h"  #include "llfloaterinventory.h"  #include "llfloaterchat.h"  #include "lliconctrl.h" -#include "llimview.h"                  // for LLIMModel to get other avatar id in chat  #include "llkeyboard.h"  #include "lllineeditor.h"  #include "llpanelimcontrolpanel.h" diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index b8f99d45c9..abbf1e68ab 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -33,7 +33,6 @@  #ifndef LL_IMPANEL_H  #define LL_IMPANEL_H -#include "llimview.h" //for LLIMModel  #include "lldockablefloater.h"  #include "lllogchat.h"  #include "lluuid.h" diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 37ab144934..40227539d0 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -57,6 +57,7 @@  #include "llhttpnode.h"  #include "llimfloater.h"  #include "llimpanel.h" +#include "llgroupiconctrl.h"  #include "llresizebar.h"  #include "lltabcontainer.h"  #include "llviewercontrol.h" @@ -1495,6 +1496,34 @@ void LLCallDialog::draw()  	}  } +void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id) +{ +	// *NOTE: 12/28/2009: check avaline calls: LLVoiceClient::isParticipantAvatar returns false for them +	bool participant_is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); + +	bool is_group = participant_is_avatar && gAgent.isInGroup(session_id); + +	LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon"); +	LLGroupIconCtrl* group_icon = getChild<LLGroupIconCtrl>("group_icon"); + +	avatar_icon->setVisible(!is_group); +	group_icon->setVisible(is_group); + +	if (is_group) +	{ +		group_icon->setValue(session_id); +	} +	else if (participant_is_avatar) +	{ +		avatar_icon->setValue(participant_id); +	} +	else +	{ +		avatar_icon->setValue("Avaline_Icon"); +		avatar_icon->setToolTip(std::string("")); +	} +} +  bool LLOutgoingCallDialog::lifetimeHasExpired()  {  	if (mLifetimeTimer.getStarted()) @@ -1556,8 +1585,9 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	LLSD callee_id = mPayload["other_user_id"];  	childSetTextArg("calling", "[CALLEE_NAME]", callee_name);  	childSetTextArg("connecting", "[CALLEE_NAME]", callee_name); -	LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon"); -	icon->setValue(callee_id); + +	// for outgoing group calls callee_id == group id == session id +	setIcon(callee_id, callee_id);  	// stop timer by default  	mLifetimeTimer.stop(); @@ -1711,22 +1741,15 @@ BOOL LLIncomingCallDialog::postBuild()  	LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");  	caller_name_widget->setValue(caller_name + " " + call_type); -	LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon"); -	if (is_avatar) -	{ -		icon->setValue(caller_id); -	} -	else -	{ -		icon->setValue("Avaline_Icon"); -	} +	setIcon(session_id, caller_id);  	childSetAction("Accept", onAccept, this);  	childSetAction("Reject", onReject, this);  	childSetAction("Start IM", onStartIM, this);  	childSetFocus("Accept"); -	if(mPayload["notify_box_type"] != "VoiceInviteGroup" && mPayload["notify_box_type"] != "VoiceInviteAdHoc") +	std::string notify_box_type = mPayload["notify_box_type"].asString(); +	if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc")  	{  		// starting notification's timer for P2P and AVALINE invitations  		mLifetimeTimer.start(); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index cec9d1642f..11860d0efb 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -501,6 +501,17 @@ protected:  	virtual void onLifetimeExpired() {};  	virtual void getAllowedRect(LLRect& rect); + +	/** +	 * Sets icon depend on session. +	 * +	 * If passed session_id is a group id group icon will be shown, otherwise avatar icon for participant_id +	 * +	 * @param session_id - UUID of session +	 * @param participant_id - UUID of other participant +	 */ +	void setIcon(const LLSD& session_id, const LLSD& participant_id); +  	LLSD mPayload;  }; diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 98ca339f0c..404e266806 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -634,6 +634,8 @@ void LLLocationInputCtrl::refreshLocation()  	{  		location_name = "???";  	} +	// store human-readable location to compare it in changeLocationPresentation() +	mHumanReadableLocation = location_name;  	setText(location_name);  } @@ -823,11 +825,11 @@ void LLLocationInputCtrl::updateWidgetlayout()  void LLLocationInputCtrl::changeLocationPresentation()  { -	//change location presentation only if user does not  select anything and  +	//change location presentation only if user does not  select/past anything and   	//human-readable region name  is being displayed  	std::string text = mTextEntry->getText();  	LLStringUtil::trim(text); -	if(mTextEntry && !mTextEntry->hasSelection() && !LLSLURL::isSLURL(text)) +	if(mTextEntry && !mTextEntry->hasSelection() && text == mHumanReadableLocation )  	{  		//needs unescaped one  		mTextEntry->setText(LLAgentUI::buildSLURL(false)); diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 0211062b05..7959fab2de 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -169,6 +169,8 @@ private:  	std::string mAddLandmarkTooltip;  	std::string mEditLandmarkTooltip; +	// this field holds a human-readable form of the location string, it is needed to be able to compare copy-pated value and real location +	std::string mHumanReadableLocation;  };  #endif diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 199bd966ef..93f926b5d0 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -39,7 +39,6 @@  #include "llfloaterworldmap.h"  #include "lluictrlfactory.h"  #include "llurldispatcher.h" -#include "llurlsimstring.h"  #include "llviewborder.h"  #include "llviewercontrol.h"  #include "llviewermedia.h" diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 913152e259..f3d6dbbb46 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -331,6 +331,33 @@ void LLPanelAvatarNotes::onShareButtonClick()  	//*TODO not implemented.  } +LLPanelAvatarNotes::~LLPanelAvatarNotes() +{ +	if(getAvatarId().notNull()) +	{ +		LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this); +	} +} + +// virtual, called by LLAvatarTracker +void LLPanelAvatarNotes::changed(U32 mask) +{ +	childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); +} + +void LLPanelAvatarNotes::setAvatarId(const LLUUID& id) +{ +	if(id.notNull()) +	{ +		if(getAvatarId().notNull()) +		{ +			LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this); +		} +		LLPanelProfileTab::setAvatarId(id); +		LLAvatarTracker::instance().addParticularFriendObserver(getAvatarId(), this); +	} +} +  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// @@ -396,9 +423,18 @@ void LLPanelProfileTab::onMapButtonClick()  void LLPanelProfileTab::updateButtons()  { -	bool enable_map_btn = LLAvatarTracker::instance().isBuddyOnline(getAvatarId()) -					&& gAgent.isGodlike() || is_agent_mappable(getAvatarId()); +	bool is_avatar_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId()); +	 +	if(LLAvatarActions::isFriend(getAvatarId())) +	{ +		childSetEnabled("teleport", is_avatar_online); +	} +	else +	{ +		childSetEnabled("teleport", true); +	} +	bool enable_map_btn = is_avatar_online && gAgent.isGodlike() || is_agent_mappable(getAvatarId());  	childSetEnabled("show_on_map_btn", enable_map_btn);  	childSetEnabled("call", LLAvatarActions::canCall(getAvatarId()));  } @@ -716,6 +752,33 @@ void LLPanelAvatarProfile::onOverflowButtonClicked()  	LLMenuGL::showPopup(this, mProfileMenu, rect.mRight, rect.mTop);  } +LLPanelAvatarProfile::~LLPanelAvatarProfile() +{ +	if(getAvatarId().notNull()) +	{ +		LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this); +	} +} + +// virtual, called by LLAvatarTracker +void LLPanelAvatarProfile::changed(U32 mask) +{ +	childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); +} + +void LLPanelAvatarProfile::setAvatarId(const LLUUID& id) +{ +	if(id.notNull()) +	{ +		if(getAvatarId().notNull()) +		{ +			LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this); +		} +		LLPanelProfileTab::setAvatarId(id); +		LLAvatarTracker::instance().addParticularFriendObserver(getAvatarId(), this); +	} +} +  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 8f07c67fb1..22efa5dc35 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -35,6 +35,7 @@  #include "llpanel.h"  #include "llavatarpropertiesprocessor.h" +#include "llcallingcard.h"  class LLComboBox;  class LLLineEditor; @@ -120,13 +121,22 @@ private:  */  class LLPanelAvatarProfile  	: public LLPanelProfileTab +	, public LLFriendObserver  {  public:  	LLPanelAvatarProfile(); +	/*virtual*/ ~LLPanelAvatarProfile();  	/*virtual*/ void onOpen(const LLSD& key);  	/** +	 * LLFriendObserver trigger +	 */ +	virtual void changed(U32 mask); + +	/*virtual*/ void setAvatarId(const LLUUID& id); + +	/**  	 * Processes data received from server.  	 */  	/*virtual*/ void processProperties(void* data, EAvatarProcessorType type); @@ -246,9 +256,18 @@ private:  */  class LLPanelAvatarNotes   	: public LLPanelProfileTab +	, public LLFriendObserver  {  public:  	LLPanelAvatarNotes(); +	/*virtual*/ ~LLPanelAvatarNotes(); + +	virtual void setAvatarId(const LLUUID& id); + +	/**  +	 * LLFriendObserver trigger +	 */ +	virtual void changed(U32 mask);  	/*virtual*/ void onOpen(const LLSD& key); diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index ae703ebd8e..362657a458 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -171,7 +171,7 @@ void LLPanelBlockedList::onPickBtnClick()  {  	const BOOL allow_multiple = FALSE;  	const BOOL close_on_select = TRUE; -	/*LLFloaterAvatarPicker* picker = */LLFloaterAvatarPicker::show(callbackBlockPicked, this, allow_multiple, close_on_select); +	/*LLFloaterAvatarPicker* picker = */LLFloaterAvatarPicker::show(boost::bind(&LLPanelBlockedList::callbackBlockPicked, this, _1, _2), allow_multiple, close_on_select);  	// *TODO: mantipov: should LLFloaterAvatarPicker be closed when panel is closed?  	// old Floater dependency is not enable in panel @@ -183,8 +183,7 @@ void LLPanelBlockedList::onBlockByNameClick()  	LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName);  } -//static -void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* user_data) +void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)  {  	if (names.empty() || ids.empty()) return;  	LLMute mute(ids[0], names[0], LLMute::AGENT); diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h index 0993f46f79..1ef16a02f4 100644 --- a/indra/newview/llpanelblockedlist.h +++ b/indra/newview/llpanelblockedlist.h @@ -78,7 +78,7 @@ private:  	void onPickBtnClick();  	void onBlockByNameClick(); -	static void callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* user_data); +	void callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);  	static void callbackBlockByName(const std::string& text);  private: diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 375ee0fdc4..06a682c905 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -292,8 +292,8 @@ void LLPanelGroupInvite::impl::callbackClickAdd(void* userdata)  		LLFloater* parentp;  		parentp = gFloaterView->getParentFloater(panelp); -		parentp->addDependentFloater(LLFloaterAvatarPicker::show(callbackAddUsers, -																 panelp->mImplementation, +		parentp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(impl::callbackAddUsers, _1, _2, +																panelp->mImplementation),  																 TRUE));  	}  } diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index a8a75a1feb..279818d52f 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -184,6 +184,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)  	// Disable "Add friend" button for friends.  	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); +	 +	// Disable "Teleport" button if friend is offline +	if(LLAvatarActions::isFriend(mAvatarID)) +	{ +		childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); +	}  	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID); @@ -214,6 +220,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)  void LLPanelIMControlPanel::changed(U32 mask)  {  	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); +	 +	// Disable "Teleport" button if friend is offline +	if(LLAvatarActions::isFriend(mAvatarID)) +	{ +		childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); +	}  }  void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group) diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 87abb16395..30acf37f82 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -505,6 +505,10 @@ void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesI  		{  			gInventory.startBackgroundFetch(cat_id);  		} + +		// Apply filter substring because it might have been changed +		// while accordion was closed. See EXT-3714. +		filter_list(inventory_list, sFilterSubString);  	}  } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a9c7b908ed..87d101b00f 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -62,7 +62,6 @@  #include "llviewermenu.h"			// for handle_preferences()  #include "llviewernetwork.h"  #include "llviewerwindow.h"			// to link into child list -#include "llurlsimstring.h"  #include "lluictrlfactory.h"  #include "llhttpclient.h"  #include "llweb.h" @@ -229,8 +228,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	LLComboBox* combo = getChild<LLComboBox>("start_location_combo"); -	LLURLSimString::setString(gSavedSettings.getString("LoginLocation"));  	std::string sim_string = LLURLSimString::sInstance.mSimString; +	if(sim_string.empty()) +	{ +		LLURLSimString::setString(gSavedSettings.getString("LoginLocation")); +	} +  	if (!sim_string.empty())  	{  		// Replace "<Type region name>" with this region name diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 961d3dec8b..e74a39c85c 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -35,6 +35,7 @@  #include "llagent.h"  #include "lldndbutton.h" +#include "lleconomy.h"  #include "llfilepicker.h"  #include "llfloaterinventory.h"  #include "llinventorybridge.h" @@ -97,7 +98,8 @@ LLPanelMainInventory::LLPanelMainInventory()  	  mSavedFolderState(NULL),  	  mFilterText(""),  	  mMenuGearDefault(NULL), -	  mMenuAdd(NULL) +	  mMenuAdd(NULL), +	  mNeedUploadCost(true)  {  	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);  	// Menu Callbacks (non contex menus) @@ -895,6 +897,8 @@ void LLPanelMainInventory::onGearButtonClick()  void LLPanelMainInventory::onAddButtonClick()  { +	setUploadCostIfNeeded(); +  	showActionMenu(mMenuAdd,"add_btn");  } @@ -1131,5 +1135,39 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType  	return true;  } +void LLPanelMainInventory::setUploadCostIfNeeded() +{ +	// *NOTE dzaporozhan +	// Upload cost is set in process_economy_data() (llviewermessage.cpp). But since we +	// have two instances of Inventory panel at the moment(and two instances of context menu), +	// call to gMenuHolder->childSetLabelArg() sets upload cost only for one of the instances. + +	if(mNeedUploadCost && mMenuAdd) +	{ +		LLMenuItemBranchGL* upload_menu = mMenuAdd->findChild<LLMenuItemBranchGL>("upload"); +		if(upload_menu) +		{ +			S32 upload_cost = -1;//LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); +			std::string cost_str; + +			// getPriceUpload() returns -1 if no data available yet. +			if(upload_cost >= 0) +			{ +				mNeedUploadCost = false; +				cost_str = llformat("%d", upload_cost); +			} +			else +			{ +				cost_str = llformat("%d", gSavedSettings.getU32("DefaultUploadCost")); +			} + +			upload_menu->getChild<LLView>("Upload Image")->setLabelArg("[COST]", cost_str); +			upload_menu->getChild<LLView>("Upload Sound")->setLabelArg("[COST]", cost_str); +			upload_menu->getChild<LLView>("Upload Animation")->setLabelArg("[COST]", cost_str); +			upload_menu->getChild<LLView>("Bulk Upload")->setLabelArg("[COST]", cost_str); +		} +	} +} +  // List Commands                                                              //  //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 69f8a14583..d9ea0da2da 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -139,10 +139,16 @@ protected:  	BOOL isActionEnabled(const LLSD& command_name);  	void onCustomAction(const LLSD& command_name);  	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); +	/** +	 * Set upload cost in "Upload" sub menu. +	 */ +	void setUploadCostIfNeeded();  private:  	LLPanel*					mListCommands;  	LLMenuGL*					mMenuGearDefault;  	LLMenuGL*					mMenuAdd; + +	bool						mNeedUploadCost;  	// List Commands                                                              //  	////////////////////////////////////////////////////////////////////////////////  }; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 5cc4d4aec6..e14a5778ad 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -574,7 +574,7 @@ BOOL LLPanelPeople::postBuild()  	getChild<LLPanel>(GROUP_TAB_NAME)->childSetAction("groups_viewsort_btn",boost::bind(&LLPanelPeople::onGroupsViewSortButtonClicked,		this));  	// Must go after setting commit callback and initializing all pointers to children. -	mTabContainer->selectTabByName(FRIENDS_TAB_NAME); +	mTabContainer->selectTabByName(NEARBY_TAB_NAME);  	// Create menus.  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; @@ -1069,7 +1069,7 @@ bool LLPanelPeople::isItemsFreeOfFriends(const std::vector<LLUUID>& uuids)  void LLPanelPeople::onAddFriendWizButtonClicked()  {  	// Show add friend wizard. -	LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(onAvatarPicked, NULL, FALSE, TRUE); +	LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelPeople::onAvatarPicked, _1, _2), FALSE, TRUE);  	// Need to disable 'ok' button when friend occurs in selection  	if (picker)	picker->setOkBtnEnableCb(boost::bind(&LLPanelPeople::isItemsFreeOfFriends, this, _1));  	LLFloater* root_floater = gFloaterView->getParentFloater(this); @@ -1130,8 +1130,7 @@ void LLPanelPeople::onActivateButtonClicked()  // static  void LLPanelPeople::onAvatarPicked(  		const std::vector<std::string>& names, -		const std::vector<LLUUID>& ids, -		void*) +		const std::vector<LLUUID>& ids)  {  	if (!names.empty() && !ids.empty())  		LLAvatarActions::requestFriendshipDialog(ids[0], names[0]); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 0d2bae1baf..da2c0e368c 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -129,8 +129,7 @@ private:  	// misc callbacks  	static void				onAvatarPicked(  								const std::vector<std::string>& names, -								const std::vector<LLUUID>& ids, -								void*); +								const std::vector<LLUUID>& ids);  	void					onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 77c2fb7c8c..245f694ac6 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -452,6 +452,7 @@ BOOL LLTeleportHistoryPanel::postBuild()  	registrar.add("TeleportHistory.ExpandAllFolders",  boost::bind(&LLTeleportHistoryPanel::onExpandAllFolders,  this));  	registrar.add("TeleportHistory.CollapseAllFolders",  boost::bind(&LLTeleportHistoryPanel::onCollapseAllFolders,  this));  	registrar.add("TeleportHistory.ClearTeleportHistory",  boost::bind(&LLTeleportHistoryPanel::onClearTeleportHistory,  this)); +	mEnableCallbackRegistrar.add("TeleportHistory.GearMenu.Enable", boost::bind(&LLTeleportHistoryPanel::isActionEnabled, this, _2));  	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	if(gear_menu) @@ -979,6 +980,49 @@ void LLTeleportHistoryPanel::onGearButtonClicked()  	LLMenuGL::showPopup(this, menu, menu_x, menu_y);  } +bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const +{ +	S32 tabs_cnt = mItemContainers.size(); + +	bool has_expanded_tabs = false; +	bool has_collapsed_tabs = false; + +	for (S32 n = 0; n < tabs_cnt; n++) +	{ +		LLAccordionCtrlTab* tab = mItemContainers.get(n); +		if (!tab->getVisible()) +			continue; + +		if (tab->getDisplayChildren()) +		{ +			has_expanded_tabs = true; +		} +		else +		{ +			has_collapsed_tabs = true; +		} + +		if (has_expanded_tabs && has_collapsed_tabs) +		{ +			break; +		} +	} + +	std::string command_name = userdata.asString(); + +	if (has_expanded_tabs && command_name == "collapse_all") +	{ +		return true; +	} + +	if (has_collapsed_tabs && command_name ==  "expand_all") +	{ +		return true; +	} + +	return false; +} +  void LLTeleportHistoryPanel::setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed)  {  	LLSD param = acc_tab->getValue(); diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index 0c0f891f32..4eeaec7705 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -97,6 +97,7 @@ private:  	void handleItemSelect(LLFlatListView* );  	LLFlatListView* getFlatListViewFromTab(LLAccordionCtrlTab *);  	void onGearButtonClicked(); +	bool isActionEnabled(const LLSD& userdata) const;  	void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed);  	bool isAccordionCollapsedByUser(LLUICtrl* acc_tab); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 330e220af3..e2da4c4475 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -36,7 +36,6 @@  #include "lltrans.h"  #include "llavataractions.h"  #include "llagent.h" -#include "llimview.h"  #include "llparticipantlist.h"  #include "llspeakers.h" @@ -230,7 +229,7 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co  {  	LLUUID uu_id = event->getValue().asUUID(); -	if (mValidateSpeakerCallback && mValidateSpeakerCallback(uu_id)) +	if (mValidateSpeakerCallback && !mValidateSpeakerCallback(uu_id))  	{  		return true;  	} diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index d15ec980db..70badbc40d 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -33,7 +33,6 @@  #include "llviewerprecompiledheaders.h"  #include "llevent.h"  #include "llpanelpeoplemenus.h" -#include "llimview.h"  #include "llavatarlist.h" // for LLAvatarItemRecentSpeakerComparator  class LLSpeakerMgr; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 8c3f3dc5fb..da3f1543dd 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -234,6 +234,11 @@ void LLScreenChannel::addToast(const LLToast::Params& p)  	if(show_toast)  	{  		mToastList.push_back(new_toast_elem); +		if(p.can_be_stored) +		{ +			// store toasts immediately - EXT-3762 +			storeToast(new_toast_elem); +		}  		updateShowToastsState();  		redrawToasts();  	}	 @@ -306,7 +311,6 @@ void LLScreenChannel::storeToast(ToastElem& toast_elem)  	if( it != mStoredToastList.end() )  		return; -	toast_elem.toast->stopTimer();  	mStoredToastList.push_back(toast_elem);  	mOnStoreToast(toast_elem.toast->getPanel(), toast_elem.id);  } @@ -343,6 +347,13 @@ void LLScreenChannel::loadStoredToastByNotificationIDToChannel(LLUUID id)  	mOverflowToastHidden = false;  	LLToast* toast = (*it).toast; + +	if(toast->getVisible()) +	{ +		// toast is already in channel +		return; +	} +  	toast->setIsHidden(false);  	toast->resetTimer();  	mToastList.push_back((*it)); diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 1965e634b6..814508daa9 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -168,11 +168,13 @@ void LLSidepanelItemInfo::refresh()  		if (getIsEditing())  		{  			setIsEditing(FALSE); -			return;  		}  	} +	 +	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); +	bool is_editable = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id); -	if (!getIsEditing() || !item) +	if (!getIsEditing() || !is_editable)  	{  		const std::string no_item_names[]={  			"LabelItemName", @@ -210,7 +212,7 @@ void LLSidepanelItemInfo::refresh()  		}  	} -	if (!item) +	if (!is_editable)  	{  		const std::string no_edit_mode_names[]={  			"BtnCreator", diff --git a/indra/newview/llsidetraypanelcontainer.cpp b/indra/newview/llsidetraypanelcontainer.cpp index 3024492ab9..f2215a2250 100644 --- a/indra/newview/llsidetraypanelcontainer.cpp +++ b/indra/newview/llsidetraypanelcontainer.cpp @@ -38,6 +38,7 @@ static LLDefaultChildRegistry::Register<LLSideTrayPanelContainer> r2("panel_cont  std::string LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME = "sub_panel_name";  LLSideTrayPanelContainer::Params::Params() + : default_panel_name("default_panel_name")  {  	// Always hide tabs.  	hide_tabs(true); @@ -45,6 +46,7 @@ LLSideTrayPanelContainer::Params::Params()  LLSideTrayPanelContainer::LLSideTrayPanelContainer(const Params& p)   : LLTabContainer(p) + , mDefaultPanelName(p.default_panel_name)  {  } @@ -53,19 +55,14 @@ void LLSideTrayPanelContainer::onOpen(const LLSD& key)  	// Select specified panel and save navigation history.  	if(key.has(PARAM_SUB_PANEL_NAME))  	{ +		//*NOTE dzaporozhan +		// Navigation history is not used after fix for EXT-3186, +		// openPreviousPanel() always opens default panel +  		// Save panel navigation history  		std::string panel_name = key[PARAM_SUB_PANEL_NAME]; -		S32 old_index = getCurrentPanelIndex();  		selectTabByName(panel_name); - -		S32 new_index = getCurrentPanelIndex(); - -		// Don't update navigation history if we are opening same panel again. -		if(old_index != new_index) -		{ -			mPanelHistory[panel_name] = old_index; -		}  	}  	// Will reopen current panel if no panel name was passed.  	getCurrentPanel()->onOpen(key); @@ -73,11 +70,13 @@ void LLSideTrayPanelContainer::onOpen(const LLSD& key)  void LLSideTrayPanelContainer::openPreviousPanel()  { -	std::string current_panel_name = getCurrentPanel()->getName(); -	panel_navigation_history_t::const_iterator it = mPanelHistory.find(current_panel_name); -	if(mPanelHistory.end() != it) +	if(!mDefaultPanelName.empty()) +	{ +		selectTabByName(mDefaultPanelName); +	} +	else  	{ -		selectTab(it->second); +		selectTab(0);  	}  } diff --git a/indra/newview/llsidetraypanelcontainer.h b/indra/newview/llsidetraypanelcontainer.h index 3f3cb552f8..beed328269 100644 --- a/indra/newview/llsidetraypanelcontainer.h +++ b/indra/newview/llsidetraypanelcontainer.h @@ -51,6 +51,7 @@ public:  	struct Params :	public LLInitParam::Block<Params, LLTabContainer::Params>  	{ +		Optional<std::string> default_panel_name;  		Params();  	}; @@ -90,6 +91,7 @@ protected:  	// Navigation history  	panel_navigation_history_t mPanelHistory; +	std::string mDefaultPanelName;  };  #endif //LL_LLSIDETRAY_PANEL_CONTAINER_H diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 23c4f00ab7..5ce3bbb9f6 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -50,7 +50,6 @@  #include "llkeyboard.h"  #include "lllineeditor.h"  #include "llmenugl.h" -#include "llimview.h"  #include "llsd.h"  #include "lltextbox.h"  #include "llui.h" @@ -226,14 +225,6 @@ LLStatusBar::~LLStatusBar()  void LLStatusBar::draw()  {  	refresh(); - -	if (isBackgroundVisible()) -	{ -		static LLUICachedControl<S32> drop_shadow_floater ("DropShadowFloater", 0); -		static LLUIColor color_drop_shadow = LLUIColorTable::instance().getColor("ColorDropShadow"); -		gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,  -			color_drop_shadow, drop_shadow_floater ); -	}  	LLPanel::draw();  } diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index bcaefc3690..a46ca1f8ac 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -52,7 +52,7 @@  #include "llspeakers.h"  //--------------------------------------------------------------------------------- -LLSysWellWindow::LLSysWellWindow(const LLSD& key) : LLDockableFloater(NULL, key), +LLSysWellWindow::LLSysWellWindow(const LLSD& key) : LLTransientDockableFloater(NULL, true,  key),  													mChannel(NULL),  													mMessageList(NULL),  													mSysWellChiclet(NULL), @@ -90,13 +90,13 @@ BOOL LLSysWellWindow::postBuild()  	// mouse up callback is not called in this case.  	setMouseDownCallback(boost::bind(&LLSysWellWindow::releaseNewMessagesState, this)); -	return LLDockableFloater::postBuild(); +	return LLTransientDockableFloater::postBuild();  }  //---------------------------------------------------------------------------------  void LLSysWellWindow::setMinimized(BOOL minimize)  { -	LLDockableFloater::setMinimized(minimize); +	LLTransientDockableFloater::setMinimized(minimize);  }  //--------------------------------------------------------------------------------- @@ -106,15 +106,15 @@ void LLSysWellWindow::onStartUpToastClick(S32 x, S32 y, MASK mask)  	setVisible(TRUE);  } -//--------------------------------------------------------------------------------- -LLSysWellWindow::~LLSysWellWindow() -{ +void LLSysWellWindow::setSysWellChiclet(LLSysWellChiclet* chiclet)  +{  +	mSysWellChiclet = chiclet; +	if(mSysWellChiclet) +		mSysWellChiclet->updateWidget(isWindowEmpty());   } -  //--------------------------------------------------------------------------------- -void LLSysWellWindow::clear() +LLSysWellWindow::~LLSysWellWindow()  { -	mMessageList->clear();  }  //--------------------------------------------------------------------------------- @@ -176,7 +176,7 @@ void LLSysWellWindow::setVisible(BOOL visible)  	// do not show empty window  	if (NULL == mMessageList || isWindowEmpty()) visible = FALSE; -	LLDockableFloater::setVisible(visible); +	LLTransientDockableFloater::setVisible(visible);  	// update notification channel state	  	if(mChannel) @@ -192,15 +192,9 @@ void LLSysWellWindow::setVisible(BOOL visible)  }  //--------------------------------------------------------------------------------- -void LLSysWellWindow::onFocusLost() -{ -	setVisible(false); -} - -//---------------------------------------------------------------------------------  void LLSysWellWindow::setDocked(bool docked, bool pop_on_undock)  { -	LLDockableFloater::setDocked(docked, pop_on_undock); +	LLTransientDockableFloater::setDocked(docked, pop_on_undock);  	// update notification channel state  	if(mChannel) @@ -287,6 +281,7 @@ void LLSysWellWindow::handleItemAdded(EItemType added_item_type)  		setResizeLimits(min_width,min_height);  	} +	mSysWellChiclet->updateWidget(isWindowEmpty());  }  void LLSysWellWindow::handleItemRemoved(EItemType removed_item_type) @@ -300,6 +295,7 @@ void LLSysWellWindow::handleItemRemoved(EItemType removed_item_type)  		// refresh list to recalculate mSeparator position  		mMessageList->reshape(mMessageList->getRect().getWidth(), mMessageList->getRect().getHeight());  	} +	mSysWellChiclet->updateWidget(isWindowEmpty());  }  bool LLSysWellWindow::anotherTypeExists(EItemType item_type) diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index 7030f4b427..833e4dd504 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -35,7 +35,7 @@  #include "llsyswellitem.h" -#include "lldockablefloater.h" +#include "lltransientdockablefloater.h"  #include "llbutton.h"  #include "llscreenchannel.h"  #include "llscrollcontainer.h" @@ -50,7 +50,7 @@ class LLScriptChiclet;  class LLSysWellChiclet; -class LLSysWellWindow : public LLDockableFloater +class LLSysWellWindow : public LLTransientDockableFloater  {  public:      LLSysWellWindow(const LLSD& key); @@ -62,7 +62,6 @@ public:  	bool isWindowEmpty();  	// Operating with items -    void clear( void );  	void removeItemByID(const LLUUID& id);  	// Operating with outfit @@ -72,14 +71,9 @@ public:  	// override LLFloater's minimization according to EXT-1216  	/*virtual*/ void	setMinimized(BOOL minimize); -	/**  -	 * Hides window when user clicks away from it (EXT-3084) -	 */ -	/*virtual*/ void onFocusLost(); -  	void onStartUpToastClick(S32 x, S32 y, MASK mask); -	void setSysWellChiclet(LLSysWellChiclet* chiclet) { mSysWellChiclet = chiclet; } +	void setSysWellChiclet(LLSysWellChiclet* chiclet);  	// size constants for the window and for its elements  	static const S32 MAX_WINDOW_HEIGHT		= 200; diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp index 1315887c37..ce00dec802 100644 --- a/indra/newview/llteleporthistory.cpp +++ b/indra/newview/llteleporthistory.cpp @@ -39,7 +39,6 @@  #include "llagent.h"  #include "llslurl.h" -#include "llurlsimstring.h"  #include "llviewercontrol.h"        // for gSavedSettings  #include "llviewerparcelmgr.h"  #include "llviewerregion.h" diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 845e71378a..051c189013 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -934,6 +934,8 @@ void LLTextureCache::setDirNames(ELLPath location)  void LLTextureCache::purgeCache(ELLPath location)  { +	LLMutexLock lock(&mHeaderMutex); +  	if (!mReadOnly)  	{  		setDirNames(location); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index a75f631769..eeedf38543 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -962,6 +962,15 @@ bool LLTextureFetchWorker::doWork(S32 param)  	if (mState == DECODE_IMAGE)  	{ +		static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled"); +		if(textures_decode_disabled) +		{ +			// for debug use, don't decode +			mState = DONE; +			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); +			return true; +		} +  		if (mDesiredDiscard < 0)  		{  			// We aborted, don't decode diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 2a56b2cd3a..96d1624cd4 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -245,7 +245,7 @@ void LLToast::setVisible(BOOL show)  	if(show)  	{  		setBackgroundOpaque(TRUE); -		if(!mTimer.getStarted()) +		if(!mTimer.getStarted() && mCanFade)  		{  			mTimer.start();  		} @@ -266,8 +266,6 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask)  {  	mOnToastHoverSignal(this, MOUSE_ENTER); -	setBackgroundOpaque(TRUE); -  	//toasts fading is management by Screen Channel  	sendChildToFront(mHideBtn); diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index e7f904023a..38103f9e41 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -211,19 +211,31 @@ void audio_update_wind(bool force_update)  		//  		if (force_update || (last_camera_water_height * camera_water_height) < 0.f)  		{ +            static LLUICachedControl<F32> rolloff("AudioLevelRolloff", 1.0f);  			if (camera_water_height < 0.f)  			{ -				gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff") * LL_ROLLOFF_MULTIPLIER_UNDER_WATER); +				gAudiop->setRolloffFactor(rolloff * LL_ROLLOFF_MULTIPLIER_UNDER_WATER);  			}  			else   			{ -				gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); +				gAudiop->setRolloffFactor(rolloff);  			}  		} -		// this line rotates the wind vector to be listener (agent) relative -		// Only use the agent's motion to compute wind noise, otherwise the world -		// feels desolate on login when you are standing still. -		gRelativeWindVec = gAgent.getFrameAgent().rotateToLocal( -gAgent.getVelocity() ); +         +        // Scale down the contribution of weather-simulation wind to the +        // ambient wind noise.  Wind velocity averages 3.5 m/s, with gusts to 7 m/s +        // whereas steady-state avatar walk velocity is only 3.2 m/s. +        // Without this the world feels desolate on first login when you are +        // standing still. +        static LLUICachedControl<F32> wind_level("AudioLevelWind", 0.5f); +        LLVector3 scaled_wind_vec = gWindVec * wind_level; +         +        // Mix in the avatar's motion, subtract because when you walk north, +        // the apparent wind moves south. +        LLVector3 final_wind_vec = scaled_wind_vec - gAgent.getVelocity(); +         +		// rotate the wind vector to be listener (agent) relative +		gRelativeWindVec = gAgent.getFrameAgent().rotateToLocal( final_wind_vec );  		// don't use the setter setMaxWindGain() because we don't  		// want to screw up the fade-in on startup by setting actual source gain diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 5e624eeec7..23bdbc7381 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -53,7 +53,6 @@  #include "llfloaterbuyland.h"  #include "llfloaterbulkpermission.h"  #include "llfloaterbump.h" -#include "llfloatercall.h"  #include "llfloatercamera.h"  #include "llfloaterchat.h"  #include "llfloaterchatterbox.h" diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 4d912c6c11..bf96472e7e 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -168,12 +168,16 @@ public:  		// 499 is the error code for host not found, timeout, etc.  		// 500 means "Internal Server error" but we decided it's okay to   		//     accept this and go past it in the MIME type probe +		// 302 means the resource can be found temporarily in a different place - added this for join.secondlife.com +		// 499 is a code specifc to join.secondlife.com (????) apparently safe to ignore  		if(	((status >= 200) && (status < 300))	||  			((status >= 400) && (status < 499))	||  -			(status == 500) ) +			(status == 500) || +			(status == 302) || +			(status == 499)  +			)  		{  			// The probe was successful. -			  			if(mime_type.empty())  			{  				// Some sites don't return any content-type header at all. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b56af3c345..40c74ccf82 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -70,6 +70,7 @@  #include "lltooltip.h"  #include "llhudeffecttrail.h"  #include "llhudmanager.h" +#include "llimview.h"  #include "llinventorybridge.h"  #include "llpanellogin.h"  #include "llpanelblockedlist.h" diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 87045d2abf..6f9e551649 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -33,7 +33,9 @@  #include "llviewerprecompiledheaders.h"  #include "llviewermessage.h" +#include "llanimationstates.h"  #include "llaudioengine.h"  +#include "llavataractions.h"  #include "lscript_byteformat.h"  #include "lleconomy.h"  #include "llfloaterreg.h" @@ -192,19 +194,25 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)  		msg->sendReliable(LLHost(payload["sender"].asString()));  		break;  	} -	case 1: -	{ -		// decline -		// We no longer notify other viewers, but we DO still send -		// the rejection to the simulator to delete the pending userop. -		msg->newMessageFast(_PREHASH_DeclineFriendship); -		msg->nextBlockFast(_PREHASH_AgentData); -		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -		msg->nextBlockFast(_PREHASH_TransactionBlock); -		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); -		msg->sendReliable(LLHost(payload["sender"].asString())); -		break; +	case 1: // Decline +	case 2: // Send IM - decline and start IM session +		{ +			// decline +			// We no longer notify other viewers, but we DO still send +			// the rejection to the simulator to delete the pending userop. +			msg->newMessageFast(_PREHASH_DeclineFriendship); +			msg->nextBlockFast(_PREHASH_AgentData); +			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +			msg->nextBlockFast(_PREHASH_TransactionBlock); +			msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); +			msg->sendReliable(LLHost(payload["sender"].asString())); + +			// start IM session +			if(2 == option) +			{ +				LLAvatarActions::startIM(payload["from_id"].asUUID()); +			}  	}  	default:  		// close button probably, possibly timed out @@ -3941,6 +3949,17 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)  			avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; +			// *HACK: Disabling flying mode if it has been enabled shortly before the agent +			// stand up animation is signaled. In this case we don't get a signal to start +			// flying animation from server, the AGENT_CONTROL_FLY flag remains set but the +			// avatar does not play flying animation, so we switch flying mode off. +			// See LLAgent::setFlying(). This may cause "Stop Flying" button to blink. +			// See EXT-2781. +			if (animation_id == ANIM_AGENT_STANDUP && gAgent.getFlying()) +			{ +				gAgent.setFlying(FALSE); +			} +  			if (i < num_source_blocks)  			{  				mesgsys->getUUIDFast(_PREHASH_AnimationSourceList, _PREHASH_ObjectID, object_id, i); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index ae9db94000..b1ad01f54f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -495,6 +495,8 @@ void LLViewerTexture::init(bool firstinit)  	mNeedsResetMaxVirtualSize = FALSE ;  	mAdditionalDecodePriority = 0.f ;	  	mParcelMedia = NULL ; +	mNumFaces = 0 ; +	mFaceList.clear() ;  }  //virtual  @@ -627,13 +629,55 @@ void LLViewerTexture::setKnownDrawSize(S32 width, S32 height)  //virtual  void LLViewerTexture::addFace(LLFace* facep)   { -	mFaceList.push_back(facep) ; +	if(mNumFaces >= mFaceList.size()) +	{ +		mFaceList.resize(2 * mNumFaces + 1) ;		 +	} +	mFaceList[mNumFaces] = facep ; +	facep->setIndexInTex(mNumFaces) ; +	mNumFaces++ ; +	mLastFaceListUpdateTimer.reset() ;  }  //virtual  void LLViewerTexture::removeFace(LLFace* facep)   { -	mFaceList.remove(facep) ; +	if(mNumFaces > 1) +	{ +		S32 index = facep->getIndexInTex() ;  +		mFaceList[index] = mFaceList[--mNumFaces] ; +		mFaceList[index]->setIndexInTex(index) ; +	} +	else  +	{ +		mFaceList.clear() ; +		mNumFaces = 0 ; +	} +	mLastFaceListUpdateTimer.reset() ; +} + +S32 LLViewerTexture::getNumFaces() const +{ +	return mNumFaces ; +} + +void LLViewerTexture::reorganizeFaceList() +{ +	static const F32 MAX_WAIT_TIME = 20.f; // seconds +	static const U32 MAX_EXTRA_BUFFER_SIZE = 4 ; + +	if(mNumFaces + MAX_EXTRA_BUFFER_SIZE > mFaceList.size()) +	{ +		return ; +	} + +	if(mLastFaceListUpdateTimer.getElapsedTimeF32() < MAX_WAIT_TIME) +	{ +		return ; +	} + +	mLastFaceListUpdateTimer.reset() ; +	mFaceList.erase(mFaceList.begin() + mNumFaces, mFaceList.end());  }  //virtual @@ -1531,23 +1575,28 @@ void LLViewerFetchedTexture::updateVirtualSize()  	{  		addTextureStats(0.f, FALSE) ;//reset  	} -	if(mFaceList.size() > 0)  + +	for(U32 i = 0 ; i < mNumFaces ; i++)  	{				 -		for(std::list<LLFace*>::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +		LLFace* facep = mFaceList[i] ; +		if(facep->getDrawable()->isRecentlyVisible())  		{ -			LLFace* facep = *iter ; -			if(facep->getDrawable()->isRecentlyVisible()) -			{ -				addTextureStats(facep->getVirtualSize()) ; -				setAdditionalDecodePriority(facep->getImportanceToCamera()) ; -			} -		}	 +			addTextureStats(facep->getVirtualSize()) ; +			setAdditionalDecodePriority(facep->getImportanceToCamera()) ; +		}  	}  	mNeedsResetMaxVirtualSize = TRUE ; +	reorganizeFaceList() ;  }  bool LLViewerFetchedTexture::updateFetch()  { +	static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled"); +	if(textures_decode_disabled) +	{ +		return false ; +	} +  	mFetchState = 0;  	mFetchPriority = 0;  	mFetchDeltaTime = 999999.f; @@ -1628,9 +1677,9 @@ bool LLViewerFetchedTexture::updateFetch()  					mComponents = mRawImage->getComponents();  					mGLTexturep->setComponents(mComponents) ; -					for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +					for(U32 i = 0 ; i < mNumFaces ; i++)  					{ -						(*iter)->dirtyTexture() ; +						mFaceList[i]->dirtyTexture() ;  					}  				}			  				mFullWidth = mRawImage->getWidth() << mRawDiscardLevel; @@ -2362,16 +2411,13 @@ void LLViewerFetchedTexture::resetFaceAtlas()  //invalidate all atlas slots for this image.  void LLViewerFetchedTexture::invalidateAtlas(BOOL rebuild_geom)  { -	for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +	for(U32 i = 0 ; i < mNumFaces ; i++)  	{ -		if(*iter) +		LLFace* facep = mFaceList[i] ; +		facep->removeAtlas() ; +		if(rebuild_geom && facep->getDrawable() && facep->getDrawable()->getSpatialGroup())  		{ -			LLFace* facep = (LLFace*)*iter ; -			facep->removeAtlas() ; -			if(rebuild_geom && facep->getDrawable() && facep->getDrawable()->getSpatialGroup()) -			{ -				facep->getDrawable()->getSpatialGroup()->setState(LLSpatialGroup::GEOM_DIRTY); -			} +			facep->getDrawable()->getSpatialGroup()->setState(LLSpatialGroup::GEOM_DIRTY);  		}  	}  } @@ -2382,7 +2428,7 @@ BOOL LLViewerFetchedTexture::insertToAtlas()  	{  		return FALSE ;  	} -	if(mFaceList.size() < 1) +	if(getNumFaces() < 1)  	{  		return FALSE ;  	}						 @@ -2406,12 +2452,10 @@ BOOL LLViewerFetchedTexture::insertToAtlas()  	//if the atlas slot pointers for some faces are null, process them later.  	ll_face_list_t waiting_list ; - -	for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +	for(U32 i = 0 ; i < mNumFaces ; i++)  	{ -		if(*iter)  		{ -			facep = (LLFace*)*iter ; +			facep = mFaceList[i] ;			  			//face can not use atlas.  			if(!facep->canUseAtlas()) @@ -2869,9 +2913,10 @@ BOOL LLViewerMediaTexture::findFaces()  	if(tex) //this media is a parcel media for tex.  	{  		const ll_face_list_t* face_list = tex->getFaceList() ; -		for(ll_face_list_t::const_iterator iter = face_list->begin(); iter != face_list->end(); ++iter) +		U32 end = tex->getNumFaces() ; +		for(U32 i = 0 ; i < end ; i++)  		{ -			mMediaFaceList.push_back(*iter) ; +			mMediaFaceList.push_back((*face_list)[i]) ;  		}  	} @@ -2950,7 +2995,7 @@ void LLViewerMediaTexture::removeMediaFromFace(LLFace* facep)  	switchTexture(facep) ;  	mIsPlaying = TRUE ; //set the flag back. -	if(mFaceList.empty()) //no face referencing to this media +	if(getNumFaces() < 1) //no face referencing to this media  	{  		stopPlaying() ;  	} @@ -3006,17 +3051,17 @@ void LLViewerMediaTexture::removeFace(LLFace* facep)  			//  			//we have some trouble here: the texture of the face is changed.  			//we need to find the former texture, and remove it from the list to avoid memory leaking. -			if(mFaceList.empty()) +			if(!mNumFaces)  			{  				mTextureList.clear() ;  				return ;  			} -			S32 end = mFaceList.size() ; +			S32 end = getNumFaces() ;  			std::vector<const LLTextureEntry*> te_list(end) ;  			S32 i = 0 ;			 -			for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +			for(U32 j = 0 ; j < mNumFaces ; j++)  			{ -				te_list[i++] = (*iter)->getTextureEntry() ;//all textures are in use. +				te_list[i++] = mFaceList[j]->getTextureEntry() ;//all textures are in use.  			}  			for(std::list< LLPointer<LLViewerTexture> >::iterator iter = mTextureList.begin();  				iter != mTextureList.end(); ++iter) @@ -3134,16 +3179,9 @@ void LLViewerMediaTexture::setPlaying(BOOL playing)  	}  	else //stop playing this media  	{ -		if(mFaceList.empty()) +		for(U32 i = mNumFaces ; i ; i--)  		{ -			return ; -		} - -		ll_face_list_t::iterator cur ; -		for(ll_face_list_t::iterator iter = mFaceList.begin(); iter!= mFaceList.end(); ) -		{ -			cur = iter++ ;  -			switchTexture(*cur) ; //cur could be removed in this function. +			switchTexture(mFaceList[i - 1]) ; //current face could be removed in this function.  		}  	}  	return ; @@ -3165,17 +3203,14 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()  	if(mIsPlaying) //media is playing  	{ -		if(mFaceList.size() > 0)  -		{				 -			for(std::list<LLFace*>::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) +		for(U32 i = 0 ; i < mNumFaces ; i++) +		{ +			LLFace* facep = mFaceList[i] ; +			if(facep->getDrawable()->isRecentlyVisible())  			{ -				LLFace* facep = *iter ; -				if(facep->getDrawable()->isRecentlyVisible()) -				{ -					addTextureStats(facep->getVirtualSize()) ; -				} -			}	 -		} +				addTextureStats(facep->getVirtualSize()) ; +			} +		}		  	}  	else //media is not in playing  	{ @@ -3195,6 +3230,7 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()  	}  	mNeedsResetMaxVirtualSize = TRUE ; +	reorganizeFaceList() ;  	return mMaxVirtualSize ;  } diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index d6fbd5d570..6aaaa4021b 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -134,7 +134,7 @@ public:  	static S32 getIndexFromCategory(S32 category) ;  	static S32 getCategoryFromIndex(S32 index) ; -	typedef std::list<LLFace*> ll_face_list_t ; +	typedef std::vector<LLFace*> ll_face_list_t ;  protected:  	virtual ~LLViewerTexture(); @@ -175,7 +175,8 @@ public:  	virtual void addFace(LLFace* facep) ;  	virtual void removeFace(LLFace* facep) ;  -	const ll_face_list_t* getFaceList() const {return &mFaceList ;} +	S32 getNumFaces() const; +	const ll_face_list_t* getFaceList() const {return &mFaceList;}  	void generateGLTexture() ;  	void destroyGLTexture() ; @@ -239,13 +240,14 @@ public:  	/*virtual*/ void updateBindStatsForTester() ;  protected:  	void cleanup() ; -	void init(bool firstinit) ;		 +	void init(bool firstinit) ;	 +	void reorganizeFaceList() ;  private:  	//note: do not make this function public.  	/*virtual*/ LLImageGL* getGLTexture() const ;  	virtual void switchToCachedImage(); - +	  protected:  	LLUUID mID;  	S32 mBoostLevel;				// enum describing priority level @@ -257,14 +259,16 @@ protected:  	mutable S8  mNeedsGLTexture;  	mutable BOOL mNeedsResetMaxVirtualSize ;  	mutable F32 mAdditionalDecodePriority;  // priority add to mDecodePriority. -	LLFrameTimer mLastReferencedTimer; - -	ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture +	LLFrameTimer mLastReferencedTimer;	  	//GL texture  	LLPointer<LLImageGL> mGLTexturep ;  	S8 mDontDiscard;			// Keep full res version of this image (for UI, etc) +	ll_face_list_t    mFaceList ; //reverse pointer pointing to the faces using this image as texture +	U32               mNumFaces ; +	LLFrameTimer      mLastFaceListUpdateTimer ; +  	//do not use LLPointer here.  	LLViewerMediaTexture* mParcelMedia ; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 5c86822787..1400253176 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -182,7 +182,6 @@  #include "llworldmapview.h"  #include "pipeline.h"  #include "llappviewer.h" -#include "llurlsimstring.h"  #include "llviewerdisplay.h"  #include "llspatialpartition.h"  #include "llviewerjoystick.h" diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 993853b9a6..18cdd23ed9 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -33,7 +33,6 @@  #include "llviewerprecompiledheaders.h"  #include "llagent.h" -#include "llfloatercall.h"  #include "llfloaterreg.h"  #include "llimview.h"  #include "llnotifications.h" diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 897a107c0f..ad598f25f3 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -578,6 +578,8 @@ with the same filename but different name    <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" />    <texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true"             scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" /> +  <texture name="Toast_Over" file_name="windows/Toast_Over.png" preload="true" +           scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />    <texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" />    <texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" /> 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 d7f8114c34..90105f92fd 100644 --- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml +++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml @@ -3,6 +3,7 @@  <!-- All buttons in the Favorites bar will be created from this one -->  <button   follows="left|bottom" + font_halign="center"   halign="center"   height="15"   image_disabled="transparent.j2c" @@ -14,12 +15,16 @@   image_pressed="Favorite_Link_Over"   image_pressed_selected="Favorite_Link_Over"   hover_glow_amount="0.15" + label_shadow="false"   layout="topleft"   left="0"   name="favorites_bar_btn" + pad_bottom="-1" + pad_left="11" + pad_right="7"   tab_stop="false"   pad_right="10"   pad_left="10"    top="0"   use_ellipses="true" - width="120" /> + width="140" /> diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 94686f0bb0..0dc7d62b19 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -12,16 +12,6 @@   title="APPEARANCE"   top_delta="-185"   width="524"> - <check_box -             enabled="true" -             height="23" -             label="Show Attachments in Previews" -             layout="topleft" -             left="110" -             name="show attachments" -             tool_tip="Display attachments on your avatar in the preview panels below." -             top="20" -             width="146" />      <tab_container       height="517"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml index b9ce11600f..1d67123726 100644 --- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml @@ -43,6 +43,13 @@       left_delta="19"       top="35"       width="36" /> +    <group_icon +     enabled="false" +     follows="left|top" +     height="36" +     layout="topleft" +     top="35" +     width="36" />      <text       clip_partial="true"       font="SansSerifLarge" diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml index 104ac2143f..eb772cc0bd 100644 --- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml @@ -39,6 +39,13 @@       left_delta="19"       top="35"       width="36" /> +    <group_icon +     enabled="false" +     follows="left|top" +     height="36" +     layout="topleft" +     top="35" +     width="36" />      <text       font="SansSerifLarge"       height="20" 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 474b703ae5..1fa613468f 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -5,7 +5,7 @@   can_close="false"   height="270"   layout="topleft" - min_height="146" + min_height="122"   min_width="190"   name="floater_voice_controls"   title="Voice Controls" @@ -32,6 +32,10 @@       name="no_one_near">          No one near      </string> +    <string +     name="max_visible_items"> +        5 +    </string>      <panel       bevel_style="out"       border="true" @@ -83,14 +87,58 @@               visible="true"               width="20" />          </panel> -        <button -         follows="left|right|top" -         height="24" -         label="Leave Call" -         left="91"  -         name="leave_call_btn" -         top_pad="6"  -         width="100" /> +        <layout_stack +         border_size="0" +         clip="false" +         follows="all" +         height="28" +         layout="topleft" +         left="10" +         mouse_opaque="false" +         name="leave_call_stack" +         orientation="horizontal" +         top_pad="5" +         width="263"> +         <layout_panel +          auto_resize="true" +          follows="left|right" +          height="26" +          layout="topleft" +          min_height="23" +          min_width="5" +          mouse_opaque="false" +          name="left_anchor" +          width="80"/> +         <layout_panel +          auto_resize="false" +          follows="left|right" +          height="26" +          layout="topleft" +          mouse_opaque="false" +          min_height="24" +          min_width="100" +          name="leave_call_btn_panel" +          width="100"> +           <button +            follows="left|right" +            height="24" +            label="Leave Call" +            left="0" +            name="leave_call_btn" +            top="0" +            width="100" /> +         </layout_panel> +         <layout_panel +         auto_resize="true" +         follows="left|right" +         height="26" +         layout="topleft" +         mouse_opaque="false" +         min_height="24" +         min_width="5" +         name="right_anchor" +         width="80"/> +        </layout_stack>      </panel>      <avatar_list       follows="all" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 65a545d2ed..861eb9009a 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -15,7 +15,7 @@                  orientation="vertical"                  top="19">      <layout_panel auto_resize="false" -                  height="65" +                  height="60"                    mouse_opaque="false"                    name="nav_bar_container"                    width="1024" diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml index 6768d7fccb..134b331514 100644 --- a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml @@ -13,12 +13,18 @@       name="Expand all folders">          <menu_item_call.on_click           function="TeleportHistory.ExpandAllFolders" /> +        <on_enable +         function="TeleportHistory.GearMenu.Enable" +         parameter="expand_all" />      </menu_item_call>      <menu_item_call       label="Collapse all folders"       name="Collapse all folders">          <menu_item_call.on_click           function="TeleportHistory.CollapseAllFolders" /> +        <on_enable +         function="TeleportHistory.GearMenu.Enable" +         parameter="collapse_all" />      </menu_item_call>      <menu_item_separator layout="topleft" />      <menu_item_call diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9d3c31c4e6..95a7374e7b 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5121,6 +5121,10 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O         index="1"         name="Decline"         text="Decline"/> +      <button +       index="2" +       name="Send IM" +       text="Send IM"/>      </form>    </notification> diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml index 527ec4e007..96722ce278 100644 --- a/indra/newview/skins/default/xui/en/panel_bars.xml +++ b/indra/newview/skins/default/xui/en/panel_bars.xml @@ -9,7 +9,7 @@   width="1024">    <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0">      <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/> -    <panel auto_resize="false" width="1024" height="65" name="navigation bar" filename="panel_navigation_bar.xml"/> +    <panel auto_resize="false" width="1024" height="60" name="navigation bar" filename="panel_navigation_bar.xml"/>      <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all">        <panel auto_resize="true" name="floater_view" height="500"/>        <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 00eba94f47..b92aa10ffc 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -47,7 +47,7 @@           min_height="23"           width="310"           top="4" -         min_width="192" +         min_width="188"           name="chat_bar"           user_resize="false"           filename="panel_nearby_chat_bar.xml" /> @@ -88,9 +88,9 @@              layout="topleft"              left="0"              name="DUMMY" -            min_width="4" +            min_width="3"              top="0" -            width="4"/> +            width="3"/>          <layout_panel           mouse_opaque="false"           auto_resize="false" @@ -126,10 +126,10 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4" +         min_width="3"           name="DUMMY"           top="0" -         width="4"/> +         width="3"/>          <layout_panel           mouse_opaque="false"           auto_resize="false" @@ -168,10 +168,10 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4" +         min_width="3"           name="DUMMY"           top="0" -         width="4"/> +         width="3"/>          <layout_panel           mouse_opaque="false"           auto_resize="false" @@ -211,10 +211,10 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4" +         min_width="3"           name="DUMMY"           top="0" -         width="4"/> +         width="3"/>          <layout_panel           mouse_opaque="false"           auto_resize="false" @@ -252,7 +252,7 @@           top="0"           name="chiclet_list_panel"           width="189" -         min_width="100" +         min_width="110"           user_resize="false"           auto_resize="true">  <!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same @@ -341,7 +341,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.               top="4"               width="35">               <!-- -Emulate 4 states of button by background images, see detains in EXT-3147. The same should be for notification_well button +Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button  xml attribute           Description  image_unselected        "Unlit" - there are no new messages  image_selected          "Unlit" + "Selected" - there are no new messages and the Well is open @@ -364,6 +364,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well                   name="Unread IM messages"                   pad_left="0"                   pad_right="0" +                 tool_tip="Conversations"                   width="35" >                      <button.init_callback                       function="Button.SetDockableFloaterToggle" @@ -378,7 +379,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well           layout="topleft"           min_height="28"           top="0" -         left_pad="4" +         left_pad="3"           name="notification_well_panel"           width="35"           min_width="35" @@ -409,6 +410,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well                 image_overlay="Notices_Unread"                 image_overlay_alignment="center"                 pad_right="5" +               tool_tip="Notifications"                 width="35" >                    <button.init_callback                     function="Button.SetDockableFloaterToggle" diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index bbf86089cb..be3c0bbd96 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -293,7 +293,7 @@           right="-10"           name="partner_edit_link"           value="[[URL] Edit]" -         width="150" /> +         width="50" />          <panel           follows="left|top|right"           height="15" diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index d51893793c..10381d3987 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -37,7 +37,7 @@       height="485"       layout="topleft"       name="profile_scroll" -     reserve_scroll_corner="true" +     reserve_scroll_corner="false"       opaque="true"       top="0"       width="313"> @@ -48,7 +48,7 @@           layout="topleft"           top="0"           left="0" -         width="313"> +         width="297">  	  <panel           follows="left|top"           height="117" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 4d814a4d52..0f9b095d8c 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -4,7 +4,7 @@   background_visible="true"   bg_opaque_color="MouseGray"   follows="left|top|right" - height="65" + height="60"   layout="topleft"   name="navigation_bar"   chrome="true" @@ -18,7 +18,7 @@  	 visible="true"  	 left="0"  	 top="0" -	 height="65" +	 height="60"  	 width="600"/>  	<icon  	 follows="all" @@ -29,7 +29,7 @@  	 visible="false"  	 left="0"  	 top="0" -	 height="65" +	 height="60"  	 width="600"/>  	<panel  	 background_visible="false" @@ -155,7 +155,7 @@       left="0"       name="favorite"       image_drag_indication="arrow_down.tga" -   bottom="62" +   bottom="57"     width="590">      <chevron_button name=">>"                       image_unselected="TabIcon_Close_Off" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index 2543656a8b..f09a0e03ed 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -9,7 +9,7 @@   top="21"   width="310">      <string name="min_width"> -        192 +        188      </string>      <string name="max_width">          320 @@ -21,14 +21,14 @@       height="23"       label="Click here to chat."       layout="topleft" -     left_delta="7" +     left_delta="3"       text_pad_right="25"       left="0"       max_length="512"       name="chat_box"       tool_tip="Press Enter to say, Ctrl+Enter to shout"       top="1" -     width="279" /> +     width="283" />      <output_monitor       auto_update="true"       follows="right" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 41bd7f3dcc..c98555735a 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -329,10 +329,9 @@        text_readonly_color="LabelDisabledColor"        bg_writeable_color="LtGray"        use_ellipses="false" -      bg_visible="false" -      border_visible="false" +      bg_visible="true" +      border_visible="true"        hover="false" -      text_color="LabelTextColor"       commit_on_focus_lost = "true"       follows="left|top"       height="50" 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 b14089c3a2..677d0de243 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 @@ -29,12 +29,14 @@  	  height="75"  	  layout="topleft"  	  left="0" +	  mouse_opaque="false"  	  orientation="horizontal"  	  top="100">  	<!-- outer layout_panels center the inner one -->  	<layout_panel  		name="left_bookend"  		width="0" +	  mouse_opaque="false"  		layout="topleft"  		user_resize="false" />  	<layout_panel @@ -42,6 +44,7 @@  		auto_resize="false"  		user_resize="false"  		layout="topleft" +	  mouse_opaque="false"  		min_width="22"  		width="22"  		top="4"> @@ -263,10 +266,12 @@  		  width="38"  		  right="-2"  		  top="-1" +     	mouse_opaque="false"  		  orientation="horizontal">  		<layout_panel  			layout="topleft"  			width="16" +     	mouse_opaque="false"  			auto_resize="false"  			user_resize="false">  		  <icon @@ -282,6 +287,7 @@  		<layout_panel  			layout="topleft"  			width="16" +     	mouse_opaque="false"  			auto_resize="false"  			user_resize="false">  		  <icon diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index 63b7112c17..61f0fa3099 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -31,6 +31,24 @@    </sidetray_tab>    <sidetray_tab +    name="sidebar_me" +    help_topic="sidebar_me" +    tab_title="My Profile" +    description="Edit your public profile and Picks." +    image="TabIcon_Me_Off" +    image_selected="TabIcon_Me_Selected" +    mouse_opaque="false" +    background_visible="true" +  > +      <panel +        class="panel_me" +        name="panel_me" +        filename="panel_me.xml" +        label="Me" +      /> +  </sidetray_tab> + +  <sidetray_tab      name="sidebar_people"      help_topic="sidebar_people"      tab_title="People" @@ -42,6 +60,7 @@    >      <panel_container        name="panel_container" +      default_panel_name="panel_people"        width="333"      >        <panel @@ -93,20 +112,21 @@    </sidetray_tab>    <sidetray_tab -    name="sidebar_me" -    help_topic="sidebar_me" -    tab_title="My Profile" -    description="Edit your public profile and Picks." -    image="TabIcon_Me_Off" -    image_selected="TabIcon_Me_Selected" +    name="sidebar_inventory" +    help_topic="sidebar_inventory" +    tab_title="My Inventory" +    description="Browse your inventory." +    image="TabIcon_Things_Off" +    image_selected="TabIcon_Things_Selected"      mouse_opaque="false"      background_visible="true"    >        <panel -        class="panel_me" -        name="panel_me" -        filename="panel_me.xml" -        label="Me" +        class="sidepanel_inventory" +        name="sidepanel_inventory" +        filename="sidepanel_inventory.xml" +        label="Edit Inventory" +        font="SansSerifBold"        />    </sidetray_tab> @@ -129,23 +149,4 @@        />    </sidetray_tab> -  <sidetray_tab -    name="sidebar_inventory" -    help_topic="sidebar_inventory" -    tab_title="My Inventory" -    description="Browse your inventory." -    image="TabIcon_Things_Off" -    image_selected="TabIcon_Things_Selected" -    mouse_opaque="false" -    background_visible="true" -  > -      <panel -        class="sidepanel_inventory" -        name="sidepanel_inventory" -        filename="sidepanel_inventory.xml" -        label="Edit Inventory" -        font="SansSerifBold" -      /> -  </sidetray_tab> -  </side_tray> diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml index 707b24c92c..ba2d61afb7 100644 --- a/indra/newview/skins/default/xui/en/panel_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_toast.xml @@ -14,7 +14,7 @@   left="0"   top="0"   follows="right|bottom" - bg_opaque_image="Toast_Background" + bg_opaque_image="Toast_Over"   bg_alpha_image="Toast_Background"   can_minimize="false"   can_tear_off="false" diff --git a/indra/newview/skins/default/xui/en/widgets/group_icon.xml b/indra/newview/skins/default/xui/en/widgets/group_icon.xml new file mode 100644 index 0000000000..58d5e19fcc --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/group_icon.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<group_icon + default_icon_name="Generic_Group" + image_name="Generic_Group" + name="group_icon" /> diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml index 7781bdd066..68cf082c35 100644 --- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml +++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml @@ -11,14 +11,14 @@                   image_unselected="SegmentedBtn_Left_Off"  		 image_pressed="SegmentedBtn_Left_Selected_Press"  		 image_pressed_selected="SegmentedBtn_Left_Selected_Press" -    name="left" +    name="speak_btn"      label="Speak"      label_selected="Speak"      tab_stop="false"      />    <show_button      follows="right"  -    name="right" +    name="speak_flyout_btn"      label=""      left="0"      top="0" | 
