commit
d264c7308e
|
|
@ -37,7 +37,7 @@
|
|||
<key>RestrainedLoveForbidGiveToRLV</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When FALSE, allows to give sub-folders to the #RLV RestrainedLove folder.</string>
|
||||
<string>When TRUE, forbids to give sub-folders to the #RLV RestrainedLove folder.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -45,6 +45,28 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RestrainedLoveReplaceWhenFolderBeginsWith</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If a folder name begins with this string, its attach behavior will always be "replace", never "stack". Default is blank (disabled).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string></string>
|
||||
</map>
|
||||
<key>RestrainedLoveStackWhenFolderBeginsWith</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If a folder name begins with this string, its attach behavior will always be "stack", never "replace". Default is "+".</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>+</string>
|
||||
</map>
|
||||
<key>RLVaDebugHideUnsetDuplicate</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -77,11 +77,11 @@ void RlvNotifications::onGiveToRLVConfirmation(const LLSD& notification, const L
|
|||
//
|
||||
|
||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
BOOL RlvSettings::fCompositeFolders = FALSE;
|
||||
bool RlvSettings::fCompositeFolders = FALSE;
|
||||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
BOOL RlvSettings::fLegacyNaming = TRUE;
|
||||
BOOL RlvSettings::fNoSetEnv = FALSE;
|
||||
BOOL RlvSettings::fShowNameTags = FALSE;
|
||||
bool RlvSettings::fLegacyNaming = TRUE;
|
||||
bool RlvSettings::fNoSetEnv = FALSE;
|
||||
bool RlvSettings::fShowNameTags = FALSE;
|
||||
|
||||
// Checked: 2010-02-27 (RLVa-1.2.0a) | Modified: RLVa-1.1.0i
|
||||
void RlvSettings::initClass()
|
||||
|
|
@ -90,18 +90,18 @@ void RlvSettings::initClass()
|
|||
if (!fInitialized)
|
||||
{
|
||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
fCompositeFolders = rlvGetSettingBOOL(RLV_SETTING_ENABLECOMPOSITES, FALSE);
|
||||
fCompositeFolders = rlvGetSetting<bool>(RLV_SETTING_ENABLECOMPOSITES, false);
|
||||
if (gSavedSettings.controlExists(RLV_SETTING_ENABLECOMPOSITES))
|
||||
gSavedSettings.getControl(RLV_SETTING_ENABLECOMPOSITES)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &fCompositeFolders));
|
||||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
|
||||
fLegacyNaming = rlvGetSettingBOOL(RLV_SETTING_ENABLELEGACYNAMING, TRUE);
|
||||
fLegacyNaming = rlvGetSetting<bool>(RLV_SETTING_ENABLELEGACYNAMING, true);
|
||||
if (gSavedSettings.controlExists(RLV_SETTING_ENABLELEGACYNAMING))
|
||||
gSavedSettings.getControl(RLV_SETTING_ENABLELEGACYNAMING)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &fLegacyNaming));
|
||||
|
||||
fNoSetEnv = rlvGetSettingBOOL(RLV_SETTING_NOSETENV, FALSE);
|
||||
fNoSetEnv = rlvGetSetting<bool>(RLV_SETTING_NOSETENV, false);
|
||||
|
||||
fShowNameTags = rlvGetSettingBOOL(RLV_SETTING_SHOWNAMETAGS, FALSE);
|
||||
fShowNameTags = rlvGetSetting<bool>(RLV_SETTING_SHOWNAMETAGS, false);
|
||||
if (gSavedSettings.controlExists(RLV_SETTING_SHOWNAMETAGS))
|
||||
gSavedSettings.getControl(RLV_SETTING_SHOWNAMETAGS)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &fShowNameTags));
|
||||
|
||||
|
|
@ -126,7 +126,7 @@ void RlvSettings::initClass()
|
|||
#endif // RLV_EXTENSION_STARTLOCATION
|
||||
|
||||
// Checked: 2010-02-27 (RLVa-1.2.0a) | Added: RLVa-1.1.0i
|
||||
bool RlvSettings::onChangedSettingBOOL(const LLSD& sdValue, BOOL* pfSetting)
|
||||
bool RlvSettings::onChangedSettingBOOL(const LLSD& sdValue, bool* pfSetting)
|
||||
{
|
||||
if (pfSetting)
|
||||
*pfSetting = sdValue.asBoolean();
|
||||
|
|
|
|||
|
|
@ -37,51 +37,55 @@ typedef std::vector<const LLViewerObject*> c_llvo_vec_t;
|
|||
// RlvSettings
|
||||
//
|
||||
|
||||
inline BOOL rlvGetSettingBOOL(const std::string& strSetting, BOOL fDefault)
|
||||
template<typename T> T rlvGetSetting(const std::string& strSetting, const T& defaultValue)
|
||||
{
|
||||
RLV_ASSERT_DBG(gSavedSettings.controlExists(strSetting));
|
||||
return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getBOOL(strSetting) : fDefault;
|
||||
return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.get<T>(strSetting) : defaultValue;
|
||||
}
|
||||
inline BOOL rlvGetPerUserSettingsBOOL(const std::string& strSetting, BOOL fDefault)
|
||||
|
||||
template<typename T> T rlvGetPerUserSettings(const std::string& strSetting, const T& defaultValue)
|
||||
{
|
||||
RLV_ASSERT_DBG(gSavedPerAccountSettings.controlExists(strSetting));
|
||||
return (gSavedPerAccountSettings.controlExists(strSetting)) ? gSavedPerAccountSettings.getBOOL(strSetting) : fDefault;
|
||||
return (gSavedPerAccountSettings.controlExists(strSetting)) ? gSavedPerAccountSettings.get<T>(strSetting) : defaultValue;
|
||||
}
|
||||
|
||||
class RlvSettings
|
||||
{
|
||||
public:
|
||||
static BOOL getDebug() { return rlvGetSettingBOOL(RLV_SETTING_DEBUG, FALSE); }
|
||||
static BOOL getForbidGiveToRLV() { return rlvGetSettingBOOL(RLV_SETTING_FORBIDGIVETORLV, TRUE); }
|
||||
static BOOL getNoSetEnv() { return fNoSetEnv; }
|
||||
static bool getDebug() { return rlvGetSetting<bool>(RLV_SETTING_DEBUG, false); }
|
||||
static bool getForbidGiveToRLV() { return rlvGetSetting<bool>(RLV_SETTING_FORBIDGIVETORLV, true); }
|
||||
static bool getNoSetEnv() { return fNoSetEnv; }
|
||||
|
||||
static BOOL getDebugHideUnsetDup() { return rlvGetSettingBOOL(RLV_SETTING_DEBUGHIDEUNSETDUP, FALSE); }
|
||||
static std::string getWearAddPrefix() { return rlvGetSetting<std::string>(RLV_SETTING_WEARADDPREFIX, LLStringUtil::null); }
|
||||
static std::string getWearReplacePrefix() { return rlvGetSetting<std::string>(RLV_SETTING_WEARREPLACEPREFIX, LLStringUtil::null); }
|
||||
|
||||
static bool getDebugHideUnsetDup() { return rlvGetSetting<bool>(RLV_SETTING_DEBUGHIDEUNSETDUP, false); }
|
||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
static BOOL getEnableComposites() { return fCompositeFolders; }
|
||||
static BOOL getEnableComposites() { return fCompositeFolders; }
|
||||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
static BOOL getEnableLegacyNaming() { return fLegacyNaming; }
|
||||
static BOOL getEnableSharedWear() { return rlvGetSettingBOOL(RLV_SETTING_ENABLESHAREDWEAR, FALSE); }
|
||||
static BOOL getHideLockedLayers() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDLAYER, FALSE); }
|
||||
static BOOL getHideLockedAttach() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDATTACH, FALSE); }
|
||||
static BOOL getHideLockedInventory() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDINVENTORY, FALSE); }
|
||||
static BOOL getSharedInvAutoRename() { return rlvGetSettingBOOL(RLV_SETTING_SHAREDINVAUTORENAME, TRUE); }
|
||||
static BOOL getShowNameTags() { return fShowNameTags; }
|
||||
static bool getEnableLegacyNaming() { return fLegacyNaming; }
|
||||
static bool getEnableSharedWear() { return rlvGetSetting<bool>(RLV_SETTING_ENABLESHAREDWEAR, false); }
|
||||
static bool getHideLockedLayers() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDLAYER, false); }
|
||||
static bool getHideLockedAttach() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDATTACH, false); }
|
||||
static bool getHideLockedInventory() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDINVENTORY, false); }
|
||||
static bool getSharedInvAutoRename() { return rlvGetSetting<bool>(RLV_SETTING_SHAREDINVAUTORENAME, true); }
|
||||
static bool getShowNameTags() { return fShowNameTags; }
|
||||
|
||||
#ifdef RLV_EXTENSION_STARTLOCATION
|
||||
static BOOL getLoginLastLocation() { return rlvGetPerUserSettingsBOOL(RLV_SETTING_LOGINLASTLOCATION, TRUE); }
|
||||
static bool getLoginLastLocation() { return rlvGetPerUserSettings<bool>(RLV_SETTING_LOGINLASTLOCATION, true); }
|
||||
static void updateLoginLastLocation();
|
||||
#endif // RLV_EXTENSION_STARTLOCATION
|
||||
|
||||
static void initClass();
|
||||
protected:
|
||||
static bool onChangedSettingBOOL(const LLSD& sdValue, BOOL* pfSetting);
|
||||
static bool onChangedSettingBOOL(const LLSD& sdValue, bool* pfSetting);
|
||||
|
||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
static BOOL fCompositeFolders;
|
||||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
static BOOL fLegacyNaming;
|
||||
static BOOL fNoSetEnv;
|
||||
static BOOL fShowNameTags;
|
||||
static bool fLegacyNaming;
|
||||
static bool fNoSetEnv;
|
||||
static bool fShowNameTags;
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
|
|
|
|||
|
|
@ -279,6 +279,8 @@ enum ERlvAttachGroupType
|
|||
#define RLV_SETTING_DEBUG "RestrainedLoveDebug"
|
||||
#define RLV_SETTING_NOSETENV "RestrainedLoveNoSetEnv"
|
||||
#define RLV_SETTING_FORBIDGIVETORLV "RestrainedLoveForbidGiveToRLV"
|
||||
#define RLV_SETTING_WEARADDPREFIX "RestrainedLoveStackWhenFolderBeginsWith"
|
||||
#define RLV_SETTING_WEARREPLACEPREFIX "RestrainedLoveReplaceWhenFolderBeginsWith"
|
||||
|
||||
#define RLV_SETTING_DEBUGHIDEUNSETDUP "RLVaDebugHideUnsetDuplicate"
|
||||
#define RLV_SETTING_ENABLECOMPOSITES "RLVaEnableCompositeFolders"
|
||||
|
|
|
|||
|
|
@ -1779,7 +1779,7 @@ ERlvCmdRet RlvHandler::onGetInvWorn(const RlvCommand& rlvCmd, std::string& strRe
|
|||
|
||||
// Collect everything @attachall would be attaching
|
||||
LLInventoryModel::cat_array_t folders; LLInventoryModel::item_array_t items;
|
||||
RlvWearableItemCollector f(pFolder->getUUID(), true, true);
|
||||
RlvWearableItemCollector f(pFolder, RlvForceWear::ACTION_WEAR_REPLACE, RlvForceWear::FLAG_MATCHALL);
|
||||
gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, f);
|
||||
|
||||
rlv_wear_info wi = {0};
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
|
|||
|
||||
// Grab a list of all the items we'll be wearing/attaching
|
||||
LLInventoryModel::cat_array_t folders; LLInventoryModel::item_array_t items;
|
||||
RlvWearableItemCollector f(pFolder->getUUID(), isWearAction(eAction), (eFlags & FLAG_MATCHALL));
|
||||
RlvWearableItemCollector f(pFolder, eAction, eFlags);
|
||||
gInventory.collectDescendentsIf(pFolder->getUUID(), folders, items, FALSE, f);
|
||||
|
||||
for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++)
|
||||
|
|
@ -357,7 +357,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
|
|||
{
|
||||
// The check for whether we're replacing a currently worn composite item happens in onWearableArrived()
|
||||
if (!isAddWearable(pItem))
|
||||
addWearable(pRlvItem, eAction);
|
||||
addWearable(pRlvItem, f.getWearAction(pRlvItem->getParentUUID()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -394,7 +394,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
|
|||
else
|
||||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
{
|
||||
addAttachment(pRlvItem, eAction);
|
||||
addAttachment(pRlvItem, f.getWearAction(pRlvItem->getParentUUID()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@
|
|||
#include "rlvinventory.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
#include "boost/algorithm/string.hpp"
|
||||
|
||||
// ============================================================================
|
||||
// Static variable initialization
|
||||
//
|
||||
|
|
@ -546,6 +548,23 @@ void RlvGiveToRLVAgentOffer::doneIdle()
|
|||
// RlvWearableItemCollector
|
||||
//
|
||||
|
||||
// Checked: 2010-09-25 (RLVa-1.2.1c) | Added: RLVa-1.2.1c
|
||||
RlvForceWear::EWearAction RlvWearableItemCollector::getWearActionNormal(const LLInventoryCategory* pFolder)
|
||||
{
|
||||
RLV_ASSERT_DBG(!RlvInventory::isFoldedFolder(pFolder, false));
|
||||
if ( (RlvForceWear::ACTION_WEAR_REPLACE == m_eWearAction) && (!m_strWearAddPrefix.empty()) &&
|
||||
(boost::algorithm::starts_with(pFolder->getName(), m_strWearAddPrefix)))
|
||||
{
|
||||
return RlvForceWear::ACTION_WEAR_ADD;
|
||||
}
|
||||
else if ( (RlvForceWear::ACTION_WEAR_ADD == m_eWearAction) && (!m_strWearReplacePrefix.empty()) &&
|
||||
(boost::algorithm::starts_with(pFolder->getName(), m_strWearReplacePrefix)) )
|
||||
{
|
||||
return RlvForceWear::ACTION_WEAR_REPLACE;
|
||||
}
|
||||
return (pFolder->getUUID() != m_idFolder) ? getWearAction(pFolder->getParentUUID()) : m_eWearAction;
|
||||
}
|
||||
|
||||
// Checked: 2010-04-07 (RLVa-1.2.0d) | Added: RLVa-0.2.0e
|
||||
const LLUUID& RlvWearableItemCollector::getFoldedParent(const LLUUID& idFolder) const
|
||||
{
|
||||
|
|
@ -558,6 +577,20 @@ const LLUUID& RlvWearableItemCollector::getFoldedParent(const LLUUID& idFolder)
|
|||
return (m_FoldingMap.end() == itFolder) ? idFolder : itFolder->second;
|
||||
}
|
||||
|
||||
// Checked: 2010-09-25 (RLVa-1.2.1c) | Added: RLVa-1.2.1c
|
||||
RlvForceWear::EWearAction RlvWearableItemCollector::getWearAction(const LLUUID& idFolder) const
|
||||
{
|
||||
std::map<LLUUID, RlvForceWear::EWearAction>::const_iterator itFolder = m_WearActionMap.find(idFolder);
|
||||
while (itFolder == m_WearActionMap.end())
|
||||
{
|
||||
const LLViewerInventoryCategory* pFolder = gInventory.getCategory(idFolder);
|
||||
if ((!pFolder) || (gInventory.getRootFolderID() == pFolder->getParentUUID()))
|
||||
break;
|
||||
itFolder = m_WearActionMap.find(pFolder->getParentUUID());
|
||||
}
|
||||
return (itFolder != m_WearActionMap.end()) ? itFolder->second : m_eWearAction;
|
||||
}
|
||||
|
||||
// Checked: 2010-03-20 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a
|
||||
bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolder)
|
||||
{
|
||||
|
|
@ -569,15 +602,18 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
|
|||
if (strFolder.empty()) // Shouldn't happen but does... naughty Lindens
|
||||
return false;
|
||||
|
||||
bool fAttach = RlvForceWear::isWearAction(m_eWearAction);
|
||||
bool fMatchAll = (m_eWearFlags | RlvForceWear::FLAG_MATCHALL);
|
||||
|
||||
if (RlvInventory::isFoldedFolder(pFolder, false)) // Check for folder that should get folded under its parent
|
||||
{
|
||||
if ( (!m_fAttach) || (1 == RlvInventory::getDirectDescendentsCount(pFolder, LLAssetType::AT_OBJECT)) )
|
||||
if ( (!fAttach) || (1 == RlvInventory::getDirectDescendentsCount(pFolder, LLAssetType::AT_OBJECT)) )
|
||||
{ // When attaching there should only be 1 attachment in it
|
||||
m_Folded.push_front(pFolder->getUUID());
|
||||
m_FoldingMap.insert(std::pair<LLUUID, LLUUID>(pFolder->getUUID(), idParent));
|
||||
}
|
||||
}
|
||||
else if ( (RLV_FOLDER_PREFIX_HIDDEN != strFolder[0]) && (m_fMatchAll) ) // Collect from any non-hidden child folder for *all
|
||||
else if ( (RLV_FOLDER_PREFIX_HIDDEN != strFolder[0]) && (fMatchAll) ) // Collect from any non-hidden child folder for *all
|
||||
{
|
||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
if ( (!RlvSettings::getEnableComposites()) || // ... if we're not checking composite folders
|
||||
|
|
@ -587,6 +623,7 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
|
|||
#endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||
{
|
||||
m_Wearable.push_front(pFolder->getUUID());
|
||||
m_WearActionMap.insert(std::pair<LLUUID, RlvForceWear::EWearAction>(m_idFolder, getWearActionNormal(pFolder)));
|
||||
}
|
||||
return (idParent == m_idFolder); // (Convenience for @getinvworn)
|
||||
}
|
||||
|
|
@ -608,8 +645,10 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
|
|||
// Checked: 2010-03-20 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a
|
||||
bool RlvWearableItemCollector::onCollectItem(const LLInventoryItem* pItem)
|
||||
{
|
||||
bool fAttach = RlvForceWear::isWearAction(m_eWearAction);
|
||||
|
||||
#ifdef RLV_EXTENSION_FLAG_NOSTRIP
|
||||
if ( (!m_fAttach) && (!RlvForceWear::isStrippable(pItem)) ) // Don't process "nostrip" items on detach
|
||||
if ( (!fAttach) && (!RlvForceWear::isStrippable(pItem)) ) // Don't process "nostrip" items on detach
|
||||
return false;
|
||||
#endif // RLV_EXTENSION_FLAG_NOSTRIP
|
||||
|
||||
|
|
@ -617,12 +656,12 @@ bool RlvWearableItemCollector::onCollectItem(const LLInventoryItem* pItem)
|
|||
switch (pItem->getType())
|
||||
{
|
||||
case LLAssetType::AT_BODYPART:
|
||||
if (!m_fAttach)
|
||||
if (!fAttach)
|
||||
break; // Don't process body parts on detach
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
#ifdef RLV_EXTENSION_FLAG_NOSTRIP
|
||||
fRet = ( (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)) ||
|
||||
( (m_fAttach) && (m_Folded.end() != std::find(m_Folded.begin(), m_Folded.end(), idParent)) &&
|
||||
( (fAttach) && (m_Folded.end() != std::find(m_Folded.begin(), m_Folded.end(), idParent)) &&
|
||||
(RlvForceWear::isStrippable(pItem)) ) );
|
||||
#else
|
||||
fRet = (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent));
|
||||
|
|
@ -631,7 +670,7 @@ bool RlvWearableItemCollector::onCollectItem(const LLInventoryItem* pItem)
|
|||
case LLAssetType::AT_OBJECT:
|
||||
fRet = ( (m_Wearable.end() != std::find(m_Wearable.begin(), m_Wearable.end(), idParent)) ||
|
||||
(m_Folded.end() != std::find(m_Folded.begin(), m_Folded.end(), idParent)) ) &&
|
||||
( (!m_fAttach) || (RlvAttachPtLookup::hasAttachPointName(pItem)) || (RlvSettings::getEnableSharedWear()) );
|
||||
( (!fAttach) || (RlvAttachPtLookup::hasAttachPointName(pItem)) || (RlvSettings::getEnableSharedWear()) );
|
||||
break;
|
||||
#ifdef RLV_EXTENSION_FORCEWEAR_GESTURES
|
||||
case LLAssetType::AT_GESTURE:
|
||||
|
|
|
|||
|
|
@ -183,28 +183,45 @@ protected:
|
|||
class RlvWearableItemCollector : public LLInventoryCollectFunctor
|
||||
{
|
||||
public:
|
||||
RlvWearableItemCollector(const LLUUID& idFolder, bool fAttach, bool fMatchAll)
|
||||
: m_idFolder(idFolder), m_fAttach(fAttach), m_fMatchAll(fMatchAll)
|
||||
RlvWearableItemCollector(const LLInventoryCategory* pFolder, RlvForceWear::EWearAction eAction, RlvForceWear::EWearFlags eFlags)
|
||||
: m_idFolder(pFolder->getUUID()), m_eWearAction(eAction), m_eWearFlags(eFlags),
|
||||
m_strWearAddPrefix(RlvSettings::getWearAddPrefix()), m_strWearReplacePrefix(RlvSettings::getWearReplacePrefix())
|
||||
{
|
||||
m_Wearable.push_back(idFolder);
|
||||
m_Wearable.push_back(m_idFolder);
|
||||
|
||||
// Wear prefixes can't/shouldn't start with '.'
|
||||
if ( (m_strWearAddPrefix.length() > 1) && (RLV_FOLDER_PREFIX_HIDDEN == m_strWearAddPrefix[0]) )
|
||||
m_strWearAddPrefix.clear();
|
||||
if ( (m_strWearReplacePrefix.length() > 1) && (RLV_FOLDER_PREFIX_HIDDEN == m_strWearReplacePrefix[0]) )
|
||||
m_strWearReplacePrefix.clear();
|
||||
|
||||
// If there's a prefix on the "root" folder then it will override what we were passed in the constructor
|
||||
m_eWearAction = getWearActionNormal(pFolder);
|
||||
m_WearActionMap.insert(std::pair<LLUUID, RlvForceWear::EWearAction>(m_idFolder, m_eWearAction));
|
||||
}
|
||||
virtual ~RlvWearableItemCollector() {}
|
||||
|
||||
virtual bool operator()(LLInventoryCategory* pFolder, LLInventoryItem* pItem);
|
||||
|
||||
const LLUUID& getFoldedParent(const LLUUID& idFolder) const;
|
||||
const LLUUID& getFoldedParent(const LLUUID& idFolder) const;
|
||||
RlvForceWear::EWearAction getWearAction(const LLUUID& idFolder) const;
|
||||
RlvForceWear::EWearAction getWearActionNormal(const LLInventoryCategory* pFolder);
|
||||
RlvForceWear::EWearAction getWearActionFolded(const LLInventoryCategory* pFolder);
|
||||
protected:
|
||||
bool m_fAttach;
|
||||
bool m_fMatchAll;
|
||||
const LLUUID m_idFolder;
|
||||
const LLUUID m_idFolder;
|
||||
RlvForceWear::EWearAction m_eWearAction;
|
||||
RlvForceWear::EWearFlags m_eWearFlags;
|
||||
|
||||
bool onCollectFolder(const LLInventoryCategory* pFolder);
|
||||
bool onCollectItem(const LLInventoryItem* pItem);
|
||||
|
||||
std::list<LLUUID> m_Folded;
|
||||
std::list<LLUUID> m_Wearable;
|
||||
std::map<LLUUID, LLUUID> m_FoldingMap;
|
||||
std::map<LLUUID, RlvForceWear::EWearAction> m_WearActionMap;
|
||||
|
||||
std::map<LLUUID, LLUUID> m_FoldingMap;
|
||||
std::string m_strWearAddPrefix;
|
||||
std::string m_strWearReplacePrefix;
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
|
|
|
|||
Loading…
Reference in New Issue