diff options
Diffstat (limited to 'linden/indra/newview/rlvhelper.h')
-rw-r--r-- | linden/indra/newview/rlvhelper.h | 338 |
1 files changed, 65 insertions, 273 deletions
diff --git a/linden/indra/newview/rlvhelper.h b/linden/indra/newview/rlvhelper.h index 9ceb799..f36989b 100644 --- a/linden/indra/newview/rlvhelper.h +++ b/linden/indra/newview/rlvhelper.h | |||
@@ -7,266 +7,87 @@ | |||
7 | #include "llviewercontrol.h" | 7 | #include "llviewercontrol.h" |
8 | #include "llviewerobjectlist.h" | 8 | #include "llviewerobjectlist.h" |
9 | #include "llwlparamset.h" | 9 | #include "llwlparamset.h" |
10 | 10 | #include "rlvdefines.h" | |
11 | #include "rlvmultistringsearch.h" | ||
12 | |||
13 | // ============================================================================ | ||
14 | // Extensions | ||
15 | // | ||
16 | |||
17 | // Comment out if you don't want the Advanced / RLVa menu (may prevent enabling some extensions or experimental features - see below) | ||
18 | #define RLV_ADVANCED_MENU | ||
19 | // Comment out if you provide your own way to enable/disable RLVa | ||
20 | #define RLV_ADVANCED_TOGGLE_RLVA | ||
21 | |||
22 | // Provides access to "advanced" feature through the RLVa debug menu | ||
23 | #define RLV_EXTENSION_ENABLE_WEAR // "Enable Wear" | ||
24 | #define RLV_EXTENSION_HIDELOCKED // "Hide locked layers", "Hide locked attachments" and "Hide locked inventory" | ||
25 | #define RLV_EXTENSION_FLOATER_RESTRICTIONS // Enables the Advanced / RLVa / Restrictions... floater | ||
26 | |||
27 | // Extensions | ||
28 | #define RLV_EXTENSION_CMD_GETSETDEBUG_EX // Extends the debug variables accessible through @getdebug_xxx/@setdebug_xxx | ||
29 | #define RLV_EXTENSION_CMD_FINDFOLDERS // @findfolders:<option>=<channel> - @findfolder with multiple results | ||
30 | #define RLV_EXTENSION_FLAG_NOSTRIP // Layers and attachments marked as "nostrip" are exempt from @detach/@remoutfit | ||
31 | #define RLV_EXTENSION_STARTLOCATION // Reenables "Start Location" at login if not @tploc=n or @unsit=n restricted at last logoff | ||
32 | #define RLV_EXPERIMENTAL // Enables/disables experimental features en masse | ||
33 | |||
34 | // Experimental features | ||
35 | #ifdef RLV_EXPERIMENTAL | ||
36 | // Stable (will mature to RLV_EXTENSION_XXX in next release if no bugs are found) | ||
37 | #define RLV_EXPERIMENTAL_FARTOUCH_FEEDBACK // Enables "cleaner" UI responses when fartouch blocks something | ||
38 | |||
39 | // Under testing (stable, but requires further testing - safe for public release but may be quirky) | ||
40 | |||
41 | // Under development (don't include in public release) | ||
42 | #if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
43 | #endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
44 | #endif // RLV_EXPERIMENTAL | ||
45 | |||
46 | // ============================================================================ | ||
47 | // Defines | ||
48 | // | ||
49 | |||
50 | // Version of the specifcation we support | ||
51 | const S32 RLV_VERSION_MAJOR = 1; | ||
52 | const S32 RLV_VERSION_MINOR = 20; | ||
53 | const S32 RLV_VERSION_PATCH = 0; | ||
54 | |||
55 | // Implementation version | ||
56 | const S32 RLVa_VERSION_MAJOR = 1; | ||
57 | const S32 RLVa_VERSION_MINOR = 0; | ||
58 | const S32 RLVa_VERSION_PATCH = 2; | ||
59 | const S32 RLVa_VERSION_BUILD = 2; | ||
60 | |||
61 | // The official viewer version we're patching against | ||
62 | #define RLV_MAKE_TARGET(x, y, z) ((x << 16) | (y << 8) | z) | ||
63 | #define RLV_TARGET RLV_MAKE_TARGET(1, 22, 11) | ||
64 | |||
65 | // Defining these makes it easier if we ever need to change our tag | ||
66 | #define RLV_WARNS LL_WARNS("RLV") | ||
67 | #define RLV_INFOS LL_INFOS("RLV") | ||
68 | #define RLV_DEBUGS LL_DEBUGS("RLV") | ||
69 | |||
70 | #if LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
71 | // Turn on extended debugging information | ||
72 | #define RLV_DEBUG | ||
73 | // Make sure we halt execution on errors | ||
74 | #define RLV_ERRS LL_ERRS("RLV") | ||
75 | // Uncomment to enable the Advanced / RLVa / Unit Tests menu (non-public) | ||
76 | //#define RLV_DEBUG_TESTS | ||
77 | #else | ||
78 | // Uncomment if you want extended debugging information on release builds | ||
79 | //#define RLV_DEBUG | ||
80 | // Don't halt execution on errors in release | ||
81 | #define RLV_ERRS LL_WARNS("RLV") | ||
82 | #endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG | ||
83 | |||
84 | #define RLV_ROOT_FOLDER "#RLV" | ||
85 | #define RLV_CMD_PREFIX '@' | ||
86 | #define RLV_PUTINV_PREFIX "#RLV/~" | ||
87 | #define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90° with the rest of SL | ||
88 | |||
89 | #define RLV_FOLDER_FLAG_NOSTRIP "nostrip" | ||
90 | #define RLV_FOLDER_PREFIX_HIDDEN '.' | ||
91 | #define RLV_FOLDER_PREFIX_PUTINV '~' | ||
92 | 11 | ||
93 | // ============================================================================ | 12 | // ============================================================================ |
94 | // Enumeration declarations | 13 | // RlvCommand |
95 | // | 14 | // |
96 | 15 | ||
97 | // NOTE: * any changes to this enumeration should be reflected in initLookupTable() | ||
98 | // * only uncomment the ones we actually use in a switch() to keep the size of the lookup table down | ||
99 | enum ERlvBehaviour { | ||
100 | RLV_BHVR_VERSION = 0, // "version" | ||
101 | RLV_BHVR_DETACH, // "detach" | ||
102 | // RLV_BHVR_SENDCHAT, // "sendchat" | ||
103 | // RLV_BHVR_EMOTE, // "emote" | ||
104 | // RLV_BHVR_CHATSHOUT, // "chatshout" | ||
105 | // RLV_BHVR_CHATNORMAL, // "chatnormal" | ||
106 | // RLV_BHVR_CHATWHISPER, // "chatwhisper" | ||
107 | RLV_BHVR_REDIRCHAT, // "redirchat" | ||
108 | RLV_BHVR_REDIREMOTE, // "rediremote" | ||
109 | RLV_BHVR_SENDIM, // "sendim" | ||
110 | RLV_BHVR_RECVCHAT, // "recvchat" | ||
111 | RLV_BHVR_RECVEMOTE, // "recvemote" | ||
112 | RLV_BHVR_RECVIM, // "recvim" | ||
113 | // RLV_BHVR_TPLM, // "tplm" | ||
114 | RLV_BHVR_TPLOC, // "tploc" | ||
115 | RLV_BHVR_TPLURE, // "tplure" | ||
116 | RLV_BHVR_SITTP, // "sittp" | ||
117 | // RLV_BHVR_CLEAR, // "clear" | ||
118 | RLV_BHVR_EDIT, // "edit" | ||
119 | RLV_BHVR_REZ, // "rez" | ||
120 | RLV_BHVR_ADDOUTFIT, // "addoutfit" | ||
121 | RLV_BHVR_REMOUTFIT, // "remoutfit" | ||
122 | RLV_BHVR_GETOUTFIT, // "getoutfit" | ||
123 | RLV_BHVR_GETATTACH, // "getattach" | ||
124 | RLV_BHVR_SHOWINV, // "showinv" | ||
125 | // RLV_BHVR_VIEWNOTE, // "viewnote" | ||
126 | RLV_BHVR_UNSIT, // "unsit" | ||
127 | RLV_BHVR_SIT, // "sit" | ||
128 | // RLV_BHVR_SENDCHANNEL, // "sendchannel" | ||
129 | RLV_BHVR_GETSTATUS, // "getstatus" | ||
130 | RLV_BHVR_GETSTATUSALL, // "getstatusall" | ||
131 | RLV_BHVR_GETINV, // "getinv" | ||
132 | RLV_BHVR_GETINVWORN, // "getinvworn" | ||
133 | RLV_BHVR_FINDFOLDER, // "findfolder" | ||
134 | RLV_BHVR_FINDFOLDERS, // "findfolders" | ||
135 | RLV_BHVR_ATTACH, // "attach" | ||
136 | RLV_BHVR_ATTACHALL, // "attachall" | ||
137 | RLV_BHVR_DETACHALL, // "detachall" | ||
138 | RLV_BHVR_GETPATH, // "getpath" | ||
139 | RLV_BHVR_ATTACHTHIS, // "attachthis" | ||
140 | RLV_BHVR_ATTACHALLTHIS, // "attachallthis" | ||
141 | RLV_BHVR_DETACHTHIS, // "detachthis" | ||
142 | RLV_BHVR_DETACHALLTHIS, // "detachallthis" | ||
143 | RLV_BHVR_FARTOUCH, // "fartouch" | ||
144 | RLV_BHVR_SHOWWORLDMAP, // "showworldmap" | ||
145 | RLV_BHVR_SHOWMINIMAP, // "showminimap" | ||
146 | RLV_BHVR_SHOWLOC, // "showloc" | ||
147 | RLV_BHVR_TPTO, // "tpto" | ||
148 | RLV_BHVR_ACCEPTTP, // "accepttp" | ||
149 | RLV_BHVR_SHOWNAMES, // "shownames" | ||
150 | RLV_BHVR_FLY, // "fly" | ||
151 | RLV_BHVR_GETSITID, // "getsitid" | ||
152 | RLV_BHVR_SETDEBUG, // "setdebug" | ||
153 | RLV_BHVR_SETENV, // "setenv" | ||
154 | RLV_BHVR_DETACHME, // "detachme" | ||
155 | RLV_BHVR_SHOWHOVERTEXTALL, // "showhovertextall" | ||
156 | RLV_BHVR_SHOWHOVERTEXTWORLD, // "showhovertextworld" | ||
157 | RLV_BHVR_SHOWHOVERTEXTHUD, // "showhovertexthud" | ||
158 | RLV_BHVR_SHOWHOVERTEXT, // "showhovertext" | ||
159 | RLV_BHVR_NOTIFY, // "notify" | ||
160 | |||
161 | RLV_BHVR_COUNT, | ||
162 | RLV_BHVR_UNKNOWN | ||
163 | }; | ||
164 | |||
165 | enum ERlvParamType { | ||
166 | RLV_TYPE_UNKNOWN, | ||
167 | RLV_TYPE_ADD, // <param> == "n"|"add" | ||
168 | RLV_TYPE_REMOVE, // <param> == "y"|"rem" | ||
169 | RLV_TYPE_FORCE, // <param> == "force" | ||
170 | RLV_TYPE_REPLY // <param> == <number> | ||
171 | }; | ||
172 | |||
173 | enum ERlvCmdRet { | ||
174 | RLV_RET_NOERROR, // Command executed succesfully | ||
175 | RLV_RET_RETAINED, // Command was retained | ||
176 | RLV_RET_FAILED, // Command failed (general failure) | ||
177 | RLV_RET_FAILED_SYNTAX, // Command failed (syntax error) | ||
178 | RLV_RET_FAILED_UNSET, // Command failed (unset restriction) | ||
179 | RLV_RET_FAILED_DUPLICATE, // Command failed (duplicate) | ||
180 | RLV_RET_FAILED_OPTION, // Command failed (invalid option) | ||
181 | RLV_RET_UNKNOWN // Command unkown | ||
182 | }; | ||
183 | |||
184 | // ============================================================================ | ||
185 | /* | ||
186 | * RlvCommand | ||
187 | * ========== | ||
188 | * Encapsulates an "RLV command" (duh :p) | ||
189 | * | ||
190 | */ | ||
191 | |||
192 | class RlvCommand | 16 | class RlvCommand |
193 | { | 17 | { |
194 | public: | 18 | public: |
195 | /* | ||
196 | * Constructors | ||
197 | */ | ||
198 | explicit RlvCommand(const std::string& strCommand); | 19 | explicit RlvCommand(const std::string& strCommand); |
199 | RlvCommand(const RlvCommand& rlvCmd); | ||
200 | 20 | ||
201 | /* | 21 | /* |
202 | * Accessors | 22 | * Member functions |
203 | */ | 23 | */ |
204 | BOOL isValid() const { return m_fValid; } | 24 | public: |
25 | std::string asString() const; | ||
26 | const std::string& getBehaviour() const { return m_strBehaviour; } | ||
27 | ERlvBehaviour getBehaviourType() const { return m_eBehaviour; } | ||
28 | const std::string& getOption() const { return m_strOption; } | ||
29 | const std::string& getParam() const { return m_strParam; } | ||
30 | ERlvParamType getParamType() const { return m_eParamType; } | ||
31 | bool isValid() const { return m_fValid; } | ||
205 | 32 | ||
206 | const std::string& getBehaviour() const { return m_strBehaviour; } | 33 | static ERlvBehaviour getBehaviourFromString(const std::string& strBhvr); |
207 | ERlvBehaviour getBehaviourType() const { return m_eBehaviour; } | 34 | static const std::string& getStringFromBehaviour(ERlvBehaviour eBhvr); |
208 | const std::string& getOption() const { return m_strOption; } | ||
209 | const std::string& getParam() const { return m_strParam; } | ||
210 | ERlvParamType getParamType() const { return m_eParamType; } | ||
211 | 35 | ||
212 | std::string asString() const; | 36 | static void initLookupTable(); |
37 | protected: | ||
38 | static bool parseCommand(const std::string& strCommand, std::string& strBehaviour, std::string& strOption, std::string& strParam); | ||
213 | 39 | ||
214 | /* | 40 | /* |
215 | * Operators | 41 | * Operators |
216 | */ | 42 | */ |
43 | public: | ||
217 | bool operator ==(const RlvCommand&) const; | 44 | bool operator ==(const RlvCommand&) const; |
218 | 45 | ||
219 | // Parses an RLV command into its "tokens" | ||
220 | static BOOL parseCommand(/*[in]*/ const std::string& strCommand, | ||
221 | /*[out]*/ std::string& strBehaviour, /*[out]*/ std::string& strOption, /*[out]*/ std::string& strParam); | ||
222 | static void initLookupTable(); | ||
223 | |||
224 | /* | 46 | /* |
225 | * Member variables | 47 | * Member variables |
226 | */ | 48 | */ |
227 | protected: | 49 | protected: |
228 | BOOL m_fValid; | 50 | bool m_fValid; |
229 | std::string m_strBehaviour; | 51 | std::string m_strBehaviour; |
230 | ERlvBehaviour m_eBehaviour; | 52 | ERlvBehaviour m_eBehaviour; |
231 | std::string m_strOption; | 53 | std::string m_strOption; |
232 | std::string m_strParam; | 54 | std::string m_strParam; |
233 | ERlvParamType m_eParamType; | 55 | ERlvParamType m_eParamType; |
234 | 56 | ||
235 | static RlvMultiStringSearch m_BhvrLookup; | 57 | typedef std::map<std::string, ERlvBehaviour> RlvBhvrTable; |
58 | static RlvBhvrTable m_BhvrMap; | ||
59 | |||
236 | friend class RlvHandler; | 60 | friend class RlvHandler; |
237 | }; | 61 | }; |
62 | typedef std::list<RlvCommand> rlv_command_list_t; | ||
238 | 63 | ||
239 | // ============================================================================ | 64 | // ============================================================================ |
240 | /* | 65 | // RlvObject |
241 | * RlvObject | 66 | // |
242 | * ========= | ||
243 | * Encapsulates an "RLV Object" (= an object that has issued an RLV command) | ||
244 | * | ||
245 | */ | ||
246 | |||
247 | typedef std::list<RlvCommand> rlv_command_list_t; | ||
248 | 67 | ||
249 | class RlvObject | 68 | class RlvObject |
250 | { | 69 | { |
251 | public: | 70 | public: |
252 | RlvObject(const LLUUID& uuid) : m_UUID(uuid), m_nLookupMisses(0) | 71 | RlvObject(const LLUUID& idObj); |
253 | { | ||
254 | LLViewerObject* pObj = gObjectList.findObject(uuid); | ||
255 | m_fLookup = (NULL != pObj); | ||
256 | m_idxAttachPt = (pObj) ? ATTACHMENT_ID_FROM_STATE(pObj->getState()) : 0; | ||
257 | } | ||
258 | |||
259 | BOOL addCommand(const RlvCommand& rlvCmd); | ||
260 | BOOL removeCommand(const RlvCommand& rlvCmd); | ||
261 | 72 | ||
262 | BOOL hasBehaviour(ERlvBehaviour eBehaviour) const; | 73 | /* |
263 | BOOL hasBehaviour(const std::string& strBehaviour) const; | 74 | * Member functions |
264 | BOOL hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption) const; | 75 | */ |
265 | BOOL hasBehaviour(const std::string& strBehaviour, const std::string& strOption) const; | 76 | public: |
77 | bool addCommand(const RlvCommand& rlvCmd); | ||
78 | bool removeCommand(const RlvCommand& rlvCmd); | ||
266 | 79 | ||
267 | std::string getStatusString(const std::string& strMatch) const; | 80 | std::string getStatusString(const std::string& strMatch) const; |
81 | bool hasBehaviour(ERlvBehaviour eBehaviour) const; | ||
82 | bool hasBehaviour(const std::string& strBehaviour) const; | ||
83 | bool hasBehaviour(ERlvBehaviour eBehaviour, const std::string& strOption) const; | ||
84 | bool hasBehaviour(const std::string& strBehaviour, const std::string& strOption) const; | ||
268 | 85 | ||
269 | const rlv_command_list_t* getCommandList() const { return &m_Commands; } | 86 | const rlv_command_list_t* getCommandList() const { return &m_Commands; } |
87 | |||
88 | /* | ||
89 | * Member variables | ||
90 | */ | ||
270 | protected: | 91 | protected: |
271 | LLUUID m_UUID; // The object's UUID | 92 | LLUUID m_UUID; // The object's UUID |
272 | S32 m_idxAttachPt; // The object's attachment point (or 0 if it's not an attachment) | 93 | S32 m_idxAttachPt; // The object's attachment point (or 0 if it's not an attachment) |
@@ -278,12 +99,8 @@ protected: | |||
278 | }; | 99 | }; |
279 | 100 | ||
280 | // ============================================================================ | 101 | // ============================================================================ |
281 | /* | 102 | // RlvCriteriaCategoryCollector - Criteria based folder matching filter used by @findfolder and @findfolders |
282 | * RlvCriteriaCategoryCollector | 103 | // |
283 | * ============================ | ||
284 | * Criteria based folder matching filter used by @findfolder and @findfolders | ||
285 | * | ||
286 | */ | ||
287 | 104 | ||
288 | class RlvCriteriaCategoryCollector : public LLInventoryCollectFunctor | 105 | class RlvCriteriaCategoryCollector : public LLInventoryCollectFunctor |
289 | { | 106 | { |
@@ -325,12 +142,8 @@ protected: | |||
325 | }; | 142 | }; |
326 | 143 | ||
327 | // ============================================================================ | 144 | // ============================================================================ |
328 | /* | 145 | // RlvWearableItemCollector - Inventory item filter used by attach/detach/attachall/detachall/getinvworn |
329 | * RlvWearableItemCollector | 146 | // |
330 | * ======================== | ||
331 | * Inventory item filter used by attach/detach/attachall/detachall/getinvworn | ||
332 | * | ||
333 | */ | ||
334 | 147 | ||
335 | class RlvWearableItemCollector : public LLInventoryCollectFunctor | 148 | class RlvWearableItemCollector : public LLInventoryCollectFunctor |
336 | { | 149 | { |
@@ -397,19 +210,6 @@ private: | |||
397 | // RlvSettings | 210 | // RlvSettings |
398 | // | 211 | // |
399 | 212 | ||
400 | #define RLV_SETTING_MAIN "RestrainedLife" | ||
401 | #define RLV_SETTING_DEBUG "RestrainedLifeDebug" | ||
402 | #define RLV_SETTING_NOSETENV "RestrainedLifeNoSetEnv" | ||
403 | #define RLV_SETTING_FORBIDGIVETORLV "RestrainedLifeForbidGiveToRLV" | ||
404 | |||
405 | #define RLV_SETTING_ENABLEWEAR "RLVaEnableWear" | ||
406 | #define RLV_SETTING_ENABLELEGACYNAMING "RLVaEnableLegacyNaming" | ||
407 | #define RLV_SETTING_HIDELOCKEDLAYER "RLVaHideLockedLayers" | ||
408 | #define RLV_SETTING_HIDELOCKEDATTACH "RLVaHideLockedAttachments" | ||
409 | #define RLV_SETTING_HIDELOCKEDINVENTORY "RLVaHideLockedInventory" | ||
410 | #define RLV_SETTING_LOGINLASTLOCATION "RLVaLoginLastLocation" | ||
411 | #define RLV_SETTING_SHOWNAMETAGS "RLVaShowNameTags" | ||
412 | |||
413 | inline BOOL rlvGetSettingBOOL(const std::string& strSetting, BOOL fDefault) | 213 | inline BOOL rlvGetSettingBOOL(const std::string& strSetting, BOOL fDefault) |
414 | { | 214 | { |
415 | return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getBOOL(strSetting) : fDefault; | 215 | return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getBOOL(strSetting) : fDefault; |
@@ -429,6 +229,7 @@ public: | |||
429 | static BOOL getHideLockedLayers() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDLAYER, FALSE); } | 229 | static BOOL getHideLockedLayers() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDLAYER, FALSE); } |
430 | static BOOL getHideLockedAttach() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDATTACH, FALSE); } | 230 | static BOOL getHideLockedAttach() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDATTACH, FALSE); } |
431 | static BOOL getHideLockedInventory() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDINVENTORY, FALSE); } | 231 | static BOOL getHideLockedInventory() { return rlvGetSettingBOOL(RLV_SETTING_HIDELOCKEDINVENTORY, FALSE); } |
232 | static BOOL getShowNameTags() { return fShowNameTags; } | ||
432 | 233 | ||
433 | #ifdef RLV_EXTENSION_STARTLOCATION | 234 | #ifdef RLV_EXTENSION_STARTLOCATION |
434 | static BOOL getLoginLastLocation() { return rlvGetPerUserSettingsBOOL(RLV_SETTING_LOGINLASTLOCATION, TRUE); } | 235 | static BOOL getLoginLastLocation() { return rlvGetPerUserSettingsBOOL(RLV_SETTING_LOGINLASTLOCATION, TRUE); } |
@@ -442,24 +243,6 @@ public: | |||
442 | // State keeping classes/structure | 243 | // State keeping classes/structure |
443 | // | 244 | // |
444 | 245 | ||
445 | struct RlvRedirInfo | ||
446 | { | ||
447 | S16 nRedirChat; | ||
448 | S16 nRedirEmote; | ||
449 | |||
450 | RlvRedirInfo() : nRedirChat(0), nRedirEmote(0) {} | ||
451 | bool isActive() { return (nRedirChat + nRedirEmote) != 0; } | ||
452 | }; | ||
453 | |||
454 | struct RlvReattachInfo | ||
455 | { | ||
456 | LLUUID idItem; | ||
457 | bool fInInventory; | ||
458 | bool fAssetSaved; | ||
459 | |||
460 | RlvReattachInfo() : idItem(), fInInventory(false), fAssetSaved(false) {} | ||
461 | }; | ||
462 | |||
463 | // ============================================================================ | 246 | // ============================================================================ |
464 | // Various helper classes/timers/functors | 247 | // Various helper classes/timers/functors |
465 | // | 248 | // |
@@ -509,7 +292,7 @@ BOOL rlvAttachToEnabler(void* pParam); | |||
509 | bool rlvCanDeleteOrReturn(); | 292 | bool rlvCanDeleteOrReturn(); |
510 | S32 rlvGetDirectDescendentsCount(const LLInventoryCategory* pFolder, LLAssetType::EType type); | 293 | S32 rlvGetDirectDescendentsCount(const LLInventoryCategory* pFolder, LLAssetType::EType type); |
511 | bool rlvIsEmote(const std::string& strUTF8Text); | 294 | bool rlvIsEmote(const std::string& strUTF8Text); |
512 | bool rlvIsValidChannel(S32 nChannel); | 295 | bool rlvIsValidReplyChannel(S32 nChannel); |
513 | bool rlvIsWearingItem(const LLInventoryItem* pItem); | 296 | bool rlvIsWearingItem(const LLInventoryItem* pItem); |
514 | 297 | ||
515 | void rlvForceDetach(LLViewerJointAttachment* pAttachPt); | 298 | void rlvForceDetach(LLViewerJointAttachment* pAttachPt); |
@@ -517,24 +300,33 @@ void rlvSendBusyMessage(const LLUUID& idTo, const std::string& strMsg, const LLU | |||
517 | bool rlvSendChatReply(const std::string& strChannel, const std::string& strReply); | 300 | bool rlvSendChatReply(const std::string& strChannel, const std::string& strReply); |
518 | bool rlvSendChatReply(S32 nChannel, const std::string& strReply); | 301 | bool rlvSendChatReply(S32 nChannel, const std::string& strReply); |
519 | 302 | ||
520 | void rlvStringReplace(std::string& strText, std::string strFrom, const std::string& strTo); | ||
521 | std::string rlvGetFirstParenthesisedText(const std::string& strText, std::string::size_type* pidxMatch = NULL); | 303 | std::string rlvGetFirstParenthesisedText(const std::string& strText, std::string::size_type* pidxMatch = NULL); |
522 | std::string rlvGetLastParenthesisedText(const std::string& strText, std::string::size_type* pidxStart = NULL); | 304 | std::string rlvGetLastParenthesisedText(const std::string& strText, std::string::size_type* pidxStart = NULL); |
523 | 305 | void rlvStringReplace(std::string& strText, std::string strFrom, const std::string& strTo); | |
524 | // ============================================================================ | ||
525 | // Debug helper functions | ||
526 | // | ||
527 | 306 | ||
528 | #ifdef RLV_ADVANCED_TOGGLE_RLVA | 307 | #ifdef RLV_ADVANCED_TOGGLE_RLVA |
529 | // "Advanced / RLVa / Enable RLV" menu option | 308 | // "Advanced / RLVa / Enable RLV" menu option |
530 | void rlvDbgToggleEnabled(void*); | 309 | void rlvToggleEnabled(void*); |
531 | BOOL rlvDbgGetEnabled(void*); | 310 | BOOL rlvGetEnabled(void*); |
532 | #endif // RLV_ADVANCED_TOGGLE_RLVA | 311 | #endif // RLV_ADVANCED_TOGGLE_RLVA |
533 | 312 | ||
534 | // ============================================================================ | 313 | // ============================================================================ |
314 | // Debug helper functions | ||
315 | // | ||
316 | |||
317 | // ============================================================================ | ||
535 | // Inlined class member functions | 318 | // Inlined class member functions |
536 | // | 319 | // |
537 | 320 | ||
321 | // Checked: 2009-09-19 (RLVa-1.0.3d) | ||
322 | inline std::string RlvCommand::asString() const | ||
323 | { | ||
324 | // NOTE: @clear=<param> should be represented as clear:<param> | ||
325 | return (m_eParamType != RLV_TYPE_CLEAR) | ||
326 | ? (!m_strOption.empty()) ? (std::string(m_strBehaviour)).append(":").append(m_strOption) : (std::string(m_strBehaviour)) | ||
327 | : (!m_strParam.empty()) ? (std::string(m_strBehaviour)).append(":").append(m_strParam) : (std::string(m_strBehaviour)); | ||
328 | } | ||
329 | |||
538 | inline bool RlvCommand::operator ==(const RlvCommand& rhs) const | 330 | inline bool RlvCommand::operator ==(const RlvCommand& rhs) const |
539 | { | 331 | { |
540 | // The specification notes that "@detach=n" is semantically identical to "@detach=add" (same for "y" and "rem" | 332 | // The specification notes that "@detach=n" is semantically identical to "@detach=add" (same for "y" and "rem" |
@@ -562,7 +354,7 @@ inline bool rlvIsEmote(const std::string& strUTF8Text) | |||
562 | } | 354 | } |
563 | 355 | ||
564 | // Checked: 2009-09-05 (RLVa-1.0.2a) | Added: RLVa-1.0.2a | 356 | // Checked: 2009-09-05 (RLVa-1.0.2a) | Added: RLVa-1.0.2a |
565 | inline bool rlvIsValidChannel(S32 nChannel) | 357 | inline bool rlvIsValidReplyChannel(S32 nChannel) |
566 | { | 358 | { |
567 | return (nChannel > 0) && (CHAT_CHANNEL_DEBUG != nChannel); | 359 | return (nChannel > 0) && (CHAT_CHANNEL_DEBUG != nChannel); |
568 | } | 360 | } |