Refactoring carousel: simplify the behaviour and command template structure and add a template handler for toggles to replace RlvUIEnabler
--HG-- branch : RLVameow-7.2.2
parent
907c7b4e75
commit
2991ff751e
|
|
@ -183,16 +183,16 @@ protected:
|
|||
// Extensibility classes
|
||||
//
|
||||
|
||||
class RlvCommandHandler
|
||||
class RlvExtCommandHandler
|
||||
{
|
||||
public:
|
||||
virtual ~RlvCommandHandler() {}
|
||||
virtual ~RlvExtCommandHandler() {}
|
||||
virtual bool onAddRemCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) { return false; }
|
||||
virtual bool onClearCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) { return false; }
|
||||
virtual bool onReplyCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) { return false; }
|
||||
virtual bool onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) { return false; }
|
||||
};
|
||||
typedef bool (RlvCommandHandler::*rlvCommandHandler)(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet);
|
||||
typedef bool (RlvExtCommandHandler::*rlvExtCommandHandler)(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet);
|
||||
|
||||
// ============================================================================
|
||||
// Generic menu enablers
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ enum ERlvBehaviour {
|
|||
RLV_BHVR_UNKNOWN
|
||||
};
|
||||
|
||||
enum RlvCommandOptionType
|
||||
enum RlvBehaviourOptionType
|
||||
{
|
||||
RLV_OPTION_NONE,
|
||||
RLV_OPTION_EXCEPTION,
|
||||
|
|
@ -255,7 +255,8 @@ enum ERlvCmdRet {
|
|||
RLV_RET_FAILED_DISABLED, // Command failed (command disabled by user)
|
||||
RLV_RET_FAILED_UNKNOWN, // Command failed (unknown command)
|
||||
RLV_RET_FAILED_NOSHAREDROOT, // Command failed (missing #RLV)
|
||||
RLV_RET_DEPRECATED // Command has been deprecated
|
||||
RLV_RET_DEPRECATED, // Command has been deprecated
|
||||
RLV_RET_NO_PROCESSOR // Command doesn't have a template processor define (legacy code)
|
||||
};
|
||||
|
||||
enum ERlvExceptionCheck
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
class RlvExtGetSet : public RlvCommandHandler
|
||||
class RlvExtGetSet : public RlvExtCommandHandler
|
||||
{
|
||||
public:
|
||||
RlvExtGetSet();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (c) 2009-2011, Kitty Barnett
|
||||
* Copyright (c) 2009-2016, 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;
|
||||
|
|
@ -20,6 +20,7 @@
|
|||
#include "llappviewer.h"
|
||||
#include "llgroupactions.h"
|
||||
#include "llhudtext.h"
|
||||
#include "llmoveview.h"
|
||||
#include "llstartup.h"
|
||||
#include "llviewermessage.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
|
|
@ -47,6 +48,12 @@ rlv_handler_t gRlvHandler;
|
|||
// Option parsing template specialization implmentation
|
||||
//
|
||||
|
||||
template <class optionType>
|
||||
struct RlvCommandOptionParser
|
||||
{
|
||||
static bool parseOption(const std::string& strOption, optionType& valueOption);
|
||||
};
|
||||
|
||||
bool RlvCommandOptionParser<LLUUID>::parseOption(const std::string& strOption, LLUUID& idOption)
|
||||
{
|
||||
idOption.set(strOption);
|
||||
|
|
@ -62,8 +69,35 @@ bool RlvCommandOptionParser<int>::parseOption(const std::string& strOption, int&
|
|||
// Command processing template specialization implmentation
|
||||
//
|
||||
|
||||
ERlvCmdRet RlvBehaviourProcessorHelper::processBehaviourImpl(const RlvCommand& rlvCmd, RlvBhvrHandler* pHandlerFunc)
|
||||
{
|
||||
bool fRefCount = false;
|
||||
ERlvCmdRet eRet = (*pHandlerFunc)(rlvCmd, fRefCount);
|
||||
|
||||
// If this command represents a restriction that's been added/removed then we need to do some additional processing
|
||||
if ( (RLV_RET_SUCCESS == eRet) && (fRefCount) )
|
||||
{
|
||||
ERlvBehaviour eBhvr = rlvCmd.getBehaviourType();
|
||||
S16& refBhvr = gRlvHandler.m_Behaviours[eBhvr];
|
||||
if (RLV_TYPE_ADD == rlvCmd.getParamType())
|
||||
{
|
||||
if (rlvCmd.isStrict())
|
||||
gRlvHandler.addException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr);
|
||||
refBhvr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rlvCmd.isStrict())
|
||||
gRlvHandler.removeException(rlvCmd.getObjectID(), RLV_BHVR_PERMISSIVE, eBhvr);
|
||||
refBhvr--;
|
||||
}
|
||||
}
|
||||
|
||||
return eRet;
|
||||
}
|
||||
|
||||
// Handles: @bhvr=n|y
|
||||
ERlvCmdRet RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE>::processCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_NONE>::onCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
{
|
||||
// There should be no option
|
||||
if (rlvCmd.hasOption())
|
||||
|
|
@ -74,7 +108,7 @@ ERlvCmdRet RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE>::process
|
|||
}
|
||||
|
||||
// Handles: @bhvr:<uuid>=n|y
|
||||
ERlvCmdRet RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>::processCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_EXCEPTION>::onCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
{
|
||||
// There should be an option and it should specify a valid UUID
|
||||
LLUUID idException;
|
||||
|
|
@ -91,20 +125,27 @@ ERlvCmdRet RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>::pr
|
|||
}
|
||||
|
||||
// Handles: @bhvr[:<uuid>]=n|y
|
||||
ERlvCmdRet RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>::processCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
ERlvCmdRet RlvBehaviourGenericHandler<RLV_OPTION_NONE_OR_EXCEPTION>::onCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
{
|
||||
// If there is an option then it should specify a valid UUID (but don't reference count)
|
||||
if (rlvCmd.hasOption())
|
||||
{
|
||||
ERlvCmdRet eRet = RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>::processCommand(rlvCmd, fRefCount);
|
||||
ERlvCmdRet eRet = RlvBehaviourGenericHandler<RLV_OPTION_EXCEPTION>::onCommand(rlvCmd, fRefCount);
|
||||
fRefCount = false;
|
||||
return eRet;
|
||||
}
|
||||
return RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE>::processCommand(rlvCmd, fRefCount);
|
||||
return RlvBehaviourGenericHandler<RLV_OPTION_NONE>::onCommand(rlvCmd, fRefCount);
|
||||
}
|
||||
|
||||
// Handles: @sendim=n|y toggles
|
||||
void RlvBehaviourToggleHandler<RLV_BHVR_SENDIM>::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr)
|
||||
{
|
||||
gSavedPerAccountSettings.getControl("DoNotDisturbModeResponse")->setHiddenFromSettingsEditor(fHasBhvr);
|
||||
}
|
||||
|
||||
|
||||
// Handles: @sendchannel[:<channel>]=n|y
|
||||
ERlvCmdRet RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SENDCHANNEL>::processCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SENDCHANNEL>::onCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
{
|
||||
// If there's an option then it should be a valid (= positive and non-zero) chat channel
|
||||
if (rlvCmd.hasOption())
|
||||
|
|
@ -126,7 +167,7 @@ ERlvCmdRet RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SENDCHANNEL>::processCo
|
|||
}
|
||||
|
||||
// Handles: @showhovertext:<uuid>=n|y
|
||||
ERlvCmdRet RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SHOWHOVERTEXT>::processCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SHOWHOVERTEXT>::onCommand(const RlvCommand& rlvCmd, bool& fRefCount)
|
||||
{
|
||||
// There should be an option and it should specify a valid UUID
|
||||
LLUUID idException;
|
||||
|
|
@ -148,7 +189,7 @@ ERlvCmdRet RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SHOWHOVERTEXT>::process
|
|||
}
|
||||
|
||||
// Handles: @setgroup:<uuid>=force
|
||||
ERlvCmdRet RlvCommandProcessor<RLV_TYPE_FORCE, RLV_BHVR_SETGROUP>::processCommand(const RlvCommand& rlvCmd, bool&)
|
||||
ERlvCmdRet RlvCommandHandler<RLV_TYPE_FORCE, RLV_BHVR_SETGROUP>::onCommand(const RlvCommand& rlvCmd)
|
||||
{
|
||||
if (gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, rlvCmd.getObjectID()))
|
||||
{
|
||||
|
|
@ -178,7 +219,7 @@ ERlvCmdRet RlvCommandProcessor<RLV_TYPE_FORCE, RLV_BHVR_SETGROUP>::processComman
|
|||
}
|
||||
|
||||
// Handles: @sit:<uuid>=force
|
||||
ERlvCmdRet RlvCommandProcessor<RLV_TYPE_FORCE, RLV_BHVR_SIT>::processCommand(const RlvCommand& rlvCmd, bool&)
|
||||
ERlvCmdRet RlvCommandHandler<RLV_TYPE_FORCE, RLV_BHVR_SIT>::onCommand(const RlvCommand& rlvCmd)
|
||||
{
|
||||
LLViewerObject* pObj = NULL; LLUUID idTarget(rlvCmd.getOption());
|
||||
// Sanity checking - we need to know about the object and it should identify a prim/linkset
|
||||
|
|
@ -377,14 +418,14 @@ void RlvHandler::removeException(const LLUUID& idObj, ERlvBehaviour eBhvr, const
|
|||
//
|
||||
|
||||
// Checked: 2010-04-07 (RLVa-1.2.0d) | Modified: RLVa-1.1.0f
|
||||
void RlvHandler::addCommandHandler(RlvCommandHandler* pCmdHandler)
|
||||
void RlvHandler::addCommandHandler(RlvExtCommandHandler* pCmdHandler)
|
||||
{
|
||||
if ( (pCmdHandler) && (std::find(m_CommandHandlers.begin(), m_CommandHandlers.end(), pCmdHandler) == m_CommandHandlers.end()) )
|
||||
m_CommandHandlers.push_back(pCmdHandler);
|
||||
}
|
||||
|
||||
// Checked: 2010-04-07 (RLVa-1.2.0d) | Modified: RLVa-1.1.0f
|
||||
void RlvHandler::removeCommandHandler(RlvCommandHandler* pCmdHandler)
|
||||
void RlvHandler::removeCommandHandler(RlvExtCommandHandler* pCmdHandler)
|
||||
{
|
||||
if (pCmdHandler)
|
||||
m_CommandHandlers.remove(pCmdHandler);
|
||||
|
|
@ -393,7 +434,7 @@ void RlvHandler::removeCommandHandler(RlvCommandHandler* pCmdHandler)
|
|||
// Checked: 2010-04-07 (RLVa-1.2.0d) | Modified: RLVa-1.1.0a
|
||||
void RlvHandler::clearCommandHandlers()
|
||||
{
|
||||
std::list<RlvCommandHandler*>::const_iterator itHandler = m_CommandHandlers.begin();
|
||||
std::list<RlvExtCommandHandler*>::const_iterator itHandler = m_CommandHandlers.begin();
|
||||
while (itHandler != m_CommandHandlers.end())
|
||||
{
|
||||
delete *itHandler;
|
||||
|
|
@ -403,9 +444,9 @@ void RlvHandler::clearCommandHandlers()
|
|||
}
|
||||
|
||||
// Checked: 2010-04-07 (RLVa-1.2.0d) | Modified: RLVa-1.1.0f
|
||||
bool RlvHandler::notifyCommandHandlers(rlvCommandHandler f, const RlvCommand& rlvCmd, ERlvCmdRet& eRet, bool fNotifyAll) const
|
||||
bool RlvHandler::notifyCommandHandlers(rlvExtCommandHandler f, const RlvCommand& rlvCmd, ERlvCmdRet& eRet, bool fNotifyAll) const
|
||||
{
|
||||
std::list<RlvCommandHandler*>::const_iterator itHandler = m_CommandHandlers.begin(); bool fContinue = true; eRet = RLV_RET_UNKNOWN;
|
||||
std::list<RlvExtCommandHandler*>::const_iterator itHandler = m_CommandHandlers.begin(); bool fContinue = true; eRet = RLV_RET_UNKNOWN;
|
||||
while ( (itHandler != m_CommandHandlers.end()) && ((fContinue) || (fNotifyAll)) )
|
||||
{
|
||||
ERlvCmdRet eCmdRet = RLV_RET_UNKNOWN;
|
||||
|
|
@ -583,7 +624,7 @@ ERlvCmdRet RlvHandler::processClearCommand(const RlvCommand& rlvCmd)
|
|||
|
||||
// Let our observers know about clear commands
|
||||
ERlvCmdRet eRet = RLV_RET_SUCCESS;
|
||||
notifyCommandHandlers(&RlvCommandHandler::onClearCommand, rlvCmd, eRet, true);
|
||||
notifyCommandHandlers(&RlvExtCommandHandler::onClearCommand, rlvCmd, eRet, true);
|
||||
|
||||
return RLV_RET_SUCCESS; // Don't fail clear commands even if the object didn't exist since it confuses people
|
||||
}
|
||||
|
|
@ -1298,9 +1339,18 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
|
|||
// * added to the RlvObject
|
||||
// * removed from the RlvObject (which still exists at this point even if this is the last restriction)
|
||||
// - the object's UUID may or may not exist in gObjectList (see handling of @detach=n|y)
|
||||
|
||||
// Try a command processor first
|
||||
ERlvCmdRet eRet = rlvCmd.processCommand();
|
||||
if (RLV_RET_NO_PROCESSOR != eRet)
|
||||
{
|
||||
return eRet;
|
||||
}
|
||||
|
||||
// Process the command the legacy way
|
||||
ERlvBehaviour eBhvr = rlvCmd.getBehaviourType(); ERlvParamType eType = rlvCmd.getParamType();
|
||||
|
||||
ERlvCmdRet eRet = RLV_RET_SUCCESS; bool fRefCount = false; const std::string& strOption = rlvCmd.getOption();
|
||||
eRet = RLV_RET_SUCCESS; bool fRefCount = false; const std::string& strOption = rlvCmd.getOption();
|
||||
switch (eBhvr)
|
||||
{
|
||||
case RLV_BHVR_DETACH: // @detach[:<option>]=n|y
|
||||
|
|
@ -1410,23 +1460,10 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
|
|||
//
|
||||
case RLV_BHVR_UNKNOWN:
|
||||
// Pass unknown commands on to registered command handlers
|
||||
return (notifyCommandHandlers(&RlvCommandHandler::onAddRemCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
//
|
||||
// Catch all fall-through
|
||||
//
|
||||
return (notifyCommandHandlers(&RlvExtCommandHandler::onAddRemCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
default:
|
||||
{
|
||||
// Check for a registered command processor
|
||||
if (rlvCmd.hasProcessor())
|
||||
{
|
||||
eRet = rlvCmd.processCommand(fRefCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fail with "Invalid param" if none of the above handled it
|
||||
eRet = RLV_RET_FAILED_PARAM;
|
||||
}
|
||||
}
|
||||
// Fail with "Invalid param" if none of the above handled it
|
||||
eRet = RLV_RET_FAILED_PARAM;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1612,7 +1649,15 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const
|
|||
{
|
||||
RLV_ASSERT(RLV_TYPE_FORCE == rlvCmd.getParamType());
|
||||
|
||||
ERlvCmdRet eRet = RLV_RET_SUCCESS;
|
||||
// Try a command processor first
|
||||
ERlvCmdRet eRet = rlvCmd.processCommand();
|
||||
if (RLV_RET_NO_PROCESSOR != eRet)
|
||||
{
|
||||
return eRet;
|
||||
}
|
||||
|
||||
// Process the command the legacy way
|
||||
eRet = RLV_RET_SUCCESS;
|
||||
switch (rlvCmd.getBehaviourType())
|
||||
{
|
||||
case RLV_BHVR_DETACH: // @detach[:<option>]=force - Checked: 2010-08-30 (RLVa-1.2.1c) | Modified: RLVa-1.2.1c
|
||||
|
|
@ -1701,21 +1746,10 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const
|
|||
break;
|
||||
case RLV_BHVR_UNKNOWN:
|
||||
// Pass unknown commands on to registered command handlers
|
||||
return (notifyCommandHandlers(&RlvCommandHandler::onForceCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
return (notifyCommandHandlers(&RlvExtCommandHandler::onForceCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
default:
|
||||
{
|
||||
// Check for a registered command processor
|
||||
if (rlvCmd.hasProcessor())
|
||||
{
|
||||
bool fTemp;
|
||||
eRet = rlvCmd.processCommand(fTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fail with "Invalid param" if none of the above handled it
|
||||
eRet = RLV_RET_FAILED_PARAM;
|
||||
}
|
||||
}
|
||||
// Fail with "Invalid param" if none of the above handled it
|
||||
eRet = RLV_RET_FAILED_PARAM;
|
||||
break;
|
||||
}
|
||||
return eRet;
|
||||
|
|
@ -1913,7 +1947,7 @@ ERlvCmdRet RlvHandler::processReplyCommand(const RlvCommand& rlvCmd) const
|
|||
break;
|
||||
case RLV_BHVR_UNKNOWN:
|
||||
// Pass unknown commands on to registered command handlers
|
||||
return (notifyCommandHandlers(&RlvCommandHandler::onReplyCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
return (notifyCommandHandlers(&RlvExtCommandHandler::onReplyCommand, rlvCmd, eRet, false)) ? eRet : RLV_RET_FAILED_UNKNOWN;
|
||||
default:
|
||||
// Fail with "Invalid param" if none of the above handled it
|
||||
return RLV_RET_FAILED_PARAM;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (c) 2009-2011, Kitty Barnett
|
||||
* Copyright (c) 2009-2016, 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;
|
||||
|
|
@ -131,11 +131,11 @@ public:
|
|||
typedef boost::signals2::signal<void (const RlvCommand&, ERlvCmdRet, bool)> rlv_command_signal_t;
|
||||
boost::signals2::connection setCommandCallback(const rlv_command_signal_t::slot_type& cb ) { return m_OnCommand.connect(cb); }
|
||||
|
||||
void addCommandHandler(RlvCommandHandler* pHandler);
|
||||
void removeCommandHandler(RlvCommandHandler* pHandler);
|
||||
void addCommandHandler(RlvExtCommandHandler* pHandler);
|
||||
void removeCommandHandler(RlvExtCommandHandler* pHandler);
|
||||
protected:
|
||||
void clearCommandHandlers();
|
||||
bool notifyCommandHandlers(rlvCommandHandler f, const RlvCommand& rlvCmd, ERlvCmdRet& eRet, bool fNotifyAll) const;
|
||||
bool notifyCommandHandlers(rlvExtCommandHandler f, const RlvCommand& rlvCmd, ERlvCmdRet& eRet, bool fNotifyAll) const;
|
||||
|
||||
// Externally invoked event handlers
|
||||
public:
|
||||
|
|
@ -201,7 +201,7 @@ protected:
|
|||
rlv_behaviour_signal_t m_OnBehaviour;
|
||||
rlv_behaviour_signal_t m_OnBehaviourToggle;
|
||||
rlv_command_signal_t m_OnCommand;
|
||||
mutable std::list<RlvCommandHandler*> m_CommandHandlers;
|
||||
mutable std::list<RlvExtCommandHandler*> m_CommandHandlers;
|
||||
|
||||
static BOOL m_fEnabled; // Use setEnabled() to toggle this
|
||||
|
||||
|
|
@ -211,8 +211,11 @@ protected:
|
|||
|
||||
friend class RlvSharedRootFetcher; // Fetcher needs access to m_fFetchComplete
|
||||
friend class RlvGCTimer; // Timer clear its own point at destruction
|
||||
template <ERlvParamType, RlvCommandOptionType> friend struct RlvCommandGenericProcessor;
|
||||
template <ERlvParamType, ERlvBehaviour> friend struct RlvCommandProcessor;
|
||||
friend class RlvBehaviourProcessorHelper;
|
||||
template <RlvBehaviourOptionType> friend struct RlvBehaviourGenericHandler;
|
||||
template <ERlvBehaviour> friend struct RlvBehaviourHandler;
|
||||
template <ERlvBehaviour> friend struct RlvBehaviourToggleHandler;
|
||||
template <ERlvParamType, ERlvBehaviour> friend struct RlvCommandHandler;
|
||||
|
||||
// --------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -28,19 +28,6 @@
|
|||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
// ============================================================================
|
||||
// Command processing template specialization definitions
|
||||
//
|
||||
|
||||
template<> struct RlvCommandOptionParser<LLUUID> { static bool parseOption(const std::string& strOption, LLUUID& idOption); };
|
||||
|
||||
template<> struct RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE> { static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
template<> struct RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION> { static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
template<> struct RlvCommandGenericProcessor<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION> { static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
|
||||
template<> struct RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SENDCHANNEL> { static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
template<> struct RlvCommandProcessor<RLV_TYPE_ADDREM, RLV_BHVR_SHOWHOVERTEXT> { static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
|
||||
// ============================================================================
|
||||
// RlvBehaviourDictionary
|
||||
//
|
||||
|
|
@ -50,87 +37,87 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
|
|||
//
|
||||
// Restrictions
|
||||
//
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("acceptpermission", RLV_BHVR_ACCEPTPERMISSION));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("accepttp", RLV_BHVR_ACCEPTTP, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("accepttprequest", RLV_BHVR_ACCEPTTPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("acceptpermission", RLV_BHVR_ACCEPTPERMISSION));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("accepttp", RLV_BHVR_ACCEPTTP, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("accepttprequest", RLV_BHVR_ACCEPTTPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourInfo("addattach", RLV_BHVR_ADDATTACH, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("addoutfit", RLV_BHVR_ADDOUTFIT, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("allowidle", RLV_BHVR_ALLOWIDLE, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("alwaysrun", RLV_BHVR_ALWAYSRUN));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("allowidle", RLV_BHVR_ALLOWIDLE, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("alwaysrun", RLV_BHVR_ALWAYSRUN));
|
||||
addEntry(new RlvBehaviourInfo("attachthis", RLV_BHVR_ATTACHTHIS, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_NODE));
|
||||
addEntry(new RlvBehaviourInfo("attachallthis", RLV_BHVR_ATTACHTHIS, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_SUBTREE));
|
||||
addEntry(new RlvBehaviourInfo("attachthis_except", RLV_BHVR_ATTACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_NODE));
|
||||
addEntry(new RlvBehaviourInfo("attachallthis_except", RLV_BHVR_ATTACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_SUBTREE));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("chatwhisper", RLV_BHVR_CHATWHISPER));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("chatnormal", RLV_BHVR_CHATNORMAL));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("chatshout", RLV_BHVR_CHATSHOUT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("chatwhisper", RLV_BHVR_CHATWHISPER));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("chatnormal", RLV_BHVR_CHATNORMAL));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("chatshout", RLV_BHVR_CHATSHOUT));
|
||||
addEntry(new RlvBehaviourInfo("detach", RLV_BHVR_DETACH, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("detachthis", RLV_BHVR_DETACHTHIS, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_NODE));
|
||||
addEntry(new RlvBehaviourInfo("detachallthis", RLV_BHVR_DETACHTHIS, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_SUBTREE));
|
||||
addEntry(new RlvBehaviourInfo("detachthis_except", RLV_BHVR_DETACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_NODE));
|
||||
addEntry(new RlvBehaviourInfo("detachallthis_except", RLV_BHVR_DETACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_SUBTREE));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("edit", RLV_BHVR_EDIT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("editobj", RLV_BHVR_EDITOBJ));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("emote", RLV_BHVR_EMOTE));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("fartouch", RLV_BHVR_FARTOUCH));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("fly", RLV_BHVR_FLY));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("interact", RLV_BHVR_INTERACT, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("edit", RLV_BHVR_EDIT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("editobj", RLV_BHVR_EDITOBJ));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("emote", RLV_BHVR_EMOTE));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("fartouch", RLV_BHVR_FARTOUCH));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("fly", RLV_BHVR_FLY));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("interact", RLV_BHVR_INTERACT, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourInfo("notify", RLV_BHVR_NOTIFY, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("permissive", RLV_BHVR_PERMISSIVE));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("recvchat", RLV_BHVR_RECVCHAT, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("recvchatfrom", RLV_BHVR_RECVCHATFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("recvemote", RLV_BHVR_RECVEMOTE, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("recvemotefrom", RLV_BHVR_RECVEMOTEFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("recvim", RLV_BHVR_RECVIM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("recvimfrom", RLV_BHVR_RECVIMFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("permissive", RLV_BHVR_PERMISSIVE));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("recvchat", RLV_BHVR_RECVCHAT, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("recvchatfrom", RLV_BHVR_RECVCHATFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("recvemote", RLV_BHVR_RECVEMOTE, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("recvemotefrom", RLV_BHVR_RECVEMOTEFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("recvim", RLV_BHVR_RECVIM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("recvimfrom", RLV_BHVR_RECVIMFROM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourInfo("redirchat", RLV_BHVR_REDIRCHAT, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("rediremote", RLV_BHVR_REDIREMOTE, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("remattach", RLV_BHVR_REMATTACH, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("remoutfit", RLV_BHVR_REMOUTFIT, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("rez", RLV_BHVR_REZ));
|
||||
addEntry(new RlvCommandDefinition<RLV_TYPE_ADDREM, RLV_BHVR_SENDCHANNEL>("sendchannel", RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("sendchat", RLV_BHVR_SENDCHAT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("sendim", RLV_BHVR_SENDIM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("sendimto", RLV_BHVR_SENDIMTO, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("setdebug", RLV_BHVR_SETDEBUG));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("setenv", RLV_BHVR_SETENV));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("setgroup", RLV_BHVR_SETGROUP));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("rez", RLV_BHVR_REZ));
|
||||
addEntry(new RlvBehaviourProcessor<RLV_BHVR_SENDCHANNEL>("sendchannel", RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("sendchat", RLV_BHVR_SENDCHAT));
|
||||
addEntry(new RlvBehaviourToggleProcessor<RLV_BHVR_SENDIM, RLV_OPTION_NONE_OR_EXCEPTION>("sendim", RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("sendimto", RLV_BHVR_SENDIMTO, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("setdebug", RLV_BHVR_SETDEBUG));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("setenv", RLV_BHVR_SETENV));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("setgroup", RLV_BHVR_SETGROUP));
|
||||
addEntry(new RlvBehaviourInfo("sharedunwear", RLV_BHVR_SHAREDUNWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourInfo("sharedwear", RLV_BHVR_SHAREDWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvCommandDefinition<RLV_TYPE_ADDREM, RLV_BHVR_SHOWHOVERTEXT>("showhovertext"));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showhovertextall", RLV_BHVR_SHOWHOVERTEXTALL));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showhovertexthud", RLV_BHVR_SHOWHOVERTEXTHUD));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showhovertextworld", RLV_BHVR_SHOWHOVERTEXTWORLD));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showinv", RLV_BHVR_SHOWINV));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showloc", RLV_BHVR_SHOWLOC));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showminimap", RLV_BHVR_SHOWMINIMAP));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("shownames", RLV_BHVR_SHOWNAMES));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("showworldmap", RLV_BHVR_SHOWWORLDMAP));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("sit", RLV_BHVR_SIT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("sittp", RLV_BHVR_SITTP));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("standtp", RLV_BHVR_STANDTP));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("startim", RLV_BHVR_STARTIM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("startimto", RLV_BHVR_STARTIMTO, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("temprun", RLV_BHVR_TEMPRUN));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("touchall", RLV_BHVR_TOUCHALL));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("touchattach", RLV_BHVR_TOUCHATTACH));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("touchattachother", RLV_BHVR_TOUCHATTACHOTHER));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("touchattachself", RLV_BHVR_TOUCHATTACHSELF));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("touchfar", RLV_BHVR_FARTOUCH, RlvBehaviourInfo::BHVR_SYNONYM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("touchhud", RLV_BHVR_TOUCHHUD, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("touchme", RLV_BHVR_TOUCHME));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_EXCEPTION>("touchthis", RLV_BHVR_TOUCHTHIS));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("touchworld", RLV_BHVR_TOUCHWORLD));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("tplm", RLV_BHVR_TPLM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("tploc", RLV_BHVR_TPLOC));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("tplure", RLV_BHVR_TPLURE, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE_OR_EXCEPTION>("tprequest", RLV_BHVR_TPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourProcessor<RLV_BHVR_SHOWHOVERTEXT>("showhovertext"));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showhovertextall", RLV_BHVR_SHOWHOVERTEXTALL));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showhovertexthud", RLV_BHVR_SHOWHOVERTEXTHUD));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showhovertextworld", RLV_BHVR_SHOWHOVERTEXTWORLD));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showinv", RLV_BHVR_SHOWINV));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showloc", RLV_BHVR_SHOWLOC));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showminimap", RLV_BHVR_SHOWMINIMAP));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("shownames", RLV_BHVR_SHOWNAMES));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showworldmap", RLV_BHVR_SHOWWORLDMAP));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("sit", RLV_BHVR_SIT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("sittp", RLV_BHVR_SITTP));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("standtp", RLV_BHVR_STANDTP));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("startim", RLV_BHVR_STARTIM, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("startimto", RLV_BHVR_STARTIMTO, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("temprun", RLV_BHVR_TEMPRUN));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("touchall", RLV_BHVR_TOUCHALL));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("touchattach", RLV_BHVR_TOUCHATTACH));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("touchattachother", RLV_BHVR_TOUCHATTACHOTHER));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("touchattachself", RLV_BHVR_TOUCHATTACHSELF));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("touchfar", RLV_BHVR_FARTOUCH, RlvBehaviourInfo::BHVR_SYNONYM));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("touchhud", RLV_BHVR_TOUCHHUD, RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("touchme", RLV_BHVR_TOUCHME));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_EXCEPTION>("touchthis", RLV_BHVR_TOUCHTHIS));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("touchworld", RLV_BHVR_TOUCHWORLD));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("tplm", RLV_BHVR_TPLM));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("tploc", RLV_BHVR_TPLOC));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("tplure", RLV_BHVR_TPLURE, RlvBehaviourInfo::BHVR_STRICT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("tprequest", RLV_BHVR_TPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED));
|
||||
addEntry(new RlvBehaviourInfo("unsharedunwear", RLV_BHVR_UNSHAREDUNWEAR, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvBehaviourInfo("unsharedwear", RLV_BHVR_UNSHAREDWEAR, RLV_TYPE_ADDREM));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("unsit", RLV_BHVR_UNSIT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("viewnote", RLV_BHVR_VIEWNOTE));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("viewscript", RLV_BHVR_VIEWSCRIPT));
|
||||
addEntry(new RlvCommandGenericDefinition<RLV_TYPE_ADDREM, RLV_OPTION_NONE>("viewtexture", RLV_BHVR_VIEWTEXTURE));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("unsit", RLV_BHVR_UNSIT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("viewnote", RLV_BHVR_VIEWNOTE));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("viewscript", RLV_BHVR_VIEWSCRIPT));
|
||||
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("viewtexture", RLV_BHVR_VIEWTEXTURE));
|
||||
|
||||
//
|
||||
// Force-wear
|
||||
|
|
@ -169,8 +156,8 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
|
|||
//
|
||||
addEntry(new RlvBehaviourInfo("adjustheight", RLV_BHVR_ADJUSTHEIGHT, RLV_TYPE_FORCE));
|
||||
addEntry(new RlvBehaviourInfo("detachme", RLV_BHVR_DETACHME, RLV_TYPE_FORCE));
|
||||
addEntry(new RlvCommandDefinition<RLV_TYPE_FORCE, RLV_BHVR_SETGROUP>("setgroup"));
|
||||
addEntry(new RlvCommandDefinition<RLV_TYPE_FORCE, RLV_BHVR_SIT>("sit"));
|
||||
addEntry(new RlvCommandProcessor<RLV_TYPE_FORCE, RLV_BHVR_SETGROUP>("setgroup"));
|
||||
addEntry(new RlvCommandProcessor<RLV_TYPE_FORCE, RLV_BHVR_SIT>("sit"));
|
||||
addEntry(new RlvBehaviourInfo("tpto", RLV_BHVR_TPTO, RLV_TYPE_FORCE));
|
||||
addEntry(new RlvBehaviourInfo("unsit", RLV_BHVR_UNSIT, RLV_TYPE_FORCE));
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include "rlvcommon.h"
|
||||
|
||||
// ============================================================================
|
||||
// RlvCommandDefinition and related classes
|
||||
// RlvBehaviourInfo class - Generic behaviour descriptor (used by restrictions, reply and force commands)
|
||||
//
|
||||
|
||||
class RlvBehaviourInfo
|
||||
|
|
@ -68,8 +68,7 @@ public:
|
|||
bool isSynonym() const { return m_nBhvrFlags & BHVR_SYNONYM; }
|
||||
void toggleBehaviourFlag(EBehaviourFlags eBhvrFlag, bool fEnable);
|
||||
|
||||
virtual bool hasProcessor() const { return false; }
|
||||
virtual ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount) const { return RLV_RET_UNKNOWN; }
|
||||
virtual ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const { return RLV_RET_NO_PROCESSOR; }
|
||||
|
||||
protected:
|
||||
std::string m_strBhvr;
|
||||
|
|
@ -78,40 +77,60 @@ protected:
|
|||
U32 m_maskParamType;
|
||||
};
|
||||
|
||||
template <class optionType>
|
||||
struct RlvCommandOptionParser
|
||||
{
|
||||
static bool parseOption(const std::string& strOption, optionType& valueOption);
|
||||
};
|
||||
// ============================================================================
|
||||
// RlvBehaviourProcessor and related classes - Handles add/rem comamnds aka "restrictions)
|
||||
//
|
||||
|
||||
template <ERlvParamType paramType, RlvCommandOptionType optionType>
|
||||
struct RlvCommandGenericProcessor
|
||||
{
|
||||
static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount);
|
||||
};
|
||||
|
||||
template <ERlvParamType paramType, RlvCommandOptionType optionType>
|
||||
class RlvCommandGenericDefinition : public RlvBehaviourInfo
|
||||
class RlvBehaviourProcessorHelper
|
||||
{
|
||||
public:
|
||||
RlvCommandGenericDefinition(const std::string& strBhvr, ERlvBehaviour eBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, paramType, nBhvrFlags) {}
|
||||
/*virtual*/ bool hasProcessor() const { return true; }
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount) const { return RlvCommandGenericProcessor<paramType, optionType>::processCommand(rlvCmd, fRefCount); }
|
||||
typedef ERlvCmdRet(RlvBhvrHandler)(const RlvCommand& rlvCmd, bool& fRefCount);
|
||||
static ERlvCmdRet processBehaviourImpl(const RlvCommand& rlvCmd, RlvBhvrHandler* pHandlerFunc);
|
||||
};
|
||||
|
||||
template <ERlvParamType paramType, ERlvBehaviour eBhvr>
|
||||
struct RlvCommandProcessor
|
||||
{
|
||||
static ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount);
|
||||
};
|
||||
|
||||
template <ERlvParamType paramType, ERlvBehaviour eBhvr>
|
||||
class RlvCommandDefinition : public RlvBehaviourInfo
|
||||
template <RlvBehaviourOptionType optionType> struct RlvBehaviourGenericHandler { static ERlvCmdRet onCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
template <RlvBehaviourOptionType optionType> class RlvBehaviourGenericProcessor : public RlvBehaviourInfo
|
||||
{
|
||||
public:
|
||||
RlvCommandDefinition(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, paramType, nBhvrFlags) {}
|
||||
/*virtual*/ bool hasProcessor() const { return true; }
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd, bool& fRefCount) const { return RlvCommandProcessor<paramType, eBhvr>::processCommand(rlvCmd, fRefCount); }
|
||||
RlvBehaviourGenericProcessor(const std::string& strBhvr, ERlvBehaviour eBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, RLV_TYPE_ADDREM, nBhvrFlags) {}
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const { return RlvBehaviourProcessorHelper::processBehaviourImpl(rlvCmd, &RlvBehaviourGenericHandler<optionType>::onCommand); }
|
||||
};
|
||||
|
||||
template <ERlvBehaviour eBhvr> struct RlvBehaviourHandler { static ERlvCmdRet onCommand(const RlvCommand& rlvCmd, bool& fRefCount); };
|
||||
template <ERlvBehaviour eBhvr, typename bhvrHandler = RlvBehaviourHandler<eBhvr>> class RlvBehaviourProcessor : public RlvBehaviourInfo
|
||||
{
|
||||
public:
|
||||
RlvBehaviourProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, RLV_TYPE_ADDREM, nBhvrFlags) {}
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const { return RlvBehaviourProcessorHelper::processBehaviourImpl(rlvCmd, &bhvrHandler::onCommand); }
|
||||
};
|
||||
|
||||
template <ERlvBehaviour> struct RlvBehaviourToggleHandler { static void onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr); };
|
||||
template <ERlvBehaviour eBhvr, RlvBehaviourOptionType optionType, typename bhvrToggleHandler = RlvBehaviourToggleHandler<eBhvr>> class RlvBehaviourToggleProcessor : public RlvBehaviourInfo
|
||||
{
|
||||
public:
|
||||
RlvBehaviourToggleProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, RLV_TYPE_ADDREM, nBhvrFlags) {}
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const
|
||||
{
|
||||
bool fHasBhvr = gRlvHandler.hasBehaviour(eBhvr);
|
||||
|
||||
ERlvCmdRet eRet = RlvBehaviourProcessorHelper::processBehaviourImpl(rlvCmd, &RlvBehaviourGenericHandler<optionType>::onCommand);
|
||||
if (fHasBhvr != gRlvHandler.hasBehaviour(eBhvr))
|
||||
bhvrToggleHandler::onCommandToggle(eBhvr, !fHasBhvr);
|
||||
return eRet;
|
||||
}
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// RlvCommandHandler and related classes - Handles force/reply commands
|
||||
//
|
||||
|
||||
template <ERlvParamType paramType, ERlvBehaviour eBhvr> struct RlvCommandHandler { static ERlvCmdRet onCommand(const RlvCommand& rlvCmd); };
|
||||
template <ERlvParamType paramType, ERlvBehaviour eBhvr> class RlvCommandProcessor : public RlvBehaviourInfo
|
||||
{
|
||||
public:
|
||||
RlvCommandProcessor(const std::string& strBhvr, U32 nBhvrFlags = 0) : RlvBehaviourInfo(strBhvr, eBhvr, paramType, nBhvrFlags) {}
|
||||
public:
|
||||
/*virtual*/ ERlvCmdRet processCommand(const RlvCommand& rlvCmd) const { return RlvCommandHandler<paramType, eBhvr>::onCommand(rlvCmd); }
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
|
|
@ -177,8 +196,7 @@ public:
|
|||
bool isBlocked() const { return (m_pBhvrInfo) ? m_pBhvrInfo->isBlocked() : false; }
|
||||
bool isStrict() const { return m_fStrict; }
|
||||
bool isValid() const { return m_fValid; }
|
||||
bool hasProcessor() const { return (m_pBhvrInfo) ? m_pBhvrInfo->hasProcessor() : false; }
|
||||
ERlvCmdRet processCommand(bool& fRefCount) const { return (m_pBhvrInfo) ? m_pBhvrInfo->processCommand(*this, fRefCount) : RLV_RET_UNKNOWN; }
|
||||
ERlvCmdRet processCommand() const { return (m_pBhvrInfo) ? m_pBhvrInfo->processCommand(*this) : RLV_RET_UNKNOWN; }
|
||||
|
||||
protected:
|
||||
static bool parseCommand(const std::string& strCommand, std::string& strBehaviour, std::string& strOption, std::string& strParam);
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ RlvUIEnabler::RlvUIEnabler()
|
|||
|
||||
// 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_SENDIM, boost::bind(&RlvUIEnabler::onToggleSendIM, 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)));
|
||||
|
|
@ -152,13 +151,6 @@ void RlvUIEnabler::onToggleMovement()
|
|||
LLFloaterMove::sUpdateMovementStatus();
|
||||
}
|
||||
|
||||
// Checked: 2013-05-11 (RLVa-1.4.9)
|
||||
void RlvUIEnabler::onToggleSendIM()
|
||||
{
|
||||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM);
|
||||
gSavedPerAccountSettings.getControl("DoNotDisturbModeResponse")->setHiddenFromSettingsEditor(!fEnable);
|
||||
}
|
||||
|
||||
// Checked: 2011-05-28 (RLVa-1.4.0a) | Added: RLVa-1.4.0a
|
||||
void RlvUIEnabler::onToggleSetDebug()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ protected:
|
|||
void onRefreshHoverText(); // showloc, shownames, showhovertext(all|world|hud)
|
||||
void onToggleEdit(); // edit
|
||||
void onToggleMovement(); // fly, alwaysrun and temprun
|
||||
void onToggleSendIM(); // sendim
|
||||
void onToggleSetDebug(); // setdebug
|
||||
void onToggleSetEnv(); // setenv
|
||||
void onToggleShowInv(bool fQuitting); // showinv
|
||||
|
|
|
|||
Loading…
Reference in New Issue