diff options
| author | Merov Linden <merov@lindenlab.com> | 2012-08-23 20:02:43 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2012-08-23 20:02:43 -0700 | 
| commit | b19e6c295972c83a2637a29007bc5d0a92711ea9 (patch) | |
| tree | b9df565b6ec84ff6c55097431392ec792a6dc0cb /indra/newview | |
| parent | e537d6477dfa1eea86dc16c767b793fb530d1ebc (diff) | |
| parent | 6d84272d38a4d09819ae03f4d967195ec3bd660b (diff) | |
Pull merge from richard/viewer-chui
Diffstat (limited to 'indra/newview')
39 files changed, 587 insertions, 268 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c49c625dbd..b94c33587b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -45,7 +45,10 @@ include(VisualLeakDetector)  include(GLOD)  include(CMakeCopyIfDifferent) -add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +if (NOT HAVOK_TPV) +   # When using HAVOK_TPV, the library is precompiled, so no need for this +   add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +endif (NOT HAVOK_TPV)  include_directories(      ${DBUSGLIB_INCLUDE_DIRS} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 47e944bc26..61bc58b1df 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5045,7 +5045,7 @@      <key>LoginLocation</key>      <map>        <key>Comment</key> -      <string>Login location ('last', 'home')</string> +      <string>Default Login location ('last', 'home') preference</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -6145,7 +6145,7 @@      <key>NextLoginLocation</key>      <map>        <key>Comment</key> -      <string>Location to log into by default.</string> +      <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tifBinary files differ new file mode 100644 index 0000000000..ba6f30fa0e --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tifBinary files differ new file mode 100644 index 0000000000..830d5692fd --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tifBinary files differ new file mode 100644 index 0000000000..e05284214a --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tifBinary files differ new file mode 100644 index 0000000000..c4822adf64 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tifBinary files differ new file mode 100644 index 0000000000..5166af6e05 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 1c81459912..08a1a237f5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2669,14 +2669,6 @@ bool LLAppViewer::initConfiguration()  		}  	} -	// If automatic login from command line with --login switch -	// init StartSLURL location. In interactive login, LLPanelLogin -	// will take care of it. -	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl")) -	{ -		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); -	} -  	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))  	{  	    // @@ -2724,12 +2716,27 @@ bool LLAppViewer::initConfiguration()          }  	} -   	// need to do this here - need to have initialized global settings first +   	// NextLoginLocation is set from the command line option  	std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );  	if ( !nextLoginLocation.empty() )  	{ +		LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;  		LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation)); -	}; +	} +	else if (   (   clp.hasOption("login") || clp.hasOption("autologin")) +			 && !clp.hasOption("url") +			 && !clp.hasOption("slurl")) +	{ +		// If automatic login from command line with --login switch +		// init StartSLURL location. +		std::string start_slurl_setting = gSavedSettings.getString("LoginLocation"); +		LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL; +		LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting)); +	} +	else +	{ +		// the login location will be set by the login panel (see LLPanelLogin) +	}  	gLastRunVersion = gSavedSettings.getString("LastRunVersion"); diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index eca964442b..606d77f645 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -342,10 +342,10 @@ void LLVolumeImplFlexible::doIdleUpdate()  	if (drawablep)  	{  		//LLFastTimer ftm(FTM_FLEXIBLE_UPDATE); -		 +  		//ensure drawable is active  		drawablep->makeActive(); -			 +  		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))  		{  			bool visible = drawablep->isVisible(); @@ -364,35 +364,35 @@ void LLVolumeImplFlexible::doIdleUpdate()  				if	(visible)  				{  					if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1) && -					mVO->getPixelArea() > 256.f) -					{ -						U32 id; -				 -						if (mVO->isRootEdit()) -						{ -							id = mID; -						} -						else -						{ -							LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); -							id = parent->getVolumeInterfaceID(); -						} - -						if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) -						{ +				mVO->getPixelArea() > 256.f) +			{ +				U32 id; + +				if (mVO->isRootEdit()) +				{ +					id = mID; +				} +				else +				{ +					LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); +					id = parent->getVolumeInterfaceID(); +				} + +				if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) +				{  							sUpdateDelay[mInstanceIndex] = (S32) update_period-1; -							updateRenderRes(); +					updateRenderRes(); -							gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); -						} -					} +					gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE);  				} +			} +		}  				else  				{  					sUpdateDelay[mInstanceIndex] = (S32) update_period; -				} -			} +	} +}  		}  	} diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 99d262344c..69c9d94dfa 100644 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); -	LLSD scrollListData = LLSD::emptyArray(); -  	for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  	{ -		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get()); -		LLSD element = buildCharacterScrollListData(characterPtr); -		scrollListData.append(element); +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get()); +		llassert(characterPtr != NULL); -		if (characterPtr->hasOwner() && !characterPtr->hasOwnerName()) -		{ -			rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID()); -		} +		LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr); +		addObjectToScrollList(objectPtr, scrollListItemData);  	} - -	return scrollListData;  }  void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange() @@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("character_owner_group")) +		: pObject->getOwnerName()) +		: getString("character_owner_loading")) +		: getString("character_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const  {  	return mBeaconColor; @@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked()  	}  } -LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const +LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const  { -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	columns[0]["column"] = "name";  	columns[0]["value"] = pCharacterPtr->getName(); @@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[1]["value"] = pCharacterPtr->getDescription();  	columns[2]["column"] = "owner"; -	columns[2]["value"] = (pCharacterPtr->hasOwner() -			? (pCharacterPtr->hasOwnerName() -			? (pCharacterPtr->isGroupOwned() -			? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group")) -			: pCharacterPtr->getOwnerName()) -			: getString("character_owner_loading")) -			: getString("character_owner_unknown")); +	columns[2]["value"] = getOwnerName(pCharacterPtr);  	S32 cpuTime = llround(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime); @@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[4]["column"] = "altitude";  	columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]); -	LLSD element; -	element["id"] = pCharacterPtr->getUUID().asString(); -	element["column"] = columns; - -	return element; +	return columns;  }  void LLFloaterPathfindingCharacters::updateStateOnDisplayControls() diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h index ef389ad428..4021f4f119 100644 --- a/indra/newview/llfloaterpathfindingcharacters.h +++ b/indra/newview/llfloaterpathfindingcharacters.h @@ -62,11 +62,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -74,7 +76,7 @@ protected:  private:  	void onShowPhysicsCapsuleClicked(); -	LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const; +	LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const;  	void updateStateOnDisplayControls();  	void showSelectedCharacterCapsules(); diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..0fe0e151fb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	bool isFilteringDescription = !descriptionFilter.empty();  	bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); -	LLSD scrollListData = LLSD::emptyArray();  	const LLVector3& avatarPosition = gAgent.getPositionAgent();  	if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  		LLStringUtil::toUpper(descriptionFilter);  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); +  			std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName());  			std::string linksetDescription = linksetPtr->getDescription();  			LLStringUtil::toUpper(linksetName);  			LLStringUtil::toUpper(linksetDescription); +  			if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) &&  				(!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) &&  				(!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter)))  			{ -				LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -				scrollListData.append(element); - -				if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -				{ -					rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -				} +				LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +				addObjectToScrollList(objectPtr, scrollListItemData);  			}  		}  	} @@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	{  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); -			LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -			scrollListData.append(element); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); -			if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -			{ -				rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -			} +			LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +			addObjectToScrollList(objectPtr, scrollListItemData);  		}  	} - -	return scrollListData;  }  void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -286,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) +		: pObject->getOwnerName()) +		: getString("linkset_owner_loading")) +		: getString("linkset_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const  {  	return mBeaconColor; @@ -373,10 +383,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()  	}  } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const  {  	llassert(pLinksetPtr != NULL); -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	if (pLinksetPtr->isTerrain())  	{ @@ -389,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[2]["column"] = "owner";  		columns[2]["value"] = getString("linkset_terrain_owner"); -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = getString("linkset_terrain_land_impact"); +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = getString("linkset_terrain_scripted"); -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = getString("linkset_terrain_dist_from_you"); +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = getString("linkset_terrain_land_impact"); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = getString("linkset_terrain_dist_from_you");  	}  	else  	{ @@ -404,22 +417,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[1]["value"] = pLinksetPtr->getDescription();  		columns[2]["column"] = "owner"; -		columns[2]["value"] = (pLinksetPtr->hasOwner() -			? (pLinksetPtr->hasOwnerName() -			? (pLinksetPtr->isGroupOwned() -			? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) -			: pLinksetPtr->getOwnerName()) -			: getString("linkset_owner_loading")) -			: getString("linkset_owner_unknown")); - -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); +		columns[2]["value"] = getOwnerName(pLinksetPtr); + +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = (pLinksetPtr->hasIsScripted() +			? (pLinksetPtr->isScripted() +			? getString("linkset_is_scripted") +			: getString("linkset_is_not_scripted")) +			: getString("linkset_is_unknown_scripted")); + +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));  	} -	columns[5]["column"] = "linkset_use"; +	columns[6]["column"] = "linkset_use";  	std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse());  	if (pLinksetPtr->isTerrain())  	{ @@ -437,25 +451,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  	{  		linksetUse += (" " + getString("linkset_is_restricted_non_volume_state"));  	} -	columns[5]["value"] = linksetUse; - -	columns[6]["column"] = "a_percent"; -	columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); +	columns[6]["value"] = linksetUse; -	columns[7]["column"] = "b_percent"; -	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); +	columns[7]["column"] = "a_percent"; +	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); -	columns[8]["column"] = "c_percent"; -	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); +	columns[8]["column"] = "b_percent"; +	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); -	columns[9]["column"] = "d_percent"; -	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); +	columns[9]["column"] = "c_percent"; +	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); -	LLSD element; -	element["id"] = pLinksetPtr->getUUID().asString(); -	element["column"] = columns; +	columns[10]["column"] = "d_percent"; +	columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); -	return element; +	return columns;  }  LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const @@ -490,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin  	return isShowWarning;  } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	if (pLinksetUse != LLPathfindingLinkset::kUnknown) +	{ +		LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); +		if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) +		{ +			const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get()); +			isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); +		} +	} + +	return isShowWarning; +} +  bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; @@ -559,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit()  {  	LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); +	bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse);  	bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse);  	bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); -	if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) +	if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)  	{  		LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse);  		LLSD substitutions;  		substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse);  		substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); -		std::string notificationName; -		if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) +		// Build one of the following notifications names +		//   - PathfindingLinksets_WarnOnPhantom +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted +		//   - PathfindingLinksets_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + +		std::string notificationName = "PathfindingLinksets"; + +		if (showPhantomToggleWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; +			notificationName += "_WarnOnPhantom";  		} -		else if (showUnmodifiablePhantomWarning) +		if (showUnmodifiablePhantomWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; +			notificationName += "_MismatchOnRestricted";  		} -		else +		if (showCannotBeVolumeWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; +			notificationName += "_MismatchOnVolume";  		} +  		LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2));  	}  	else diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 342a64fc77..6538308122 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -58,11 +58,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -78,10 +80,11 @@ private:  	void clearFilters();  	void updateEditFieldValues(); -	LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; +	LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;  	LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void updateStateOnEditFields(); diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index e246265be9..20c1215bcb 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -29,6 +29,8 @@  #include "llfloaterpathfindingobjects.h" +#include <string> +#include <map>  #include <vector>  #include <boost/bind.hpp> @@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey)  void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  { -	  	if (mGodLevelChangeSlot.connected())  	{  		mGodLevelChangeSlot.disconnect(); @@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  	{  		mObjectsSelection.clear();  	} + +	if (pIsAppQuitting) +	{ +		clearAllObjects(); +	}  }  void LLFloaterPathfindingObjects::draw() @@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  	mReturnButton(NULL),  	mDeleteButton(NULL),  	mTeleportButton(NULL), -	mLoadingAvatarNames(),  	mDefaultBeaconColor(),  	mDefaultBeaconTextColor(),  	mErrorTextColor(),  	mWarningTextColor(),  	mMessagingState(kMessagingUnknown),  	mMessagingRequestId(0U), +	mMissingNameObjectsScrollListItems(),  	mObjectList(),  	mObjectsSelection(),  	mHasObjectsToBeSelected(false), @@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects()  { +	clearAllObjects();  }  BOOL LLFloaterPathfindingObjects::postBuild() @@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	S32 origScrollPosition = mObjectsScrollList->getScrollPos();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	if ((mObjectList != NULL) && !mObjectList->isEmpty())  	{ -		LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList); -		llassert(scrollListData.isArray()); +		buildObjectsScrollList(mObjectList); -		LLScrollListCell::Params cellParams; -		cellParams.font = LLFontGL::getFontSansSerif(); - -		for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter) +		mObjectsScrollList->selectMultiple(mObjectsToBeSelected); +		if (mHasObjectsToBeSelected)  		{ -			const LLSD &rowElement = *rowElementIter; - -			LLScrollListItem::Params rowParams; -			llassert(rowElement.has("id")); -			llassert(rowElement.get("id").isString()); -			rowParams.value = rowElement.get("id"); - -			llassert(rowElement.has("column")); -			llassert(rowElement.get("column").isArray()); -			const LLSD &columnElement = rowElement.get("column"); -			for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter) -			{ -				const LLSD &cellElement = *cellIter; - -				llassert(cellElement.has("column")); -				llassert(cellElement.get("column").isString()); -				cellParams.column = cellElement.get("column").asString(); - -				llassert(cellElement.has("value")); -				llassert(cellElement.get("value").isString()); -				cellParams.value = cellElement.get("value").asString(); - -				rowParams.columns.add(cellParams); -			} - -			mObjectsScrollList->addRow(rowParams); +			mObjectsScrollList->scrollToShowSelected(); +		} +		else +		{ +			mObjectsScrollList->setScrollPos(origScrollPosition);  		} -	} - -	mObjectsScrollList->selectMultiple(mObjectsToBeSelected); -	if (mHasObjectsToBeSelected) -	{ -		mObjectsScrollList->scrollToShowSelected(); -	} -	else -	{ -		mObjectsScrollList->setScrollPos(origScrollPosition);  	}  	mObjectsToBeSelected.clear(); @@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	updateControlsOnScrollListChange();  } -LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(0); -	LLSD nullObjs = LLSD::emptyArray(); -	return nullObjs;  } -void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId) +void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData)  { -	std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId); -	if (iter == mLoadingAvatarNames.end()) +	LLScrollListCell::Params cellParams; +	cellParams.font = LLFontGL::getFontSansSerif(); + +	LLScrollListItem::Params rowParams; +	rowParams.value = pObjectPtr->getUUID().asString(); + +	llassert(pScrollListItemData.isArray()); +	for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); +		cellIter != pScrollListItemData.endArray(); ++cellIter) +	{ +		const LLSD &cellElement = *cellIter; + +		llassert(cellElement.has("column")); +		llassert(cellElement.get("column").isString()); +		cellParams.column = cellElement.get("column").asString(); + +		llassert(cellElement.has("value")); +		llassert(cellElement.get("value").isString()); +		cellParams.value = cellElement.get("value").asString(); + +		rowParams.columns.add(cellParams); +	} + +	LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + +	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mLoadingAvatarNames.insert(pAvatarId); -		LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2)); +		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } @@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const +{ +	llassert(0); +	std::string returnVal; +	return returnVal; +} +  const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const  {  	return mDefaultBeaconColor; @@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects()  {  	selectNoneObjects();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	mObjectList.reset();  } @@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)  	requestGetObjects();  } -void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName) +void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject)  { -	llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end()); -	mLoadingAvatarNames.erase(pAvatarId); -	if (mLoadingAvatarNames.empty()) +	llassert(pObject != NULL); +	const std::string uuid = pObject->getUUID().asString(); +	scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid); +	if (scrollListItemIter != mMissingNameObjectsScrollListItems.end())  	{ -		rebuildObjectsScrollList(); +		LLScrollListItem *scrollListItem = scrollListItemIter->second; +		llassert(scrollListItem != NULL); + +		LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex()); +		LLSD ownerName = getOwnerName(pObject); + +		scrollListCell->setValue(ownerName); + +		mMissingNameObjectsScrollListItems.erase(scrollListItemIter);  	}  } diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h index e8d446b598..4024e15fd6 100644 --- a/indra/newview/llfloaterpathfindingobjects.h +++ b/indra/newview/llfloaterpathfindingobjects.h @@ -27,7 +27,8 @@  #ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H  #define LL_LLFLOATERPATHFINDINGOBJECTS_H -#include <set> +#include <string> +#include <map>  #include <boost/signals2.hpp> @@ -80,14 +81,15 @@ protected:  	void                               handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);  	void                               rebuildObjectsScrollList(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); - -	void                               rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); +	void                               addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);  	virtual void                       updateControlsOnScrollListChange();  	virtual void                       updateControlsOnInWorldSelectionChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual const LLColor4             &getBeaconTextColor() const;  	virtual S32                        getBeaconWidth() const; @@ -126,7 +128,7 @@ private:  	void                   onRegionBoundaryCrossed();  	void                   onGodLevelChange(U8 pGodLevel); -	void                   handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName); +	void                   handleObjectNameResponse(const LLPathfindingObject *pObject);  	void                   updateMessagingStatus();  	void                   updateStateOnListControls(); @@ -151,8 +153,6 @@ private:  	LLButton                           *mDeleteButton;  	LLButton                           *mTeleportButton; -	std::set<LLUUID>                   mLoadingAvatarNames; -  	LLColor4                           mDefaultBeaconColor;  	LLColor4                           mDefaultBeaconTextColor;  	LLColor4                           mErrorTextColor; @@ -161,6 +161,9 @@ private:  	EMessagingState                    mMessagingState;  	LLPathfindingManager::request_id_t mMessagingRequestId; +	typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map; +	scroll_list_item_map               mMissingNameObjectsScrollListItems; +  	LLPathfindingObjectListPtr         mObjectList;  	LLObjectSelectionHandle            mObjectsSelection; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 4d38f5834e..7cf358c8e5 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -133,7 +133,6 @@ public:  		if(tools_floater)  		{  			tools_floater->updateLandImpacts(); -			tools_floater->dirty();  		}  	}  }; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 215a08b34a..49a856de61 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1153,7 +1153,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,  		default:  			llinfos << "Unhandled asset type (llassetstorage.h): "  					<< (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << llendl; -			break;	 +			break;  	}  	if (new_listener) @@ -1548,7 +1548,7 @@ void LLItemBridge::buildDisplayName() const  	else  	{  		mDisplayName.assign(LLStringUtil::null); -	} +}  	mSearchableName.assign(mDisplayName);  	mSearchableName.append(getLabelSuffix()); @@ -1556,10 +1556,10 @@ void LLItemBridge::buildDisplayName() const      //Name set, so trigger a sort      if(mParent) -    { +{          mParent->requestSort(); -    } -} +	} +	}  LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const  { @@ -1692,7 +1692,7 @@ BOOL LLItemBridge::removeItem()  	{  		return FALSE;  	} -	 +  	// move it to the trash  	LLPreview::hide(mUUID, TRUE);  	LLInventoryModel* model = getInventoryModel(); @@ -3466,9 +3466,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items  			// it's all on its way - add an observer, and the inventory will call done for us when everything is here.  			inc_busy_count();  			gInventory.addObserver(fetch); -		}  	}  } +}  void LLFolderBridge::buildContextMenuFolderOptions(U32 flags,   menuentry_vec_t& items, menuentry_vec_t& disabled_items)  { @@ -6511,16 +6511,16 @@ LLInvFVBridge* LLRecentInventoryBridgeBuilder::createBridge(  		new_listener = new LLRecentItemsFolderBridge(inv_type, inventory, root, uuid);  	}  	else -	{ +		{  		new_listener = LLInventoryFolderViewModelBuilder::createBridge(asset_type, -																actual_asset_type, -																inv_type, -																inventory, +				actual_asset_type, +				inv_type, +				inventory,  																view_model, -																root, -																uuid, -																flags); -	} +				root, +				uuid, +				flags); +		}  	return new_listener;  } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a8049b1b03..44ff62e290 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -145,12 +145,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	// change z sort of clickable text to be behind buttons  	sendChildToBack(getChildView("forgot_password_text")); - -	if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION) -	{ -		LLSLURL slurl(gSavedSettings.getString("LoginLocation")); -		LLStartUp::setStartSLURL(slurl); -	}  	LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");  	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences @@ -182,6 +176,29 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  							 ADD_TOP);	  	server_choice_combo->selectFirstItem();		 +	LLSLURL start_slurl(LLStartUp::getStartSLURL()); +	if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ?  +	{ +		// no, so get the preference setting +		std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); +		LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL; +		LLSLURL defaultStart(defaultStartLocation); +		if ( defaultStart.isSpatial() ) +		{ +			LLStartUp::setStartSLURL(defaultStart); +		} +		else +		{ +			LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; +			LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); +			LLStartUp::setStartSLURL(homeStart); +		} +	} +	else +	{ +		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed +	} +	  	childSetAction("connect_btn", onClickConnect, this);  	getChild<LLPanel>("login")->setDefaultBtn("connect_btn"); @@ -645,8 +662,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	 * specify a particular grid; in those cases we want to change the grid  	 * and the grid selector to match the new value.  	 */ -	if ( LLSLURL::LOCATION == new_start_slurl.getType() ) +	enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType(); +	switch ( new_slurl_type )  	{ +	case LLSLURL::LOCATION: +	  {  		std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid());  		if ( ! slurl_grid.empty() ) // is that a valid grid?  		{ @@ -668,8 +688,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  		{  			// the grid specified by the slurl is not known  			LLNotificationsUtil::add("InvalidLocationSLURL"); +			LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL;  			location_combo->setTextEntry(LLStringUtil::null);  		} +	  } + 	break; + +	case LLSLURL::HOME_LOCATION: +		location_combo->setCurrentByIndex(1); // home location +		break; +		 +	case LLSLURL::LAST_LOCATION: +		location_combo->setCurrentByIndex(0); // last location +		break; + +	default: +		LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL; +		location_combo->setCurrentByIndex(1); // home location +		break;  	}  } diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp index fe4daabd89..50b76378f5 100644 --- a/indra/newview/llpathfindinglinkset.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -39,6 +39,7 @@  #define LINKSET_MODIFIABLE_FIELD    "modifiable"  #define LINKSET_CATEGORY_FIELD      "navmesh_category"  #define LINKSET_CAN_BE_VOLUME       "can_be_volume" +#define LINKSET_IS_SCRIPTED_FIELD   "is_scripted"  #define LINKSET_PHANTOM_FIELD       "phantom"  #define LINKSET_WALKABILITY_A_FIELD "A"  #define LINKSET_WALKABILITY_B_FIELD "B" @@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData)  	mLandImpact(0U),  	mIsModifiable(FALSE),  	mCanBeVolume(FALSE), +	mIsScripted(FALSE), +	mHasIsScripted(TRUE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&  	mLandImpact(0U),  	mIsModifiable(TRUE),  	mCanBeVolume(TRUE), +	mIsScripted(FALSE), +	mHasIsScripted(FALSE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)  	mLandImpact(pOther.mLandImpact),  	mIsModifiable(pOther.mIsModifiable),  	mCanBeVolume(pOther.mCanBeVolume), +	mIsScripted(pOther.mIsScripted), +	mHasIsScripted(pOther.mHasIsScripted),  	mLinksetUse(pOther.mLinksetUse),  	mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA),  	mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB), @@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse  	mLandImpact = pOther.mLandImpact;  	mIsModifiable = pOther.mIsModifiable;  	mCanBeVolume = pOther.mCanBeVolume; +	mIsScripted = pOther.mIsScripted; +	mHasIsScripted = pOther.mHasIsScripted;  	mLinksetUse = pOther.mLinksetUse;  	mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA;  	mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB; @@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset  	return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));  } +bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const +{ +	return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); +} +  bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const  {  	return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume))); @@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData)  	llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD));  	llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean());  	mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean(); + +	mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD); +	if (mHasIsScripted) +	{ +		llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean()); +		mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean(); +	}  }  void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData) diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h index 73b4d6bad4..308a3a1e0f 100644 --- a/indra/newview/llpathfindinglinkset.h +++ b/indra/newview/llpathfindinglinkset.h @@ -63,12 +63,16 @@ public:  	inline ELinksetUse getLinksetUse() const               {return mLinksetUse;}; +	inline BOOL        isScripted() const                  {return mIsScripted;}; +	inline BOOL        hasIsScripted() const               {return mHasIsScripted;}; +  	inline S32         getWalkabilityCoefficientA() const  {return mWalkabilityCoefficientA;};  	inline S32         getWalkabilityCoefficientB() const  {return mWalkabilityCoefficientB;};  	inline S32         getWalkabilityCoefficientC() const  {return mWalkabilityCoefficientC;};  	inline S32         getWalkabilityCoefficientD() const  {return mWalkabilityCoefficientD;};  	bool               isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const; +	bool               isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;  	bool               isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;  	LLSD               encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; @@ -98,6 +102,8 @@ private:  	U32          mLandImpact;  	BOOL         mIsModifiable;  	BOOL         mCanBeVolume; +	BOOL         mIsScripted; +	BOOL         mHasIsScripted;  	ELinksetUse  mLinksetUse;  	S32          mWalkabilityCoefficientA;  	S32          mWalkabilityCoefficientB; diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index 746fa342a1..b886e46765 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin  	return isShowWarning;  } +bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter) +	{ +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +		isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse); +	} + +	return isShowWarning; +} +  bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 77c6358640..1d38e4c11a 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -43,6 +43,7 @@ public:  	LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle, diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp index 916eceb4c8..858d3203c0 100644 --- a/indra/newview/llpathfindingobject.cpp +++ b/indra/newview/llpathfindingobject.cpp @@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject()  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  } @@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  	parseObjectData(pObjectData);  } @@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)  	mOwnerUUID(pOther.mOwnerUUID),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(pOther.mIsGroupOwned), -	mLocation(pOther.mLocation) +	mLocation(pOther.mLocation), +	mOwnerNameSignal()  {  	fetchOwnerName();  }  LLPathfindingObject::~LLPathfindingObject()  { +	disconnectAvatarNameCacheConnection();  }  LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther) @@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const  	return ownerName;  } +LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback) +{ +	llassert(hasOwner()); + +	name_connection_t connection; +	if (hasOwnerName()) +	{ +		pOwnerNameCallback(this); +	} +	else +	{ +		connection = mOwnerNameSignal.connect(pOwnerNameCallback); +	} + +	return connection; +} +  void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)  {  	llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD)); @@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName()  		mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);  		if (!mHasOwnerName)  		{ -			LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); +			mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));  		}  	}  } @@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName()  void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)  {  	llassert(mOwnerUUID == pOwnerUUID); +  	mOwnerName = pAvatarName;  	mHasOwnerName = true; + +	disconnectAvatarNameCacheConnection(); + +	mOwnerNameSignal(this); +} + +void LLPathfindingObject::disconnectAvatarNameCacheConnection() +{ +	if (mAvatarNameCacheConnection.connected()) +	{ +		mAvatarNameCacheConnection.disconnect(); +	}  } diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h index d45cc554fd..b8d3ca2364 100644 --- a/indra/newview/llpathfindingobject.h +++ b/indra/newview/llpathfindingobject.h @@ -30,8 +30,11 @@  #include <string>  #include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <boost/signals2.hpp>  #include "llavatarname.h" +#include "llavatarnamecache.h"  #include "lluuid.h"  #include "v3math.h" @@ -59,6 +62,12 @@ public:  	inline BOOL               isGroupOwned() const   {return mIsGroupOwned;};  	inline const LLVector3&   getLocation() const    {return mLocation;}; +	typedef boost::function<void (const LLPathfindingObject *)>         name_callback_t; +	typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t; +	typedef boost::signals2::connection                                 name_connection_t; + +	name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback); +  protected:  private: @@ -66,15 +75,18 @@ private:  	void fetchOwnerName();  	void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName); +	void disconnectAvatarNameCacheConnection(); -	LLUUID       mUUID; -	std::string  mName; -	std::string  mDescription; -	LLUUID       mOwnerUUID; -	bool         mHasOwnerName; -	LLAvatarName mOwnerName; -	BOOL         mIsGroupOwned; -	LLVector3    mLocation; +	LLUUID                                   mUUID; +	std::string                              mName; +	std::string                              mDescription; +	LLUUID                                   mOwnerUUID; +	bool                                     mHasOwnerName; +	LLAvatarName                             mOwnerName; +	LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection; +	BOOL                                     mIsGroupOwned; +	LLVector3                                mLocation; +	name_signal_t                            mOwnerNameSignal;  };  #endif // LL_LLPATHFINDINGOBJECT_H diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp index 68a7e736e6..f1ecb45fc0 100644 --- a/indra/newview/llpathfindingobjectlist.cpp +++ b/indra/newview/llpathfindingobjectlist.cpp @@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList()  LLPathfindingObjectList::~LLPathfindingObjectList()  { +	clear();  }  bool LLPathfindingObjectList::isEmpty() const @@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const  	return mObjectMap.empty();  } +void LLPathfindingObjectList::clear() +{ +	for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter) +	{ +		objectIter->second.reset(); +	} +	mObjectMap.clear(); +} +  void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr)  {  	if (pUpdateObjectPtr != NULL) diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h index 3ad8e8b096..61580582d3 100644 --- a/indra/newview/llpathfindingobjectlist.h +++ b/indra/newview/llpathfindingobjectlist.h @@ -47,6 +47,8 @@ public:  	bool isEmpty() const; +	void clear(); +  	void update(LLPathfindingObjectPtr pUpdateObjectPtr);  	void update(LLPathfindingObjectListPtr pUpdateObjectListPtr); @@ -56,7 +58,6 @@ public:  	const_iterator begin() const;  	const_iterator end() const; -  protected:  	LLPathfindingObjectMap &getObjectMap(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ba9c2c9e2f..ab72b4e512 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2820,22 +2820,33 @@ bool LLStartUp::dispatchURL()  void LLStartUp::setStartSLURL(const LLSLURL& slurl)   { -  sStartSLURL = slurl; -  LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; +	LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; -  switch(slurl.getType()) -    { -    case LLSLURL::HOME_LOCATION: -    case LLSLURL::LAST_LOCATION: -    case LLSLURL::LOCATION: -		gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME); +	if ( slurl.isSpatial() ) +	{ +		std::string new_start = slurl.getSLURLString(); +		LL_DEBUGS("AppInit")<<new_start<<LL_ENDL; +		sStartSLURL = slurl;  		LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed -		break; -    default: -		break; -    } + +		// remember that this is where we wanted to log in...if the login fails, +		// the next attempt will default to the same place. +		gSavedSettings.setString("NextLoginLocation", new_start); +		// following a successful login, this is cleared +		// and the default reverts to LoginLocation +	} +	else +	{ +		LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL; +	}  } +// static +LLSLURL& LLStartUp::getStartSLURL() +{ +	return sStartSLURL; +}  +  /**   * Read all proxy configuration settings and set up both the HTTP proxy and   * SOCKS proxy as needed. diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 3754aaf966..760e38890b 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -111,7 +111,7 @@ public:  	static void postStartupState();  	static void setStartSLURL(const LLSLURL& slurl);  -	static LLSLURL& getStartSLURL() { return sStartSLURL; }  +	static LLSLURL& getStartSLURL();  	static bool startLLProxy(); // Initialize the SOCKS 5 proxy diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 4ad0547379..b2e6dc4571 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2043,7 +2043,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	{  		if (new_angv != old_angv)  		{ -			resetRot(); +			if (flagUsePhysics()) +			{ +				resetRot(); +			} +			else +			{ +				resetRotTime(); +			}  		}  		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) @@ -5439,9 +5446,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  	}  } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime()  {  	mRotTime = 0.0f; +} + +void LLViewerObject::resetRot() +{ +	resetRotTime();  	// Reset the accumulated angular velocity rotation  	mAngularVelocityRot.loadIdentity();  diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index e60c8a8d52..22e0de681e 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -198,6 +198,9 @@ public:  	virtual BOOL		updateLOD();  	virtual BOOL		setDrawableParent(LLDrawable* parentp);  	F32					getRotTime() { return mRotTime; } +private: +	void				resetRotTime(); +public:  	void				resetRot();  	void				applyAngularVelocity(F32 dt); @@ -210,7 +213,7 @@ public:  	LLViewerRegion* getRegion() const				{ return mRegionp; }  	BOOL isSelected() const							{ return mUserSelected; } -	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; mRotTime = 0.f;} +	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();}  	const LLUUID &getID() const						{ return mID; }  	U32 getLocalID() const							{ return mLocalID; } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index ae9c31bfe7..2bb2e92279 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,  	mRequestResult = PARCEL_RESULT_NO_DATA; -	// clear the list of segments to prevent flashing -	resetSegments(mHighlightSegments); -  	mFloatingParcelSelection->setParcel(mCurrentParcel);  	mCurrentParcelSelection->setParcel(NULL);  	mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMPBinary files differ new file mode 100644 index 0000000000..a567951b7a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfinding.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMPBinary files differ new file mode 100644 index 0000000000..aacea8237f --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMPBinary files differ new file mode 100644 index 0000000000..fa19f3f105 --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMPBinary files differ new file mode 100644 index 0000000000..912b7f931a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMPBinary files differ new file mode 100644 index 0000000000..4e8999ae0b --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index eaed92ac55..9bc5c7d5a4 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -4,9 +4,9 @@      can_resize="true"      can_tear_off="false"      height="395" -    width="1015" +    width="1075"      min_height="395" -    min_width="1015" +    min_width="1075"      layout="topleft"      name="floater_pathfinding_linksets"      help_topic="floater_pathfinding_linksets" @@ -25,11 +25,15 @@    <floater.string name="linkset_terrain_name">[Terrain]</floater.string>    <floater.string name="linkset_terrain_description">--</floater.string>    <floater.string name="linkset_terrain_owner">--</floater.string> +  <floater.string name="linkset_terrain_scripted">--</floater.string>    <floater.string name="linkset_terrain_land_impact">--</floater.string>    <floater.string name="linkset_terrain_dist_from_you">--</floater.string>    <floater.string name="linkset_owner_loading">[Loading]</floater.string>    <floater.string name="linkset_owner_unknown">[Unknown]</floater.string>    <floater.string name="linkset_owner_group">[group]</floater.string> +  <floater.string name="linkset_is_scripted">Yes</floater.string> +  <floater.string name="linkset_is_not_scripted">No</floater.string> +  <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string>    <floater.string name="linkset_use_walkable">Walkable</floater.string>    <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>    <floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string> @@ -47,7 +51,7 @@        follows="left|top|right|bottom"        layout="topleft"        height="226" -      width="999"> +      width="1059">      <text          height="13"          word_wrap="false" @@ -155,7 +159,7 @@          layout="topleft"          name="apply_filters"          top_pad="-21" -        left_pad="31" +        left_pad="91"          width="73"/>      <button          follows="right|top" @@ -177,7 +181,7 @@          tab_stop="false"          multi_select="true"          name="objects_scroll_list" -        width="980"> +        width="1040">        <scroll_list.columns            label="Name (root prim)"            name="name" @@ -191,6 +195,10 @@            name="owner"            width="141" />        <scroll_list.columns +          label="Scripted" +          name="scripted" +          width="60" /> +      <scroll_list.columns            label="Impact"            name="land_impact"            width="55" /> @@ -230,7 +238,7 @@          layout="topleft"          name="messaging_status"          top_pad="17" -        width="619"> +        width="679">        Linksets:      </text>      <button @@ -269,7 +277,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -277,7 +285,7 @@        layout="topleft"        left="0"        height="67" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -327,7 +335,7 @@          layout="topleft"          name="teleport_me_to_object"          top_pad="-21" -        left_pad="206" +        left_pad="239"          width="160"/>      <button          follows="right|bottom" @@ -336,7 +344,7 @@          layout="topleft"          name="return_objects"          top_pad="-21" -        left_pad="220" +        left_pad="252"          width="95"/>      <button          follows="right|bottom" @@ -356,7 +364,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -364,7 +372,7 @@        layout="topleft"        left="0"        height="75" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -376,7 +384,7 @@          layout="topleft"          left="18"          top_pad="8" -        width="912"> +        width="972">        Edit attributes of selected linksets and press the button to apply changes      </text>      <combo_box diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 933135954f..606fdd33d9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2894,7 +2894,7 @@ You have been moved into a nearby region.     name="AvatarMovedLast"     type="alertmodal">     <tag>fail</tag> -Your last location is not currently available. +Your requested location is not currently available.  You have been moved into a nearby region.    </notification> @@ -8134,9 +8134,26 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted" +   name="PathfindingLinksets_WarnOnPhantom"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. +Some selected linksets will have the Phantom flag toggled. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset." @@ -8147,9 +8164,11 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnVolume" +   name="PathfindingLinksets_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because the shape is non-convex" @@ -8160,10 +8179,47 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex" +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex." @@ -8174,6 +8230,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="PathfindingLinksets_ChangeToFlexiblePath"     type="alertmodal">      The selected object affects the navmesh.  Changing it to a Flexible Path will remove it from the navmesh. diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index b7e81c4199..7705b4c567 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -60,6 +60,7 @@ static LLEventStream gTestPump("test_pump");  #include "../llslurl.h"  #include "../llstartup.h"  LLSLURL LLStartUp::sStartSLURL; +LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }  #include "lllogin.h" | 
