RLVa impl updated to that used in v3. Hooked RLVa restrictions back into wearables. New RLVa floater: 'Locks...' Also updated 'Restrictions...' floater.
This commit is contained in:
497
indra/newview/rlvui.cpp
Normal file
497
indra/newview/rlvui.cpp
Normal file
@@ -0,0 +1,497 @@
|
||||
/**
|
||||
*
|
||||
* Copyright (c) 2009-2011, Kitty Barnett
|
||||
*
|
||||
* The source code in this file is provided to you under the terms of the
|
||||
* GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt
|
||||
* in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge that
|
||||
* you have read and understood your obligations described above, and agree to
|
||||
* abide by those obligations.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llagent.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llenvmanager.h"
|
||||
#include "llhudtext.h" // LLHUDText::refreshAllObjectText()
|
||||
#include "llimview.h" // LLIMMgr::computeSessionID()
|
||||
#include "llmoveview.h" // Movement panel (contains "Stand" and "Stop Flying" buttons)
|
||||
#include "llparcel.h"
|
||||
#include "lltabcontainer.h"
|
||||
#include "lltoolmgr.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llvoavatar.h"
|
||||
#include "roles_constants.h" // Group "powers"
|
||||
|
||||
#include "llfloaterbeacons.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llfloaterenvsettings.h"
|
||||
#include "llfloaterwindlight.h"
|
||||
#include "llfloaterwater.h"
|
||||
#include "llfloaterdaycycle.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llpanelmaininventory.h"
|
||||
#include "llappviewer.h"
|
||||
#include "llfloaterland.h"
|
||||
#include "llfloatergodtools.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
#include "llfloatermap.h"
|
||||
#include "llfloaterchat.h"
|
||||
#include "llfloateravatarlist.h"
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
#include "rlvui.h"
|
||||
#include "rlvhandler.h"
|
||||
#include "rlvextensions.h"
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
RlvUIEnabler::RlvUIEnabler()
|
||||
{
|
||||
// Connect us to the behaviour toggle signal
|
||||
gRlvHandler.setBehaviourToggleCallback(boost::bind(&RlvUIEnabler::onBehaviourToggle, this, _1, _2));
|
||||
|
||||
// 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_SHOWNAMES, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWHOVERTEXTALL, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWHOVERTEXTWORLD, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWHOVERTEXTHUD, boost::bind(&RlvUIEnabler::onRefreshHoverText, this)));
|
||||
|
||||
// onToggleMovement
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_FLY, boost::bind(&RlvUIEnabler::onToggleMovement, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_ALWAYSRUN, boost::bind(&RlvUIEnabler::onToggleMovement, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_TEMPRUN, boost::bind(&RlvUIEnabler::onToggleMovement, this)));
|
||||
|
||||
// onToggleViewXXX
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_VIEWNOTE, boost::bind(&RlvUIEnabler::onToggleViewXXX, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_VIEWSCRIPT, boost::bind(&RlvUIEnabler::onToggleViewXXX, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_VIEWTEXTURE, boost::bind(&RlvUIEnabler::onToggleViewXXX, this)));
|
||||
|
||||
// onToggleXXX
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_EDIT, boost::bind(&RlvUIEnabler::onToggleEdit, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SETDEBUG, boost::bind(&RlvUIEnabler::onToggleSetDebug, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SETENV, boost::bind(&RlvUIEnabler::onToggleSetEnv, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWINV, boost::bind(&RlvUIEnabler::onToggleShowInv, this, _1)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWLOC, boost::bind(&RlvUIEnabler::onToggleShowLoc, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWMINIMAP, boost::bind(&RlvUIEnabler::onToggleShowMinimap, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWNAMES, boost::bind(&RlvUIEnabler::onToggleShowNames, this, _1)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_SHOWWORLDMAP, boost::bind(&RlvUIEnabler::onToggleShowWorldMap, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_UNSIT, boost::bind(&RlvUIEnabler::onToggleUnsit, this)));
|
||||
|
||||
// onToggleTp
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_TPLOC, boost::bind(&RlvUIEnabler::onToggleTp, this)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_TPLM, boost::bind(&RlvUIEnabler::onToggleTp, this)));
|
||||
|
||||
// onUpdateLoginLastLocation
|
||||
#ifdef RLV_EXTENSION_STARTLOCATION
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_TPLOC, boost::bind(&RlvUIEnabler::onUpdateLoginLastLocation, this, _1)));
|
||||
m_Handlers.insert(std::pair<ERlvBehaviour, behaviour_handler_t>(RLV_BHVR_UNSIT, boost::bind(&RlvUIEnabler::onUpdateLoginLastLocation, this, _1)));
|
||||
#endif // RLV_EXTENSION_STARTLOCATION
|
||||
}
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onBehaviourToggle(ERlvBehaviour eBhvr, ERlvParamType eType)
|
||||
{
|
||||
bool fQuitting = LLApp::isQuitting();
|
||||
for (behaviour_handler_map_t::const_iterator itHandler = m_Handlers.lower_bound(eBhvr), endHandler = m_Handlers.upper_bound(eBhvr);
|
||||
itHandler != endHandler; ++itHandler)
|
||||
{
|
||||
itHandler->second(fQuitting);
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// Checked: 2010-03-02 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onRefreshHoverText()
|
||||
{
|
||||
// Refresh all hover text each time any of the monitored behaviours get set or unset
|
||||
LLHUDText::refreshAllObjectText();
|
||||
}
|
||||
|
||||
// Checked: 2010-03-17 (RLVa-1.2.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onToggleEdit()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_EDIT);
|
||||
|
||||
if (!fEnable)
|
||||
{
|
||||
// Turn off "View / Highlight Transparent"
|
||||
LLDrawPoolAlpha::sShowDebugAlpha = FALSE;
|
||||
|
||||
// Close the Beacons floater if it's open
|
||||
if (LLFloaterBeacons::instanceVisible())
|
||||
LLFloaterBeacons::toggleInstance();
|
||||
|
||||
// Get rid of the build floater if it's open [copy/paste from toggle_build_mode()]
|
||||
if (gFloaterTools->getVisible())
|
||||
{
|
||||
gAgentCamera.resetView(FALSE);
|
||||
gFloaterTools->close();
|
||||
gViewerWindow->showCursor();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Checked: 2010-03-02 (RLVa-1.4.0a) | Modified: RLVa-1.4.0a
|
||||
void RlvUIEnabler::onToggleMovement()
|
||||
{
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) && (gAgent.getFlying()) )
|
||||
gAgent.setFlying(FALSE);
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_ALWAYSRUN)) && (gAgent.getAlwaysRun()) )
|
||||
gAgent.clearAlwaysRun();
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_TEMPRUN)) && (gAgent.getTempRun()) )
|
||||
gAgent.clearTempRun();
|
||||
}
|
||||
|
||||
// Checked: 2011-05-28 (RLVa-1.4.0a) | Added: RLVa-1.4.0a
|
||||
void RlvUIEnabler::onToggleSetDebug()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SETDEBUG);
|
||||
for (std::map<std::string, S16>::const_iterator itSetting = RlvExtGetSet::m_DbgAllowed.begin();
|
||||
itSetting != RlvExtGetSet::m_DbgAllowed.end(); ++itSetting)
|
||||
{
|
||||
if (itSetting->second & RlvExtGetSet::DBG_WRITE)
|
||||
gSavedSettings.getControl(itSetting->first)->setHiddenFromSettingsEditor(!fEnable);
|
||||
}
|
||||
}
|
||||
|
||||
// Checked: 2011-09-04 (RLVa-1.4.1a) | Modified: RLVa-1.4.1a
|
||||
void RlvUIEnabler::onToggleSetEnv()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV);
|
||||
|
||||
if (!fEnable)
|
||||
{
|
||||
// Only close the floaters if their instance exists and they're actually visible
|
||||
if ( (LLFloaterEnvSettings::isOpen()) && (LLFloaterEnvSettings::instance()->getVisible()) )
|
||||
LLFloaterEnvSettings::instance()->close();
|
||||
if ( (LLFloaterWindLight::isOpen()) && (LLFloaterWindLight::instance()->getVisible()) )
|
||||
LLFloaterWindLight::instance()->close();
|
||||
if ( (LLFloaterWater::isOpen()) && (LLFloaterWater::instance()->getVisible()) )
|
||||
LLFloaterWater::instance()->close();
|
||||
if ( (LLFloaterDayCycle::isOpen()) && (LLFloaterDayCycle::instance()->getVisible()) )
|
||||
LLFloaterDayCycle::instance()->close();
|
||||
}
|
||||
|
||||
// Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n
|
||||
gSavedSettings.getControl("VertexShaderEnable")->setHiddenFromSettingsEditor(!fEnable);
|
||||
gSavedSettings.getControl("WindLightUseAtmosShaders")->setHiddenFromSettingsEditor(!fEnable);
|
||||
|
||||
// Restore the user's WindLight preferences when releasing
|
||||
if (fEnable)
|
||||
LLEnvManagerNew::instance().usePrefs();
|
||||
}
|
||||
|
||||
// Checked: 2011-11-04 (RLVa-1.4.4a) | Modified: RLVa-1.4.4a
|
||||
void RlvUIEnabler::onToggleShowInv(bool fQuitting)
|
||||
{
|
||||
if (fQuitting)
|
||||
return; // Nothing to do if the viewer is shutting down
|
||||
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWINV);
|
||||
|
||||
//
|
||||
// When disabling, close any inventory floaters that may be open
|
||||
//
|
||||
if (!fEnable)
|
||||
{
|
||||
LLInventoryView::closeAll();
|
||||
}
|
||||
}
|
||||
|
||||
// Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f
|
||||
void RlvUIEnabler::onToggleShowLoc()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC);
|
||||
|
||||
// RELEASE-RLVa: [SL-2.0.1] Check that the code below still evaluates to *only* LLNavigationBar::instance().mCmbLocation->refresh()
|
||||
//LLAppViewer::instance()->handleLoginComplete();
|
||||
|
||||
if (!fEnable)
|
||||
{
|
||||
// Close the "About Land" floater if it's currently visible
|
||||
if (LLFloaterLand::instanceVisible())
|
||||
LLFloaterLand::hideInstance();
|
||||
|
||||
// Close the "Estate Tools" floater is it's currently visible
|
||||
if (LLFloaterRegionInfo::instanceVisible())
|
||||
LLFloaterRegionInfo::hideInstance();
|
||||
LLFloaterGodTools::hide(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onToggleShowMinimap()
|
||||
{
|
||||
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP);
|
||||
|
||||
// Start or stop filtering showing the mini-map floater
|
||||
if ((!fEnable) && LLFloaterMap::instanceVisible())
|
||||
LLFloaterMap::hideInstance();
|
||||
}
|
||||
|
||||
// Checked: 2010-12-08 (RLVa-1.4.0a) | Modified: RLVa-1.2.2c
|
||||
void RlvUIEnabler::onToggleShowNames(bool fQuitting)
|
||||
{
|
||||
if (fQuitting)
|
||||
return; // Nothing to do if the viewer is shutting down
|
||||
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES);
|
||||
|
||||
// Close the "Active Speakers" panel if it's currently visible
|
||||
|
||||
|
||||
// Force the use of the "display name" cache so we can filter both display and legacy names (or return back to the user's preference)
|
||||
if (!fEnable)
|
||||
{
|
||||
LLFloaterChat::getInstance()->childSetVisible("active_speakers_panel", false);
|
||||
// Close the "Avatar List/Radar" floater if it's currently visible
|
||||
if ( LLFloaterAvatarList::instanceExists() && LLFloaterAvatarList::getInstance()->getVisible() )
|
||||
LLFloaterAvatarList::toggle(NULL);
|
||||
LLAvatarNameCache::setForceDisplayNames(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarNameCache::setForceDisplayNames(false);
|
||||
LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getS32("PhoenixNameSystem") != 0);
|
||||
}
|
||||
LLVOAvatar::invalidateNameTags(); // See handleDisplayNamesOptionChanged()
|
||||
}
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onToggleShowWorldMap()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP);
|
||||
|
||||
// Simulate clicking the Map button [see LLToolBar::onClickMap()]
|
||||
if ((!fEnable) && gFloaterWorldMap->getVisible())
|
||||
LLFloaterWorldMap::toggle(NULL);
|
||||
}
|
||||
|
||||
// Checked: 2010-08-22 (RLVa-1.2.1a) | Added: RLVa-1.2.1a
|
||||
void RlvUIEnabler::onToggleTp()
|
||||
{
|
||||
/* // Disable the navigation bar "Home" button if both @tplm=n *and* @tploc=n restricted
|
||||
LLButton* pNavBarHomeBtn = LLNavigationBar::getInstance()->findChild<LLButton>("home_btn");
|
||||
RLV_ASSERT(pNavBarHomeBtn);
|
||||
if (pNavBarHomeBtn)
|
||||
pNavBarHomeBtn->setEnabled(!(gRlvHandler.hasBehaviour(RLV_BHVR_TPLM) && gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC)));
|
||||
*/
|
||||
}
|
||||
|
||||
// Checked: 2010-03-01 (RLVa-1.2.0c) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onToggleUnsit()
|
||||
{
|
||||
/*
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT);
|
||||
|
||||
LLPanelStandStopFlying* pPanelStand = LLPanelStandStopFlying::getInstance();
|
||||
RLV_ASSERT(pPanelStand);
|
||||
if (pPanelStand)
|
||||
{
|
||||
LLButton* pBtnStand = pPanelStand->findChild<LLButton>("stand_btn");
|
||||
RLV_ASSERT(pBtnStand);
|
||||
if (pBtnStand)
|
||||
pBtnStand->setEnabled(fEnable);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Checked: 2010-03-01 (RLVa-1.2.0b) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::onToggleViewXXX()
|
||||
{
|
||||
// If any of the three are still active then we keep filtering
|
||||
/*bool fHasViewXXX = (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) ||
|
||||
(gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE));
|
||||
|
||||
// Start or stop filtering opening the preview floaters
|
||||
if ( (fHasViewXXX) && (!m_ConnFloaterViewXXX.connected()) )
|
||||
m_ConnFloaterViewXXX = LLFloaterReg::setValidateCallback(boost::bind(&RlvUIEnabler::filterFloaterViewXXX, this, _1, _2));
|
||||
else if ( (!fHasViewXXX) && (m_ConnFloaterViewXXX.connected()) )
|
||||
m_ConnFloaterViewXXX.disconnect();*/
|
||||
}
|
||||
|
||||
// Checked: 2010-04-01 (RLVa-1.2.0c) | Added: RLVa-1.2.0c
|
||||
void RlvUIEnabler::onUpdateLoginLastLocation(bool fQuitting)
|
||||
{
|
||||
if (!fQuitting)
|
||||
RlvSettings::updateLoginLastLocation();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
/*void RlvUIEnabler::addGenericFloaterFilter(const std::string& strFloaterName)
|
||||
{
|
||||
m_FilteredFloaters.insert(strFloaterName);
|
||||
|
||||
if (!m_ConnFloaterGeneric.connected())
|
||||
m_ConnFloaterGeneric = LLFloaterReg::setValidateCallback(boost::bind(&RlvUIEnabler::filterFloaterGeneric, this, _1, _2));
|
||||
|
||||
}
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
void RlvUIEnabler::removeGenericFloaterFilter(const std::string& strFloaterName)
|
||||
{
|
||||
std::multiset<std::string>::iterator itFloater = m_FilteredFloaters.find(strFloaterName);
|
||||
RLV_ASSERT_DBG(itFloater != m_FilteredFloaters.end());
|
||||
m_FilteredFloaters.erase(itFloater);
|
||||
|
||||
RLV_ASSERT_DBG(m_ConnFloaterGeneric.connected());
|
||||
if (m_FilteredFloaters.empty())
|
||||
m_ConnFloaterGeneric.disconnect();
|
||||
}
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
bool RlvUIEnabler::filterFloaterGeneric(const std::string& strName, const LLSD&)
|
||||
{
|
||||
return m_FilteredFloaters.end() == m_FilteredFloaters.find(strName);
|
||||
}
|
||||
|
||||
// Checked: 2010-04-22 (RLVa-1.4.5) | Added: RLVa-1.2.0
|
||||
bool RlvUIEnabler::filterFloaterShowLoc(const std::string& strName, const LLSD&)
|
||||
{
|
||||
if ("about_land" == strName)
|
||||
return canViewParcelProperties();
|
||||
else if ("region_info" == strName)
|
||||
return canViewRegionProperties();
|
||||
else if ("god_tools" == strName)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Checked: 2012-02-07 (RLVa-1.4.5) | Added: RLVa-1.4.5
|
||||
bool RlvUIEnabler::filterPanelShowLoc(const std::string& strFloater, const std::string&, const LLSD& sdKey)
|
||||
{
|
||||
if ("places" == strFloater)
|
||||
{
|
||||
const std::string strType = sdKey["type"].asString();
|
||||
if ("create_landmark" == strType)
|
||||
return false;
|
||||
else if ("agent" == strType)
|
||||
return canViewParcelProperties();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Checked: 2010-03-01 (RLVa-1.2.0b) | Added: RLVa-1.2.0a
|
||||
bool RlvUIEnabler::filterFloaterViewXXX(const std::string& strName, const LLSD&)
|
||||
{
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) && ("preview_notecard" == strName) )
|
||||
{
|
||||
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_NOTECARD);
|
||||
return false;
|
||||
}
|
||||
else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT)) && (("preview_script" == strName) || ("preview_scriptedit" == strName)) )
|
||||
{
|
||||
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_SCRIPT);
|
||||
return false;
|
||||
}
|
||||
else if ( (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE)) && ("preview_texture" == strName) )
|
||||
{
|
||||
RlvUtil::notifyBlockedViewXXX(LLAssetType::AT_TEXTURE);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}*/
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// Checked: 2012-02-09 (RLVa-1.4.5) | Modified: RLVa-1.4.5
|
||||
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)
|
||||
bool fShow = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC);
|
||||
if (gRlvHandler.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
|
||||
const LLParcel* pParcel = NULL;
|
||||
if (LLViewerParcelMgr::getInstance()->selectionEmpty())
|
||||
{
|
||||
pParcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLParcelSelection* pParcelSel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
|
||||
if (pParcelSel->hasOthersSelected())
|
||||
return false;
|
||||
pParcel = pParcelSel->getParcel();
|
||||
}
|
||||
|
||||
// Ideally we could just use LLViewerParcelMgr::isParcelOwnedByAgent(), but that has that sneaky exemption for "god-like"
|
||||
if (pParcel)
|
||||
{
|
||||
const LLUUID& idOwner = pParcel->getOwnerID();
|
||||
if ( (idOwner != gAgent.getID()) )
|
||||
{
|
||||
S32 count = gAgent.mGroups.count();
|
||||
for (S32 i = 0; i < count; ++i)
|
||||
{
|
||||
if (gAgent.mGroups.get(i).mID == idOwner)
|
||||
{
|
||||
fShow = ((gAgent.mGroups.get(i).mPowers & GP_LAND_RETURN) > 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fShow = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return fShow;
|
||||
}
|
||||
|
||||
// Checked: 2010-04-20 (RLVa-1.4.5) | Modified: RLVa-1.2.0
|
||||
bool RlvUIEnabler::canViewRegionProperties()
|
||||
{
|
||||
// We'll allow "Region / Estate" if the user is either the region owner or an estate manager
|
||||
bool fShow = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC);
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
// [See LLRegion::canManageEstate() but without the "god-like" exception]
|
||||
const LLViewerRegion* pRegion = gAgent.getRegion();
|
||||
if (pRegion)
|
||||
fShow = (pRegion->isEstateManager()) || (pRegion->getOwner() == gAgent.getID());
|
||||
}
|
||||
return fShow;
|
||||
}
|
||||
|
||||
// Checked: 2010-04-20 (RLVa-1.2.0f) | Added: RLVa-1.2.0f
|
||||
/*bool RlvUIEnabler::hasOpenIM(const LLUUID& idAgent)
|
||||
{
|
||||
LLUUID idSession = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, idAgent);
|
||||
return (NULL != LLFloaterReg::findInstance("impanel", idSession));
|
||||
}
|
||||
|
||||
// Checked: 2011-11-04 (RLVa-1.4.4a) | Modified: RLVa-1.4.4a
|
||||
bool RlvUIEnabler::hasOpenProfile(const LLUUID& idAgent)
|
||||
{
|
||||
// -> SL-2.1.0 added the ability to "share" inventory by dropping it on the avatar picker floater so we should check for that
|
||||
// -> we can drag/drop inventory onto calling cards but probably noone knows about it and it would be too involved to check for that
|
||||
// TODO-RLVa: [RLVa-1.2.1] Check the avatar picker as well
|
||||
|
||||
// Check if the user has the specified agent's profile open
|
||||
return LLAvatarActions::profileVisible(idAgent);
|
||||
}*/
|
||||
|
||||
// Checked: 2010-09-11 (RLVa-1.2.1d) | Added: RLVa-1.2.1d
|
||||
bool RlvUIEnabler::isBuildEnabled()
|
||||
{
|
||||
return (gAgent.canEditParcel()) && ((!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ)));
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
Reference in New Issue
Block a user