Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alchemy-archive/alchemy
  • Liru/alchemy
  • TesticularSlingshot/alchemy
3 results
Show changes
Showing
with 258 additions and 271 deletions
...@@ -1203,7 +1203,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels, ...@@ -1203,7 +1203,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
{ {
const F32 HEIGHT_THRESHOLD = 7.f; const F32 HEIGHT_THRESHOLD = 7.f;
LLUIImagePtr dot_image = sAvatarLevelImage; LLUIImagePtr dot_image = sAvatarLevelImage;
if (unknown_relative_z) if (unknown_relative_z && llabs(relative_z) > HEIGHT_THRESHOLD)
{ {
dot_image = sAvatarUnknownImage; dot_image = sAvatarUnknownImage;
} }
......
...@@ -991,7 +991,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples) ...@@ -991,7 +991,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
mDeferredLight.release(); mDeferredLight.release();
} }
F32 scale = RenderShadowResolutionScale; F32 scale = llmax(0.f, RenderShadowResolutionScale);
if (shadow_detail > 0) if (shadow_detail > 0)
{ //allocate 4 sun shadow maps { //allocate 4 sun shadow maps
...@@ -3452,7 +3452,7 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera) ...@@ -3452,7 +3452,7 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)
const LLViewerObject* pObj = drawablep->getVObj(); const LLViewerObject* pObj = drawablep->getVObj();
if ( (pObj) && (pObj->isSelected()) && if ( (pObj) && (pObj->isSelected()) &&
( (!RlvActions::isRlvEnabled()) || ( (!RlvActions::isRlvEnabled()) ||
( ((!pObj->isHUDAttachment()) || (!gRlvAttachmentLocks.isLockedAttachment(pObj->getRootEdit()))) && ( ((!pObj->isHUDAttachment()) || (!RlvAttachmentLocks::instance().isLockedAttachment(pObj->getRootEdit()))) &&
(RlvActions::canEdit(pObj)) ) ) ) (RlvActions::canEdit(pObj)) ) ) )
// [/RVLa:KB] // [/RVLa:KB]
{ {
...@@ -6099,7 +6099,7 @@ void LLPipeline::enableLightsPreview() ...@@ -6099,7 +6099,7 @@ void LLPipeline::enableLightsPreview()
light->enable(); light->enable();
light->setPosition(light_pos); light->setPosition(light_pos);
light->setDiffuse(diffuse0); light->setDiffuse(diffuse0);
light->setAmbient(LLColor4::black); light->setAmbient(ambient);
light->setSpecular(specular0); light->setSpecular(specular0);
light->setSpotExponent(0.f); light->setSpotExponent(0.f);
light->setSpotCutoff(180.f); light->setSpotCutoff(180.f);
...@@ -6110,7 +6110,7 @@ void LLPipeline::enableLightsPreview() ...@@ -6110,7 +6110,7 @@ void LLPipeline::enableLightsPreview()
light->enable(); light->enable();
light->setPosition(light_pos); light->setPosition(light_pos);
light->setDiffuse(diffuse1); light->setDiffuse(diffuse1);
light->setAmbient(LLColor4::black); light->setAmbient(ambient);
light->setSpecular(specular1); light->setSpecular(specular1);
light->setSpotExponent(0.f); light->setSpotExponent(0.f);
light->setSpotCutoff(180.f); light->setSpotCutoff(180.f);
...@@ -6120,7 +6120,7 @@ void LLPipeline::enableLightsPreview() ...@@ -6120,7 +6120,7 @@ void LLPipeline::enableLightsPreview()
light->enable(); light->enable();
light->setPosition(light_pos); light->setPosition(light_pos);
light->setDiffuse(diffuse2); light->setDiffuse(diffuse2);
light->setAmbient(LLColor4::black); light->setAmbient(ambient);
light->setSpecular(specular2); light->setSpecular(specular2);
light->setSpotExponent(0.f); light->setSpotExponent(0.f);
light->setSpotCutoff(180.f); light->setSpotCutoff(180.f);
...@@ -8047,10 +8047,24 @@ void LLPipeline::renderDeferredLighting() ...@@ -8047,10 +8047,24 @@ void LLPipeline::renderDeferredLighting()
} }
const LLViewerObject *vobj = drawablep->getVObj(); const LLViewerObject *vobj = drawablep->getVObj();
LLVOAvatar* avatarp = vobj ? vobj->getAvatar() : nullptr; if (vobj)
if(avatarp && avatarp->isVisuallyMuted())
{ {
continue; LLVOAvatar *av = vobj->getAvatar();
if (av)
{
if (av->isTooComplex() || av->isInMuteList() || dist_vec(av->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip)
{
continue;
}
}
else
{
const LLViewerObject *root_obj = drawablep->getParent() ? drawablep->getParent()->getVObj() : vobj;
if (root_obj && dist_vec(root_obj->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip)
{
continue;
}
}
} }
LLVector4a center; LLVector4a center;
...@@ -8058,7 +8072,7 @@ void LLPipeline::renderDeferredLighting() ...@@ -8058,7 +8072,7 @@ void LLPipeline::renderDeferredLighting()
const F32* c = center.getF32ptr(); const F32* c = center.getF32ptr();
F32 s = volume->getLightRadius()*1.5f; F32 s = volume->getLightRadius()*1.5f;
LLColor3 col = volume->getLightSRGBColor(); LLColor3 col = volume->getLightColor();
if (col.magVecSquared() < 0.001f) if (col.magVecSquared() < 0.001f)
{ {
...@@ -8154,7 +8168,10 @@ void LLPipeline::renderDeferredLighting() ...@@ -8154,7 +8168,10 @@ void LLPipeline::renderDeferredLighting()
setupSpotLight(gDeferredSpotLightProgram, drawablep); setupSpotLight(gDeferredSpotLightProgram, drawablep);
LLColor3 col = volume->getLightSRGBColor(); LLColor3 col = volume->getLightColor();
/*col.mV[0] = powf(col.mV[0], 2.2f);
col.mV[1] = powf(col.mV[1], 2.2f);
col.mV[2] = powf(col.mV[2], 2.2f);*/
gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c); gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s); gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
...@@ -8237,7 +8254,7 @@ void LLPipeline::renderDeferredLighting() ...@@ -8237,7 +8254,7 @@ void LLPipeline::renderDeferredLighting()
setupSpotLight(gDeferredMultiSpotLightProgram, drawablep); setupSpotLight(gDeferredMultiSpotLightProgram, drawablep);
LLColor3 col = volume->getLightSRGBColor(); LLColor3 col = volume->getLightColor();
/*col.mV[0] = powf(col.mV[0], 2.2f); /*col.mV[0] = powf(col.mV[0], 2.2f);
col.mV[1] = powf(col.mV[1], 2.2f); col.mV[1] = powf(col.mV[1], 2.2f);
......
...@@ -151,11 +151,11 @@ BEGIN ...@@ -151,11 +151,11 @@ BEGIN
BEGIN BEGIN
BLOCK "040904b0" BLOCK "040904b0"
BEGIN BEGIN
VALUE "CompanyName", "Alchemy Viewer Project" VALUE "CompanyName", "Alchemy Development Group"
VALUE "FileDescription", "Alchemy" VALUE "FileDescription", "Alchemy"
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}" VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
VALUE "InternalName", "Alchemy" VALUE "InternalName", "Alchemy"
VALUE "LegalCopyright", "Copyright (C) 2013-2018 Alchemy Viewer Project" VALUE "LegalCopyright", "Copyright (C) 2013-2020 Alchemy Development Group"
VALUE "OriginalFilename", "Alchemy.exe" VALUE "OriginalFilename", "Alchemy.exe"
VALUE "ProductName", "Alchemy" VALUE "ProductName", "Alchemy"
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}" VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
......
...@@ -34,15 +34,15 @@ ...@@ -34,15 +34,15 @@
bool RlvActions::canChangeCameraFOV(const LLUUID& idRlvObject) bool RlvActions::canChangeCameraFOV(const LLUUID& idRlvObject)
{ {
// NOTE: if an object has exclusive camera control then all other objects are locked out // NOTE: if an object has exclusive camera control then all other objects are locked out
return (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM)) || (gRlvHandler.hasBehaviour(idRlvObject, RLV_BHVR_SETCAM)); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM)) || (RlvHandler::instance().hasBehaviour(idRlvObject, RLV_BHVR_SETCAM));
} }
bool RlvActions::canChangeCameraPreset(const LLUUID& idRlvObject) bool RlvActions::canChangeCameraPreset(const LLUUID& idRlvObject)
{ {
// NOTE: if an object has exclusive camera control then all other objects are locked out // NOTE: if an object has exclusive camera control then all other objects are locked out
return return
( (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM)) || (gRlvHandler.hasBehaviour(idRlvObject, RLV_BHVR_SETCAM)) ) && ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM)) || (RlvHandler::instance().hasBehaviour(idRlvObject, RLV_BHVR_SETCAM)) ) &&
(!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_EYEOFFSET)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOCUSOFFSET)); (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_EYEOFFSET)) && (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOCUSOFFSET));
} }
bool RlvActions::canChangeToMouselook() bool RlvActions::canChangeToMouselook()
...@@ -52,30 +52,30 @@ bool RlvActions::canChangeToMouselook() ...@@ -52,30 +52,30 @@ bool RlvActions::canChangeToMouselook()
// - there is no minimum camera distance defined (or it's higher than > 0m) // - there is no minimum camera distance defined (or it's higher than > 0m)
const RlvBehaviourModifier* pCamDistMinModifier = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_AVDISTMIN); const RlvBehaviourModifier* pCamDistMinModifier = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SETCAM_AVDISTMIN);
return return
( (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM)) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_MOUSELOOK) : !gRlvHandler.hasBehaviour(pCamDistMinModifier->getPrimaryObject(), RLV_BHVR_SETCAM_MOUSELOOK) ) && ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM)) ? !RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_MOUSELOOK) : !RlvHandler::instance().hasBehaviour(pCamDistMinModifier->getPrimaryObject(), RLV_BHVR_SETCAM_MOUSELOOK) ) &&
( (!pCamDistMinModifier->hasValue()) || (pCamDistMinModifier->getValue<float>() == 0.f) ); ( (!pCamDistMinModifier->hasValue()) || (pCamDistMinModifier->getValue<float>() == 0.f) );
} }
bool RlvActions::isCameraDistanceClamped() bool RlvActions::isCameraDistanceClamped()
{ {
return return
(gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_AVDISTMIN)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_AVDISTMAX)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_AVDISTMIN)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_AVDISTMAX)) ||
(gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMIN)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMAX)); (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMIN)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMAX));
} }
bool RlvActions::isCameraFOVClamped() bool RlvActions::isCameraFOVClamped()
{ {
return (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMIN)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMAX)); return (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMIN)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMAX));
} }
bool RlvActions::isCameraPresetLocked() bool RlvActions::isCameraPresetLocked()
{ {
return (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_EYEOFFSET)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOCUSOFFSET)); return (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_EYEOFFSET)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOCUSOFFSET));
} }
bool RlvActions::getCameraAvatarDistanceLimits(float& nDistMin, float& nDistMax) bool RlvActions::getCameraAvatarDistanceLimits(float& nDistMin, float& nDistMax)
{ {
bool fDistMin = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_AVDISTMIN), fDistMax = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_AVDISTMAX); bool fDistMin = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_AVDISTMIN), fDistMax = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_AVDISTMAX);
if ( (fDistMin) || (fDistMax) ) if ( (fDistMin) || (fDistMax) )
{ {
static RlvCachedBehaviourModifier<float> sCamDistMin(RLV_MODIFIER_SETCAM_AVDISTMIN); static RlvCachedBehaviourModifier<float> sCamDistMin(RLV_MODIFIER_SETCAM_AVDISTMIN);
...@@ -90,7 +90,7 @@ bool RlvActions::getCameraAvatarDistanceLimits(float& nDistMin, float& nDistMax) ...@@ -90,7 +90,7 @@ bool RlvActions::getCameraAvatarDistanceLimits(float& nDistMin, float& nDistMax)
bool RlvActions::getCameraOriginDistanceLimits(float& nDistMin, float& nDistMax) bool RlvActions::getCameraOriginDistanceLimits(float& nDistMin, float& nDistMax)
{ {
bool fDistMin = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMIN), fDistMax = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMAX); bool fDistMin = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMIN), fDistMax = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_ORIGINDISTMAX);
if ( (fDistMin) || (fDistMax) ) if ( (fDistMin) || (fDistMax) )
{ {
static RlvCachedBehaviourModifier<float> sCamDistMin(RLV_MODIFIER_SETCAM_ORIGINDISTMIN); static RlvCachedBehaviourModifier<float> sCamDistMin(RLV_MODIFIER_SETCAM_ORIGINDISTMIN);
...@@ -105,7 +105,7 @@ bool RlvActions::getCameraOriginDistanceLimits(float& nDistMin, float& nDistMax) ...@@ -105,7 +105,7 @@ bool RlvActions::getCameraOriginDistanceLimits(float& nDistMin, float& nDistMax)
bool RlvActions::getCameraFOVLimits(F32& nFOVMin, F32& nFOVMax) bool RlvActions::getCameraFOVLimits(F32& nFOVMin, F32& nFOVMax)
{ {
bool fClampMin = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMIN), fClampMax = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMAX); bool fClampMin = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMIN), fClampMax = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMAX);
if ( (fClampMin) || (fClampMax) ) if ( (fClampMin) || (fClampMax) )
{ {
static RlvCachedBehaviourModifier<float> sCamFovMin(RLV_MODIFIER_SETCAM_FOVMIN); static RlvCachedBehaviourModifier<float> sCamFovMin(RLV_MODIFIER_SETCAM_FOVMIN);
...@@ -128,7 +128,7 @@ bool RlvActions::canChangeActiveGroup(const LLUUID& idRlvObject) ...@@ -128,7 +128,7 @@ bool RlvActions::canChangeActiveGroup(const LLUUID& idRlvObject)
{ {
// User can change their active group if: // User can change their active group if:
// - not specifically restricted (by another object that the one specified) from changing their active group // - not specifically restricted (by another object that the one specified) from changing their active group
return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, idRlvObject); return (idRlvObject.isNull()) ? !RlvHandler::instance().hasBehaviour(RLV_BHVR_SETGROUP) : !RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_SETGROUP, idRlvObject);
} }
// Little helper function to check the IM exclusion range for @recvim, @sendim and @startim (returns: min_dist <= (pos user - pos target) <= max_dist) // Little helper function to check the IM exclusion range for @recvim, @sendim and @startim (returns: min_dist <= (pos user - pos target) <= max_dist)
...@@ -159,20 +159,20 @@ bool RlvActions::canReceiveIM(const LLUUID& idSender) ...@@ -159,20 +159,20 @@ bool RlvActions::canReceiveIM(const LLUUID& idSender)
// - not specifically restricted from receiving an IM from the sender // - not specifically restricted from receiving an IM from the sender
return return
(!isRlvEnabled()) || (!isRlvEnabled()) ||
( ( (!gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) || (gRlvHandler.isException(RLV_BHVR_RECVIM, idSender)) || (rlvCheckAvatarIMDistance(idSender, RLV_MODIFIER_RECVIMDISTMIN, RLV_MODIFIER_RECVIMDISTMAX)) ) && ( ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_RECVIM)) || (RlvHandler::instance().isException(RLV_BHVR_RECVIM, idSender)) || (rlvCheckAvatarIMDistance(idSender, RLV_MODIFIER_RECVIMDISTMIN, RLV_MODIFIER_RECVIMDISTMAX)) ) &&
( (!gRlvHandler.hasBehaviour(RLV_BHVR_RECVIMFROM)) || (!gRlvHandler.isException(RLV_BHVR_RECVIMFROM, idSender)) ) ); ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_RECVIMFROM)) || (!RlvHandler::instance().isException(RLV_BHVR_RECVIMFROM, idSender)) ) );
} }
bool RlvActions::canPlayGestures() bool RlvActions::canPlayGestures()
{ {
return (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDGESTURE)); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SENDGESTURE));
} }
bool RlvActions::canSendChannel(int nChannel) bool RlvActions::canSendChannel(int nChannel)
{ {
return return
( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDCHANNEL)) || (gRlvHandler.isException(RLV_BHVR_SENDCHANNEL, nChannel)) ) && ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SENDCHANNEL)) || (RlvHandler::instance().isException(RLV_BHVR_SENDCHANNEL, nChannel)) ) &&
( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDCHANNELEXCEPT)) || (!gRlvHandler.isException(RLV_BHVR_SENDCHANNELEXCEPT, nChannel)) ); ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SENDCHANNELEXCEPT)) || (!RlvHandler::instance().isException(RLV_BHVR_SENDCHANNELEXCEPT, nChannel)) );
} }
bool RlvActions::canSendIM(const LLUUID& idRecipient) bool RlvActions::canSendIM(const LLUUID& idRecipient)
...@@ -182,8 +182,8 @@ bool RlvActions::canSendIM(const LLUUID& idRecipient) ...@@ -182,8 +182,8 @@ bool RlvActions::canSendIM(const LLUUID& idRecipient)
// - not specifically restricted from sending an IM to the recipient // - not specifically restricted from sending an IM to the recipient
return return
(!isRlvEnabled()) || (!isRlvEnabled()) ||
( ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.isException(RLV_BHVR_SENDIM, idRecipient)) || (rlvCheckAvatarIMDistance(idRecipient, RLV_MODIFIER_SENDIMDISTMIN, RLV_MODIFIER_SENDIMDISTMAX)) ) && ( ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SENDIM)) || (RlvHandler::instance().isException(RLV_BHVR_SENDIM, idRecipient)) || (rlvCheckAvatarIMDistance(idRecipient, RLV_MODIFIER_SENDIMDISTMIN, RLV_MODIFIER_SENDIMDISTMAX)) ) &&
( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDIMTO)) || (!gRlvHandler.isException(RLV_BHVR_SENDIMTO, idRecipient)) ) ); ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SENDIMTO)) || (!RlvHandler::instance().isException(RLV_BHVR_SENDIMTO, idRecipient)) ) );
} }
bool RlvActions::canStartIM(const LLUUID& idRecipient, bool fIgnoreOpen) bool RlvActions::canStartIM(const LLUUID& idRecipient, bool fIgnoreOpen)
...@@ -194,8 +194,8 @@ bool RlvActions::canStartIM(const LLUUID& idRecipient, bool fIgnoreOpen) ...@@ -194,8 +194,8 @@ bool RlvActions::canStartIM(const LLUUID& idRecipient, bool fIgnoreOpen)
// - the session already exists // - the session already exists
return return
(!isRlvEnabled()) || (!isRlvEnabled()) ||
( ( (!gRlvHandler.hasBehaviour(RLV_BHVR_STARTIM)) || (gRlvHandler.isException(RLV_BHVR_STARTIM, idRecipient)) || (rlvCheckAvatarIMDistance(idRecipient, RLV_MODIFIER_STARTIMDISTMIN, RLV_MODIFIER_STARTIMDISTMAX)) ) && ( ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_STARTIM)) || (RlvHandler::instance().isException(RLV_BHVR_STARTIM, idRecipient)) || (rlvCheckAvatarIMDistance(idRecipient, RLV_MODIFIER_STARTIMDISTMIN, RLV_MODIFIER_STARTIMDISTMAX)) ) &&
( (!gRlvHandler.hasBehaviour(RLV_BHVR_STARTIMTO)) || (!gRlvHandler.isException(RLV_BHVR_STARTIMTO, idRecipient)) ) ) || ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_STARTIMTO)) || (!RlvHandler::instance().isException(RLV_BHVR_STARTIMTO, idRecipient)) ) ) ||
( (!fIgnoreOpen) && ((hasOpenP2PSession(idRecipient)) || (hasOpenGroupSession(idRecipient))) ); ( (!fIgnoreOpen) && ((hasOpenP2PSession(idRecipient)) || (hasOpenGroupSession(idRecipient))) );
} }
...@@ -211,13 +211,13 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent) ...@@ -211,13 +211,13 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent)
{ {
// Show/hide avatar nametag // Show/hide avatar nametag
case SNC_NAMETAG: case SNC_NAMETAG:
return (gRlvHandler.isException(RLV_BHVR_SHOWNAMETAGS, idAgent)) || (gAgentID == idAgent); return (RlvHandler::instance().isException(RLV_BHVR_SHOWNAMETAGS, idAgent)) || (gAgentID == idAgent);
// Show/hide avatar name // Show/hide avatar name
case SNC_DEFAULT: case SNC_DEFAULT:
case SNC_COUNT: case SNC_COUNT:
case SNC_TELEPORTOFFER: case SNC_TELEPORTOFFER:
case SNC_TELEPORTREQUEST: case SNC_TELEPORTREQUEST:
return gRlvHandler.isException(RLV_BHVR_SHOWNAMES, idAgent) || (gAgentID == idAgent); return RlvHandler::instance().isException(RLV_BHVR_SHOWNAMES, idAgent) || (gAgentID == idAgent);
} }
} }
return false; return false;
...@@ -225,7 +225,7 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent) ...@@ -225,7 +225,7 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent)
bool RlvActions::canShowNearbyAgents() bool RlvActions::canShowNearbyAgents()
{ {
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNEARBY); return !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWNEARBY);
} }
// Handles: @chatwhisper, @chatnormal and @chatshout // Handles: @chatwhisper, @chatnormal and @chatshout
...@@ -269,7 +269,7 @@ bool RlvActions::canPasteInventory(const LLInventoryItem* pSourceItem, const LLI ...@@ -269,7 +269,7 @@ bool RlvActions::canPasteInventory(const LLInventoryItem* pSourceItem, const LLI
bool RlvActions::canPreviewTextures() bool RlvActions::canPreviewTextures()
{ {
return (!gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE)); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWTEXTURE));
} }
// ============================================================================ // ============================================================================
...@@ -278,37 +278,37 @@ bool RlvActions::canPreviewTextures() ...@@ -278,37 +278,37 @@ bool RlvActions::canPreviewTextures()
bool RlvActions::canAcceptTpOffer(const LLUUID& idSender) bool RlvActions::canAcceptTpOffer(const LLUUID& idSender)
{ {
return ((!gRlvHandler.hasBehaviour(RLV_BHVR_TPLURE)) || (gRlvHandler.isException(RLV_BHVR_TPLURE, idSender))) && (canStand()); return ((!RlvHandler::instance().hasBehaviour(RLV_BHVR_TPLURE)) || (RlvHandler::instance().isException(RLV_BHVR_TPLURE, idSender))) && (canStand());
} }
bool RlvActions::autoAcceptTeleportOffer(const LLUUID& idSender) bool RlvActions::autoAcceptTeleportOffer(const LLUUID& idSender)
{ {
return ((idSender.notNull()) && (gRlvHandler.isException(RLV_BHVR_ACCEPTTP, idSender))) || (gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTP)); return ((idSender.notNull()) && (RlvHandler::instance().isException(RLV_BHVR_ACCEPTTP, idSender))) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_ACCEPTTP));
} }
bool RlvActions::canAcceptTpRequest(const LLUUID& idSender) bool RlvActions::canAcceptTpRequest(const LLUUID& idSender)
{ {
return (!gRlvHandler.hasBehaviour(RLV_BHVR_TPREQUEST)) || (gRlvHandler.isException(RLV_BHVR_TPREQUEST, idSender)); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_TPREQUEST)) || (RlvHandler::instance().isException(RLV_BHVR_TPREQUEST, idSender));
} }
bool RlvActions::autoAcceptTeleportRequest(const LLUUID& idRequester) bool RlvActions::autoAcceptTeleportRequest(const LLUUID& idRequester)
{ {
return ((idRequester.notNull()) && (gRlvHandler.isException(RLV_BHVR_ACCEPTTPREQUEST, idRequester))) || (gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTPREQUEST)); return ((idRequester.notNull()) && (RlvHandler::instance().isException(RLV_BHVR_ACCEPTTPREQUEST, idRequester))) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_ACCEPTTPREQUEST));
} }
bool RlvActions::canFly() bool RlvActions::canFly()
{ {
return (!gRlvHandler.getCurrentCommand()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_FLY) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_FLY, gRlvHandler.getCurrentObject()); return (!RlvHandler::instance().getCurrentCommand()) ? !RlvHandler::instance().hasBehaviour(RLV_BHVR_FLY) : !RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_FLY, RlvHandler::instance().getCurrentObject());
} }
bool RlvActions::canFly(const LLUUID& idRlvObjExcept) bool RlvActions::canFly(const LLUUID& idRlvObjExcept)
{ {
return !gRlvHandler.hasBehaviourExcept(RLV_BHVR_FLY, idRlvObjExcept); return !RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_FLY, idRlvObjExcept);
} }
bool RlvActions::canJump() bool RlvActions::canJump()
{ {
return !gRlvHandler.hasBehaviour(RLV_BHVR_JUMP); return !RlvHandler::instance().hasBehaviour(RLV_BHVR_JUMP);
} }
// ============================================================================ // ============================================================================
...@@ -322,15 +322,15 @@ bool RlvActions::canTeleportToLocal(const LLVector3d& posGlobal) ...@@ -322,15 +322,15 @@ bool RlvActions::canTeleportToLocal(const LLVector3d& posGlobal)
// - not restricted from "sit teleporting" (or the destination is within the allowed xyz-radius) // - not restricted from "sit teleporting" (or the destination is within the allowed xyz-radius)
// - not restricted from teleporting locally (or the destination is within the allowed xy-radius) // - not restricted from teleporting locally (or the destination is within the allowed xy-radius)
// NOTE: if we're teleporting due to an active command we should disregard any restrictions from the same object // NOTE: if we're teleporting due to an active command we should disregard any restrictions from the same object
const LLUUID& idRlvObjExcept = gRlvHandler.getCurrentObject(); const LLUUID& idRlvObjExcept = RlvHandler::instance().getCurrentObject();
bool fCanTeleport = RlvActions::canStand(idRlvObjExcept); bool fCanTeleport = RlvActions::canStand(idRlvObjExcept);
if ( (fCanTeleport) && (gRlvHandler.hasBehaviourExcept(RLV_BHVR_SITTP, idRlvObjExcept)) ) if ( (fCanTeleport) && (RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_SITTP, idRlvObjExcept)) )
{ {
const F32 nDistSq = (posGlobal - gAgent.getPositionGlobal()).lengthSquared(); const F32 nDistSq = (posGlobal - gAgent.getPositionGlobal()).lengthSquared();
const F32 nSitTpDist = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SITTPDIST)->getValue<F32>(); const F32 nSitTpDist = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_SITTPDIST)->getValue<F32>();
fCanTeleport = nDistSq < nSitTpDist * nSitTpDist; fCanTeleport = nDistSq < nSitTpDist * nSitTpDist;
} }
if ( (fCanTeleport) && (gRlvHandler.hasBehaviourExcept(RLV_BHVR_TPLOCAL, idRlvObjExcept)) ) if ( (fCanTeleport) && (RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_TPLOCAL, idRlvObjExcept)) )
{ {
const F32 nDistSq = (LLVector2(posGlobal.mdV[0], posGlobal.mdV[1]) - LLVector2(gAgent.getPositionGlobal().mdV[0], gAgent.getPositionGlobal().mdV[1])).lengthSquared(); const F32 nDistSq = (LLVector2(posGlobal.mdV[0], posGlobal.mdV[1]) - LLVector2(gAgent.getPositionGlobal().mdV[0], gAgent.getPositionGlobal().mdV[1])).lengthSquared();
const F32 nTpLocalDist = llmin(RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_TPLOCALDIST)->getValue<float>(), RLV_MODIFIER_TPLOCAL_DEFAULT); const F32 nTpLocalDist = llmin(RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_TPLOCALDIST)->getValue<float>(), RLV_MODIFIER_TPLOCAL_DEFAULT);
...@@ -342,8 +342,8 @@ bool RlvActions::canTeleportToLocal(const LLVector3d& posGlobal) ...@@ -342,8 +342,8 @@ bool RlvActions::canTeleportToLocal(const LLVector3d& posGlobal)
bool RlvActions::canTeleportToLocation() bool RlvActions::canTeleportToLocation()
{ {
// NOTE: if we're teleporting due to an active command we should disregard any restrictions from the same object // NOTE: if we're teleporting due to an active command we should disregard any restrictions from the same object
const LLUUID& idRlvObjExcept = gRlvHandler.getCurrentObject(); const LLUUID& idRlvObjExcept = RlvHandler::instance().getCurrentObject();
return (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_TPLOC, idRlvObjExcept)) && (RlvActions::canStand(idRlvObjExcept)); return (!RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_TPLOC, idRlvObjExcept)) && (RlvActions::canStand(idRlvObjExcept));
} }
bool RlvActions::isLocalTp(const LLVector3d& posGlobal) bool RlvActions::isLocalTp(const LLVector3d& posGlobal)
...@@ -362,8 +362,8 @@ bool RlvActions::canBuild() ...@@ -362,8 +362,8 @@ bool RlvActions::canBuild()
// - allowed to edit existing objects OR // - allowed to edit existing objects OR
// - allowed to rez/create objects // - allowed to rez/create objects
return return
(!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (!RlvHandler::instance().hasBehaviour(RLV_BHVR_EDIT)) ||
(!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)); (!RlvHandler::instance().hasBehaviour(RLV_BHVR_REZ));
} }
// Handles: @edit and @editobj // Handles: @edit and @editobj
...@@ -398,7 +398,7 @@ bool RlvActions::canInteract(const LLViewerObject* pObj, const LLVector3& posOff ...@@ -398,7 +398,7 @@ bool RlvActions::canInteract(const LLViewerObject* pObj, const LLVector3& posOff
bool RlvActions::canRez() bool RlvActions::canRez()
{ {
return (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_REZ));
} }
bool RlvActions::canGroundSit() bool RlvActions::canGroundSit()
...@@ -424,7 +424,7 @@ bool RlvActions::canSit(const LLViewerObject* pObj, const LLVector3& posOffset / ...@@ -424,7 +424,7 @@ bool RlvActions::canSit(const LLViewerObject* pObj, const LLVector3& posOffset /
(!hasBehaviour(RLV_BHVR_SIT)) && (!hasBehaviour(RLV_BHVR_SIT)) &&
( ((!hasBehaviour(RLV_BHVR_UNSIT)) && (!hasBehaviour(RLV_BHVR_STANDTP))) || ( ((!hasBehaviour(RLV_BHVR_UNSIT)) && (!hasBehaviour(RLV_BHVR_STANDTP))) ||
((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting())) ) && ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting())) ) &&
( ( (NULL != gRlvHandler.getCurrentCommand()) && (RLV_BHVR_SIT == gRlvHandler.getCurrentCommand()->getBehaviourType()) ) || ( ( (NULL != RlvHandler::instance().getCurrentCommand()) && (RLV_BHVR_SIT == RlvHandler::instance().getCurrentCommand()->getBehaviourType()) ) ||
( ((!hasBehaviour(RLV_BHVR_SITTP)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) < s_nSitTpDist * s_nSitTpDist)) && ( ((!hasBehaviour(RLV_BHVR_SITTP)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) < s_nSitTpDist * s_nSitTpDist)) &&
((!hasBehaviour(RLV_BHVR_FARTOUCH)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) < s_nFarTouchDist * s_nFarTouchDist)) ) ); ((!hasBehaviour(RLV_BHVR_FARTOUCH)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) < s_nFarTouchDist * s_nFarTouchDist)) ) );
} }
...@@ -524,19 +524,19 @@ bool RlvActions::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset ...@@ -524,19 +524,19 @@ bool RlvActions::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset
bool RlvActions::canStand() bool RlvActions::canStand()
{ {
// NOTE: return FALSE only if we're @unsit=n restricted and the avie is currently sitting on something and TRUE for everything else // NOTE: return FALSE only if we're @unsit=n restricted and the avie is currently sitting on something and TRUE for everything else
return (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting())); return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_UNSIT)) || ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting()));
} }
bool RlvActions::canStand(const LLUUID& idRlvObjExcept) bool RlvActions::canStand(const LLUUID& idRlvObjExcept)
{ {
// NOTE: must match generic function above // NOTE: must match generic function above
return (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_UNSIT, idRlvObjExcept)) || ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting())); return (!RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_UNSIT, idRlvObjExcept)) || ((isAgentAvatarValid()) && (!gAgentAvatarp->isSitting()));
} }
// Checked: 2014-02-24 (RLVa-1.4.10) // Checked: 2014-02-24 (RLVa-1.4.10)
bool RlvActions::canShowLocation() bool RlvActions::canShowLocation()
{ {
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); return !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC);
} }
// ============================================================================ // ============================================================================
...@@ -552,7 +552,7 @@ const float& RlvActions::getModifierValue<float>(ERlvBehaviourModifier eBhvrMod) ...@@ -552,7 +552,7 @@ const float& RlvActions::getModifierValue<float>(ERlvBehaviourModifier eBhvrMod)
// Checked: 2013-05-10 (RLVa-1.4.9) // Checked: 2013-05-10 (RLVa-1.4.9)
bool RlvActions::hasBehaviour(ERlvBehaviour eBhvr) bool RlvActions::hasBehaviour(ERlvBehaviour eBhvr)
{ {
return gRlvHandler.hasBehaviour(eBhvr); return RlvHandler::instance().hasBehaviour(eBhvr);
} }
// Checked: 2013-05-09 (RLVa-1.4.9) // Checked: 2013-05-09 (RLVa-1.4.9)
......
...@@ -139,7 +139,7 @@ void RlvSettings::updateLoginLastLocation() ...@@ -139,7 +139,7 @@ void RlvSettings::updateLoginLastLocation()
{ {
if ( (!LLApp::isQuitting()) && (gSavedPerAccountSettings.controlExists(RLV_SETTING_LOGINLASTLOCATION)) ) if ( (!LLApp::isQuitting()) && (gSavedPerAccountSettings.controlExists(RLV_SETTING_LOGINLASTLOCATION)) )
{ {
BOOL fValue = (gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC)) || (!RlvActions::canStand()); BOOL fValue = (RlvHandler::instance().hasBehaviour(RLV_BHVR_TPLOC)) || (!RlvActions::canStand());
if (gSavedPerAccountSettings.getBOOL(RLV_SETTING_LOGINLASTLOCATION) != fValue) if (gSavedPerAccountSettings.getBOOL(RLV_SETTING_LOGINLASTLOCATION) != fValue)
{ {
gSavedPerAccountSettings.setBOOL(RLV_SETTING_LOGINLASTLOCATION, fValue); gSavedPerAccountSettings.setBOOL(RLV_SETTING_LOGINLASTLOCATION, fValue);
...@@ -291,7 +291,7 @@ void RlvStrings::loadFromFile(const std::string& strFilePath, bool fUserOverride ...@@ -291,7 +291,7 @@ void RlvStrings::loadFromFile(const std::string& strFilePath, bool fUserOverride
if (sdFileData.has("strings")) if (sdFileData.has("strings"))
{ {
const LLSD& sdStrings = sdFileData["strings"]; const LLSD& sdStrings = sdFileData["strings"];
for (LLSD::map_const_iterator itString = sdStrings.beginMap(); itString != sdStrings.endMap(); ++itString) for (LLSD::map_const_iterator itString = sdStrings.beginMap(), itEnd = sdStrings.endMap(); itString != itEnd; ++itString)
{ {
if ( (!itString->second.has("value")) || ((fUserOverride) && (!hasString(itString->first))) ) if ( (!itString->second.has("value")) || ((fUserOverride) && (!hasString(itString->first))) )
continue; continue;
...@@ -314,7 +314,7 @@ void RlvStrings::loadFromFile(const std::string& strFilePath, bool fUserOverride ...@@ -314,7 +314,7 @@ void RlvStrings::loadFromFile(const std::string& strFilePath, bool fUserOverride
if (sdFileData.has("anonyms")) if (sdFileData.has("anonyms"))
{ {
const LLSD& sdAnonyms = sdFileData["anonyms"]; const LLSD& sdAnonyms = sdFileData["anonyms"];
for (LLSD::array_const_iterator itAnonym = sdAnonyms.beginArray(); itAnonym != sdAnonyms.endArray(); ++itAnonym) for (LLSD::array_const_iterator itAnonym = sdAnonyms.beginArray(), endAnonym = sdAnonyms.endArray(); itAnonym != endAnonym; ++itAnonym)
{ {
m_Anonyms.push_back((*itAnonym).asString()); m_Anonyms.push_back((*itAnonym).asString());
} }
...@@ -515,7 +515,7 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy, bool fCl ...@@ -515,7 +515,7 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy, bool fCl
void RlvUtil::filterScriptQuestions(S32& nQuestions, LLSD& sdPayload) void RlvUtil::filterScriptQuestions(S32& nQuestions, LLSD& sdPayload)
{ {
// Check SCRIPT_PERMISSION_ATTACH // Check SCRIPT_PERMISSION_ATTACH
if ((!gRlvAttachmentLocks.canAttach()) && (SCRIPT_PERMISSIONS[SCRIPT_PERMISSION_ATTACH].permbit & nQuestions)) if ((!RlvAttachmentLocks::instance().canAttach()) && (SCRIPT_PERMISSIONS[SCRIPT_PERMISSION_ATTACH].permbit & nQuestions))
{ {
// Notify the user that we blocked it since they're not allowed to wear any new attachments // Notify the user that we blocked it since they're not allowed to wear any new attachments
sdPayload["rlv_blocked"] = RLV_STRING_BLOCKED_PERMATTACH; sdPayload["rlv_blocked"] = RLV_STRING_BLOCKED_PERMATTACH;
...@@ -523,7 +523,7 @@ void RlvUtil::filterScriptQuestions(S32& nQuestions, LLSD& sdPayload) ...@@ -523,7 +523,7 @@ void RlvUtil::filterScriptQuestions(S32& nQuestions, LLSD& sdPayload)
} }
// Check SCRIPT_PERMISSION_TELEPORT // Check SCRIPT_PERMISSION_TELEPORT
if ((gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC)) && (SCRIPT_PERMISSIONS[SCRIPT_PERMISSION_TELEPORT].permbit & nQuestions)) if ((RlvHandler::instance().hasBehaviour(RLV_BHVR_TPLOC)) && (SCRIPT_PERMISSIONS[SCRIPT_PERMISSION_TELEPORT].permbit & nQuestions))
{ {
// Notify the user that we blocked it since they're not allowed to teleport // Notify the user that we blocked it since they're not allowed to teleport
sdPayload["rlv_blocked"] = RLV_STRING_BLOCKED_PERMTELEPORT; sdPayload["rlv_blocked"] = RLV_STRING_BLOCKED_PERMTELEPORT;
...@@ -666,8 +666,8 @@ void RlvUtil::sendIMMessage(const LLUUID& idRecipient, const std::string& strMsg ...@@ -666,8 +666,8 @@ void RlvUtil::sendIMMessage(const LLUUID& idRecipient, const std::string& strMsg
false, false,
gAgent.getSessionID(), gAgent.getSessionID(),
idRecipient, idRecipient,
strAgentName.c_str(), strAgentName,
strMsg.c_str(), strMsg,
((!pBuddyInfo) || (pBuddyInfo->isOnline())) ? IM_ONLINE : IM_OFFLINE, ((!pBuddyInfo) || (pBuddyInfo->isOnline())) ? IM_ONLINE : IM_OFFLINE,
IM_NOTHING_SPECIAL, IM_NOTHING_SPECIAL,
idSession); idSession);
...@@ -734,7 +734,7 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam) ...@@ -734,7 +734,7 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam)
if (rlv_handler_t::isEnabled()) if (rlv_handler_t::isEnabled())
{ {
ERlvBehaviour eBhvr = RlvBehaviourDictionary::instance().getBehaviourFromString(sdParam.asString(), RLV_TYPE_ADDREM); ERlvBehaviour eBhvr = RlvBehaviourDictionary::instance().getBehaviourFromString(sdParam.asString(), RLV_TYPE_ADDREM);
fEnable = (eBhvr != RLV_BHVR_UNKNOWN) ? !gRlvHandler.hasBehaviour(eBhvr) : true; fEnable = (eBhvr != RLV_BHVR_UNKNOWN) ? !RlvHandler::instance().hasBehaviour(eBhvr) : true;
} }
return fEnable; return fEnable;
} }
...@@ -748,16 +748,16 @@ bool rlvCanDeleteOrReturn(const LLViewerObject* pObj) ...@@ -748,16 +748,16 @@ bool rlvCanDeleteOrReturn(const LLViewerObject* pObj)
{ {
// Block if: @rez=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us // Block if: @rez=n restricted and owned by us or a group *or* @unsit=n restricted and being sat on by us
return return
( (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) && ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_REZ)) || ((!pObj->permYouOwner()) && (!pObj->permGroupOwner())) ) &&
( (!gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (!isAgentAvatarValid()) || (!pObj->getRootEdit()->isChild(gAgentAvatarp)) ); ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_UNSIT)) || (!isAgentAvatarValid()) || (!pObj->getRootEdit()->isChild(gAgentAvatarp)) );
} }
// Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0 // Checked: 2011-05-28 (RLVa-1.4.6) | Modified: RLVa-1.4.0
bool rlvCanDeleteOrReturn() bool rlvCanDeleteOrReturn()
{ {
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_REZ)) || (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) ) if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_REZ)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_UNSIT)) )
{ {
struct RlvCanDeleteOrReturn : public LLSelectedObjectFunctor struct RlvCanDeleteOrReturn final : public LLSelectedObjectFunctor
{ {
/*virtual*/ bool apply(LLViewerObject* pObj) { return rlvCanDeleteOrReturn(pObj); } /*virtual*/ bool apply(LLViewerObject* pObj) { return rlvCanDeleteOrReturn(pObj); }
} f; } f;
...@@ -770,7 +770,7 @@ bool rlvCanDeleteOrReturn() ...@@ -770,7 +770,7 @@ bool rlvCanDeleteOrReturn()
// Checked: 2010-04-20 (RLVa-1.2.0f) | Modified: RLVa-0.2.0f // Checked: 2010-04-20 (RLVa-1.2.0f) | Modified: RLVa-0.2.0f
bool RlvSelectHasLockedAttach::apply(LLSelectNode* pNode) bool RlvSelectHasLockedAttach::apply(LLSelectNode* pNode)
{ {
return (pNode->getObject()) ? gRlvAttachmentLocks.isLockedAttachment(pNode->getObject()->getRootEdit()) : false; return (pNode->getObject()) ? RlvAttachmentLocks::instance().isLockedAttachment(pNode->getObject()->getRootEdit()) : false;
} }
// Checked: 2010-11-29 (RLVa-1.3.0c) | Added: RLVa-1.3.0c // Checked: 2010-11-29 (RLVa-1.3.0c) | Added: RLVa-1.3.0c
...@@ -801,11 +801,11 @@ bool rlvPredCanWearItem(const LLViewerInventoryItem* pItem, ERlvWearMask eWearMa ...@@ -801,11 +801,11 @@ bool rlvPredCanWearItem(const LLViewerInventoryItem* pItem, ERlvWearMask eWearMa
{ {
case LLAssetType::AT_BODYPART: case LLAssetType::AT_BODYPART:
// NOTE: only one body part of each type is allowed so the only way to wear one is if we can replace the current one // NOTE: only one body part of each type is allowed so the only way to wear one is if we can replace the current one
return (RLV_WEAR_LOCKED != (gRlvWearableLocks.canWear(pItem) & RLV_WEAR_REPLACE & eWearMask)); return (RLV_WEAR_LOCKED != (RlvWearableLocks::instance().canWear(pItem) & RLV_WEAR_REPLACE & eWearMask));
case LLAssetType::AT_CLOTHING: case LLAssetType::AT_CLOTHING:
return (RLV_WEAR_LOCKED != (gRlvWearableLocks.canWear(pItem) & eWearMask)); return (RLV_WEAR_LOCKED != (RlvWearableLocks::instance().canWear(pItem) & eWearMask));
case LLAssetType::AT_OBJECT: case LLAssetType::AT_OBJECT:
return (RLV_WEAR_LOCKED != (gRlvAttachmentLocks.canAttach(pItem) & eWearMask)); return (RLV_WEAR_LOCKED != (RlvAttachmentLocks::instance().canAttach(pItem) & eWearMask));
case LLAssetType::AT_GESTURE: case LLAssetType::AT_GESTURE:
return true; return true;
default: default:
...@@ -835,7 +835,7 @@ bool rlvPredCanRemoveItem(const LLUUID& idItem) ...@@ -835,7 +835,7 @@ bool rlvPredCanRemoveItem(const LLUUID& idItem)
if (isAgentAvatarValid()) if (isAgentAvatarValid())
{ {
const LLViewerObject* pAttachObj = gAgentAvatarp->getWornAttachment(idItem); const LLViewerObject* pAttachObj = gAgentAvatarp->getWornAttachment(idItem);
return (pAttachObj) && (!gRlvAttachmentLocks.isLockedAttachment(pAttachObj)); return (pAttachObj) && (!RlvAttachmentLocks::instance().isLockedAttachment(pAttachObj));
} }
return false; return false;
...@@ -850,9 +850,9 @@ bool rlvPredCanRemoveItem(const LLViewerInventoryItem* pItem) ...@@ -850,9 +850,9 @@ bool rlvPredCanRemoveItem(const LLViewerInventoryItem* pItem)
{ {
case LLAssetType::AT_BODYPART: case LLAssetType::AT_BODYPART:
case LLAssetType::AT_CLOTHING: case LLAssetType::AT_CLOTHING:
return gRlvWearableLocks.canRemove(pItem); return RlvWearableLocks::instance().canRemove(pItem);
case LLAssetType::AT_OBJECT: case LLAssetType::AT_OBJECT:
return gRlvAttachmentLocks.canDetach(pItem); return RlvAttachmentLocks::instance().canDetach(pItem);
case LLAssetType::AT_GESTURE: case LLAssetType::AT_GESTURE:
return true; return true;
case LLAssetType::AT_LINK: case LLAssetType::AT_LINK:
...@@ -894,7 +894,7 @@ BOOL rlvEnableSharedWearEnabler(void* pParam) ...@@ -894,7 +894,7 @@ BOOL rlvEnableSharedWearEnabler(void* pParam)
{ {
return false; return false;
// Visually disable the "Enable Shared Wear" option when at least one attachment is non-detachable // Visually disable the "Enable Shared Wear" option when at least one attachment is non-detachable
return (!gRlvHandler.hasLockedAttachment(RLV_LOCK_REMOVE)); return (!RlvHandler::instance().hasLockedAttachment(RLV_LOCK_REMOVE));
} }
*/ */
......
...@@ -226,20 +226,20 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam); ...@@ -226,20 +226,20 @@ bool rlvMenuEnableIfNot(const LLSD& sdParam);
bool rlvCanDeleteOrReturn(); bool rlvCanDeleteOrReturn();
bool rlvCanDeleteOrReturn(const LLViewerObject* pObj); bool rlvCanDeleteOrReturn(const LLViewerObject* pObj);
struct RlvSelectHasLockedAttach : public LLSelectedNodeFunctor struct RlvSelectHasLockedAttach final : public LLSelectedNodeFunctor
{ {
RlvSelectHasLockedAttach() = default; RlvSelectHasLockedAttach() = default;
virtual bool apply(LLSelectNode* pNode); virtual bool apply(LLSelectNode* pNode);
}; };
// Filters out selected objects that can't be editable (i.e. getFirstNode() will return NULL if the selection is fully editable) // Filters out selected objects that can't be editable (i.e. getFirstNode() will return NULL if the selection is fully editable)
struct RlvSelectIsEditable : public LLSelectedNodeFunctor struct RlvSelectIsEditable final : public LLSelectedNodeFunctor
{ {
RlvSelectIsEditable() = default; RlvSelectIsEditable() = default;
/*virtual*/ bool apply(LLSelectNode* pNode); /*virtual*/ bool apply(LLSelectNode* pNode);
}; };
struct RlvSelectIsSittingOn : public LLSelectedNodeFunctor struct RlvSelectIsSittingOn final : public LLSelectedNodeFunctor
{ {
RlvSelectIsSittingOn(const LLVOAvatar* pAvatar) : m_pAvatar(pAvatar) {} RlvSelectIsSittingOn(const LLVOAvatar* pAvatar) : m_pAvatar(pAvatar) {}
/*virtual*/ bool apply(LLSelectNode* pNode); /*virtual*/ bool apply(LLSelectNode* pNode);
......
...@@ -432,7 +432,7 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet) ...@@ -432,7 +432,7 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet)
} }
else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) )
{ {
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETDEBUG, rlvCmd.getObjectID())) if (!RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_SETDEBUG, rlvCmd.getObjectID()))
eRet = onSetDebug(strSetting, rlvCmd.getOption()); eRet = onSetDebug(strSetting, rlvCmd.getOption());
else else
eRet = RLV_RET_FAILED_LOCK; eRet = RLV_RET_FAILED_LOCK;
...@@ -450,7 +450,7 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet) ...@@ -450,7 +450,7 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet)
} }
else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) )
{ {
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID())) if (!RlvHandler::instance().hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID()))
eRet = (RlvWindLight::instance().setValue(strSetting, rlvCmd.getOption())) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; eRet = (RlvWindLight::instance().setValue(strSetting, rlvCmd.getOption())) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN;
else else
eRet = RLV_RET_FAILED_LOCK; eRet = RLV_RET_FAILED_LOCK;
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
* *
*/ */
class RlvExtGetSet : public RlvExtCommandHandler class RlvExtGetSet final : public RlvExtCommandHandler
{ {
public: public:
RlvExtGetSet(); RlvExtGetSet();
......
...@@ -210,7 +210,7 @@ std::string rlvFolderLockSourceToTarget(RlvFolderLocks::folderlock_source_t lock ...@@ -210,7 +210,7 @@ std::string rlvFolderLockSourceToTarget(RlvFolderLocks::folderlock_source_t lock
// Checked: 2010-04-18 (RLVa-1.3.1c) | Modified: RLVa-1.2.0e // Checked: 2010-04-18 (RLVa-1.3.1c) | Modified: RLVa-1.2.0e
void RlvFloaterBehaviours::onOpen(const LLSD& sdKey) void RlvFloaterBehaviours::onOpen(const LLSD& sdKey)
{ {
m_ConnRlvCommand = gRlvHandler.setCommandCallback(boost::bind(&RlvFloaterBehaviours::onCommand, this, _1, _2)); m_ConnRlvCommand = RlvHandler::instance().setCommandCallback(boost::bind(&RlvFloaterBehaviours::onCommand, this, _1, _2));
refreshAll(); refreshAll();
} }
...@@ -359,7 +359,7 @@ void RlvFloaterBehaviours::refreshAll() ...@@ -359,7 +359,7 @@ void RlvFloaterBehaviours::refreshAll()
if ( (rlvCmd.hasOption()) && (rlvGetShowException(rlvCmd.getBehaviourType())) ) if ( (rlvCmd.hasOption()) && (rlvGetShowException(rlvCmd.getBehaviourType())) )
{ {
// List under the "Exception" tab // List under the "Exception" tab
sdExceptRow["enabled"] = gRlvHandler.isException(rlvCmd.getBehaviourType(), idOption); sdExceptRow["enabled"] = RlvHandler::instance().isException(rlvCmd.getBehaviourType(), idOption);
sdExceptColumns[0]["value"] = rlvCmd.getBehaviour(); sdExceptColumns[0]["value"] = rlvCmd.getBehaviour();
sdExceptColumns[1]["value"] = strOption; sdExceptColumns[1]["value"] = strOption;
sdExceptColumns[2]["value"] = strIssuer; sdExceptColumns[2]["value"] = strIssuer;
...@@ -416,7 +416,7 @@ void RlvFloaterBehaviours::refreshAll() ...@@ -416,7 +416,7 @@ void RlvFloaterBehaviours::refreshAll()
// Checked: 2010-03-11 (RLVa-1.2.0) // Checked: 2010-03-11 (RLVa-1.2.0)
void RlvFloaterLocks::onOpen(const LLSD& sdKey) void RlvFloaterLocks::onOpen(const LLSD& sdKey)
{ {
m_ConnRlvCommand = gRlvHandler.setCommandCallback(boost::bind(&RlvFloaterLocks::onRlvCommand, this, _1, _2)); m_ConnRlvCommand = RlvHandler::instance().setCommandCallback(boost::bind(&RlvFloaterLocks::onRlvCommand, this, _1, _2));
refreshAll(); refreshAll();
} }
...@@ -481,7 +481,7 @@ void RlvFloaterLocks::refreshAll() ...@@ -481,7 +481,7 @@ void RlvFloaterLocks::refreshAll()
sdColumns[0]["value"] = "Attachment"; sdColumns[0]["value"] = "Attachment";
sdColumns[1]["value"] = "rem"; sdColumns[1]["value"] = "rem";
const RlvAttachmentLocks::rlv_attachobjlock_map_t& attachObjRem = gRlvAttachmentLocks.getAttachObjLocks(); const RlvAttachmentLocks::rlv_attachobjlock_map_t& attachObjRem = RlvAttachmentLocks::instance().getAttachObjLocks();
for (RlvAttachmentLocks::rlv_attachobjlock_map_t::const_iterator itAttachObj = attachObjRem.begin(); for (RlvAttachmentLocks::rlv_attachobjlock_map_t::const_iterator itAttachObj = attachObjRem.begin();
itAttachObj != attachObjRem.end(); ++itAttachObj) itAttachObj != attachObjRem.end(); ++itAttachObj)
{ {
...@@ -497,7 +497,7 @@ void RlvFloaterLocks::refreshAll() ...@@ -497,7 +497,7 @@ void RlvFloaterLocks::refreshAll()
sdColumns[0]["value"] = "Attachment Point"; sdColumns[0]["value"] = "Attachment Point";
sdColumns[1]["value"] = "add"; sdColumns[1]["value"] = "add";
const RlvAttachmentLocks::rlv_attachptlock_map_t& attachPtAdd = gRlvAttachmentLocks.getAttachPtLocks(RLV_LOCK_ADD); const RlvAttachmentLocks::rlv_attachptlock_map_t& attachPtAdd = RlvAttachmentLocks::instance().getAttachPtLocks(RLV_LOCK_ADD);
for (RlvAttachmentLocks::rlv_attachptlock_map_t::const_iterator itAttachPt = attachPtAdd.begin(); for (RlvAttachmentLocks::rlv_attachptlock_map_t::const_iterator itAttachPt = attachPtAdd.begin();
itAttachPt != attachPtAdd.end(); ++itAttachPt) itAttachPt != attachPtAdd.end(); ++itAttachPt)
{ {
...@@ -510,7 +510,7 @@ void RlvFloaterLocks::refreshAll() ...@@ -510,7 +510,7 @@ void RlvFloaterLocks::refreshAll()
} }
sdColumns[1]["value"] = "rem"; sdColumns[1]["value"] = "rem";
const RlvAttachmentLocks::rlv_attachptlock_map_t& attachPtRem = gRlvAttachmentLocks.getAttachPtLocks(RLV_LOCK_REMOVE); const RlvAttachmentLocks::rlv_attachptlock_map_t& attachPtRem = RlvAttachmentLocks::instance().getAttachPtLocks(RLV_LOCK_REMOVE);
for (RlvAttachmentLocks::rlv_attachptlock_map_t::const_iterator itAttachPt = attachPtRem.begin(); for (RlvAttachmentLocks::rlv_attachptlock_map_t::const_iterator itAttachPt = attachPtRem.begin();
itAttachPt != attachPtRem.end(); ++itAttachPt) itAttachPt != attachPtRem.end(); ++itAttachPt)
{ {
...@@ -528,7 +528,7 @@ void RlvFloaterLocks::refreshAll() ...@@ -528,7 +528,7 @@ void RlvFloaterLocks::refreshAll()
sdColumns[0]["value"] = "Wearable Type"; sdColumns[0]["value"] = "Wearable Type";
sdColumns[1]["value"] = "add"; sdColumns[1]["value"] = "add";
const RlvWearableLocks::rlv_wearabletypelock_map_t& wearableTypeAdd = gRlvWearableLocks.getWearableTypeLocks(RLV_LOCK_ADD); const RlvWearableLocks::rlv_wearabletypelock_map_t& wearableTypeAdd = RlvWearableLocks::instance().getWearableTypeLocks(RLV_LOCK_ADD);
for (RlvWearableLocks::rlv_wearabletypelock_map_t::const_iterator itWearableType = wearableTypeAdd.begin(); for (RlvWearableLocks::rlv_wearabletypelock_map_t::const_iterator itWearableType = wearableTypeAdd.begin();
itWearableType != wearableTypeAdd.end(); ++itWearableType) itWearableType != wearableTypeAdd.end(); ++itWearableType)
{ {
...@@ -539,7 +539,7 @@ void RlvFloaterLocks::refreshAll() ...@@ -539,7 +539,7 @@ void RlvFloaterLocks::refreshAll()
} }
sdColumns[1]["value"] = "rem"; sdColumns[1]["value"] = "rem";
const RlvWearableLocks::rlv_wearabletypelock_map_t& wearableTypeRem = gRlvWearableLocks.getWearableTypeLocks(RLV_LOCK_REMOVE); const RlvWearableLocks::rlv_wearabletypelock_map_t& wearableTypeRem = RlvWearableLocks::instance().getWearableTypeLocks(RLV_LOCK_REMOVE);
for (RlvWearableLocks::rlv_wearabletypelock_map_t::const_iterator itWearableType = wearableTypeRem.begin(); for (RlvWearableLocks::rlv_wearabletypelock_map_t::const_iterator itWearableType = wearableTypeRem.begin();
itWearableType != wearableTypeRem.end(); ++itWearableType) itWearableType != wearableTypeRem.end(); ++itWearableType)
{ {
...@@ -651,7 +651,7 @@ BOOL RlvFloaterStrings::postBuild() ...@@ -651,7 +651,7 @@ BOOL RlvFloaterStrings::postBuild()
} }
// Populate the combo box // Populate the combo box
for (LLSD::map_const_iterator itString = m_sdStringsInfo.beginMap(); itString != m_sdStringsInfo.endMap(); ++itString) for (LLSD::map_const_iterator itString = m_sdStringsInfo.beginMap(), itEnd = m_sdStringsInfo.endMap(); itString != itEnd; ++itString)
{ {
const LLSD& sdStringInfo = itString->second; const LLSD& sdStringInfo = itString->second;
if ( (!sdStringInfo.has("customizable")) || (!sdStringInfo["customizable"].asBoolean()) ) if ( (!sdStringInfo.has("customizable")) || (!sdStringInfo["customizable"].asBoolean()) )
...@@ -760,7 +760,7 @@ BOOL RlvFloaterConsole::postBuild() ...@@ -760,7 +760,7 @@ BOOL RlvFloaterConsole::postBuild()
void RlvFloaterConsole::onClose(bool fQuitting) void RlvFloaterConsole::onClose(bool fQuitting)
{ {
RlvBehaviourDictionary::instance().clearModifiers(gAgent.getID()); RlvBehaviourDictionary::instance().clearModifiers(gAgent.getID());
gRlvHandler.processCommand(gAgent.getID(), "clear", true); RlvHandler::instance().processCommand(gAgent.getID(), "clear", true);
} }
void RlvFloaterConsole::addCommandReply(const std::string& strCommand, const std::string& strReply) void RlvFloaterConsole::addCommandReply(const std::string& strCommand, const std::string& strReply)
...@@ -796,7 +796,7 @@ void RlvFloaterConsole::onInput(LLUICtrl* pCtrl, const LLSD& sdParam) ...@@ -796,7 +796,7 @@ void RlvFloaterConsole::onInput(LLUICtrl* pCtrl, const LLSD& sdParam)
boost::tokenizer tokens(strInput, boost::char_separator<char>(",", "", boost::drop_empty_tokens)); boost::tokenizer tokens(strInput, boost::char_separator<char>(",", "", boost::drop_empty_tokens));
for (std::string strCmd : tokens) for (std::string strCmd : tokens)
{ {
ERlvCmdRet eRet = gRlvHandler.processCommand(gAgent.getID(), strCmd, true); ERlvCmdRet eRet = RlvHandler::instance().processCommand(gAgent.getID(), strCmd, true);
if ( RLV_RET_SUCCESS == (eRet & RLV_RET_SUCCESS) ) if ( RLV_RET_SUCCESS == (eRet & RLV_RET_SUCCESS) )
pstr = &strExecuted; pstr = &strExecuted;
else if ( RLV_RET_FAILED == (eRet & RLV_RET_FAILED) ) else if ( RLV_RET_FAILED == (eRet & RLV_RET_FAILED) )
......
...@@ -38,7 +38,7 @@ enum class ERlvBehaviourFilter { ...@@ -38,7 +38,7 @@ enum class ERlvBehaviourFilter {
ALL ALL
}; };
class RlvFloaterBehaviours : public LLFloater class RlvFloaterBehaviours final : public LLFloater
{ {
friend class LLFloaterReg; friend class LLFloaterReg;
private: private:
...@@ -74,7 +74,7 @@ protected: ...@@ -74,7 +74,7 @@ protected:
// RlvFloaterLocks class declaration // RlvFloaterLocks class declaration
// //
class RlvFloaterLocks : public LLFloater class RlvFloaterLocks final : public LLFloater
{ {
friend class LLFloaterReg; friend class LLFloaterReg;
private: private:
...@@ -106,7 +106,7 @@ protected: ...@@ -106,7 +106,7 @@ protected:
// RlvFloaterStrings class declaration // RlvFloaterStrings class declaration
// //
class RlvFloaterStrings : public LLFloater class RlvFloaterStrings final : public LLFloater
{ {
friend class LLFloaterReg; friend class LLFloaterReg;
private: private:
...@@ -135,7 +135,7 @@ protected: ...@@ -135,7 +135,7 @@ protected:
// RlvFloaterConsole - debug console to allow command execution without the need for a script // RlvFloaterConsole - debug console to allow command execution without the need for a script
// //
class RlvFloaterConsole : public LLFloater class RlvFloaterConsole final : public LLFloater
{ {
friend class LLFloaterReg; friend class LLFloaterReg;
template<ERlvParamType> friend struct RlvCommandHandlerBaseImpl; template<ERlvParamType> friend struct RlvCommandHandlerBaseImpl;
......
...@@ -76,8 +76,6 @@ ...@@ -76,8 +76,6 @@
bool RlvHandler::m_fEnabled = false; bool RlvHandler::m_fEnabled = false;
rlv_handler_t gRlvHandler;
// ============================================================================ // ============================================================================
// Command specific helper functions // Command specific helper functions
// //
...@@ -154,6 +152,8 @@ RlvHandler::~RlvHandler() ...@@ -154,6 +152,8 @@ RlvHandler::~RlvHandler()
} }
//delete m_pGCTimer; // <- deletes itself //delete m_pGCTimer; // <- deletes itself
LL_INFOS() << "RlvHandler shutdown" << LL_ENDL;
} }
// ============================================================================ // ============================================================================
...@@ -612,7 +612,7 @@ bool RlvHandler::processIMQuery(const LLUUID& idSender, const std::string& strMe ...@@ -612,7 +612,7 @@ bool RlvHandler::processIMQuery(const LLUUID& idSender, const std::string& strMe
params.substitutions = LLSD().with("NAME_LABEL", LLSLURL("agent", idSender, "completename").getSLURLString()).with("NAME_SLURL", LLSLURL("agent", idSender, "about").getSLURLString()); params.substitutions = LLSD().with("NAME_LABEL", LLSLURL("agent", idSender, "completename").getSLURLString()).with("NAME_SLURL", LLSLURL("agent", idSender, "about").getSLURLString());
params.payload = LLSD().with("from_id", idSender).with("command", strMessage); params.payload = LLSD().with("from_id", idSender).with("command", strMessage);
class RlvPostponedOfferNotification : public LLPostponedNotification class RlvPostponedOfferNotification final : public LLPostponedNotification
{ {
protected: protected:
void modifyNotificationParams() override void modifyNotificationParams() override
...@@ -861,7 +861,7 @@ void RlvHandler::onAttach(const LLViewerObject* pAttachObj, const LLViewerJointA ...@@ -861,7 +861,7 @@ void RlvHandler::onAttach(const LLViewerObject* pAttachObj, const LLViewerJointA
// We need to check this object for an active "@detach=n" and actually lock it down now that it's been attached somewhere // We need to check this object for an active "@detach=n" and actually lock it down now that it's been attached somewhere
if (itObj->second.hasBehaviour(RLV_BHVR_DETACH, false)) if (itObj->second.hasBehaviour(RLV_BHVR_DETACH, false))
gRlvAttachmentLocks.addAttachmentLock(pAttachObj->getID(), itObj->second.getObjectID()); RlvAttachmentLocks::instance().addAttachmentLock(pAttachObj->getID(), itObj->second.getObjectID());
} }
} }
} }
...@@ -901,7 +901,7 @@ void RlvHandler::onDetach(const LLViewerObject* pAttachObj, const LLViewerJointA ...@@ -901,7 +901,7 @@ void RlvHandler::onDetach(const LLViewerObject* pAttachObj, const LLViewerJointA
// If this object has an active "@detach=n" then we need to release the attachment lock since it's no longer attached // If this object has an active "@detach=n" then we need to release the attachment lock since it's no longer attached
if (itObj->second.hasBehaviour(RLV_BHVR_DETACH, false)) if (itObj->second.hasBehaviour(RLV_BHVR_DETACH, false))
gRlvAttachmentLocks.removeAttachmentLock(pAttachObj->getID(), itObj->second.getObjectID()); RlvAttachmentLocks::instance().removeAttachmentLock(pAttachObj->getID(), itObj->second.getObjectID());
} }
} }
} }
...@@ -1008,12 +1008,12 @@ bool RlvHandler::onGC() ...@@ -1008,12 +1008,12 @@ bool RlvHandler::onGC()
// -> if it does run it likely means that there's a @detach=n in a *child* prim that we couldn't look up in onAttach() // -> if it does run it likely means that there's a @detach=n in a *child* prim that we couldn't look up in onAttach()
// -> since RLV doesn't currently support @detach=n from child prims it's actually not such a big deal right now but still // -> since RLV doesn't currently support @detach=n from child prims it's actually not such a big deal right now but still
if ( (pObj->isAttachment()) && (itCurObj->second.hasBehaviour(RLV_BHVR_DETACH, false)) ) if ( (pObj->isAttachment()) && (itCurObj->second.hasBehaviour(RLV_BHVR_DETACH, false)) )
gRlvAttachmentLocks.addAttachmentLock(pObj->getID(), itCurObj->second.getObjectID()); RlvAttachmentLocks::instance().addAttachmentLock(pObj->getID(), itCurObj->second.getObjectID());
} }
} }
} }
RLV_ASSERT(gRlvAttachmentLocks.verifyAttachmentLocks()); // Verify that we haven't leaked any attachment locks somehow RLV_ASSERT(RlvAttachmentLocks::instance().verifyAttachmentLocks()); // Verify that we haven't leaked any attachment locks somehow
// Clean up pending temp attachments that we were never able to resolve // Clean up pending temp attachments that we were never able to resolve
rlv_blocked_object_list_t::const_iterator itBlocked = m_BlockedObjects.cbegin(), itCurBlocked; rlv_blocked_object_list_t::const_iterator itBlocked = m_BlockedObjects.cbegin(), itCurBlocked;
...@@ -1305,8 +1305,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const ...@@ -1305,8 +1305,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const
if ( (!pFolder) || (!pAvatar) ) if ( (!pFolder) || (!pAvatar) )
return false; return false;
// Sanity check - if nothing is locked then we can definitely take it off // Sanity check - if nothing is locked then we can definitely take it off
if ( (!gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_REMOVE)) || if ( (!RlvAttachmentLocks::instance().hasLockedAttachmentPoint(RLV_LOCK_REMOVE)) ||
(!gRlvWearableLocks.hasLockedWearableType(RLV_LOCK_REMOVE)) ) (!RlvWearableLocks::instance().hasLockedWearableType(RLV_LOCK_REMOVE)) )
{ {
return true; return true;
} }
...@@ -1353,7 +1353,7 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const ...@@ -1353,7 +1353,7 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const
if ( (!pFolder) || (!pAvatar) ) if ( (!pFolder) || (!pAvatar) )
return false; return false;
// Sanity check - if nothing is locked then we can definitely wear it // Sanity check - if nothing is locked then we can definitely wear it
if ( (!gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) || (!gRlvWearableLocks.hacLockedWearableType(RLV_LOCK_ANY)) ) if ( (!RlvAttachmentLocks::instance().hasLockedAttachmentPoint(RLV_LOCK_ANY)) || (!RlvWearableLocks::instance().hacLockedWearableType(RLV_LOCK_ANY)) )
return true; return true;
/* /*
...@@ -1383,8 +1383,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const ...@@ -1383,8 +1383,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const
LLViewerInventoryCategory* pFolder; LLViewerInventoryCategory* pFolder;
if ( (!isWearable(wtType)) || if ( (!isWearable(wtType)) ||
( (gAgent.getWearable(wtType)) && (!isRemovable(wtType)) ) || ( (gAgent.getWearable(wtType)) && (!isRemovable(wtType)) ) ||
( (gRlvHandler.getCompositeInfo(gAgent.getWearableItem(wtType), NULL, &pFolder)) && ( (RlvHandler::instance().getCompositeInfo(gAgent.getWearableItem(wtType), NULL, &pFolder)) &&
(pFolder->getUUID() != pItem->getParentUUID()) && (!gRlvHandler.canTakeOffComposite(pFolder)) ) ) (pFolder->getUUID() != pItem->getParentUUID()) && (!RlvHandler::instance().canTakeOffComposite(pFolder)) ) )
{ {
return false; return false;
} }
...@@ -1397,8 +1397,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const ...@@ -1397,8 +1397,8 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const
LLViewerInventoryCategory* pFolder; LLViewerInventoryCategory* pFolder;
if ( (!pAttachPt) || (isLockedAttachment(pAttachPt, RLV_LOCK_ADD)) || if ( (!pAttachPt) || (isLockedAttachment(pAttachPt, RLV_LOCK_ADD)) ||
( (pAttachPt->getObject()) && (isLockedAttachment(pAttachPt, RLV_LOCK_REMOVE)) ) || ( (pAttachPt->getObject()) && (isLockedAttachment(pAttachPt, RLV_LOCK_REMOVE)) ) ||
( (gRlvHandler.getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) && ( (RlvHandler::instance().getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) &&
(pFolder->getUUID() != pItem->getParentUUID()) && (!gRlvHandler.canTakeOffComposite(pFolder)) ) ) (pFolder->getUUID() != pItem->getParentUUID()) && (!RlvHandler::instance().canTakeOffComposite(pFolder)) ) )
{ {
return false; return false;
} }
...@@ -1509,9 +1509,9 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd) ...@@ -1509,9 +1509,9 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
if ( (rlvCmdOption.isEmpty()) || ((LLWearableType::EType)idxType == rlvCmdOption.getWearableType()) ) if ( (rlvCmdOption.isEmpty()) || ((LLWearableType::EType)idxType == rlvCmdOption.getWearableType()) )
{ {
if (RLV_TYPE_ADD == eType) if (RLV_TYPE_ADD == eType)
gRlvWearableLocks.addWearableTypeLock((LLWearableType::EType)idxType, rlvCmd.getObjectID(), eLock); RlvWearableLocks::instance().addWearableTypeLock((LLWearableType::EType)idxType, rlvCmd.getObjectID(), eLock);
else else
gRlvWearableLocks.removeWearableTypeLock((LLWearableType::EType)idxType, rlvCmd.getObjectID(), eLock); RlvWearableLocks::instance().removeWearableTypeLock((LLWearableType::EType)idxType, rlvCmd.getObjectID(), eLock);
} }
} }
} }
...@@ -1620,7 +1620,7 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd) ...@@ -1620,7 +1620,7 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
ERlvCmdRet RlvCommandHandlerBaseImpl<RLV_TYPE_ADDREM>::processCommand(const RlvCommand& rlvCmd, RlvBhvrHandlerFunc* pHandlerFunc, RlvBhvrToggleHandlerFunc* pToggleHandlerFunc) ERlvCmdRet RlvCommandHandlerBaseImpl<RLV_TYPE_ADDREM>::processCommand(const RlvCommand& rlvCmd, RlvBhvrHandlerFunc* pHandlerFunc, RlvBhvrToggleHandlerFunc* pToggleHandlerFunc)
{ {
ERlvBehaviour eBhvr = rlvCmd.getBehaviourType(); ERlvBehaviour eBhvr = rlvCmd.getBehaviourType();
bool fRefCount = false, fHasBhvr = gRlvHandler.hasBehaviour(eBhvr); bool fRefCount = false, fHasBhvr = RlvHandler::instance().hasBehaviour(eBhvr);
ERlvCmdRet eRet = (*pHandlerFunc)(rlvCmd, fRefCount); ERlvCmdRet eRet = (*pHandlerFunc)(rlvCmd, fRefCount);
...@@ -1630,23 +1630,23 @@ ERlvCmdRet RlvCommandHandlerBaseImpl<RLV_TYPE_ADDREM>::processCommand(const RlvC ...@@ -1630,23 +1630,23 @@ ERlvCmdRet RlvCommandHandlerBaseImpl<RLV_TYPE_ADDREM>::processCommand(const RlvC
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
{ {
if (rlvCmd.isStrict()) if (rlvCmd.isStrict())
gRlvHandler.addException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr); RlvHandler::instance().addException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr);
gRlvHandler.m_Behaviours[eBhvr]++; RlvHandler::instance().m_Behaviours[eBhvr]++;
rlvCmd.markRefCounted(); rlvCmd.markRefCounted();
} }
else else
{ {
if (rlvCmd.isStrict()) if (rlvCmd.isStrict())
gRlvHandler.removeException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr); RlvHandler::instance().removeException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr);
gRlvHandler.m_Behaviours[eBhvr]--; RlvHandler::instance().m_Behaviours[eBhvr]--;
} }
gRlvHandler.m_OnBehaviour(eBhvr, rlvCmd.getParamType()); RlvHandler::instance().m_OnBehaviour(eBhvr, rlvCmd.getParamType());
if (fHasBhvr != gRlvHandler.hasBehaviour(eBhvr)) if (fHasBhvr != RlvHandler::instance().hasBehaviour(eBhvr))
{ {
if (pToggleHandlerFunc) if (pToggleHandlerFunc)
(*pToggleHandlerFunc)(eBhvr, !fHasBhvr); (*pToggleHandlerFunc)(eBhvr, !fHasBhvr);
gRlvHandler.m_OnBehaviourToggle(eBhvr, rlvCmd.getParamType()); RlvHandler::instance().m_OnBehaviourToggle(eBhvr, rlvCmd.getParamType());
} }
} }
...@@ -1675,9 +1675,9 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_EXCEPTION>::onCommand(const Rlv ...@@ -1675,9 +1675,9 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_EXCEPTION>::onCommand(const Rlv
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvHandler.addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException); RlvHandler::instance().addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException);
else else
gRlvHandler.removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException); RlvHandler::instance().removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException);
fRefCount = true; fRefCount = true;
return RLV_RET_SUCCESS; return RLV_RET_SUCCESS;
...@@ -1710,15 +1710,15 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_MODIFIER>::onCommand(const RlvC ...@@ -1710,15 +1710,15 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_MODIFIER>::onCommand(const RlvC
// HACK-RLVa: reference counting doesn't happen until control returns to our caller but the modifier callbacks will happen now so we need to adjust the reference counts here // HACK-RLVa: reference counting doesn't happen until control returns to our caller but the modifier callbacks will happen now so we need to adjust the reference counts here
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
{ {
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]++; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]++;
pBhvrModifier->addValue(modValue, rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->addValue(modValue, rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]--; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]--;
} }
else else
{ {
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]--; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]--;
pBhvrModifier->removeValue(modValue, rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->removeValue(modValue, rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]++; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]++;
} }
fRefCount = true; fRefCount = true;
...@@ -1740,15 +1740,15 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_NONE_OR_MODIFIER>::onCommand(co ...@@ -1740,15 +1740,15 @@ ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_NONE_OR_MODIFIER>::onCommand(co
// HACK-RLVa: reference counting doesn't happen until control returns to our caller but the modifier callbacks will happen now so we need to adjust the reference counts here // HACK-RLVa: reference counting doesn't happen until control returns to our caller but the modifier callbacks will happen now so we need to adjust the reference counts here
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
{ {
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]++; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]++;
pBhvrModifier->addValue(pBhvrModifier->getDefaultValue(), rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->addValue(pBhvrModifier->getDefaultValue(), rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]--; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]--;
} }
else else
{ {
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]--; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]--;
pBhvrModifier->removeValue(pBhvrModifier->getDefaultValue(), rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->removeValue(pBhvrModifier->getDefaultValue(), rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
gRlvHandler.m_Behaviours[rlvCmd.getBehaviourType()]++; RlvHandler::instance().m_Behaviours[rlvCmd.getBehaviourType()]++;
} }
} }
...@@ -1779,9 +1779,9 @@ ERlvCmdRet RlvBehaviourAddRemAttachHandler::onCommand(const RlvCommand& rlvCmd, ...@@ -1779,9 +1779,9 @@ ERlvCmdRet RlvBehaviourAddRemAttachHandler::onCommand(const RlvCommand& rlvCmd,
if ( (0 == idxAttachPt) || (itAttach->first == idxAttachPt) ) if ( (0 == idxAttachPt) || (itAttach->first == idxAttachPt) )
{ {
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvAttachmentLocks.addAttachmentPointLock(itAttach->first, rlvCmd.getObjectID(), eLock); RlvAttachmentLocks::instance().addAttachmentPointLock(itAttach->first, rlvCmd.getObjectID(), eLock);
else else
gRlvAttachmentLocks.removeAttachmentPointLock(itAttach->first, rlvCmd.getObjectID(), eLock); RlvAttachmentLocks::instance().removeAttachmentPointLock(itAttach->first, rlvCmd.getObjectID(), eLock);
} }
} }
...@@ -1804,13 +1804,13 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_DETACH>::onCommand(const RlvCommand& rlv ...@@ -1804,13 +1804,13 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_DETACH>::onCommand(const RlvCommand& rlv
// - if it hasn't rezzed yet then it's a @detach=n from a non-attachment and RlvHandler::onAttach() takes care of it // - if it hasn't rezzed yet then it's a @detach=n from a non-attachment and RlvHandler::onAttach() takes care of it
// * @detach=y: - if it ever rezzed as an attachment we'll have cached the UUID of its root // * @detach=y: - if it ever rezzed as an attachment we'll have cached the UUID of its root
// - if it never rezzed as an attachment there won't be a lock to remove // - if it never rezzed as an attachment there won't be a lock to remove
RlvHandler::rlv_object_map_t::const_iterator itObj = gRlvHandler.m_Objects.find(rlvCmd.getObjectID()); RlvHandler::rlv_object_map_t::const_iterator itObj = RlvHandler::instance().m_Objects.find(rlvCmd.getObjectID());
if ( (itObj != gRlvHandler.m_Objects.end()) && (itObj->second.hasLookup()) && (itObj->second.getAttachPt()) ) if ( (itObj != RlvHandler::instance().m_Objects.end()) && (itObj->second.hasLookup()) && (itObj->second.getAttachPt()) )
{ {
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvAttachmentLocks.addAttachmentLock(itObj->second.getRootID(), itObj->first); RlvAttachmentLocks::instance().addAttachmentLock(itObj->second.getRootID(), itObj->first);
else else
gRlvAttachmentLocks.removeAttachmentLock(itObj->second.getRootID(), itObj->first); RlvAttachmentLocks::instance().removeAttachmentLock(itObj->second.getRootID(), itObj->first);
} }
} }
else // @detach:<attachpt>=n|y - RLV_LOCK_ADD and RLV_LOCK_REMOVE locks an attachment *point* else // @detach:<attachpt>=n|y - RLV_LOCK_ADD and RLV_LOCK_REMOVE locks an attachment *point*
...@@ -1821,9 +1821,9 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_DETACH>::onCommand(const RlvCommand& rlv ...@@ -1821,9 +1821,9 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_DETACH>::onCommand(const RlvCommand& rlv
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvAttachmentLocks.addAttachmentPointLock(idxAttachPt, rlvCmd.getObjectID(), (ERlvLockMask)(RLV_LOCK_ADD | RLV_LOCK_REMOVE)); RlvAttachmentLocks::instance().addAttachmentPointLock(idxAttachPt, rlvCmd.getObjectID(), (ERlvLockMask)(RLV_LOCK_ADD | RLV_LOCK_REMOVE));
else else
gRlvAttachmentLocks.removeAttachmentPointLock(idxAttachPt, rlvCmd.getObjectID(), (ERlvLockMask)(RLV_LOCK_ADD | RLV_LOCK_REMOVE)); RlvAttachmentLocks::instance().removeAttachmentPointLock(idxAttachPt, rlvCmd.getObjectID(), (ERlvLockMask)(RLV_LOCK_ADD | RLV_LOCK_REMOVE));
} }
fRefCount = false; // Don't reference count @detach[:<option>]=n fRefCount = false; // Don't reference count @detach[:<option>]=n
...@@ -1939,7 +1939,7 @@ void RlvBehaviourToggleHandler<RLV_BHVR_SETOVERLAY>::onCommandToggle(ERlvBehavio ...@@ -1939,7 +1939,7 @@ void RlvBehaviourToggleHandler<RLV_BHVR_SETOVERLAY>::onCommandToggle(ERlvBehavio
{ {
// Get the UUID of the primary object (there should only be one) // Get the UUID of the primary object (there should only be one)
std::list<const RlvObject*> lObjects; std::list<const RlvObject*> lObjects;
gRlvHandler.findBehaviour(RLV_BHVR_SETOVERLAY, lObjects); RlvHandler::instance().findBehaviour(RLV_BHVR_SETOVERLAY, lObjects);
RLV_ASSERT(lObjects.size() == 1); RLV_ASSERT(lObjects.size() == 1);
idRlvObject = lObjects.front()->getObjectID(); idRlvObject = lObjects.front()->getObjectID();
} }
...@@ -1957,9 +1957,9 @@ void RlvBehaviourModifierHandler<RLV_MODIFIER_OVERLAY_TEXTURE>::onValueChange() ...@@ -1957,9 +1957,9 @@ void RlvBehaviourModifierHandler<RLV_MODIFIER_OVERLAY_TEXTURE>::onValueChange()
if (RlvBehaviourModifier* pBhvrModifier = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_OVERLAY_TEXTURE)) if (RlvBehaviourModifier* pBhvrModifier = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_OVERLAY_TEXTURE))
{ {
if (pBhvrModifier->hasValue()) if (pBhvrModifier->hasValue())
gRlvHandler.setOverlayImage(pBhvrModifier->getValue<LLUUID>()); RlvHandler::instance().setOverlayImage(pBhvrModifier->getValue<LLUUID>());
else else
gRlvHandler.clearOverlayImage(); RlvHandler::instance().clearOverlayImage();
} }
} }
...@@ -1975,9 +1975,9 @@ ERlvCmdRet RlvBehaviourSendChannelHandler::onCommand(const RlvCommand& rlvCmd, b ...@@ -1975,9 +1975,9 @@ ERlvCmdRet RlvBehaviourSendChannelHandler::onCommand(const RlvCommand& rlvCmd, b
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvHandler.addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), nChannel); RlvHandler::instance().addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), nChannel);
else else
gRlvHandler.removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), nChannel); RlvHandler::instance().removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), nChannel);
} }
else else
{ {
...@@ -2105,7 +2105,7 @@ ERlvCmdRet RlvBehaviourSetCamFovHandler::onCommand(const RlvCommand& rlvCmd, boo ...@@ -2105,7 +2105,7 @@ ERlvCmdRet RlvBehaviourSetCamFovHandler::onCommand(const RlvCommand& rlvCmd, boo
{ {
static float s_nLastCameraAngle = DEFAULT_FIELD_OF_VIEW; static float s_nLastCameraAngle = DEFAULT_FIELD_OF_VIEW;
S32 nRefMinBhvr = gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_FOVMIN], nRefMaxBhvr = gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_FOVMAX]; S32 nRefMinBhvr = RlvHandler::instance().m_Behaviours[RLV_BHVR_SETCAM_FOVMIN], nRefMaxBhvr = RlvHandler::instance().m_Behaviours[RLV_BHVR_SETCAM_FOVMAX];
LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle"); LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle");
// Save the user's current FOV angle if nothing's been restricted (yet) // Save the user's current FOV angle if nothing's been restricted (yet)
...@@ -2190,26 +2190,26 @@ void RlvBehaviourToggleHandler<RLV_BHVR_SETCAM>::onCommandToggle(ERlvBehaviour e ...@@ -2190,26 +2190,26 @@ void RlvBehaviourToggleHandler<RLV_BHVR_SETCAM>::onCommandToggle(ERlvBehaviour e
// - behaviour modifiers => it's all handled for us once we set the primary object // - behaviour modifiers => it's all handled for us once we set the primary object
// - RLV_BHVR_SETCAM_UNLOCK => manually (re)set the reference count (and possibly invoke the toggle handler) // - RLV_BHVR_SETCAM_UNLOCK => manually (re)set the reference count (and possibly invoke the toggle handler)
LLUUID idRlvObject; bool fHasCamUnlock = gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_UNLOCK); LLUUID idRlvObject; bool fHasCamUnlock = RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_UNLOCK);
if (fHasBhvr) if (fHasBhvr)
{ {
// Get the UUID of the primary object // Get the UUID of the primary object
std::list<const RlvObject*> lObjects; std::list<const RlvObject*> lObjects;
gRlvHandler.findBehaviour(RLV_BHVR_SETCAM, lObjects); RlvHandler::instance().findBehaviour(RLV_BHVR_SETCAM, lObjects);
idRlvObject = lObjects.front()->getObjectID(); idRlvObject = lObjects.front()->getObjectID();
// Reset the @setcam_unlock reference count // Reset the @setcam_unlock reference count
gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_UNLOCK] = (lObjects.front()->hasBehaviour(RLV_BHVR_SETCAM_UNLOCK, false)) ? 1 : 0; RlvHandler::instance().m_Behaviours[RLV_BHVR_SETCAM_UNLOCK] = (lObjects.front()->hasBehaviour(RLV_BHVR_SETCAM_UNLOCK, false)) ? 1 : 0;
} }
else else
{ {
std::list<const RlvObject*> lObjects; std::list<const RlvObject*> lObjects;
// Restore the @setcam_unlock reference count // Restore the @setcam_unlock reference count
gRlvHandler.findBehaviour(RLV_BHVR_SETCAM_UNLOCK, lObjects); RlvHandler::instance().findBehaviour(RLV_BHVR_SETCAM_UNLOCK, lObjects);
gRlvHandler.m_Behaviours[RLV_BHVR_SETCAM_UNLOCK] = static_cast<S16>(lObjects.size()); RlvHandler::instance().m_Behaviours[RLV_BHVR_SETCAM_UNLOCK] = static_cast<S16>(lObjects.size());
} }
// Manually invoke the @setcam_unlock toggle handler if we toggled it on/off // Manually invoke the @setcam_unlock toggle handler if we toggled it on/off
if (fHasCamUnlock != gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_UNLOCK)) if (fHasCamUnlock != RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_UNLOCK))
RlvBehaviourToggleHandler<RLV_BHVR_SETCAM_UNLOCK>::onCommandToggle(RLV_BHVR_SETCAM_UNLOCK, !fHasCamUnlock); RlvBehaviourToggleHandler<RLV_BHVR_SETCAM_UNLOCK>::onCommandToggle(RLV_BHVR_SETCAM_UNLOCK, !fHasCamUnlock);
gAgentCamera.switchCameraPreset( (fHasBhvr) ? CAMERA_RLV_SETCAM_VIEW : CAMERA_PRESET_REAR_VIEW ); gAgentCamera.switchCameraPreset( (fHasBhvr) ? CAMERA_RLV_SETCAM_VIEW : CAMERA_PRESET_REAR_VIEW );
...@@ -2275,9 +2275,9 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SHOWHOVERTEXT>::onCommand(const RlvComma ...@@ -2275,9 +2275,9 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SHOWHOVERTEXT>::onCommand(const RlvComma
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
gRlvHandler.addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException); RlvHandler::instance().addException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException);
else else
gRlvHandler.removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException); RlvHandler::instance().removeException(rlvCmd.getObjectID(), rlvCmd.getBehaviourType(), idException);
// Clear/restore the object's hover text as needed // Clear/restore the object's hover text as needed
LLViewerObject* pObj = gObjectList.findObject(idException); LLViewerObject* pObj = gObjectList.findObject(idException);
...@@ -2479,7 +2479,7 @@ template<> ...@@ -2479,7 +2479,7 @@ template<>
ERlvCmdRet RlvForceGenericHandler<RLV_OPTION_MODIFIER>::onCommand(const RlvCommand& rlvCmd) ERlvCmdRet RlvForceGenericHandler<RLV_OPTION_MODIFIER>::onCommand(const RlvCommand& rlvCmd)
{ {
// The object should be holding at least one active behaviour // The object should be holding at least one active behaviour
if (!gRlvHandler.hasBehaviour(rlvCmd.getObjectID())) if (!RlvHandler::instance().hasBehaviour(rlvCmd.getObjectID()))
return RLV_RET_FAILED_NOBEHAVIOUR; return RLV_RET_FAILED_NOBEHAVIOUR;
// There should be an option and it should specify a valid modifier (RlvBehaviourModifier performs the appropriate type checks) // There should be an option and it should specify a valid modifier (RlvBehaviourModifier performs the appropriate type checks)
...@@ -2609,7 +2609,7 @@ ERlvCmdRet RlvForceRemAttachHandler::onCommand(const RlvCommand& rlvCmd) ...@@ -2609,7 +2609,7 @@ ERlvCmdRet RlvForceRemAttachHandler::onCommand(const RlvCommand& rlvCmd)
RlvCommandOptionGeneric rlvCmdOption; RlvCommandOptionGeneric rlvCmdOption;
RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption);
if (rlvCmdOption.isSharedFolder()) if (rlvCmdOption.isSharedFolder())
return gRlvHandler.onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags()); return RlvHandler::instance().onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags());
// @remattach:<attachpt>=force - force detach single attachment point // @remattach:<attachpt>=force - force detach single attachment point
if (rlvCmdOption.isAttachmentPoint()) if (rlvCmdOption.isAttachmentPoint())
...@@ -2649,7 +2649,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_REMOUTFIT>::onCommand(const RlvCommand& rlvC ...@@ -2649,7 +2649,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_REMOUTFIT>::onCommand(const RlvCommand& rlvC
RlvCommandOptionGeneric rlvCmdOption; RlvCommandOptionGeneric rlvCmdOption;
RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption); RlvCommandOptionHelper::parseOption(rlvCmd.getOption(), rlvCmdOption);
if (rlvCmdOption.isSharedFolder()) if (rlvCmdOption.isSharedFolder())
return gRlvHandler.onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags()); return RlvHandler::instance().onForceWear(rlvCmdOption.getSharedFolder(), rlvCmd.getBehaviourFlags());
if ( (!rlvCmdOption.isWearableType()) && (!rlvCmdOption.isEmpty()) ) if ( (!rlvCmdOption.isWearableType()) && (!rlvCmdOption.isEmpty()) )
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
...@@ -2779,7 +2779,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SETCAM_FOV>::onCommand(const RlvCommand& rlv ...@@ -2779,7 +2779,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SETCAM_FOV>::onCommand(const RlvCommand& rlv
LLViewerCamera::getInstance()->setDefaultFOV(nFOV); LLViewerCamera::getInstance()->setDefaultFOV(nFOV);
// Don't persist non-default changes that are due to RLV; but do resume persistance once reset back to the default // Don't persist non-default changes that are due to RLV; but do resume persistance once reset back to the default
if ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMIN)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SETCAM_FOVMAX)) ) if ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMIN)) && (!RlvHandler::instance().hasBehaviour(RLV_BHVR_SETCAM_FOVMAX)) )
{ {
if (LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle")) if (LLControlVariable* pSetting = gSavedSettings.getControl("CameraAngle"))
pSetting->setPersist( (pSetting->isDefault()) ? LLControlVariable::PERSIST_NONDFT : LLControlVariable::PERSIST_NO ); pSetting->setPersist( (pSetting->isDefault()) ? LLControlVariable::PERSIST_NONDFT : LLControlVariable::PERSIST_NO );
...@@ -2899,13 +2899,13 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SETGROUP>::onCommand(const RlvCommand& rlvCm ...@@ -2899,13 +2899,13 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SETGROUP>::onCommand(const RlvCommand& rlvCm
if (fValid) if (fValid)
{ {
if (!gRlvHandler.checkActiveGroupThrottle(rlvCmd.getObjectID())) if (!RlvHandler::instance().checkActiveGroupThrottle(rlvCmd.getObjectID()))
return RLV_RET_FAILED_THROTTLED; return RLV_RET_FAILED_THROTTLED;
if (optionList.size() == 1) if (optionList.size() == 1)
gRlvHandler.setActiveGroup(idGroup); RlvHandler::instance().setActiveGroup(idGroup);
else if (optionList.size() == 2) else if (optionList.size() == 2)
gRlvHandler.setActiveGroupRole(idGroup, optionList[1]); RlvHandler::instance().setActiveGroupRole(idGroup, optionList[1]);
} }
return (fValid) ? RLV_RET_SUCCESS : RLV_RET_FAILED_OPTION; return (fValid) ? RLV_RET_SUCCESS : RLV_RET_FAILED_OPTION;
...@@ -2932,11 +2932,11 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SIT>::onCommand(const RlvCommand& rlvCmd) ...@@ -2932,11 +2932,11 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_SIT>::onCommand(const RlvCommand& rlvCmd)
if (!RlvActions::canSit(pObj)) if (!RlvActions::canSit(pObj))
return RLV_RET_FAILED_LOCK; return RLV_RET_FAILED_LOCK;
if ((gRlvHandler.hasBehaviour(RLV_BHVR_STANDTP)) && (isAgentAvatarValid())) if ((RlvHandler::instance().hasBehaviour(RLV_BHVR_STANDTP)) && (isAgentAvatarValid()))
{ {
if ( (isAgentAvatarValid()) && (gAgentAvatarp->isSitting()) ) if ( (isAgentAvatarValid()) && (gAgentAvatarp->isSitting()) )
return RLV_RET_FAILED_LOCK; return RLV_RET_FAILED_LOCK;
gRlvHandler.m_posSitSource = gAgent.getPositionGlobal(); RlvHandler::instance().m_posSitSource = gAgent.getPositionGlobal();
} }
// Copy/paste from handle_sit_or_stand() // Copy/paste from handle_sit_or_stand()
...@@ -2995,7 +2995,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_TPTO>::onCommand(const RlvCommand& rlvCmd) ...@@ -2995,7 +2995,7 @@ ERlvCmdRet RlvForceHandler<RLV_BHVR_TPTO>::onCommand(const RlvCommand& rlvCmd)
return RLV_RET_FAILED_OPTION; return RLV_RET_FAILED_OPTION;
} }
LLWorldMapMessage::url_callback_t cb = boost::bind(&RlvHandler::onTeleportCallback, &gRlvHandler, _1, posRegion, vecLookAt, rlvCmd.getObjectID()); LLWorldMapMessage::url_callback_t cb = boost::bind(&RlvHandler::onTeleportCallback, RlvHandler::getInstance(), _1, posRegion, vecLookAt, rlvCmd.getObjectID());
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(posList[0], cb, std::string(""), true); LLWorldMapMessage::getInstance()->sendNamedRegionRequest(posList[0], cb, std::string(""), true);
} }
...@@ -3250,7 +3250,7 @@ ERlvCmdRet RlvHandler::onGetAttachNames(const RlvCommand& rlvCmd, std::string& s ...@@ -3250,7 +3250,7 @@ ERlvCmdRet RlvHandler::onGetAttachNames(const RlvCommand& rlvCmd, std::string& s
fAdd = (pAttachPt->getNumObjects() > 0); fAdd = (pAttachPt->getNumObjects() > 0);
break; break;
case RLV_BHVR_GETADDATTACHNAMES: // Every attachment point that can be attached to (wear replace OR wear add) case RLV_BHVR_GETADDATTACHNAMES: // Every attachment point that can be attached to (wear replace OR wear add)
fAdd = (gRlvAttachmentLocks.canAttach(pAttachPt) & RLV_WEAR); fAdd = (RlvAttachmentLocks::instance().canAttach(pAttachPt) & RLV_WEAR);
break; break;
case RLV_BHVR_GETREMATTACHNAMES: // Every attachment point that has at least one attachment that can be force-detached case RLV_BHVR_GETREMATTACHNAMES: // Every attachment point that has at least one attachment that can be force-detached
fAdd = RlvForceWear::isForceDetachable(pAttachPt); fAdd = RlvForceWear::isForceDetachable(pAttachPt);
...@@ -3306,12 +3306,12 @@ ERlvCmdRet RlvBehaviourCamZoomMinMaxHandler::onCommand(const RlvCommand& rlvCmd, ...@@ -3306,12 +3306,12 @@ ERlvCmdRet RlvBehaviourCamZoomMinMaxHandler::onCommand(const RlvCommand& rlvCmd,
{ {
if (RLV_TYPE_ADD == rlvCmd.getParamType()) if (RLV_TYPE_ADD == rlvCmd.getParamType())
{ {
gRlvHandler.m_Behaviours[(RLV_BHVR_CAMZOOMMIN == rlvCmd.getBehaviourType()) ? RLV_BHVR_SETCAM_FOVMIN : RLV_BHVR_SETCAM_FOVMAX]++; RlvHandler::instance().m_Behaviours[(RLV_BHVR_CAMZOOMMIN == rlvCmd.getBehaviourType()) ? RLV_BHVR_SETCAM_FOVMIN : RLV_BHVR_SETCAM_FOVMAX]++;
pBhvrModifier->addValue(DEFAULT_FIELD_OF_VIEW / nMult, rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->addValue(DEFAULT_FIELD_OF_VIEW / nMult, rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
} }
else else
{ {
gRlvHandler.m_Behaviours[(RLV_BHVR_CAMZOOMMIN == rlvCmd.getBehaviourType()) ? RLV_BHVR_SETCAM_FOVMIN : RLV_BHVR_SETCAM_FOVMAX]--; RlvHandler::instance().m_Behaviours[(RLV_BHVR_CAMZOOMMIN == rlvCmd.getBehaviourType()) ? RLV_BHVR_SETCAM_FOVMIN : RLV_BHVR_SETCAM_FOVMAX]--;
pBhvrModifier->removeValue(DEFAULT_FIELD_OF_VIEW / nMult, rlvCmd.getObjectID(), rlvCmd.getBehaviourType()); pBhvrModifier->removeValue(DEFAULT_FIELD_OF_VIEW / nMult, rlvCmd.getObjectID(), rlvCmd.getBehaviourType());
} }
} }
...@@ -3550,7 +3550,7 @@ ERlvCmdRet RlvHandler::onGetOutfitNames(const RlvCommand& rlvCmd, std::string& s ...@@ -3550,7 +3550,7 @@ ERlvCmdRet RlvHandler::onGetOutfitNames(const RlvCommand& rlvCmd, std::string& s
fAdd = (gAgentWearables.getWearableCount(wtType) > 0); fAdd = (gAgentWearables.getWearableCount(wtType) > 0);
break; break;
case RLV_BHVR_GETADDOUTFITNAMES: // Every layer that can be worn on (wear replace OR wear add) case RLV_BHVR_GETADDOUTFITNAMES: // Every layer that can be worn on (wear replace OR wear add)
fAdd = (gRlvWearableLocks.canWear(wtType) & RLV_WEAR); fAdd = (RlvWearableLocks::instance().canWear(wtType) & RLV_WEAR);
break; break;
case RLV_BHVR_GETREMOUTFITNAMES: // Every layer that has at least one wearable that can be force-removed case RLV_BHVR_GETREMOUTFITNAMES: // Every layer that has at least one wearable that can be force-removed
fAdd = RlvForceWear::isForceRemovable(wtType); fAdd = RlvForceWear::isForceRemovable(wtType);
......
...@@ -32,15 +32,11 @@ ...@@ -32,15 +32,11 @@
// ============================================================================ // ============================================================================
class RlvHandler : public LLOldEvents::LLSimpleListener, public LLParticularGroupObserver class RlvHandler final : public LLSingleton<RlvHandler>, public LLOldEvents::LLSimpleListener, public LLParticularGroupObserver
{ {
// Temporary LLSingleton look-alike LLSINGLETON(RlvHandler);
public:
static RlvHandler& instance();
static RlvHandler* getInstance();
public: public:
RlvHandler();
~RlvHandler(); ~RlvHandler();
// -------------------------------- // --------------------------------
...@@ -281,22 +277,11 @@ public: ...@@ -281,22 +277,11 @@ public:
}; };
typedef RlvHandler rlv_handler_t; typedef RlvHandler rlv_handler_t;
extern rlv_handler_t gRlvHandler;
// ============================================================================ // ============================================================================
// Inlined member functions // Inlined member functions
// //
inline RlvHandler& RlvHandler::instance()
{
return gRlvHandler;
}
inline RlvHandler* RlvHandler::getInstance()
{
return &gRlvHandler;
}
inline bool RlvHandler::hasBehaviour(ERlvBehaviour eBhvr, const std::string& strOption) const inline bool RlvHandler::hasBehaviour(ERlvBehaviour eBhvr, const std::string& strOption) const
{ {
return hasBehaviourExcept(eBhvr, strOption, LLUUID::null); return hasBehaviourExcept(eBhvr, strOption, LLUUID::null);
......
...@@ -1147,7 +1147,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc ...@@ -1147,7 +1147,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
// The second time we encounter a given clothing type we'll always add (rather than replace the previous iteration) // The second time we encounter a given clothing type we'll always add (rather than replace the previous iteration)
eCurAction = (!fSeenWType[pItem->getWearableType()]) ? eCurAction : ACTION_WEAR_ADD; eCurAction = (!fSeenWType[pItem->getWearableType()]) ? eCurAction : ACTION_WEAR_ADD;
ERlvWearMask eWearMask = gRlvWearableLocks.canWear(pRlvItem); ERlvWearMask eWearMask = RlvWearableLocks::instance().canWear(pRlvItem);
if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) || if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) ||
((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) ) ((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) )
{ {
...@@ -1168,7 +1168,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc ...@@ -1168,7 +1168,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
case LLAssetType::AT_OBJECT: case LLAssetType::AT_OBJECT:
if (isWearAction(eAction)) if (isWearAction(eAction))
{ {
ERlvWearMask eWearMask = gRlvAttachmentLocks.canAttach(pRlvItem); ERlvWearMask eWearMask = RlvAttachmentLocks::instance().canAttach(pRlvItem);
if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) || if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) ||
((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) ) ((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) )
{ {
...@@ -1180,10 +1180,10 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc ...@@ -1180,10 +1180,10 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
LLViewerInventoryCategory* pCompositeFolder = NULL; LLViewerInventoryCategory* pCompositeFolder = NULL;
if ( (pAttachPt->getObject()) && (RlvSettings::getEnableComposites()) && if ( (pAttachPt->getObject()) && (RlvSettings::getEnableComposites()) &&
(pAttachPt->getItemID() != pItem->getUUID()) && (pAttachPt->getItemID() != pItem->getUUID()) &&
(gRlvHandler.getCompositeInfo(pAttachPt->getItemID(), NULL, &pCompositeFolder)) ) (RlvHandler::instance().getCompositeInfo(pAttachPt->getItemID(), NULL, &pCompositeFolder)) )
{ {
// If we can't take off the composite folder this item would replace then don't allow it to get attached // If we can't take off the composite folder this item would replace then don't allow it to get attached
if (gRlvHandler.canTakeOffComposite(pCompositeFolder)) if (RlvHandler::instance().canTakeOffComposite(pCompositeFolder))
{ {
forceFolder(pCompositeFolder, ACTION_DETACH, FLAG_DEFAULT); forceFolder(pCompositeFolder, ACTION_DETACH, FLAG_DEFAULT);
addAttachment(pRlvItem); addAttachment(pRlvItem);
...@@ -1237,12 +1237,12 @@ bool RlvForceWear::isForceDetachable(const LLViewerObject* pAttachObj, bool fChe ...@@ -1237,12 +1237,12 @@ bool RlvForceWear::isForceDetachable(const LLViewerObject* pAttachObj, bool fChe
return return
( (
(pAttachObj) && (pAttachObj->isAttachment()) (pAttachObj) && (pAttachObj->isAttachment())
&& ( (idExcept.isNull()) ? (!gRlvAttachmentLocks.isLockedAttachment(pAttachObj)) && ( (idExcept.isNull()) ? (!RlvAttachmentLocks::instance().isLockedAttachment(pAttachObj))
: (!gRlvAttachmentLocks.isLockedAttachmentExcept(pAttachObj, idExcept)) ) : (!RlvAttachmentLocks::instance().isLockedAttachmentExcept(pAttachObj, idExcept)) )
&& (isStrippable(pAttachObj->getAttachmentItemID())) && (isStrippable(pAttachObj->getAttachmentItemID()))
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
&& ( (!fCheckComposite) || (!RlvSettings::getEnableComposites()) || && ( (!fCheckComposite) || (!RlvSettings::getEnableComposites()) ||
(!gRlvHandler.getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) || (gRlvHandler.canTakeOffComposite(pFolder)) ) (!RlvHandler::instance().getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) || (RlvHandler::instance().canTakeOffComposite(pFolder)) )
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
); );
} }
...@@ -1272,10 +1272,10 @@ void RlvForceWear::forceDetach(const LLViewerObject* pAttachObj) ...@@ -1272,10 +1272,10 @@ void RlvForceWear::forceDetach(const LLViewerObject* pAttachObj)
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
LLViewerInventoryCategory* pFolder = NULL; LLViewerInventoryCategory* pFolder = NULL;
if ( (RlvSettings::getEnableComposites()) && if ( (RlvSettings::getEnableComposites()) &&
(gRlvHandler.getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) ) (RlvHandler::instance().getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) )
{ {
// Attachment belongs to a composite folder so detach the entire folder (if we can take it off) // Attachment belongs to a composite folder so detach the entire folder (if we can take it off)
if (gRlvHandler.canTakeOffComposite(pFolder)) if (RlvHandler::instance().canTakeOffComposite(pFolder))
forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT); forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT);
} }
else else
...@@ -1310,12 +1310,12 @@ bool RlvForceWear::isForceRemovable(const LLViewerWearable* pWearable, bool fChe ...@@ -1310,12 +1310,12 @@ bool RlvForceWear::isForceRemovable(const LLViewerWearable* pWearable, bool fChe
return return
( (
(pWearable) && (LLAssetType::AT_CLOTHING == pWearable->getAssetType()) (pWearable) && (LLAssetType::AT_CLOTHING == pWearable->getAssetType())
&& ( (idExcept.isNull()) ? !gRlvWearableLocks.isLockedWearable(pWearable) && ( (idExcept.isNull()) ? !RlvWearableLocks::instance().isLockedWearable(pWearable)
: !gRlvWearableLocks.isLockedWearableExcept(pWearable, idExcept) ) : !RlvWearableLocks::instance().isLockedWearableExcept(pWearable, idExcept) )
&& (isStrippable(pWearable->getItemID())) && (isStrippable(pWearable->getItemID()))
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
&& ( (!fCheckComposite) || (!RlvSettings::getEnableComposites()) || && ( (!fCheckComposite) || (!RlvSettings::getEnableComposites()) ||
(!gRlvHandler.getCompositeInfo(pWearable->getItemID(), NULL, &pFolder)) || (gRlvHandler.canTakeOffComposite(pFolder)) ) (!RlvHandler::instance().getCompositeInfo(pWearable->getItemID(), NULL, &pFolder)) || (RlvHandler::instance().canTakeOffComposite(pFolder)) )
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
); );
} }
...@@ -1342,10 +1342,10 @@ void RlvForceWear::forceRemove(const LLViewerWearable* pWearable) ...@@ -1342,10 +1342,10 @@ void RlvForceWear::forceRemove(const LLViewerWearable* pWearable)
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
LLViewerInventoryCategory* pFolder = NULL; LLViewerInventoryCategory* pFolder = NULL;
if ( (RlvSettings::getEnableComposites()) && if ( (RlvSettings::getEnableComposites()) &&
(gRlvHandler.getCompositeInfo(gAgent.getWearableItem(wtType), NULL, &pFolder)) ) (RlvHandler::instance().getCompositeInfo(gAgent.getWearableItem(wtType), NULL, &pFolder)) )
{ {
// Wearable belongs to a composite folder so detach the entire folder (if we can take it off) // Wearable belongs to a composite folder so detach the entire folder (if we can take it off)
if (gRlvHandler.canTakeOffComposite(pFolder)) if (RlvHandler::instance().canTakeOffComposite(pFolder))
forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT); forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT);
} }
else else
...@@ -1676,7 +1676,7 @@ void RlvForceWear::onWearableArrived(LLWearable* pWearable, void* pParam) ...@@ -1676,7 +1676,7 @@ void RlvForceWear::onWearableArrived(LLWearable* pWearable, void* pParam)
} }
} }
if ( (idItem.notNull()) && (idItem != gAgent.getWearableItem(pWearable->getType())) && if ( (idItem.notNull()) && (idItem != gAgent.getWearableItem(pWearable->getType())) &&
(gRlvHandler.getCompositeInfo(gAgent.getWearableItem(pWearable->getType()), NULL, &pFolder)) ) (RlvHandler::instance().getCompositeInfo(gAgent.getWearableItem(pWearable->getType()), NULL, &pFolder)) )
{ {
RlvForceWear rlvWear; RlvForceWear rlvWear;
rlvWear.forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT); rlvWear.forceFolder(pFolder, ACTION_DETACH, FLAG_DEFAULT);
...@@ -1698,7 +1698,7 @@ RlvBehaviourNotifyHandler::RlvBehaviourNotifyHandler() ...@@ -1698,7 +1698,7 @@ RlvBehaviourNotifyHandler::RlvBehaviourNotifyHandler()
{ {
// NOTE: the reason we use rlv_command_signal_t instead of the better-suited rlv_behaviour_signal_t is because // NOTE: the reason we use rlv_command_signal_t instead of the better-suited rlv_behaviour_signal_t is because
// RLV will notify scripts about "invalid" commands so we need to as well // RLV will notify scripts about "invalid" commands so we need to as well
m_ConnCommand = gRlvHandler.setCommandCallback(boost::bind(&RlvBehaviourNotifyHandler::onCommand, this, _1, _2, _3)); m_ConnCommand = RlvHandler::instance().setCommandCallback(boost::bind(&RlvBehaviourNotifyHandler::onCommand, this, _1, _2, _3));
} }
// Checked: 2010-03-03 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a // Checked: 2010-03-03 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a
...@@ -1775,9 +1775,9 @@ void RlvBehaviourNotifyHandler::onReattach(const LLViewerJointAttachment* pAttac ...@@ -1775,9 +1775,9 @@ void RlvBehaviourNotifyHandler::onReattach(const LLViewerJointAttachment* pAttac
// Checked: 2010-03-13 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a // Checked: 2010-03-13 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a
BOOL RlvGCTimer::tick() BOOL RlvGCTimer::tick()
{ {
bool fContinue = gRlvHandler.onGC(); bool fContinue = RlvHandler::instance().onGC();
if (!fContinue) if (!fContinue)
gRlvHandler.m_pGCTimer = NULL; RlvHandler::instance().m_pGCTimer = NULL;
return !fContinue; return !fContinue;
} }
......
...@@ -187,7 +187,7 @@ typedef RlvForceHandler<RLV_BHVR_SETCAM_EYEOFFSET> RlvForceCamEyeFocusOffsetHand ...@@ -187,7 +187,7 @@ typedef RlvForceHandler<RLV_BHVR_SETCAM_EYEOFFSET> RlvForceCamEyeFocusOffsetHand
// RlvCommandProcessor - Templated glue class that brings RlvBehaviourInfo, RlvCommandHandlerBaseImpl and RlvCommandHandler together // RlvCommandProcessor - Templated glue class that brings RlvBehaviourInfo, RlvCommandHandlerBaseImpl and RlvCommandHandler together
// //
template <ERlvParamType templParamType, ERlvBehaviour templBhvr, typename handlerImpl = RlvCommandHandler<templParamType, templBhvr>, typename baseImpl = RlvCommandHandlerBaseImpl<templParamType>> template <ERlvParamType templParamType, ERlvBehaviour templBhvr, typename handlerImpl = RlvCommandHandler<templParamType, templBhvr>, typename baseImpl = RlvCommandHandlerBaseImpl<templParamType>>
class RlvCommandProcessor : public RlvBehaviourInfo class RlvCommandProcessor final : public RlvBehaviourInfo
{ {
public: public:
// Default constructor used by behaviour specializations // Default constructor used by behaviour specializations
...@@ -217,7 +217,7 @@ template<ERlvBehaviourOptionType templOptionType> using RlvForceGenericProcessor ...@@ -217,7 +217,7 @@ template<ERlvBehaviourOptionType templOptionType> using RlvForceGenericProcessor
// //
template <ERlvBehaviour eBhvr, typename handlerImpl = RlvBehaviourHandler<eBhvr>, typename toggleHandlerImpl = RlvBehaviourToggleHandler<eBhvr>> template <ERlvBehaviour eBhvr, typename handlerImpl = RlvBehaviourHandler<eBhvr>, typename toggleHandlerImpl = RlvBehaviourToggleHandler<eBhvr>>
class RlvBehaviourToggleProcessor : public RlvBehaviourInfo class RlvBehaviourToggleProcessor final : public RlvBehaviourInfo
{ {
public: public:
RlvBehaviourToggleProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, RLV_TYPE_ADDREM, nBhvrFlags) {} RlvBehaviourToggleProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, RLV_TYPE_ADDREM, nBhvrFlags) {}
...@@ -563,9 +563,6 @@ protected: ...@@ -563,9 +563,6 @@ protected:
typedef std::map<LLUUID, U8> pendingattachments_map_t; typedef std::map<LLUUID, U8> pendingattachments_map_t;
pendingattachments_map_t m_pendingAttachments; pendingattachments_map_t m_pendingAttachments;
private:
friend class LLSingleton<RlvForceWear>;
}; };
// ============================================================================ // ============================================================================
...@@ -642,7 +639,7 @@ private: ...@@ -642,7 +639,7 @@ private:
// Various helper classes/timers/functors // Various helper classes/timers/functors
// //
class RlvGCTimer : public LLEventTimer class RlvGCTimer final : public LLEventTimer
{ {
public: public:
RlvGCTimer() : LLEventTimer(30.0) {} RlvGCTimer() : LLEventTimer(30.0) {}
...@@ -650,7 +647,7 @@ public: ...@@ -650,7 +647,7 @@ public:
}; };
// NOTE: Unused as of SL-3.7.2 // NOTE: Unused as of SL-3.7.2
class RlvCallbackTimerOnce : public LLEventTimer class RlvCallbackTimerOnce final : public LLEventTimer
{ {
public: public:
typedef boost::function<void ()> nullary_func_t; typedef boost::function<void ()> nullary_func_t;
......
...@@ -37,7 +37,7 @@ const std::string RlvInventory::cstrSharedRoot = RLV_ROOT_FOLDER; ...@@ -37,7 +37,7 @@ const std::string RlvInventory::cstrSharedRoot = RLV_ROOT_FOLDER;
// //
// TODO-RLVa: [RLVa-1.2.1] This class really shouldn't be calling "fetchSharedLinks" directly so find a better way // TODO-RLVa: [RLVa-1.2.1] This class really shouldn't be calling "fetchSharedLinks" directly so find a better way
class RlvSharedInventoryFetcher : public LLInventoryFetchDescendentsObserver class RlvSharedInventoryFetcher final : public LLInventoryFetchDescendentsObserver
{ {
public: public:
RlvSharedInventoryFetcher(const uuid_vec_t& idFolders): LLInventoryFetchDescendentsObserver(idFolders) {} RlvSharedInventoryFetcher(const uuid_vec_t& idFolders): LLInventoryFetchDescendentsObserver(idFolders) {}
...@@ -783,9 +783,9 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde ...@@ -783,9 +783,9 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
{ {
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
if ( (!RlvSettings::getEnableComposites()) || // ... if we're not checking composite folders if ( (!RlvSettings::getEnableComposites()) || // ... if we're not checking composite folders
(!gRlvHandler.isCompositeFolder(pFolder)) || // ... or if it's not a composite folder (!RlvHandler::instance().isCompositeFolder(pFolder)) || // ... or if it's not a composite folder
((m_fAttach) && (gRlvHandler.canWearComposite(pFolder))) || // ... or if we're attaching and can attach it OR ((m_fAttach) && (RlvHandler::instance().canWearComposite(pFolder))) || // ... or if we're attaching and can attach it OR
(!m_fAttach) && (gRlvHandler.canTakeOffComposite(pFolder)) ) // ... or if we're detaching and can detach it (!m_fAttach) && (RlvHandler::instance().canTakeOffComposite(pFolder)) ) // ... or if we're detaching and can detach it
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
{ {
m_Wearable.push_front(pFolder->getUUID()); m_Wearable.push_front(pFolder->getUUID());
...@@ -796,9 +796,9 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde ...@@ -796,9 +796,9 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
else if ( (RlvSettings::getEnableComposites()) && else if ( (RlvSettings::getEnableComposites()) &&
(RLV_FOLDER_PREFIX_HIDDEN == strFolder[0]) && // Hidden folder that's a... (RLV_FOLDER_PREFIX_HIDDEN == strFolder[0]) && // Hidden folder that's a...
(gRlvHandler.isCompositeFolder(pFolder)) && // ... composite folder which we... (RlvHandler::instance().isCompositeFolder(pFolder)) && // ... composite folder which we...
( ((m_fAttach) && (gRlvHandler.canWearComposite(pFolder))) || // ... are attaching and can attach OR ( ((m_fAttach) && (RlvHandler::instance().canWearComposite(pFolder))) || // ... are attaching and can attach OR
(!m_fAttach) && (gRlvHandler.canTakeOffComposite(pFolder)) ) ) // ... are detaching and can detach (!m_fAttach) && (RlvHandler::instance().canTakeOffComposite(pFolder)) ) ) // ... are detaching and can detach
{ {
m_Wearable.push_front(pFolder->getUUID()); m_Wearable.push_front(pFolder->getUUID());
m_FoldingMap.insert(std::pair<LLUUID, LLUUID>(pFolder->getUUID(), idParent)); m_FoldingMap.insert(std::pair<LLUUID, LLUUID>(pFolder->getUUID(), idParent));
......
...@@ -102,14 +102,13 @@ protected: ...@@ -102,14 +102,13 @@ protected:
private: private:
static const std::string cstrSharedRoot; static const std::string cstrSharedRoot;
friend class RlvSharedInventoryFetcher; friend class RlvSharedInventoryFetcher;
friend class LLSingleton<RlvInventory>;
}; };
// ============================================================================ // ============================================================================
// RlvRenameOnWearObserver - Handles "auto-rename-on-wear" for (linked) items living under #RLV // RlvRenameOnWearObserver - Handles "auto-rename-on-wear" for (linked) items living under #RLV
// //
class RlvRenameOnWearObserver : public LLInventoryFetchItemsObserver class RlvRenameOnWearObserver final : public LLInventoryFetchItemsObserver
{ {
public: public:
RlvRenameOnWearObserver(const LLUUID& idItem) : LLInventoryFetchItemsObserver(idItem) {} RlvRenameOnWearObserver(const LLUUID& idItem) : LLInventoryFetchItemsObserver(idItem) {}
...@@ -143,7 +142,7 @@ private: ...@@ -143,7 +142,7 @@ private:
// [See LLInventoryTransactionObserver which says it's not entirely complete?] // [See LLInventoryTransactionObserver which says it's not entirely complete?]
// NOTE: the offer may span mulitple BulkUpdateInventory messages so if we're no longer around then (ie due to "delete this") then // NOTE: the offer may span mulitple BulkUpdateInventory messages so if we're no longer around then (ie due to "delete this") then
// we'll miss those; in this specific case we only care about the *folder* though and that will be in the very first message // we'll miss those; in this specific case we only care about the *folder* though and that will be in the very first message
class RlvGiveToRLVTaskOffer : public LLInventoryObserver, RlvGiveToRLVOffer class RlvGiveToRLVTaskOffer final : public LLInventoryObserver, RlvGiveToRLVOffer
{ {
public: public:
RlvGiveToRLVTaskOffer(const LLUUID& idTransaction) : RlvGiveToRLVOffer(), m_idTransaction(idTransaction) {} RlvGiveToRLVTaskOffer(const LLUUID& idTransaction) : RlvGiveToRLVOffer(), m_idTransaction(idTransaction) {}
...@@ -159,7 +158,7 @@ protected: ...@@ -159,7 +158,7 @@ protected:
LLUUID m_idTransaction; LLUUID m_idTransaction;
}; };
class RlvGiveToRLVAgentOffer : public LLInventoryFetchDescendentsObserver, RlvGiveToRLVOffer class RlvGiveToRLVAgentOffer final : public LLInventoryFetchDescendentsObserver, RlvGiveToRLVOffer
{ {
public: public:
RlvGiveToRLVAgentOffer(const LLUUID& idFolder) : LLInventoryFetchDescendentsObserver(idFolder), RlvGiveToRLVOffer() {} RlvGiveToRLVAgentOffer(const LLUUID& idFolder) : LLInventoryFetchDescendentsObserver(idFolder), RlvGiveToRLVOffer() {}
...@@ -175,7 +174,7 @@ protected: ...@@ -175,7 +174,7 @@ protected:
// RlvCriteriaCategoryCollector - Criteria based folder matching filter used by @findfolder and @findfolders // RlvCriteriaCategoryCollector - Criteria based folder matching filter used by @findfolder and @findfolders
// //
class RlvCriteriaCategoryCollector : public LLInventoryCollectFunctor class RlvCriteriaCategoryCollector final : public LLInventoryCollectFunctor
{ {
public: public:
RlvCriteriaCategoryCollector(const std::string& strCriteria) RlvCriteriaCategoryCollector(const std::string& strCriteria)
...@@ -223,7 +222,7 @@ protected: ...@@ -223,7 +222,7 @@ protected:
// RlvWearableItemCollector - Inventory item filter used by attach/detach/attachall/detachall/getinvworn // RlvWearableItemCollector - Inventory item filter used by attach/detach/attachall/detachall/getinvworn
// //
class RlvWearableItemCollector : public LLInventoryCollectFunctor class RlvWearableItemCollector final : public LLInventoryCollectFunctor
{ {
public: public:
RlvWearableItemCollector(const LLInventoryCategory* pFolder, RlvForceWear::EWearAction eAction, RlvForceWear::EWearFlags eFlags); RlvWearableItemCollector(const LLInventoryCategory* pFolder, RlvForceWear::EWearAction eAction, RlvForceWear::EWearFlags eFlags);
...@@ -258,7 +257,7 @@ protected: ...@@ -258,7 +257,7 @@ protected:
// General purpose inventory helper classes // General purpose inventory helper classes
// //
class RlvIsLinkType : public LLInventoryCollectFunctor class RlvIsLinkType final : public LLInventoryCollectFunctor
{ {
public: public:
RlvIsLinkType() = default; RlvIsLinkType() = default;
...@@ -267,7 +266,7 @@ public: ...@@ -267,7 +266,7 @@ public:
}; };
// If the attachment item is linked in COF but isn't worn (or just detached) the function will return inconsistent information // If the attachment item is linked in COF but isn't worn (or just detached) the function will return inconsistent information
class RlvFindAttachmentsOnPoint : public LLInventoryCollectFunctor class RlvFindAttachmentsOnPoint final : public LLInventoryCollectFunctor
{ {
public: public:
RlvFindAttachmentsOnPoint(const LLViewerJointAttachment* pAttachPt) : m_pAttachPt(pAttachPt) {} RlvFindAttachmentsOnPoint(const LLViewerJointAttachment* pAttachPt) : m_pAttachPt(pAttachPt) {}
......
...@@ -172,8 +172,6 @@ S32 RlvAttachPtLookup::getAttachPointIndexLegacy(const LLInventoryCategory* pFol ...@@ -172,8 +172,6 @@ S32 RlvAttachPtLookup::getAttachPointIndexLegacy(const LLInventoryCategory* pFol
// RlvAttachmentLocks member functions // RlvAttachmentLocks member functions
// //
RlvAttachmentLocks gRlvAttachmentLocks;
// Checked: 2010-02-28 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a // Checked: 2010-02-28 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a
void RlvAttachmentLocks::addAttachmentLock(const LLUUID& idAttachObj, const LLUUID& idRlvObj) void RlvAttachmentLocks::addAttachmentLock(const LLUUID& idAttachObj, const LLUUID& idRlvObj)
{ {
...@@ -628,7 +626,7 @@ void RlvAttachmentLockWatchdog::onAttach(const LLViewerObject* pAttachObj, const ...@@ -628,7 +626,7 @@ void RlvAttachmentLockWatchdog::onAttach(const LLViewerObject* pAttachObj, const
for (LLViewerJointAttachment::attachedobjs_vec_t::const_iterator itAttachObj = pAttachPt->mAttachedObjects.begin(); for (LLViewerJointAttachment::attachedobjs_vec_t::const_iterator itAttachObj = pAttachPt->mAttachedObjects.begin();
((itAttachObj != pAttachPt->mAttachedObjects.end()) && (fAttachAllowed)); ++itAttachObj) ((itAttachObj != pAttachPt->mAttachedObjects.end()) && (fAttachAllowed)); ++itAttachObj)
{ {
if ( (pAttachObj != *itAttachObj) && (gRlvAttachmentLocks.isLockedAttachment(*itAttachObj)) ) if ( (pAttachObj != *itAttachObj) && (RlvAttachmentLocks::instance().isLockedAttachment(*itAttachObj)) )
{ {
// Fail if we encounter a non-detachable attachment (unless we're only replacing detachable attachments) // Fail if we encounter a non-detachable attachment (unless we're only replacing detachable attachments)
if (gSavedSettings.getBOOL("RLVaWearReplaceUnlocked")) if (gSavedSettings.getBOOL("RLVaWearReplaceUnlocked"))
...@@ -673,7 +671,7 @@ void RlvAttachmentLockWatchdog::onDetach(const LLViewerObject* pAttachObj, const ...@@ -673,7 +671,7 @@ void RlvAttachmentLockWatchdog::onDetach(const LLViewerObject* pAttachObj, const
// If the attachment is currently "remove locked" then we should reattach it (unless it's already pending reattach) // If the attachment is currently "remove locked" then we should reattach it (unless it's already pending reattach)
bool fDetachAllowed = true; bool fDetachAllowed = true;
if (gRlvAttachmentLocks.isLockedAttachment(pAttachObj)) if (RlvAttachmentLocks::instance().isLockedAttachment(pAttachObj))
{ {
bool fPendingAttach = false; bool fPendingAttach = false;
for (rlv_attach_map_t::const_iterator itReattach = m_PendingAttach.lower_bound(idxAttachPt), for (rlv_attach_map_t::const_iterator itReattach = m_PendingAttach.lower_bound(idxAttachPt),
...@@ -768,7 +766,7 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM ...@@ -768,7 +766,7 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM
{ {
// We only need to keep track of user wears if there's actually anything locked // We only need to keep track of user wears if there's actually anything locked
RLV_ASSERT(idItem.notNull()); RLV_ASSERT(idItem.notNull());
if ( (idItem.isNull()) || (!isAgentAvatarValid()) || (!gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) ) if ( (idItem.isNull()) || (!isAgentAvatarValid()) || (!RlvAttachmentLocks::instance().hasLockedAttachmentPoint(RLV_LOCK_ANY)) )
return; return;
// If the attachment point this will end up being attached to is: // If the attachment point this will end up being attached to is:
...@@ -784,7 +782,7 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM ...@@ -784,7 +782,7 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM
{ {
const LLViewerJointAttachment* pAttachPt = itAttachPt->second; const LLViewerJointAttachment* pAttachPt = itAttachPt->second;
// We only need to know which attachments were present for RLV_LOCK_ADD locked attachment points (and not RLV_LOCK_REM locked ones) // We only need to know which attachments were present for RLV_LOCK_ADD locked attachment points (and not RLV_LOCK_REM locked ones)
if (gRlvAttachmentLocks.isLockedAttachmentPoint(pAttachPt, RLV_LOCK_ADD)) if (RlvAttachmentLocks::instance().isLockedAttachmentPoint(pAttachPt, RLV_LOCK_ADD))
{ {
uuid_vec_t attachObjs; uuid_vec_t attachObjs;
for (LLViewerJointAttachment::attachedobjs_vec_t::const_iterator itAttachObj = pAttachPt->mAttachedObjects.begin(); for (LLViewerJointAttachment::attachedobjs_vec_t::const_iterator itAttachObj = pAttachPt->mAttachedObjects.begin();
...@@ -810,8 +808,6 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM ...@@ -810,8 +808,6 @@ void RlvAttachmentLockWatchdog::onWearAttachment(const LLUUID& idItem, ERlvWearM
// RlvWearableLocks member functions // RlvWearableLocks member functions
// //
RlvWearableLocks gRlvWearableLocks;
// Checked: 2010-03-18 (RLVa-1.2.0c) | Added: RLVa-1.2.0a // Checked: 2010-03-18 (RLVa-1.2.0c) | Added: RLVa-1.2.0a
void RlvWearableLocks::addWearableTypeLock(LLWearableType::EType eType, const LLUUID& idRlvObj, ERlvLockMask eLock) void RlvWearableLocks::addWearableTypeLock(LLWearableType::EType eType, const LLUUID& idRlvObj, ERlvLockMask eLock)
{ {
...@@ -927,7 +923,7 @@ void RlvWearableLocks::removeWearableTypeLock(LLWearableType::EType eType, const ...@@ -927,7 +923,7 @@ void RlvWearableLocks::removeWearableTypeLock(LLWearableType::EType eType, const
// RlvFolderLocks member functions // RlvFolderLocks member functions
// //
class RlvLockedDescendentsCollector : public LLInventoryCollectFunctor class RlvLockedDescendentsCollector final : public LLInventoryCollectFunctor
{ {
public: public:
RlvLockedDescendentsCollector(int eSourceTypeMask, RlvFolderLocks::ELockPermission ePermMask, ERlvLockMask eLockTypeMask) RlvLockedDescendentsCollector(int eSourceTypeMask, RlvFolderLocks::ELockPermission ePermMask, ERlvLockMask eLockTypeMask)
......
...@@ -57,11 +57,9 @@ private: ...@@ -57,11 +57,9 @@ private:
// //
// TODO-RLVa: [RLVa-1.2.1] Once everything is working for SL-2.0 thin out the member functions since a few of them are duplicates/unneeded // TODO-RLVa: [RLVa-1.2.1] Once everything is working for SL-2.0 thin out the member functions since a few of them are duplicates/unneeded
class RlvAttachmentLocks class RlvAttachmentLocks final : public LLSingleton<RlvAttachmentLocks>
{ {
public: LLSINGLETON_EMPTY_CTOR(RlvAttachmentLocks);
RlvAttachmentLocks() : m_fHasLockedHUD(false) {}
public: public:
// Adds an RLV_LOCK_REMOVE lock (held by idRlvObj) for the attachment // Adds an RLV_LOCK_REMOVE lock (held by idRlvObj) for the attachment
void addAttachmentLock(const LLUUID& idAttachObj, const LLUUID& idRlvObj); void addAttachmentLock(const LLUUID& idAttachObj, const LLUUID& idRlvObj);
...@@ -128,11 +126,9 @@ private: ...@@ -128,11 +126,9 @@ private:
rlv_attachptlock_map_t m_AttachPtRem; // Map of attachment points whose attachments can't be detached (idxAttachPt -> idObj) rlv_attachptlock_map_t m_AttachPtRem; // Map of attachment points whose attachments can't be detached (idxAttachPt -> idObj)
rlv_attachobjlock_map_t m_AttachObjRem; // Map of attachments that can't be detached (idAttachObj -> idObj) rlv_attachobjlock_map_t m_AttachObjRem; // Map of attachments that can't be detached (idAttachObj -> idObj)
bool m_fHasLockedHUD; bool m_fHasLockedHUD = false;
}; };
extern RlvAttachmentLocks gRlvAttachmentLocks;
// ============================================================================ // ============================================================================
// RlvAttachmentLockWatchdog - Self contained class that automagically takes care of enforcing attachment locks (ie reattach-on-detach) // RlvAttachmentLockWatchdog - Self contained class that automagically takes care of enforcing attachment locks (ie reattach-on-detach)
// //
...@@ -206,7 +202,7 @@ protected: ...@@ -206,7 +202,7 @@ protected:
typedef std::map<LLUUID, RlvWearInfo> rlv_wear_map_t; typedef std::map<LLUUID, RlvWearInfo> rlv_wear_map_t;
rlv_wear_map_t m_PendingWear; rlv_wear_map_t m_PendingWear;
class RlvAttachmentLockWatchdogTimer : public LLEventTimer class RlvAttachmentLockWatchdogTimer final : public LLEventTimer
{ {
public: public:
RlvAttachmentLockWatchdogTimer(RlvAttachmentLockWatchdog* pWatchdog) : LLEventTimer(10), m_pWatchdog(pWatchdog) {} RlvAttachmentLockWatchdogTimer(RlvAttachmentLockWatchdog* pWatchdog) : LLEventTimer(10), m_pWatchdog(pWatchdog) {}
...@@ -220,8 +216,9 @@ protected: ...@@ -220,8 +216,9 @@ protected:
// RlvWearableLocks class declaration - modelled on RlvAttachmentLocks (attach pt = wearable type - attachment = wearable) // RlvWearableLocks class declaration - modelled on RlvAttachmentLocks (attach pt = wearable type - attachment = wearable)
// //
class RlvWearableLocks class RlvWearableLocks final : public LLSingleton<RlvWearableLocks>
{ {
LLSINGLETON_EMPTY_CTOR(RlvWearableLocks);
public: public:
// Adds an eLock type lock (held by idRlvObj) for the wearable type // Adds an eLock type lock (held by idRlvObj) for the wearable type
void addWearableTypeLock(LLWearableType::EType eType, const LLUUID& idRlvObj, ERlvLockMask eLock); void addWearableTypeLock(LLWearableType::EType eType, const LLUUID& idRlvObj, ERlvLockMask eLock);
...@@ -273,8 +270,6 @@ protected: ...@@ -273,8 +270,6 @@ protected:
rlv_wearabletypelock_map_t m_WearableTypeRem; rlv_wearabletypelock_map_t m_WearableTypeRem;
}; };
extern RlvWearableLocks gRlvWearableLocks;
// ============================================================================ // ============================================================================
// RlvFolderLocks class declaration // RlvFolderLocks class declaration
// //
...@@ -379,8 +374,6 @@ protected: ...@@ -379,8 +374,6 @@ protected:
mutable uuid_vec_t m_LockedAttachmentRem; mutable uuid_vec_t m_LockedAttachmentRem;
mutable folderlock_map_t m_LockedFolderMap; mutable folderlock_map_t m_LockedFolderMap;
mutable uuid_vec_t m_LockedWearableRem; mutable uuid_vec_t m_LockedWearableRem;
private:
friend class LLSingleton<RlvFolderLocks>;
}; };
// ============================================================================ // ============================================================================
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
// //
template<ERlvBehaviourModifier eBhvrMod> template<ERlvBehaviourModifier eBhvrMod>
class RlvBehaviourModifierHandler : public RlvBehaviourModifier class RlvBehaviourModifierHandler final : public RlvBehaviourModifier
{ {
public: public:
//using RlvBehaviourModifier::RlvBehaviourModifier; // Needs VS2015 and up //using RlvBehaviourModifier::RlvBehaviourModifier; // Needs VS2015 and up
...@@ -53,7 +53,7 @@ struct RlvBehaviourModifierComp ...@@ -53,7 +53,7 @@ struct RlvBehaviourModifierComp
LLUUID m_idPrimaryObject; LLUUID m_idPrimaryObject;
}; };
struct RlvBehaviourModifierCompMin : public RlvBehaviourModifierComp struct RlvBehaviourModifierCompMin final : public RlvBehaviourModifierComp
{ {
bool operator()(const RlvBehaviourModifierValueTuple& lhs, const RlvBehaviourModifierValueTuple& rhs) override bool operator()(const RlvBehaviourModifierValueTuple& lhs, const RlvBehaviourModifierValueTuple& rhs) override
{ {
...@@ -63,7 +63,7 @@ struct RlvBehaviourModifierCompMin : public RlvBehaviourModifierComp ...@@ -63,7 +63,7 @@ struct RlvBehaviourModifierCompMin : public RlvBehaviourModifierComp
} }
}; };
struct RlvBehaviourModifierCompMax : public RlvBehaviourModifierComp struct RlvBehaviourModifierCompMax final : public RlvBehaviourModifierComp
{ {
bool operator()(const RlvBehaviourModifierValueTuple& lhs, const RlvBehaviourModifierValueTuple& rhs) override bool operator()(const RlvBehaviourModifierValueTuple& lhs, const RlvBehaviourModifierValueTuple& rhs) override
{ {
...@@ -108,7 +108,7 @@ public: ...@@ -108,7 +108,7 @@ public:
* Animation timer * Animation timer
*/ */
protected: protected:
class AnimationTimer : public LLEventTimer, public LLHandleProvider<AnimationTimer> class AnimationTimer final : public LLEventTimer, public LLHandleProvider<AnimationTimer>
{ {
public: public:
AnimationTimer(); AnimationTimer();
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
RlvUIEnabler::RlvUIEnabler() RlvUIEnabler::RlvUIEnabler()
{ {
// Connect us to the behaviour toggle signal // Connect us to the behaviour toggle signal
gRlvHandler.setBehaviourToggleCallback(boost::bind(&RlvUIEnabler::onBehaviourToggle, this, _1, _2)); RlvHandler::instance().setBehaviourToggleCallback(boost::bind(&RlvUIEnabler::onBehaviourToggle, this, _1, _2));
// onRefreshHoverText() // onRefreshHoverText()
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWLOC, boost::bind(&RlvUIEnabler::onRefreshHoverText, this))); m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWLOC, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
...@@ -97,11 +97,11 @@ void RlvUIEnabler::onRefreshHoverText() ...@@ -97,11 +97,11 @@ void RlvUIEnabler::onRefreshHoverText()
// Checked: 2010-03-02 (RLVa-1.4.0a) | Modified: RLVa-1.4.0a // Checked: 2010-03-02 (RLVa-1.4.0a) | Modified: RLVa-1.4.0a
void RlvUIEnabler::onToggleMovement() void RlvUIEnabler::onToggleMovement()
{ {
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) && (gAgent.getFlying()) ) if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_FLY)) && (gAgent.getFlying()) )
gAgent.setFlying(FALSE); gAgent.setFlying(FALSE);
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_ALWAYSRUN)) && (gAgent.getAlwaysRun()) ) if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_ALWAYSRUN)) && (gAgent.getAlwaysRun()) )
gAgent.clearAlwaysRun(); gAgent.clearAlwaysRun();
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_TEMPRUN)) && (gAgent.getTempRun()) ) if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_TEMPRUN)) && (gAgent.getTempRun()) )
gAgent.clearTempRun(); gAgent.clearTempRun();
// Force an update since the status only updates when the current parcel changes [see LLFloaterMove::postBuild()] // Force an update since the status only updates when the current parcel changes [see LLFloaterMove::postBuild()]
...@@ -111,7 +111,7 @@ void RlvUIEnabler::onToggleMovement() ...@@ -111,7 +111,7 @@ void RlvUIEnabler::onToggleMovement()
// Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f // Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f
void RlvUIEnabler::onToggleShowLoc() void RlvUIEnabler::onToggleShowLoc()
{ {
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); bool fEnable = !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC);
if (LLNavigationBar::instanceExists()) if (LLNavigationBar::instanceExists())
LLNavigationBar::instance().refreshLocationCtrl(); LLNavigationBar::instance().refreshLocationCtrl();
...@@ -178,7 +178,7 @@ void RlvUIEnabler::onToggleShowLoc() ...@@ -178,7 +178,7 @@ void RlvUIEnabler::onToggleShowLoc()
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a // Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
void RlvUIEnabler::onToggleShowMinimap() void RlvUIEnabler::onToggleShowMinimap()
{ {
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP); bool fEnable = !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWMINIMAP);
// Start or stop filtering showing the mini-map floater // Start or stop filtering showing the mini-map floater
if (!fEnable) if (!fEnable)
...@@ -209,7 +209,7 @@ void RlvUIEnabler::onToggleShowMinimap() ...@@ -209,7 +209,7 @@ void RlvUIEnabler::onToggleShowMinimap()
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a // Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
void RlvUIEnabler::onToggleShowWorldMap() void RlvUIEnabler::onToggleShowWorldMap()
{ {
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP); bool fEnable = !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWWORLDMAP);
// Hide the world map if it's currently visible // Hide the world map if it's currently visible
if ( (!fEnable) && (LLFloaterReg::instanceVisible("world_map")) ) if ( (!fEnable) && (LLFloaterReg::instanceVisible("world_map")) )
...@@ -229,13 +229,13 @@ void RlvUIEnabler::onToggleTp() ...@@ -229,13 +229,13 @@ void RlvUIEnabler::onToggleTp()
LLButton* pNavBarHomeBtn = LLNavigationBar::getInstance()->findChild<LLButton>("home_btn"); LLButton* pNavBarHomeBtn = LLNavigationBar::getInstance()->findChild<LLButton>("home_btn");
RLV_ASSERT(pNavBarHomeBtn); RLV_ASSERT(pNavBarHomeBtn);
if (pNavBarHomeBtn) if (pNavBarHomeBtn)
pNavBarHomeBtn->setEnabled(!(gRlvHandler.hasBehaviour(RLV_BHVR_TPLM) && gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC))); pNavBarHomeBtn->setEnabled(!(RlvHandler::instance().hasBehaviour(RLV_BHVR_TPLM) && RlvHandler::instance().hasBehaviour(RLV_BHVR_TPLOC)));
} }
// Checked: 2010-03-01 (RLVa-1.2.0c) | Added: RLVa-1.2.0a // Checked: 2010-03-01 (RLVa-1.2.0c) | Added: RLVa-1.2.0a
void RlvUIEnabler::onToggleUnsit() void RlvUIEnabler::onToggleUnsit()
{ {
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT); bool fEnable = !RlvHandler::instance().hasBehaviour(RLV_BHVR_UNSIT);
LLPanelStandStopFlying* pPanelStand = LLPanelStandStopFlying::getInstance(); LLPanelStandStopFlying* pPanelStand = LLPanelStandStopFlying::getInstance();
RLV_ASSERT(pPanelStand); RLV_ASSERT(pPanelStand);
...@@ -252,8 +252,8 @@ void RlvUIEnabler::onToggleUnsit() ...@@ -252,8 +252,8 @@ void RlvUIEnabler::onToggleUnsit()
void RlvUIEnabler::onToggleViewXXX() void RlvUIEnabler::onToggleViewXXX()
{ {
// If any of the three are still active then we keep filtering // If any of the three are still active then we keep filtering
bool fHasViewXXX = (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) || bool fHasViewXXX = (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWNOTE)) ||
(gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE)); (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWSCRIPT)) || (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWTEXTURE));
// Start or stop filtering opening the preview floaters // Start or stop filtering opening the preview floaters
if ( (fHasViewXXX) && (!m_ConnFloaterViewXXX.connected()) ) if ( (fHasViewXXX) && (!m_ConnFloaterViewXXX.connected()) )
...@@ -327,17 +327,17 @@ bool RlvUIEnabler::filterPanelShowLoc(const std::string& strFloater, const std:: ...@@ -327,17 +327,17 @@ bool RlvUIEnabler::filterPanelShowLoc(const std::string& strFloater, const std::
// Checked: 2010-03-01 (RLVa-1.2.0b) | Added: RLVa-1.2.0a // Checked: 2010-03-01 (RLVa-1.2.0b) | Added: RLVa-1.2.0a
bool RlvUIEnabler::filterFloaterViewXXX(const std::string& strName, const LLSD&) bool RlvUIEnabler::filterFloaterViewXXX(const std::string& strName, const LLSD&)
{ {
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) && ("preview_notecard" == strName) ) if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWNOTE)) && ("preview_notecard" == strName) )
{ {
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_NOTECARD); RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_NOTECARD);
return false; return false;
} }
else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT)) && (("preview_script" == strName) || ("preview_scriptedit" == strName)) ) else if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWSCRIPT)) && (("preview_script" == strName) || ("preview_scriptedit" == strName)) )
{ {
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_SCRIPT); RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_SCRIPT);
return false; return false;
} }
else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE)) && ("preview_texture" == strName) ) else if ( (RlvHandler::instance().hasBehaviour(RLV_BHVR_VIEWTEXTURE)) && ("preview_texture" == strName) )
{ {
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_TEXTURE); RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_TEXTURE);
return false; return false;
...@@ -351,8 +351,8 @@ bool RlvUIEnabler::filterFloaterViewXXX(const std::string& strName, const LLSD&) ...@@ -351,8 +351,8 @@ bool RlvUIEnabler::filterFloaterViewXXX(const std::string& strName, const LLSD&)
bool RlvUIEnabler::canViewParcelProperties() bool RlvUIEnabler::canViewParcelProperties()
{ {
// We'll allow "About Land" as long as the user has the ability to return prims (through ownership or through group powers) // We'll allow "About Land" as long as the user has the ability to return prims (through ownership or through group powers)
bool fShow = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); bool fShow = !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC);
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) if (RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC))
{ {
// RELEASE-RLVa: [SL-3.2] Check that opening the "About Land" floater still sets focus to the current parcel is none is selected // RELEASE-RLVa: [SL-3.2] Check that opening the "About Land" floater still sets focus to the current parcel is none is selected
const LLParcel* pParcel = NULL; const LLParcel* pParcel = NULL;
...@@ -397,8 +397,8 @@ bool RlvUIEnabler::canViewParcelProperties() ...@@ -397,8 +397,8 @@ bool RlvUIEnabler::canViewParcelProperties()
bool RlvUIEnabler::canViewRegionProperties() bool RlvUIEnabler::canViewRegionProperties()
{ {
// We'll allow "Region / Estate" if the user is either the region owner or an estate manager // We'll allow "Region / Estate" if the user is either the region owner or an estate manager
bool fShow = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC); bool fShow = !RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC);
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) if (RlvHandler::instance().hasBehaviour(RLV_BHVR_SHOWLOC))
{ {
// [See LLRegion::canManageEstate() but without the "god-like" exception] // [See LLRegion::canManageEstate() but without the "god-like" exception]
const LLViewerRegion* pRegion = gAgent.getRegion(); const LLViewerRegion* pRegion = gAgent.getRegion();
......