summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rwxr-xr-xindra/llui/llkeywords.cpp11
-rwxr-xr-xindra/newview/app_settings/keywords_lsl_default.xml611
-rwxr-xr-xindra/newview/llagent.cpp21
-rwxr-xr-xindra/newview/llassetuploadresponders.cpp5
-rw-r--r--indra/newview/llexperienceassociationresponder.cpp18
-rwxr-xr-xindra/newview/llfloatertools.cpp10
-rwxr-xr-xindra/newview/llfloatertools.h1
-rwxr-xr-xindra/newview/llmaniprotate.cpp2
-rwxr-xr-xindra/newview/llpanelface.cpp70
-rwxr-xr-xindra/newview/llpanelobjectinventory.cpp5
-rwxr-xr-xindra/newview/llpreviewnotecard.cpp16
-rwxr-xr-xindra/newview/llselectmgr.cpp10
-rw-r--r--indra/newview/skins/default/xui/en/panel_tools_texture.xml55
13 files changed, 758 insertions, 77 deletions
diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp
index 6750ee482a..fc4a007d9e 100755
--- a/indra/llui/llkeywords.cpp
+++ b/indra/llui/llkeywords.cpp
@@ -296,7 +296,7 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
}
color_group = getColorGroup(group);
- LL_INFOS("SyntaxLSL") << "Group: '" << group << "', using color: '" << color_group << "'" << LL_ENDL;
+ LL_DEBUGS("SyntaxLSL") << "Group: '" << group << "', using color: '" << color_group << "'" << LL_ENDL;
if (tokens.isMap())
{
@@ -331,7 +331,14 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
switch (token_type)
{
case LLKeywordToken::TT_CONSTANT:
- color_group = getColorGroup(group + "-" + getAttribute("type"));
+ if (getAttribute("type").length() > 0)
+ {
+ color_group = getColorGroup(group + "-" + getAttribute("type"));
+ }
+ else
+ {
+ color_group = getColorGroup(group);
+ }
tooltip = "Type: " + getAttribute("type") + ", Value: " + getAttribute("value");
break;
case LLKeywordToken::TT_EVENT:
diff --git a/indra/newview/app_settings/keywords_lsl_default.xml b/indra/newview/app_settings/keywords_lsl_default.xml
index cea7a58949..ddd287faf4 100755
--- a/indra/newview/app_settings/keywords_lsl_default.xml
+++ b/indra/newview/app_settings/keywords_lsl_default.xml
@@ -2314,6 +2314,15 @@
<key>tooltip</key>
<string>Gets the attachment point to which the object is attached.\nReturns 0 if the object is not an attachment (or is an avatar, etc).</string>
</map>
+ <key>OBJECT_BODY_SHAPE_TYPE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>26</integer>
+ <key>tooltip</key>
+ <string>This is a flag used with llGetObjectDetails to get the body type of the avatar, based on shape data.\nIf no data is available, -1.0 is returned.\nThis is normally between 0 and 1.0, with 0.5 and larger considered 'male'</string>
+ </map>
<key>OBJECT_CHARACTER_TIME</key>
<map>
<key>type</key>
@@ -2323,6 +2332,15 @@
<key>tooltip</key>
<string>Units in seconds</string>
</map>
+ <key>OBJECT_CLICK_ACTION</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>28</integer>
+ <key>tooltip</key>
+ <string>This is a flag used with llGetObjectDetails to get the click action.\nThe default is 0</string>
+ </map>
<key>OBJECT_CREATOR</key>
<map>
<key>type</key>
@@ -2350,6 +2368,24 @@
<key>tooltip</key>
<string>Gets the prims's group key. If id is an avatar, a NULL_KEY is returned.</string>
</map>
+ <key>OBJECT_HOVER_HEIGHT</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>25</integer>
+ <key>tooltip</key>
+ <string>This is a flag used with llGetObjectDetails to get hover height of the avatar\nIf no data is available, 0.0 is returned.</string>
+ </map>
+ <key>OBJECT_LAST_OWNER_ID</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>27</integer>
+ <key>tooltip</key>
+ <string>Gets the object's last owner ID.</string>
+ </map>
<key>OBJECT_NAME</key>
<map>
<key>type</key>
@@ -3277,6 +3313,51 @@
<key>tooltip</key>
<string>Play animation going forwards, then backwards.</string>
</map>
+ <key>PRIM_ALPHA_MODE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>38</integer>
+ <key>tooltip</key>
+ <string>Prim parameter for materials using integer face, integer alpha_mode, integer alpha_cutoff.\nDefines how the alpha channel of the diffuse texture should be rendered.\nValid options for alpha_mode are PRIM_ALPHA_MODE_BLEND, _NONE, _MASK, and _EMISSIVE.\nalpha_cutoff is used only for PRIM_ALPHA_MODE_MASK.</string>
+ </map>
+ <key>PRIM_ALPHA_MODE_NONE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>0</integer>
+ <key>tooltip</key>
+ <string>Prim parameter setting for PRIM_ALPHA_MODE.\nIndicates that the diffuse texture's alpha channel should be ignored.</string>
+ </map>
+ <key>PRIM_ALPHA_MODE_BLEND</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>1</integer>
+ <key>tooltip</key>
+ <string>Prim parameter setting for PRIM_ALPHA_MODE.\nIndicates that the diffuse texture's alpha channel should be rendered as alpha-blended.</string>
+ </map>
+ <key>PRIM_ALPHA_MODE_MASK</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>2</integer>
+ <key>tooltip</key>
+ <string>Prim parameter setting for PRIM_ALPHA_MODE.\nIndicates that the diffuse texture's alpha channel should be rendered as fully opaque for alpha values above alpha_cutoff and fully transparent otherwise.</string>
+ </map>
+ <key>PRIM_ALPHA_MODE_EMISSIVE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>3</integer>
+ <key>tooltip</key>
+ <string>Prim parameter setting for PRIM_ALPHA_MODE.\nIndicates that the diffuse texture's alpha channel should be rendered as an emissivity mask.</string>
+ </map>
<key>PRIM_BUMP_BARK</key>
<map>
<key>type</key>
@@ -3882,6 +3963,15 @@
<key>tooltip</key>
<string/>
</map>
+ <key>PRIM_NORMAL</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>37</integer>
+ <key>tooltip</key>
+ <string>Prim parameter for materials using integer face, string texture, vector repeats, vector offsets, float rotation_in_radians</string>
+ </map>
<key>PRIM_OMEGA</key>
<map>
<key>type</key>
@@ -4108,6 +4198,15 @@
<key>tooltip</key>
<string/>
</map>
+ <key>PRIM_SPECULAR</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>36</integer>
+ <key>tooltip</key>
+ <string>Prim parameter for materials using integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossy, integer environment</string>
+ </map>
<key>PRIM_TEMP_ON_REZ</key>
<map>
<key>type</key>
@@ -5020,6 +5119,15 @@
<key>tooltip</key>
<string/>
</map>
+ <key>REGION_FLAG_BLOCK_FLYOVER</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <string>0x8000000</string>
+ <key>tooltip</key>
+ <string/>
+ </map>
<key>REGION_FLAG_BLOCK_TERRAFORM</key>
<map>
<key>type</key>
@@ -5979,6 +6087,177 @@
<key>tooltip</key>
<string/>
</map>
+ <key>XP_ERROR_EXPERIENCES_DISABLED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>2</integer>
+ <key>tooltip</key>
+ <string>The region currently has experiences disabled.</string>
+ </map>
+ <key>XP_ERROR_EXPERIENCE_DISABLED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>8</integer>
+ <key>tooltip</key>
+ <string>The experience owner has temporarily disabled the experience.</string>
+ </map>
+ <key>XP_ERROR_EXPERIENCE_SUSPENDED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>9</integer>
+ <key>tooltip</key>
+ <string>The experience has been suspended by Linden Customer Support.</string>
+ </map>
+ <key>XP_ERROR_INVALID_EXPERIENCE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>7</integer>
+ <key>tooltip</key>
+ <string>The script is associated with an experience that no longer exists.</string>
+ </map>
+ <key>XP_ERROR_INVALID_PARAMETERS</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>3</integer>
+ <key>tooltip</key>
+ <string>One of the string arguments was too big to fit in the key-value store.</string>
+ </map>
+ <key>XP_ERROR_KEY_NOT_FOUND</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>14</integer>
+ <key>tooltip</key>
+ <string>The requested key does not exist.</string>
+ </map>
+ <key>XP_ERROR_MATURITY_EXCEEDED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>16</integer>
+ <key>tooltip</key>
+ <string>The content rating of the experience exceeds that of the region.</string>
+ </map>
+ <key>XP_ERROR_NONE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>0</integer>
+ <key>tooltip</key>
+ <string>No error was detected.</string>
+ </map>
+ <key>XP_ERROR_NOT_FOUND</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>6</integer>
+ <key>tooltip</key>
+ <string>The sim was unable to verify the validity of the experience. Retrying after a short wait is advised.</string>
+ </map>
+ <key>XP_ERROR_NOT_PERMITTED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>4</integer>
+ <key>tooltip</key>
+ <string>This experience is not allowed to run by the requested agent.</string>
+ </map>
+ <key>XP_ERROR_NOT_PERMITTED_LAND</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>17</integer>
+ <key>tooltip</key>
+ <string>This experience is not allowed to run on the current region.</string>
+ </map>
+ <key>XP_ERROR_NO_EXPERIENCE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>5</integer>
+ <key>tooltip</key>
+ <string>This script is not associated with an experience.</string>
+ </map>
+ <key>XP_ERROR_QUOTA_EXCEEDED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>11</integer>
+ <key>tooltip</key>
+ <string>An attempted write data to the key-value store failed due to the data quota being met.</string>
+ </map>
+ <key>LSL_XP_ERROR_REQUEST_PERM_TIMEOUT</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>18</integer>
+ <key>tooltip</key>
+ <string>The request for experience permissions was ignored and timed out.</string>
+ </map>
+ <key>XP_ERROR_RETRY_UPDATE</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>15</integer>
+ <key>tooltip</key>
+ <string>A checked update failed due to an out of date request.</string>
+ </map>
+ <key>XP_ERROR_STORAGE_EXCEPTION</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>13</integer>
+ <key>tooltip</key>
+ <string>Unable to communicate with the key-value store.</string>
+ </map>
+ <key>XP_ERROR_STORE_DISABLED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>12</integer>
+ <key>tooltip</key>
+ <string>The key-value store is currently disabled on this region.</string>
+ </map>
+ <key>XP_ERROR_THROTTLED</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>1</integer>
+ <key>tooltip</key>
+ <string>The call failed due to too many recent calls.</string>
+ </map>
+ <key>XP_ERROR_UNKNOWN_ERROR</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>value</key>
+ <integer>10</integer>
+ <key>tooltip</key>
+ <string>Other unknown error.</string>
+ </map>
<key>ZERO_ROTATION</key>
<map>
<key>type</key>
@@ -6280,6 +6559,34 @@
<string>This event is triggered when an email sent to this script arrives.
The number remaining tells how many more emails are known to be still pending.</string>
</map>
+ <key>experience_permissions</key>
+ <map>
+ <key>arguments</key>
+ <map>
+ <key>agent_id</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string>ID of the agent approving permission for the Experience.</string>
+ </map>
+ </map>
+ </map>
+ <key>experience_permissions_denied</key>
+ <map>
+ <key>arguments</key>
+ <map>
+ <key>agent_id</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string>ID of the agent denying permission for the Experience.</string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>One of the XP_ERROR_... constants describing the reason why the Experience permissions were denied for the agent.</string>
+ </map>
<key>http_request</key>
<map>
<key>arguments</key>
@@ -6965,6 +7272,29 @@
<key>tooltip</key>
<string>Adjusts the volume (0.0 - 1.0) of the currently playing attached sound.\nThis function has no effect on sounds started with llTriggerSound.</string>
</map>
+ <key>llAgentInExperience</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>integer</string>
+ <key>arguments</key>
+ <map>
+ <key>AgentID</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Returns TRUE if the agent is in the Experience and the Experience can run in the current location.
+ </string>
+ </map>
<key>llAllowInventoryDrop</key>
<map>
<key>energy</key>
@@ -7696,6 +8026,36 @@
<key>tooltip</key>
<string>Convert link-set to AI/Physics character.\nCreates a path-finding entity, known as a "character", from the object containing the script. Required to activate use of path-finding functions.\nOptions is a list of key/value pairs.</string>
</map>
+ <key>llCreateKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <map>
+ <key>Key</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ <key>Value</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction to create a key-value pair. Will fail with XP_ERROR_STORAGE_EXCEPTION if the key already exists. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is a two element commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will be the value passed to the function.
+ </string>
+ </map>
<key>llCreateLink</key>
<map>
<key>energy</key>
@@ -7751,6 +8111,21 @@
<key>tooltip</key>
<string>Create a list from a string of comma separated values specified in Text.</string>
</map>
+ <key>llDataSizeKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <undef/>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction the request the used and total amount of data allocated for the Experience. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will be the the amount in use and the third item will be the total available.
+ </string>
+ </map>
<key>llDeleteCharacter</key>
<map>
<key>energy</key>
@@ -7764,6 +8139,29 @@
<key>tooltip</key>
<string>Convert link-set from AI/Physics character to Physics object.\nConvert the current link-set back to a standard object, removing all path-finding properties.</string>
</map>
+ <key>llDeleteKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <map>
+ <key>Key</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction to delete a key-value pair. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is a two element commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will be the value associated with the key.
+ </string>
+ </map>
<key>llDeleteSubList</key>
<map>
<key>energy</key>
@@ -8915,7 +9313,30 @@
<key>arguments</key>
<undef/>
<key>tooltip</key>
- <string>Returns the object's attachment point, or 0 if not attached.\nReturns the object attachment point, or 0 if not attached.</string>
+ <string>Returns the object's attachment point, or 0 if not attached.</string>
+ </map>
+ <key>llGetAttachedList</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>list</string>
+ <key>arguments</key>
+ <array>
+ <map>
+ <key>ID</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string>Avatar to get attachments</string>
+ </map>
+ </map>
+ </array>
+ <key>tooltip</key>
+ <string>Returns a list of keys of all visible (not HUD) attachments on the avatar identified by the ID argument</string>
</map>
<key>llGetBoundingBox</key>
<map>
@@ -9119,6 +9540,52 @@
<key>tooltip</key>
<string>Returns a string with the requested data about the region.</string>
</map>
+ <key>llGetExperienceDetails</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>list</string>
+ <key>arguments</key>
+ <map>
+ <key>ExperienceID</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string>May be NULL_KEY to retrieve the details for the script's Experience</string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Returns a list with the following Experience properties: [Experience Name, Owner ID, Group ID, Experience ID, State, State Message]. State is an integer corresponding to one of the constants XP_ERROR_... and State Message is the string returned by llGetExperienceErrorMessage for that integer.
+ </string>
+ </map>
+ <key>llGetExperienceErrorMessage</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>string</string>
+ <key>arguments</key>
+ <map>
+ <key>Error</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>tooltip</key>
+ <string>An Experience error code to translate.</string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Returns a string describing the error code passed or the string corresponding with XP_ERROR_UNKNOWN_ERROR if the value is not a valid Experience error code.
+ </string>
+ </map>
<key>llGetForce</key>
<map>
<key>energy</key>
@@ -11446,6 +11913,51 @@
<key>tooltip</key>
<string>Returns the name of the prim or avatar specified by ID. The ID must be a valid rezzed prim or avatar key in the current simulator, otherwise an empty string is returned.\nFor avatars, the returned name is the legacy name</string>
</map>
+ <key>llKeyCountKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <undef/>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction the request the number of keys in the data store. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will the the number of keys in the system.
+ </string>
+ </map>
+ <key>llKeysKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <map>
+ <key>First</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string>Index of the first key to return.</string>
+ </map>
+ <key>Count</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string>The number of keys to return.</string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction the request a number of keys from the data store. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. The error XP_ERROR_KEY_NOT_FOUND is returned if First is greater than or equal to the number of keys in the data store. In the success case the subsequent items will be the keys requested. The number of keys returned may be less than requested if the return value is too large or if there is not enough keys remaining. The order keys are returned is not guaranteed but is stable between subsequent calls as long as no keys are added or removed. Because the keys are returned in a comma-delimited list it is not recommended to use commas in key names if this function is used.
+ </string>
+ </map>
<key>llLinkParticleSystem</key>
<map>
<key>energy</key>
@@ -13577,6 +14089,29 @@
<key>tooltip</key>
<string>Applies Impulse and AngularImpulse to ObjectID.\nApplies the supplied impulse and angular impulse to the object specified.</string>
</map>
+ <key>llReadKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <map>
+ <key>Key</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction to retrieve the value associated with the key given. Will fail with XP_ERROR_KEY_NOT_FOUND if the key does not exist. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is a two element commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will be the value associated with the key.
+ </string>
+ </map>
<key>llRefreshPrimURL</key>
<map>
<key>energy</key>
@@ -13997,6 +14532,36 @@
<key>tooltip</key>
<string>Requests the display name of the agent. When the display name is available the dataserver event will be raised.\nThe avatar identified does not need to be in the same region or online at the time of the request.\nReturns a key that is used to identify the dataserver event when it is raised.</string>
</map>
+ <key>llRequestExperiencePermissions</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>void</string>
+ <key>arguments</key>
+ <map>
+ <key>AvatarID</key>
+ <map>
+ <key>type</key>
+ <string>key</string>
+ <key>tooltip</key>
+ <string/>
+ </map>
+ <key>unused</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string>Not used, should be &quot;&quot;</string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Ask the agent for permission to participate in an experience. This request is similar to llRequestPermissions with the following permissions: PERMISSION_TAKE_CONTROLS, PERMISSION_TRIGGER_ANIMATION, PERMISSION_ATTACH, PERMISSION_TRACK_CAMERA, PERMISSION_CONTROL_CAMERA and PERMISSION_TELEPORT. However, unlike llRequestPermissions the decision to allow or block the request is persistent and applies to all scripts using the experience grid wide. Subsequent calls to llRequestExperiencePermissions from scripts in the experience will receive the same response automatically with no user interaction. One of experience_permissions or experience_permissions_denied will be generated in response to this call. Outstanding permission requests will be lost if the script is derezzed, moved to another region or reset.
+ </string>
+ </map>
<key>llRequestInventoryData</key>
<map>
<key>energy</key>
@@ -17913,6 +18478,50 @@
<key>tooltip</key>
<string>Updates settings for a pathfinding character.</string>
</map>
+ <key>llUpdateKeyValue</key>
+ <map>
+ <key>energy</key>
+ <real>10.0</real>
+ <key>sleep</key>
+ <real>0.0</real>
+ <key>return</key>
+ <string>key</string>
+ <key>arguments</key>
+ <map>
+ <key>Key</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ <key>Value</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ <key>Checked</key>
+ <map>
+ <key>type</key>
+ <string>integer</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ <key>OriginalValue</key>
+ <map>
+ <key>type</key>
+ <string>string</string>
+ <key>tooltip</key>
+ <string></string>
+ </map>
+ </map>
+ <key>tooltip</key>
+ <string>
+ Starts an asychronous transaction to update the value associated with the key given. The dataserver callback will be executed with the key returned from this call and a string describing the result. The result is a two element commma-delimited list. The first item is an integer specifying if the transaction succeeded (1) or not (0). In the failure case, the second item will be an integer corresponding to one of the XP_ERROR_... constants. In the success case the second item will be the value associated with the key. If Checked is 1 the existing value in the data store must match the OriginalValue passed or XP_ERROR_RETRY_UPDATE will be returned. If Checked is 0 the key will be created if necessary.
+ </string>
+ </map>
<key>llVecDist</key>
<map>
<key>energy</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 297bd9a05b..3f32be1d68 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -275,9 +275,24 @@ bool LLAgent::isActionAllowed(const LLSD& sdname)
if (param == "speak")
{
- if ( gAgent.isVoiceConnected() &&
- LLViewerParcelMgr::getInstance()->allowAgentVoice() &&
- ! LLVoiceClient::getInstance()->inTuningMode() )
+ bool allow_agent_voice = false;
+ LLVoiceChannel* channel = LLVoiceChannel::getCurrentVoiceChannel();
+ if (channel != NULL)
+ {
+ if (channel->getSessionName().empty() && channel->getSessionID().isNull())
+ {
+ // default channel
+ allow_agent_voice = LLViewerParcelMgr::getInstance()->allowAgentVoice();
+ }
+ else
+ {
+ allow_agent_voice = channel->isActive() && channel->callStarted();
+ }
+ }
+
+ if (gAgent.isVoiceConnected() &&
+ allow_agent_voice &&
+ !LLVoiceClient::getInstance()->inTuningMode())
{
retval = true;
}
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index d2b1dcbf35..121ce647a6 100755
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -618,7 +618,10 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content)
case LLAssetType::AT_NOTECARD:
{
// Update the UI with the new asset.
- LLPreviewNotecard* nc = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(item_id));
+ LLSD floater_key;
+ floater_key["taskid"] = task_id;
+ floater_key["itemid"] = item_id;
+ LLPreviewNotecard* nc = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", floater_key);
if(nc)
{
// *HACK: we have to delete the asset in the VFS so
diff --git a/indra/newview/llexperienceassociationresponder.cpp b/indra/newview/llexperienceassociationresponder.cpp
index 7f2363aadc..f62ca7d75f 100644
--- a/indra/newview/llexperienceassociationresponder.cpp
+++ b/indra/newview/llexperienceassociationresponder.cpp
@@ -51,10 +51,18 @@ void ExperienceAssociationResponder::fetchAssociatedExperience(LLSD& request, ca
LLViewerObject* object = gObjectList.findObject(request["object-id"]);
if (!object)
{
- LL_WARNS() << "Failed to find object with ID " << request["object-id"] << " in fetchAssociatedExperience" << LL_ENDL;
- return;
+ LL_DEBUGS() << "Object with ID " << request["object-id"] << " not found via gObjectList.findObject() in fetchAssociatedExperience" << LL_ENDL;
+ LL_DEBUGS() << "Using gAgent.getRegion() instead of object->getRegion()" << LL_ENDL;
+ }
+ LLViewerRegion* region = NULL;
+ if (object)
+ {
+ region = object->getRegion();
+ }
+ else
+ {
+ region = gAgent.getRegion();
}
- LLViewerRegion* region = object->getRegion();
if (region)
{
std::string lookup_url=region->getCapability("GetMetadata");
@@ -66,6 +74,10 @@ void ExperienceAssociationResponder::fetchAssociatedExperience(LLSD& request, ca
LLHTTPClient::post(lookup_url, request, new ExperienceAssociationResponder(callback));
}
}
+ else
+ {
+ LL_WARNS() << "Failed to lookup region in fetchAssociatedExperience. Fetch request not sent." << LL_ENDL;
+ }
}
void ExperienceAssociationResponder::httpFailure()
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 6dbb202c9d..987a7449ee 100755
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -370,6 +370,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mLandImpactsObserver(NULL),
mDirty(TRUE),
+ mHasSelection(TRUE),
mNeedMediaTitle(TRUE)
{
gFloaterTools = this;
@@ -541,7 +542,14 @@ void LLFloaterTools::refresh()
void LLFloaterTools::draw()
{
- if (mDirty)
+ BOOL has_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
+ if(!has_selection && (mHasSelection != has_selection))
+ {
+ mDirty = TRUE;
+ }
+ mHasSelection = has_selection;
+
+ if (mDirty)
{
refresh();
mDirty = FALSE;
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index df481b8d4c..8f586f7da6 100755
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -198,6 +198,7 @@ public:
private:
BOOL mDirty;
+ BOOL mHasSelection;
std::map<std::string, std::string> mStatusText;
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index f172aa0955..e917b0ae52 100755
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -1294,7 +1294,7 @@ LLVector3 LLManipRotate::getConstraintAxis()
else
{
S32 axis_dir = mManipPart - LL_ROT_X;
- if ((axis_dir >= 0) && (axis_dir < 3))
+ if ((axis_dir >= LL_NO_PART) && (axis_dir < LL_Z_ARROW))
{
axis.mV[axis_dir] = 1.f;
}
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index afc1a789c4..21d8b4248c 100755
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -49,6 +49,7 @@
#include "llmaterialmgr.h"
#include "llmediaentry.h"
#include "llnotificationsutil.h"
+#include "llradiogroup.h"
#include "llresmgr.h"
#include "llselectmgr.h"
#include "llspinctrl.h"
@@ -90,10 +91,10 @@ std::string USE_TEXTURE;
LLRender::eTexIndex LLPanelFace::getTextureChannelToEdit()
{
LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia");
- LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
LLRender::eTexIndex channel_to_edit = (combobox_matmedia && combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ?
- (combobox_mattype ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP) : LLRender::DIFFUSE_MAP;
+ (radio_mat_type ? (LLRender::eTexIndex)radio_mat_type->getSelectedIndex() : LLRender::DIFFUSE_MAP) : LLRender::DIFFUSE_MAP;
channel_to_edit = (channel_to_edit == LLRender::NORMAL_MAP) ? (getCurrentNormalMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
channel_to_edit = (channel_to_edit == LLRender::SPECULAR_MAP) ? (getCurrentSpecularMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
@@ -162,7 +163,6 @@ BOOL LLPanelFace::postBuild()
LLComboBox* mComboTexGen;
LLComboBox* mComboMatMedia;
- LLComboBox* mComboMatType;
LLCheckBoxCtrl *mCheckFullbright;
@@ -283,12 +283,12 @@ BOOL LLPanelFace::postBuild()
mComboMatMedia->selectNthItem(MATMEDIA_MATERIAL);
}
- mComboMatType = getChild<LLComboBox>("combobox mattype");
- if(mComboMatType)
- {
- mComboMatType->setCommitCallback(LLPanelFace::onCommitMaterialType, this);
- mComboMatType->selectNthItem(MATTYPE_DIFFUSE);
- }
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
+ if(radio_mat_type)
+ {
+ radio_mat_type->setCommitCallback(LLPanelFace::onCommitMaterialType, this);
+ radio_mat_type->selectNthItem(MATTYPE_DIFFUSE);
+ }
mCtrlGlow = getChild<LLSpinCtrl>("glow");
if(mCtrlGlow)
@@ -676,20 +676,21 @@ void LLPanelFace::updateUI()
}
getChildView("combobox matmedia")->setEnabled(editable);
- LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
- if (combobox_mattype)
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
+ if(radio_mat_type)
{
- if (combobox_mattype->getCurrentIndex() < MATTYPE_DIFFUSE)
- {
- combobox_mattype->selectNthItem(MATTYPE_DIFFUSE);
- }
+ if (radio_mat_type->getSelectedIndex() < MATTYPE_DIFFUSE)
+ {
+ radio_mat_type->selectNthItem(MATTYPE_DIFFUSE);
+ }
+
}
else
{
- LL_WARNS("Materials") << "failed getChild for 'combobox mattype'" << LL_ENDL;
+ LL_WARNS("Materials") << "failed getChild for 'radio_material_type'" << LL_ENDL;
}
- getChildView("combobox mattype")->setEnabled(editable);
+ getChildView("radio_material_type")->setEnabled(editable);
updateVisibility();
bool identical = true; // true because it is anded below
@@ -1200,8 +1201,7 @@ void LLPanelFace::updateUI()
BOOL identical_repeats = true;
F32 repeats = 1.0f;
- U32 material_type = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? combobox_mattype->getCurrentIndex() : MATTYPE_DIFFUSE;
-
+ U32 material_type = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? radio_mat_type->getSelectedIndex() : MATTYPE_DIFFUSE;
LLSelectMgr::getInstance()->setTextureChannel(LLRender::eTexIndex(material_type));
switch (material_type)
@@ -1466,22 +1466,21 @@ void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)
void LLPanelFace::updateVisibility()
{
LLComboBox* combo_matmedia = getChild<LLComboBox>("combobox matmedia");
- LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
LLComboBox* combo_shininess = getChild<LLComboBox>("combobox shininess");
LLComboBox* combo_bumpiness = getChild<LLComboBox>("combobox bumpiness");
- if (!combo_mattype || !combo_matmedia || !combo_shininess || !combo_bumpiness)
+ if (!radio_mat_type || !combo_matmedia || !combo_shininess || !combo_bumpiness)
{
LL_WARNS("Materials") << "Combo box not found...exiting." << LL_ENDL;
return;
}
U32 materials_media = combo_matmedia->getCurrentIndex();
- U32 material_type = combo_mattype->getCurrentIndex();
+ U32 material_type = radio_mat_type->getSelectedIndex();
bool show_media = (materials_media == MATMEDIA_MEDIA) && combo_matmedia->getEnabled();
bool show_texture = (show_media || ((material_type == MATTYPE_DIFFUSE) && combo_matmedia->getEnabled()));
bool show_bumpiness = (!show_media) && (material_type == MATTYPE_NORMAL) && combo_matmedia->getEnabled();
bool show_shininess = (!show_media) && (material_type == MATTYPE_SPECULAR) && combo_matmedia->getEnabled();
- getChildView("combobox mattype")->setVisible(!show_media);
- getChildView("rptctrl")->setVisible(true);
+ getChildView("radio_material_type")->setVisible(!show_media);
// Media controls
getChildView("media_info")->setVisible(show_media);
@@ -1608,9 +1607,9 @@ void LLPanelFace::updateShinyControls(bool is_setting_texture, bool mess_with_sh
}
LLComboBox* combo_matmedia = getChild<LLComboBox>("combobox matmedia");
- LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
U32 materials_media = combo_matmedia->getCurrentIndex();
- U32 material_type = combo_mattype->getCurrentIndex();
+ U32 material_type = radio_mat_type->getSelectedIndex();
bool show_media = (materials_media == MATMEDIA_MEDIA) && combo_matmedia->getEnabled();
bool show_shininess = (!show_media) && (material_type == MATTYPE_SPECULAR) && combo_matmedia->getEnabled();
U32 shiny_value = comboShiny->getCurrentIndex();
@@ -1693,11 +1692,11 @@ void LLPanelFace::updateAlphaControls()
mat_media = combobox_matmedia->getCurrentIndex();
}
- LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
U32 mat_type = MATTYPE_DIFFUSE;
- if (combobox_mattype)
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
+ if(radio_mat_type)
{
- mat_type = combobox_mattype->getCurrentIndex();
+ mat_type = radio_mat_type->getSelectedIndex();
}
show_alphactrls = show_alphactrls && (mat_media == MATMEDIA_MATERIAL);
@@ -1985,12 +1984,11 @@ void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata)
LLUICtrl* repeats_ctrl = self->getChild<LLUICtrl>("rptctrl");
LLComboBox* combo_matmedia = self->getChild<LLComboBox>("combobox matmedia");
- LLComboBox* combo_mattype = self->getChild<LLComboBox>("combobox mattype");
+ LLRadioGroup* radio_mat_type = self->getChild<LLRadioGroup>("radio_material_type");
U32 materials_media = combo_matmedia->getCurrentIndex();
-
- U32 material_type = (materials_media == MATMEDIA_MATERIAL) ? combo_mattype->getCurrentIndex() : 0;
+ U32 material_type = (materials_media == MATMEDIA_MATERIAL) ? radio_mat_type->getSelectedIndex() : 0;
F32 repeats_per_meter = repeats_ctrl->getValue().asReal();
F32 obj_scale_s = 1.0f;
@@ -2114,12 +2112,12 @@ void LLPanelFace::onCommitPlanarAlign(LLUICtrl* ctrl, void* userdata)
void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp)
{
LL_DEBUGS("Materials") << "item asset " << itemp->getAssetUUID() << LL_ENDL;
- LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
- if (!combo_mattype)
+ LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
+ if(radio_mat_type)
{
- return;
+ return;
}
- U32 mattype = combo_mattype->getCurrentIndex();
+ U32 mattype = radio_mat_type->getSelectedIndex();
std::string which_control="texture control";
switch (mattype)
{
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index c8af5b6718..7e65ccad98 100755
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1171,7 +1171,10 @@ void LLTaskNotecardBridge::openItem()
|| object->permModify()
|| gAgent.isGodlike())
{
- LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);
+ LLSD floater_key;
+ floater_key["taskid"] = mPanel->getTaskUUID();
+ floater_key["itemid"] = mUUID;
+ LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", floater_key, TAKE_FOCUS_YES);
if (preview)
{
preview->setObjectID(mPanel->getTaskUUID());
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 9f88b0db5f..f100c996b3 100755
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -233,6 +233,7 @@ void LLPreviewNotecard::loadAsset()
else
{
LLHost source_sim = LLHost::invalid;
+ LLSD* user_data = new LLSD();
if (mObjectUUID.notNull())
{
LLViewerObject *objectp = gObjectList.findObject(mObjectUUID);
@@ -251,7 +252,13 @@ void LLPreviewNotecard::loadAsset()
mAssetStatus = PREVIEW_ASSET_LOADED;
return;
}
+ user_data->with("taskid", mObjectUUID).with("itemid", mItemUUID);
}
+ else
+ {
+ user_data = new LLSD(mItemUUID);
+ }
+
gAssetStorage->getInvItemAsset(source_sim,
gAgent.getID(),
gAgent.getSessionID(),
@@ -261,7 +268,7 @@ void LLPreviewNotecard::loadAsset()
item->getAssetUUID(),
item->getType(),
&onLoadComplete,
- (void*)new LLUUID(mItemUUID),
+ (void*)user_data,
TRUE);
mAssetStatus = PREVIEW_ASSET_LOADING;
}
@@ -304,9 +311,8 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
void* user_data, S32 status, LLExtStat ext_status)
{
LL_INFOS() << "LLPreviewNotecard::onLoadComplete()" << LL_ENDL;
- LLUUID* item_id = (LLUUID*)user_data;
-
- LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(*item_id));
+ LLSD* floater_key = (LLSD*)user_data;
+ LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", *floater_key);
if( preview )
{
if(0 == status)
@@ -362,7 +368,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
preview->mAssetStatus = PREVIEW_ASSET_ERROR;
}
}
- delete item_id;
+ delete floater_key;
}
// static
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 55bcb3dc65..577c336ac7 100755
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -1235,7 +1235,15 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
}
else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
{
- mGridRotation = first_grid_object->getRenderRotation();
+ LLSelectNode *node = mSelectedObjects->findNode(first_grid_object);
+ if (node)
+ {
+ mGridRotation = node->mSavedRotation;
+ }
+ else
+ {
+ mGridRotation = first_grid_object->getRenderRotation();
+ }
LLVector4a min_extents(F32_MAX);
LLVector4a max_extents(-F32_MAX);
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index cb6b2fafd8..a90bb18d48 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -117,26 +117,37 @@
name="Media"
value="Media" />
</combo_box>
- <combo_box
- height="23"
- layout="topleft"
- left_pad="10"
- name="combobox mattype"
- top_delta="0"
- width="155">
- <combo_box.item
- label="Texture (diffuse)"
- name="Texture (diffuse)"
- value="Texture (diffuse)" />
- <combo_box.item
- label="Bumpiness (normal)"
- name="Bumpiness (normal)"
- value="Bumpiness (normal)" />
- <combo_box.item
- label="Shininess (specular)"
- name="Shininess (specular)"
- value="Shininess (specular)" />
- </combo_box>
+ <radio_group
+ control_name="ComboMaterialType"
+ height="50"
+ layout="topleft"
+ left_pad="20"
+ top_delta="-10"
+ width="150"
+ visible = "false"
+ name="radio_material_type">
+ <radio_item
+ label="Texture (diffuse)"
+ name="Texture (diffuse)"
+ top="0"
+ layout="topleft"
+ height="16"
+ value="0"/>
+ <radio_item
+ label="Bumpiness (normal)"
+ layout="topleft"
+ top_pad="1"
+ height="16"
+ name="Bumpiness (normal)"
+ value="1"/>
+ <radio_item
+ label="Shininess (specular)"
+ name="Shininess (specular)"
+ height="16"
+ layout="topleft"
+ top_pad="1"
+ value="2"/>
+ </radio_group>
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -148,7 +159,7 @@
left="10"
name="texture control"
tool_tip="Click to choose a picture"
- top_pad="8"
+ top_pad="7"
width="64" />
<text
type="string"
@@ -520,7 +531,7 @@
left="10"
name="tex gen"
text_readonly_color="LabelDisabledColor"
- top_pad="60"
+ top_pad="40"
width="140">
Mapping
</text>