Merge branch 'V2MultiWear' into v2mwArx

This commit is contained in:
Drake Arconis
2012-05-15 10:37:55 -04:00
53 changed files with 1164 additions and 765 deletions

View File

@@ -35,6 +35,8 @@
#if LL_WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#endif
#include "linden_common.h"

View File

@@ -42,6 +42,7 @@
#if LL_DARWIN || LL_LINUX
// not required or present on Win32
#include <sys/wait.h>
#include <unistd.h>
#endif
LLProcessLauncher::LLProcessLauncher()

View File

@@ -416,7 +416,7 @@ public:
{ //we have data
mData.erase(data);
mElementCount = mData.size();
notifyRemoval(data);
this->notifyRemoval(data);
checkAlive();
return true;
}
@@ -454,7 +454,7 @@ public:
{
mData.erase(data);
mElementCount = mData.size();
notifyRemoval(data);
this->notifyRemoval(data);
llwarns << "FOUND!" << llendl;
checkAlive();
return;
@@ -663,7 +663,7 @@ public:
//(don't notify listeners of addition)
for (U32 i = 0; i < child->getChildCount(); i++)
{
addChild(child->getChild(i), TRUE);
this->addChild(child->getChild(i), TRUE);
}
//destroy child
@@ -707,10 +707,10 @@ public:
return false;
}
if (this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))
if (this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup()))
{
//we got it, just act like a branch
oct_node* node = getNodeAt(data);
oct_node* node = this->getNodeAt(data);
if (node == this)
{
LLOctreeNode<T>::insert(data);
@@ -723,7 +723,7 @@ public:
else if (this->getChildCount() == 0)
{
//first object being added, just wrap it up
while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())))
while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))
{
LLVector4a center, size;
center = this->getCenter();
@@ -738,7 +738,7 @@ public:
}
else
{
while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())))
while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))
{
//the data is outside the root node, we need to grow
LLVector4a center(this->getCenter());
@@ -764,7 +764,7 @@ public:
//clear our children and add the root copy
this->clearChildren();
addChild(newnode);
this->addChild(newnode);
}
//insert the data

View File

@@ -704,9 +704,9 @@ BOOL LLColor4::parseColor(const std::string& buf, LLColor4* color)
{
color->set(LLColor4::orange6);
}
else if ( "clear" == color_name )
else if ( "clear" == color_name || "transparent" == color_name )
{
color->set(0.f, 0.f, 0.f, 0.f);
color->set(LLColor4::transparent);
}
else
{

View File

@@ -202,8 +202,8 @@ void LLCurl::Responder::completedHeader(U32 status, const std::string& reason, c
}
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLCurl::Responder* p)
{
++p->mReferenceCount;
@@ -216,7 +216,7 @@ namespace boost
delete p;
}
}
};
//};
//////////////////////////////////////////////////////////////////////////////

View File

@@ -378,11 +378,11 @@ private:
void cleanupMulti(LLCurl::Multi* multi) ;
} ;
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLCurl::Responder* p);
void intrusive_ptr_release(LLCurl::Responder* p);
};
//};
class LLCurlRequest

View File

@@ -55,11 +55,11 @@ void pump_debug(const char *file, S32 line);
/**
* intrusive pointer support
*/
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLIOPipe* p);
void intrusive_ptr_release(LLIOPipe* p);
};
//};
/**
* @class LLIOPipe
@@ -250,13 +250,13 @@ protected:
LLPumpIO* pump) = 0;
private:
friend void boost::intrusive_ptr_add_ref(LLIOPipe* p);
friend void boost::intrusive_ptr_release(LLIOPipe* p);
friend void /*boost::*/intrusive_ptr_add_ref(LLIOPipe* p);
friend void /*boost::*/intrusive_ptr_release(LLIOPipe* p);
U32 mReferenceCount;
};
namespace boost
{
//namespace boost
//{
inline void intrusive_ptr_add_ref(LLIOPipe* p)
{
++p->mReferenceCount;
@@ -268,7 +268,7 @@ namespace boost
delete p;
}
}
};
//};
#if 0

View File

@@ -32,8 +32,8 @@
#include "net.h"
#include "message.h"
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p)
{
++p->mReferenceCount;
@@ -46,7 +46,7 @@ namespace boost
delete p;
}
}
};
//};
LLRegionPresenceVerifier::Response::~Response()
{

View File

@@ -89,10 +89,10 @@ public:
};
};
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p);
void intrusive_ptr_release(LLRegionPresenceVerifier::Response* p);
};
//};
#endif //LL_LLREGIONPRESENCEVERIFIER_H

View File

@@ -36,6 +36,7 @@
#include <winsock2.h>
#include <windows.h>
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

View File

@@ -77,8 +77,8 @@ void LLCurl::Responder::result(LLSD const&)
{
}
namespace boost
{
//namespace boost
//{
void intrusive_ptr_add_ref(LLCurl::Responder* p)
{
++p->mReferenceCount;
@@ -91,5 +91,5 @@ namespace boost
delete p;
}
}
};
//};

View File

@@ -90,6 +90,7 @@ class LLGLFence
public:
virtual void placeFence() = 0;
virtual void wait() = 0;
virtual ~LLGLFence() {}
};
//============================================================================

View File

@@ -7,6 +7,7 @@ class LLDeleteJob
{
public:
virtual BOOL work(U32& completed);
virtual ~LLDeleteJob() {}
};
class LLViewDeleteJob : public LLDeleteJob
{

View File

@@ -476,7 +476,18 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLUICtrlFactory *fac
}
else
{
panelp->initPanelXML(node, parent, factory);
if(!factory->builtPanel(panelp))
panelp->initPanelXML(node, parent, factory);
else
{
LLRect new_rect = panelp->getRect();
// override rectangle with embedding parameters as provided
panelp->createRect(node, new_rect, parent);
panelp->setOrigin(new_rect.mLeft, new_rect.mBottom);
panelp->setShape(new_rect);
// optionally override follows flags from including nodes
panelp->parseFollowsFlags(node);
}
}
return panelp;

View File

@@ -2372,7 +2372,7 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask )
if (mCanSelect)
{
// Ignore capslock
mask = mask;
//mask = mask; //Why was this here?
if (mask == MASK_NONE)
{

View File

@@ -455,9 +455,11 @@ LLPieMenu *LLUICtrlFactory::buildPieMenu(const std::string &filename, LLView* pa
//-----------------------------------------------------------------------------
void LLUICtrlFactory::rebuild()
{
built_panel_t built_panels = mBuiltPanels;
mBuiltPanels.clear();
built_panel_t::iterator built_panel_it;
for (built_panel_it = mBuiltPanels.begin();
built_panel_it != mBuiltPanels.end();
for (built_panel_it = built_panels.begin();
built_panel_it != built_panels.end();
++built_panel_it)
{
std::string filename = built_panel_it->second;

View File

@@ -63,6 +63,8 @@ public:
void removePanel(LLPanel* panelp) { mBuiltPanels.erase(panelp->getHandle()); }
void removeFloater(LLFloater* floaterp) { mBuiltFloaters.erase(floaterp->getHandle()); }
bool builtPanel(LLPanel* panelp) {return mBuiltPanels.find(panelp->getHandle()) != mBuiltPanels.end();}
class LLMenuGL *buildMenu(const std::string &filename, LLView* parentp);
class LLPieMenu *buildPieMenu(const std::string &filename, LLView* parentp);

View File

@@ -54,6 +54,7 @@ static bool isProcessAlive(U32 pid)
}
#else //Everyone Else
#include <unistd.h>
static U32 getPID() {
return getpid();

View File

@@ -838,7 +838,7 @@ namespace LLInitParam
BaseBlock::addParam(block_descriptor, param_descriptor, name);
}
setValue(value);
this->setValue(value);
}
bool isProvided() const { return Param::anyProvided(); }
@@ -926,7 +926,7 @@ namespace LLInitParam
void set(value_assignment_t val, bool flag_as_provided = true)
{
param_value_t::clearValueName();
setValue(val);
this->setValue(val);
setProvided(flag_as_provided);
}
@@ -1068,7 +1068,7 @@ namespace LLInitParam
// assign block contents to this param-that-is-a-block
void set(value_assignment_t val, bool flag_as_provided = true)
{
setValue(val);
this->setValue(val);
param_value_t::clearValueName();
// force revalidation of block
// next call to isProvided() will update provision status based on validity
@@ -1723,7 +1723,7 @@ namespace LLInitParam
Optional& operator =(value_assignment_t val)
{
set(val);
this->set(val);
return *this;
}
@@ -1752,7 +1752,7 @@ namespace LLInitParam
Mandatory& operator =(value_assignment_t val)
{
set(val);
this->set(val);
return *this;
}

View File

@@ -487,10 +487,34 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "llSetContentType", NULL, "ki");
addFunction(10.f, 0.f, dummy_func, "llLinkSitTarget", NULL, "ivr");
addFunction(10.f, 0.f, dummy_func, "llAvatarOnLinkSitTarget", "k", "i");
/* No info on these new functions yet....
* addFunction(10.f, 0.f, dummy_func, "llSetVelocity", "", "");
* addFunction(10.f, 0.f, dummy_func, "llSetRotationalVelocity", "", "");
*/
addFunction(10.f, 0.f, dummy_func, "llGetMassMKS", "f", NULL);
addFunction(10.f, 0.f, dummy_func, "llGetMemoryLimit", "i", NULL);
addFunction(10.f, 0.f, dummy_func, "llGetParcelMusicURL", "s", NULL);
addFunction(10.f, 0.f, dummy_func, "llGetPhysicsMaterial", "l", NULL);
addFunction(10.f, 0.f, dummy_func, "llManageEstateAccess", "i", "ik");
addFunction(10.f, 0.f, dummy_func, "llSetAngularVelocity", NULL, "vi");
addFunction(10.f, 0.f, dummy_func, "llSetKeyframedMotion", NULL, "ll");
addFunction(10.f, 0.f, dummy_func, "llSetPhysicsMaterial", NULL, "iffff");
addFunction(10.f, 0.f, dummy_func, "llSetRegionPos", "i", "v");
addFunction(10.f, 0.f, dummy_func, "llSetVelocity", NULL, "vi");
addFunction(10.f, 0.f, dummy_func, "llTransferLindenDollars", "k", "ki");
//Pathfinder functions. Current state: alpha, thus subject to change.
//This and the preceding line are to be removed in future revisions of this file.
addFunction(10.f, 0.f, dummy_func, "llCreateCharacter", NULL, "l");
addFunction(10.f, 0.f, dummy_func, "llDeleteCharacter", NULL, NULL);
addFunction(10.f, 0.f, dummy_func, "llEvade", NULL, "kl");
addFunction(10.f, 0.f, dummy_func, "llExecCharacterCmd", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llGetClosestNavPoint", "l", "vl");
addFunction(10.f, 0.f, dummy_func, "llFleeFrom", NULL, "vfl");
addFunction(10.f, 0.f, dummy_func, "llNavigateTo", NULL, "vl");
addFunction(10.f, 0.f, dummy_func, "llPatrolPoints", NULL, "ll");
addFunction(10.f, 0.f, dummy_func, "llPursue", NULL, "kl");
addFunction(10.f, 0.f, dummy_func, "llUpdateCharacter", NULL, "l");
addFunction(10.f, 0.f, dummy_func, "llWanderWithin", NULL, "vfl");
// REGARDING OSSL FUNCTIONS
// These additions should be posted underneath the llFunctions
@@ -624,6 +648,16 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "osNpcGetPos", "v", "k");
addFunction(10.f, 0.f, dummy_func, "osNpcStopMoveToTarget", NULL, "k");
addFunction(10.f, 0.f, dummy_func, "osIsNpc", "i", "k");
addFunction(10.f, 0.f, dummy_func, "osNpcGetOwner", "k", "k");
addFunction(10.f, 0.f, dummy_func, "osGetGridCustom", "s", "s");
addFunction(10.f, 0.f, dummy_func, "osGetGridHomeURI", "s", NULL);
addFunction(10.f, 0.f, dummy_func, "osNpcPlayAnimation", NULL, "ks");
addFunction(10.f, 0.f, dummy_func, "osNpcSit", NULL, "kki");
addFunction(10.f, 0.f, dummy_func, "osNpcStand", NULL, "k");
addFunction(10.f, 0.f, dummy_func, "osNpcStopAnimation", NULL, "ks");
addFunction(10.f, 0.f, dummy_func, "osSetRot", NULL, "kq");
}
LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), const char *name, const char *ret_type, const char *args, BOOL god_only)

View File

@@ -51,6 +51,8 @@ changed changed( integer change ):Triggered various event change the task:(tes
remote_data remote_data(integer event_type, key channel, key message_id, string sender,integer idata, string sdata):Triggered by various XML-RPC calls (event_type will be one of REMOTE_DATA_CHANNEL, REMOTE_DATA_REQUEST, REMOTE_DATA_REPLY)
http_response http_response(key request_id, integer status, list metadata, string body):Triggered when task receives a response to one of its llHTTPRequests
http_request http_request(key id, string method, string body):Triggered when task receives an http request against a public URL
transaction_result transaction_result(key id, integer success, string data):Triggered when task receives asynchronous data.
path_update path_update(integer type, list reserved):Triggered when the state of a pathfinder character changes. Note; "list reserved" is not currently used
# integer constants
[word .1, .1, .5]
@@ -605,6 +607,121 @@ WL_CLOUD_SCROLL_Y_LOCK Windlight Cloud Scroll Y Lock
WL_CLOUD_SCROLL_X_LOCK Windlight Cloud Scroll X Lock
WL_DRAW_CLASSIC_CLOUDS Windlight Draw Classic Clouds
# OSSL constants
STATS_TIME_DILATION
STATS_SIM_FPS
STATS_PHYSICS_FPS
STATS_AGENT_UPDATES
STATS_ROOT_AGENTS
STATS_CHILD_AGENTS
STATS_TOTAL_PRIMS
STATS_ACTIVE_PRIMS
STATS_FRAME_MS
STATS_NET_MS
STATS_PHYSICS_MS
STATS_IMAGE_MS
STATS_OTHER_MS
STATS_IN_PACKETS_PER_SECOND
STATS_OUT_PACKETS_PER_SECOND
STATS_UNACKED_BYTES
STATS_AGENT_MS
STATS_PENDING_DOWNLOADS
STATS_PENDING_UPLOADS
STATS_ACTIVE_SCRIPTS
STATS_SCRIPT_LPS
## Constants for osNpc* functions
NPC
OS_NPC_CREATOR_OWNED
OS_NPC_NOT_OWNED
OS_NPC_SENSE_AS_AGENT
OS_NPC_FLY
OS_NPC_NO_FLY
OS_NPC_LAND_AT_TARGET
OS_NPC_SIT_NOW
## Missing LSL constants (from http://wiki.secondlife.com/wiki/Category:LSL_Constants)
## Adding now, sorting later
ATTACH_HUD_BOTTOM
ATTACH_HUD_BOTTOM_LEFT
ATTACH_HUD_BOTTOM_RIGHT
ATTACH_HUD_CENTER_1
ATTACH_HUD_CENTER_2
ATTACH_HUD_TOP_CENTER
ATTACH_HUD_TOP_LEFT
ATTACH_HUD_TOP_RIGHT
ATTACH_LEFT_PEC
ATTACH_RIGHT_PEC
HTTP_VERBOSE_THROTTLE
OBJECT_PRIM_EQUIVALENCE
PARCEL_MEDIA_COMMAND_LOOP_SET
PRIM_LINK_TARGET
PRIM_OMEGA
PRIM_PHYSICS_MATERIAL
PRIM_PHYSICS_SHAPE_TYPE
PRIM_POS_LOCAL
PRIM_ROT_LOCAL
PROFILE_NONE
PROFILE_SCRIPT_MEMORY
RCERR_CAST_TIME_EXCEEDED
RCERR_SIM_PERF_LOW
RCERR_UNKNOWN
RC_DATA_FLAGS
RC_DETECT_PHANTOM
RC_GET_LINK_NUM
RC_GET_NORMAL
RC_GET_ROOT_KEY
RC_MAX_HITS
RC_REJECT_AGENTS
RC_REJECT_LAND
RC_REJECT_NONPHYSICAL
RC_REJECT_PHYSICAL
RC_REJECT_TYPES
STATUS_BLOCK_GRAB_OBJECT
#Even more missing constants, thanks to Justin Clark Casey for pointing me into the right direction
CAMERA_FOCUS_OFFSET_X
CAMERA_FOCUS_OFFSET_Y
CAMERA_FOCUS_OFFSET_Z
CAMERA_FOCUS_X
CAMERA_FOCUS_Y
CAMERA_FOCUS_Z
CAMERA_POSITION_X
CAMERA_POSITION_Y
CAMERA_POSITION_Z
CHANGED_ANIMATION
CHANGED_REGION_RESTART
DATA_SIM_RELEASE
ESTATE_ACCESS_ALLOWED_AGENT_ADD
ESTATE_ACCESS_ALLOWED_AGENT_REMOVE
ESTATE_ACCESS_ALLOWED_GROUP_ADD
ESTATE_ACCESS_ALLOWED_GROUP_REMOVE
ESTATE_ACCESS_BANNED_AGENT_ADD
ESTATE_ACCESS_BANNED_AGENT_REMOVE
LIST_STAT_HARMONIC_MEAN
PARCEL_DETAILS_CLAIMDATE
PERMISSION_CHANGE_JOINTS
PERMISSION_CHANGE_PERMISSIONS
PERMISSION_RELEASE_OWNERSHIP
PERMISSION_REMAP_CONTROLS
VEHICLE_FLAG_LOCK_HOVER_HEIGHT
VEHICLE_FLAG_LOCK_ROTATION
VEHICLE_FLAG_NO_DEFLECTION
VEHICLE_FLAG_NO_X
VEHICLE_FLAG_NO_Y
VEHICLE_FLAG_NO_Z
VEHICLE_RANGE_BLOCK
VEHICLE_ROLL_FRAME
LSL_STATUS_BOUNDS_ERROR
LSL_STATUS_INTERNAL_ERROR
LSL_STATUS_MALFORMED_PARAMS
LSL_STATUS_NOT_FOUND
LSL_STATUS_NOT_SUPPORTED
LSL_STATUS_OK
LSL_STATUS_TYPE_MISMATCH
LSL_STATUS_WHITELIST_FAILED
# string constants
[word .1, .3, .5]
NULL_KEY Indicates an empty key

View File

@@ -2897,10 +2897,10 @@
<real>6.0</real>
</array>
</map>
<key>CameraOffsetDefault</key>
<key>CameraOffsetRearView</key>
<map>
<key>Comment</key>
<string>Default camera offset from avatar</string>
<string>Initial camera offset from avatar in Rear View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -2912,6 +2912,36 @@
<real>0.75</real>
</array>
</map>
<key>CameraOffsetFrontView</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar in Front View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>2.2</real>
<real>0.0</real>
<real>0.0</real>
</array>
</map>
<key>CameraOffsetGroupView</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar in Group View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-1.0</real>
<real>0.7</real>
<real>0.5</real>
</array>
</map>
<key>CameraOffsetScale</key>
<map>
<key>Comment</key>
@@ -2949,6 +2979,18 @@
<key>Value</key>
<real>1.0</real>
</map>
<key>CameraPreset</key>
<map>
<key>Comment</key>
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>CameraFocusTransitionTime</key>
<map>
<key>Comment</key>
@@ -5073,6 +5115,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableGestureSoundsSelf</key>
<map>
<key>Comment</key>
<string>Play sounds from your gestures when EnableGestureSounds is false. (Useless otherewise)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableMouselook</key>
<map>
<key>Comment</key>
@@ -6656,14 +6709,14 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>FocusOffsetDefault</key>
<key>FocusOffsetRearView</key>
<map>
<key>Comment</key>
<string>Default focus point offset relative to avatar (x-axis is forward)</string>
<string>Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>1.0</real>
@@ -6671,6 +6724,36 @@
<real>1.0</real>
</array>
</map>
<key>FocusOffsetFrontView</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the camera preset Front View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>0.0</real>
<real>0.0</real>
<real>0.0</real>
</array>
</map>
<key>FocusOffsetGroupView</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the camera preset Group View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>1.5</real>
<real>0.7</real>
<real>1.0</real>
</array>
</map>
<key>FocusPosOnLogout</key>
<map>
<key>Comment</key>

View File

@@ -4047,7 +4047,7 @@ void LLAgent::sendAgentSetAppearance()
llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl;
if(transmitted_params < 218) {
LLNotificationsUtil::add("SGIncompleteAppearence");
LLNotificationsUtil::add("SGIncompleteAppearance");
}
sendReliableMessage();
}

View File

@@ -128,7 +128,7 @@ LLAgentCamera::LLAgentCamera() :
mCameraMode( CAMERA_MODE_THIRD_PERSON ),
mLastCameraMode( CAMERA_MODE_THIRD_PERSON ),
//mCameraPreset(CAMERA_PRESET_REAR_VIEW),
mCameraPreset(CAMERA_PRESET_REAR_VIEW),
mCameraAnimating( FALSE ),
mAnimationCameraStartGlobal(),
@@ -141,7 +141,6 @@ LLAgentCamera::LLAgentCamera() :
mCameraFocusOffset(),
mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW),
mCameraOffsetDefault(),
mCameraCollidePlane(),
mCurrentCameraDistance(2.f), // meters, set in init()
@@ -212,8 +211,7 @@ void LLAgentCamera::init()
mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));
mCameraOffsetDefault = gSavedSettings.getVector3("CameraOffsetDefault");//Legacy
/*mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView");
mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView");
@@ -221,7 +219,7 @@ void LLAgentCamera::init()
mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView");
mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView");
mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");*/
mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");
mCameraCollidePlane.clearVec();
mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
@@ -1681,14 +1679,13 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
{
// ...offset from avatar
LLVector3d focus_offset;
focus_offset.setVec(gSavedSettings.getVector3("FocusOffsetDefault"));
LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion();
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation();
}
//focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
return focus_offset * agent_rot;
}
@@ -2023,8 +2020,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
LLVector3 LLAgentCamera::getCameraOffsetInitial()
{
//return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
return mCameraOffsetDefault;
return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
}
@@ -2418,15 +2414,17 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()
gAgentAvatarp->updateMeshTextures();
}
}
// <edit>
if(!gSavedSettings.getBOOL("AppearanceCameraMovement"))
{
//hmm
mCameraAnimating = FALSE;
gAgent.endAnimationUpdateUI();
return;
}
/*LLVector3 agent_at = gAgent.getAtAxis();
// </edit>
LLVector3 agent_at = gAgent.getAtAxis();
agent_at.mV[VZ] = 0.f;
agent_at.normalize();
@@ -2441,11 +2439,13 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()
camera_offset *= CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST;
LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target);
setAnimationDuration(gSavedSettings.getF32("ZoomTime"));
setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());*/
setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());
}
/*void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
{
//zoom is supposed to be reset for the front and group views
mCameraZoomFraction = 1.f;
@@ -2456,7 +2456,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()
mCameraPreset = preset;
gSavedSettings.setU32("CameraPreset", mCameraPreset);
}*/
}
//

View File

@@ -46,6 +46,19 @@ enum ECameraMode
CAMERA_MODE_FOLLOW
};
/** Camera Presets for CAMERA_MODE_THIRD_PERSON */
enum ECameraPreset
{
/** Default preset, what the Third Person Mode actually was */
CAMERA_PRESET_REAR_VIEW,
/** "Looking at the Avatar from the front" */
CAMERA_PRESET_FRONT_VIEW,
/** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
CAMERA_PRESET_GROUP_VIEW
};
//------------------------------------------------------------------------
// LLAgentCamera
//------------------------------------------------------------------------
@@ -94,9 +107,28 @@ private:
ECameraMode mCameraMode; // Target mode after transition animation is done
ECameraMode mLastCameraMode;
F32 mUIOffset;
//--------------------------------------------------------------------
// Preset
//--------------------------------------------------------------------
public:
void switchCameraPreset(ECameraPreset preset);
private:
/** Determines default camera offset depending on the current camera preset */
LLVector3 getCameraOffsetInitial();
/** Camera preset in Third Person Mode */
ECameraPreset mCameraPreset;
/** Initial camera offsets */
std::map<ECameraPreset, LLPointer<LLControlVariable> > mCameraOffsetInitial;
/** Initial focus offsets */
std::map<ECameraPreset, LLPointer<LLControlVariable> > mFocusOffsetInitial;
//--------------------------------------------------------------------
// Position
//--------------------------------------------------------------------
public:
LLVector3d getCameraPositionGlobal() const;
const LLVector3 &getCameraPositionAgent() const;
@@ -185,7 +217,6 @@ public:
private:
LLVector3d mCameraFocusOffset; // Offset from focus point in build mode
LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset
LLVector3 mCameraOffsetDefault;
BOOL mFocusOnAvatar;
LLVector3d mFocusGlobal;
LLVector3d mFocusTargetGlobal;

View File

@@ -724,6 +724,8 @@ bool LLAppViewer::init()
&LLURLDispatcher::dispatchFromTextEditor,
&LLURLDispatcher::dispatchFromTextEditor);
LLToolMgr::getInstance(); // Initialize tool manager if not already instantiated
/////////////////////////////////////////////////
//
// Load settings files
@@ -1376,12 +1378,6 @@ extern void cleanup_pose_stand(void);
bool LLAppViewer::cleanup()
{
//HACK: the selectmgr may hold a ref to gAgentAvatarp, which will defer the actual
// destruction until LLSelectMgr::cleanupGlobals() is called AFTER the UI has been destroyed.
// This presents issue, as ~LLVOAvatarSelf spawns notifications if DebugAvatarRezTime is true, which will
// crash if the UI has been destroyed before then.
LLSelectMgr::getInstance()->remove(gAgentAvatarp, SELECT_ALL_TES, false);
//ditch LLVOAvatarSelf instance
gAgentAvatarp = NULL;
cleanup_pose_stand();

View File

@@ -1791,7 +1791,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
(glow << 24);
U32 vec[4];
vec[0] = vec[1] = vec[2] = vec[3] = glow32;
std::fill_n(vec,4,glow32);
src.loadua((F32*) vec);

View File

@@ -75,12 +75,29 @@ const F64 CURRENCY_ESTIMATE_FREQUENCY = 0.5;
// esimate is fetched from the server
class LLFloaterBuyLandUI
: public LLFloater
: public LLFloater, public LLSingleton<LLFloaterBuyLandUI>
{
private:
public:
LLFloaterBuyLandUI();
virtual ~LLFloaterBuyLandUI();
/*virtual*/ void onClose(bool app_quitting);
// Left padding for maturity rating icon.
static const S32 ICON_PAD = 2;
private:
class SelectionObserver : public LLParcelObserver
{
public:
SelectionObserver(LLFloaterBuyLandUI* floater) : mFloater(floater) {}
virtual void changed();
private:
LLFloaterBuyLandUI* mFloater;
};
private:
SelectionObserver mParcelSelectionObserver;
LLViewerRegion* mRegion;
LLParcelSelectionHandle mParcel;
bool mIsClaim;
@@ -146,11 +163,7 @@ private:
LLViewerParcelMgr::ParcelBuyInfo* mParcelBuyInfo;
static LLFloaterBuyLandUI* sInstance;
public:
static LLFloaterBuyLandUI* soleInstance(bool createIfNeeded);
void setForGroup(bool is_for_group);
void setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel);
@@ -158,10 +171,10 @@ public:
void updateParcelInfo();
void updateCovenantInfo();
static void onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data);
void updateCovenantText(const std::string& string, const LLUUID &asset_id);
void updateEstateName(const std::string& name);
void updateLastModified(const std::string& text);
void updateEstateOwnerName(const std::string& name);
void updateFloaterCovenantText(const std::string& string, const LLUUID &asset_id);
void updateFloaterEstateName(const std::string& name);
void updateFloaterLastModified(const std::string& text);
void updateFloaterEstateOwnerName(const std::string& name);
void updateWebSiteInfo();
void finishWebSiteInfo();
@@ -170,10 +183,14 @@ public:
void sendBuyLand();
void updateNames();
// Name cache callback
void updateName(const LLUUID& id,
const std::string& name,
bool is_group);
void refreshUI();
void startTransaction(TransactionType type, LLXMLRPCValue params);
void startTransaction(TransactionType type, const LLXMLRPCValue& params);
bool checkTransaction();
void tellUserError(const std::string& message, const std::string& uri);
@@ -183,31 +200,16 @@ public:
void startBuyPreConfirm();
void startBuyPostConfirm(const std::string& password);
static void onClickBuy(void* data);
static void onClickCancel(void* data);
static void onClickErrorWeb(void* data);
void onClickBuy();
void onClickCancel();
void onClickErrorWeb();
virtual void draw();
virtual BOOL canClose();
virtual void onClose(bool app_quitting);
/*virtual*/ void setMinimized(BOOL b);
private:
class SelectionObserver : public LLParcelObserver
{
public:
virtual void changed();
};
};
static void cacheNameUpdateRefreshesBuyLand(const LLUUID& id, const std::string& full_name, bool is_group)
{
LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false);
if (ui)
{
ui->updateNames();
}
}
void onVisibilityChange ( const LLSD& new_visibility );
};
// static
void LLFloaterBuyLand::buyLand(
@@ -219,102 +221,55 @@ void LLFloaterBuyLand::buyLand(
return;
}
LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(true);
ui->setForGroup(is_for_group);
ui->setParcel(region, parcel);
ui->open(); /*Flawfinder: ignore*/
LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::getInstance();
if(ui)
{
ui->setForGroup(is_for_group);
ui->setParcel(region, parcel);
ui->open(); /*Flawfinder: ignore*/
}
}
// static
void LLFloaterBuyLand::updateCovenantText(const std::string& string, const LLUUID &asset_id)
{
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE);
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL;
if (floater)
{
floater->updateCovenantText(string, asset_id);
floater->updateFloaterCovenantText(string, asset_id);
}
}
// static
void LLFloaterBuyLand::updateEstateName(const std::string& name)
{
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE);
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL;
if (floater)
{
floater->updateEstateName(name);
floater->updateFloaterEstateName(name);
}
}
// static
void LLFloaterBuyLand::updateLastModified(const std::string& text)
{
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE);
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL;
if (floater)
{
floater->updateLastModified(text);
floater->updateFloaterLastModified(text);
}
}
// static
void LLFloaterBuyLand::updateEstateOwnerName(const std::string& name)
{
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE);
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL;
if (floater)
{
floater->updateEstateOwnerName(name);
floater->updateFloaterEstateOwnerName(name);
}
}
// static
BOOL LLFloaterBuyLand::isOpen()
{
LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE);
if (floater)
{
return floater->getVisible();
}
return FALSE;
}
// static
LLFloaterBuyLandUI* LLFloaterBuyLandUI::sInstance = NULL;
// static
LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded)
{
#if !LL_RELEASE_FOR_DOWNLOAD
if (createIfNeeded)
{
delete sInstance;
sInstance = NULL;
}
#endif
if (!sInstance && createIfNeeded)
{
sInstance = new LLFloaterBuyLandUI();
LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml");
sInstance->center();
static bool observingCacheName = false;
if (!observingCacheName)
{
gCacheName->addObserver(cacheNameUpdateRefreshesBuyLand);
observingCacheName = true;
}
static SelectionObserver* parcelSelectionObserver = NULL;
if (!parcelSelectionObserver)
{
parcelSelectionObserver = new SelectionObserver;
LLViewerParcelMgr::getInstance()->addObserver(parcelSelectionObserver);
}
}
return sInstance;
}
#if LL_WINDOWS
// passing 'this' during construction generates a warning. The callee
// only uses the pointer to hold a reference to 'this' which is
@@ -324,39 +279,45 @@ LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded)
#endif
LLFloaterBuyLandUI::LLFloaterBuyLandUI()
: LLFloater(std::string("Buy Land")),
mParcelSelectionObserver(this),
mParcel(0),
mBought(false),
mParcelValid(false), mSiteValid(false),
mChildren(*this), mCurrency(*this), mTransaction(0),
mParcelBuyInfo(0)
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_land.xml");
LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
}
LLFloaterBuyLandUI::~LLFloaterBuyLandUI()
{
LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver);
LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);
delete mTransaction;
if (sInstance == this)
{
sInstance = NULL;
}
delete mTransaction;
}
// virtual
void LLFloaterBuyLandUI::onClose(bool app_quitting)
{
// This object holds onto observer, transactions, and parcel state.
// Despite being single_instance, destroy it to call destructors and clean
// everything up.
setVisible(FALSE);
destroy();
}
void LLFloaterBuyLandUI::SelectionObserver::changed()
{
LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false);
if (ui)
if (LLViewerParcelMgr::getInstance()->selectionEmpty())
{
if (LLViewerParcelMgr::getInstance()->selectionEmpty())
{
ui->close();
}
else {
ui->setParcel(
LLViewerParcelMgr::getInstance()->getSelectionRegion(),
LLViewerParcelMgr::getInstance()->getParcelSelection());
}
mFloater->close();
}
else
{
mFloater->setParcel(LLViewerParcelMgr::getInstance()->getSelectionRegion(),
LLViewerParcelMgr::getInstance()->getParcelSelection());
}
}
@@ -531,16 +492,22 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(!region) return;
U8 sim_access = region->getSimAccess();
std::string rating = LLViewerRegion::accessToString(sim_access);
LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
if (region_name)
{
region_name->setText(region->getName());
std::string region_name_txt = region->getName() + " ("+rating +")";
region_name->setText(region_name_txt);
region_name->setToolTip(region_name->getText());
}
LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
if (region_type)
{
region_type->setText(region->getLocalizedSimProductName());
region_type->setToolTip(region->getLocalizedSimProductName());
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@@ -574,8 +541,7 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
{
check->set(false);
check->setEnabled(true);
check->setCallbackUserData(this);
check->setCommitCallback(onChangeAgreeCovenant);
check->setCommitCallback(boost::bind(&LLFloaterBuyLandUI::onChangeAgreeCovenant,_1,(void*)this));
}
LLTextBox* box = getChild<LLTextBox>("covenant_text");
@@ -603,51 +569,46 @@ void LLFloaterBuyLandUI::onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data)
}
}
void LLFloaterBuyLandUI::updateCovenantText(const std::string &string, const LLUUID& asset_id)
void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, const LLUUID& asset_id)
{
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("covenant_editor");
if (editor)
editor->setHandleEditKeysDirectly(FALSE);
editor->setText(string);
LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
LLTextBox* box = getChild<LLTextBox>("covenant_text");
if (asset_id.isNull())
{
editor->setHandleEditKeysDirectly(FALSE);
editor->setText(string);
check->set(true);
check->setEnabled(false);
refreshUI();
LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
LLTextBox* box = getChild<LLTextBox>("covenant_text");
if(check && box)
{
if (asset_id.isNull())
{
check->set(true);
check->setEnabled(false);
refreshUI();
// remove the line stating that you must agree
box->setVisible(FALSE);
}
else
{
check->setEnabled(true);
// remove the line stating that you must agree
box->setVisible(FALSE);
}
else
{
check->setEnabled(true);
// remove the line stating that you must agree
box->setVisible(TRUE);
}
}
// remove the line stating that you must agree
box->setVisible(TRUE);
}
}
void LLFloaterBuyLandUI::updateEstateName(const std::string& name)
void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name)
{
LLTextBox* box = getChild<LLTextBox>("estate_name_text");
if (box) box->setText(name);
box->setText(name);
box->setToolTip(name);
}
void LLFloaterBuyLandUI::updateLastModified(const std::string& text)
void LLFloaterBuyLandUI::updateFloaterLastModified(const std::string& text)
{
LLTextBox* editor = getChild<LLTextBox>("covenant_timestamp_text");
if (editor) editor->setText(text);
}
void LLFloaterBuyLandUI::updateEstateOwnerName(const std::string& name)
void LLFloaterBuyLandUI::updateFloaterEstateOwnerName(const std::string& name)
{
LLTextBox* box = getChild<LLTextBox>("estate_owner_text");
if (box) box->setText(name);
@@ -743,7 +704,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
return;
}
BOOL remove_contribution = childGetValue("remove_contribution").asBoolean();
BOOL remove_contribution = getChild<LLUICtrl>("remove_contribution")->getValue().asBoolean();
mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(),
gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution);
@@ -835,17 +796,34 @@ void LLFloaterBuyLandUI::updateNames()
}
else if (parcelp->getIsGroupOwned())
{
gCacheName->getGroupName(parcelp->getGroupID(), mParcelSellerName);
mParcelSellerName = "(Loading...)";
gCacheName->getGroup(parcelp->getGroupID(),
boost::bind(&LLFloaterBuyLandUI::updateName, this,
_1, _2, _3));
}
else
{
gCacheName->getFullName(parcelp->getOwnerID(), mParcelSellerName);
mParcelSellerName = "(Loading...)";
gCacheName->get(parcelp->getOwnerID(), false,
boost::bind(&LLFloaterBuyLandUI::updateName, this,
_1, _2, _3));
}
}
void LLFloaterBuyLandUI::updateName(const LLUUID& id,
const std::string& name,
bool is_group)
{
LLParcel* parcelp = mParcel->getParcel();
if (parcelp
&& (is_group ? parcelp->getGroupID() : parcelp->getOwnerID()) == id)
{
// request is current
mParcelSellerName = name;
}
}
void LLFloaterBuyLandUI::startTransaction(TransactionType type,
LLXMLRPCValue params)
void LLFloaterBuyLandUI::startTransaction(TransactionType type, const LLXMLRPCValue& params)
{
delete mTransaction;
mTransaction = NULL;
@@ -926,11 +904,14 @@ void LLFloaterBuyLandUI::tellUserError(
// virtual
BOOL LLFloaterBuyLandUI::postBuild()
{
setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));
mCurrency.prepare();
childSetAction("buy_btn", onClickBuy, this);
childSetAction("cancel_btn", onClickCancel, this);
childSetAction("error_web", onClickErrorWeb, this);
getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickBuy, this));
getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickCancel, this));
getChild<LLUICtrl>("error_web")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickErrorWeb, this));
center();
return TRUE;
}
@@ -996,24 +977,14 @@ BOOL LLFloaterBuyLandUI::canClose()
return can_close;
}
// virtual
void LLFloaterBuyLandUI::setMinimized(BOOL minimize)
void LLFloaterBuyLandUI::onVisibilityChange ( const LLSD& new_visibility )
{
bool restored = (isMinimized() && !minimize);
LLFloater::setMinimized(minimize);
if (restored)
if (new_visibility.asBoolean())
{
refreshUI();
}
}
void LLFloaterBuyLandUI::onClose(bool app_quitting)
{
LLFloater::onClose(app_quitting);
destroy();
}
void LLFloaterBuyLandUI::refreshUI()
{
// section zero: title area
@@ -1027,14 +998,14 @@ void LLFloaterBuyLandUI::refreshUI()
if (mParcelValid)
{
childSetText("info_parcel", mParcelLocation);
getChild<LLUICtrl>("info_parcel")->setValue(mParcelLocation);
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea);
string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("info_size", getString("meters_supports_object", string_args));
getChild<LLUICtrl>("info_size")->setValue(getString("meters_supports_object", string_args));
F32 cost_per_sqm = 0.0f;
if (mParcelActualArea > 0)
@@ -1372,26 +1343,20 @@ void LLFloaterBuyLandUI::startBuyPostConfirm(const std::string& password)
}
// static
void LLFloaterBuyLandUI::onClickBuy(void* data)
void LLFloaterBuyLandUI::onClickBuy()
{
LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data;
self->startBuyPreConfirm();
startBuyPreConfirm();
}
// static
void LLFloaterBuyLandUI::onClickCancel(void* data)
void LLFloaterBuyLandUI::onClickCancel()
{
LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data;
self->close();
close();
}
// static
void LLFloaterBuyLandUI::onClickErrorWeb(void* data)
void LLFloaterBuyLandUI::onClickErrorWeb()
{
LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data;
LLWeb::loadURLExternal(self->mCannotBuyURI);
self->close();
LLWeb::loadURLExternal(mCannotBuyURI);
close();
}

View File

@@ -33,8 +33,8 @@
#ifndef LL_LLFLOATERBUYLAND_H
#define LL_LLFLOATERBUYLAND_H
class LLFloater;
class LLViewerRegion;
class LLViewerTextEditor;
class LLParcelSelection;
class LLFloaterBuyLand
@@ -47,7 +47,6 @@ public:
static void updateEstateName(const std::string& name);
static void updateLastModified(const std::string& text);
static void updateEstateOwnerName(const std::string& name);
static BOOL isOpen();
};
#endif

View File

@@ -1154,20 +1154,6 @@ void LLPanelEditWearable::draw()
ctrl->set(textureIsInvisible(te));
}
}
for (std::map<std::string, S32>::iterator iter = mInvisibilityList.begin();
iter != mInvisibilityList.end(); ++iter)
{
std::string name = iter->first;
ETextureIndex te = (ETextureIndex)iter->second;
childSetVisible(name, is_copyable && is_modifiable && is_complete);
childSetEnabled(name, is_copyable && is_modifiable && is_complete);
LLCheckBoxCtrl* ctrl = getChild<LLCheckBoxCtrl>(name);
if (ctrl)
{
ctrl->set(textureIsInvisible(te));
}
}
}
else
{
@@ -1318,11 +1304,6 @@ void LLPanelEditWearable::setUIPermissions(U32 perm_mask, BOOL is_complete)
{
childSetVisible(iter->first, is_copyable && is_modifiable && is_complete);
}
for (std::map<std::string, S32>::iterator iter = mInvisibilityList.begin();
iter != mInvisibilityList.end(); ++iter)
{
childSetVisible(iter->first, is_copyable && is_modifiable && is_complete);
}
}
/////////////////////////////////////////////////////////////////////
@@ -1342,15 +1323,9 @@ public:
static void onSliderMoved(LLUICtrl* ctrl, void* userdata);
static void onSliderMouseUp(LLUICtrl* ctrl, void* userdata);
static void onHintMinMouseDown(void* userdata);
static void onHintMinHeldDown(void* userdata);
static void onHintMaxMouseDown(void* userdata);
static void onHintMaxHeldDown(void* userdata);
static void onHintMinMouseUp(void* userdata);
static void onHintMaxMouseUp(void* userdata);
void onHintMouseDown( LLVisualParamHint* hint );
void onHintHeldDown( LLVisualParamHint* hint );
void onHintMouseUp( bool max );
void onHintMouseDown( bool max );
void onHintHeldDown( bool max );
F32 weightToPercent( F32 weight );
F32 percentToWeight( F32 percent );
@@ -1419,15 +1394,15 @@ LLScrollingPanelParam::LLScrollingPanelParam( const std::string& name,
childSetValue("min param text", min_name);
childSetValue("max param text", max_name);
mLess = getChild<LLButton>("less");
mLess->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMinMouseDown, this) );
mLess->setMouseUpCallback( boost::bind(LLScrollingPanelParam::onHintMinMouseUp, this) );
mLess->setHeldDownCallback( boost::bind(LLScrollingPanelParam::onHintMinHeldDown, this) );
mLess->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMouseDown, this, false) );
mLess->setMouseUpCallback( boost::bind(&LLScrollingPanelParam::onHintMouseUp, this, false) );
mLess->setHeldDownCallback( boost::bind(&LLScrollingPanelParam::onHintHeldDown, this, false) );
mLess->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD );
mMore = getChild<LLButton>("more");
mMore->setMouseDownCallback( boost::bind(LLScrollingPanelParam::onHintMaxMouseDown, this) );
mMore->setMouseUpCallback( boost::bind(LLScrollingPanelParam::onHintMaxMouseUp, this) );
mMore->setHeldDownCallback( boost::bind(LLScrollingPanelParam::onHintMaxHeldDown, this) );
mMore->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMouseDown, this, true) );
mMore->setMouseUpCallback( boost::bind(&LLScrollingPanelParam::onHintMouseUp, this, true) );
mMore->setHeldDownCallback( boost::bind(&LLScrollingPanelParam::onHintHeldDown, this, true) );
mMore->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD );
}
else
@@ -1603,23 +1578,9 @@ void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata)
LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
}
// static
void LLScrollingPanelParam::onHintMinMouseDown( void* userdata )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
self->onHintMouseDown( self->mHintMin );
}
// static
void LLScrollingPanelParam::onHintMaxMouseDown( void* userdata )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
self->onHintMouseDown( self->mHintMax );
}
void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint )
void LLScrollingPanelParam::onHintMouseDown( bool max )
{
LLVisualParamHint* hint = max ? mHintMax : mHintMin;
// morph towards this result
F32 current_weight = gAgentAvatarp->getVisualParamWeight( hint->getVisualParam() );
@@ -1630,23 +1591,10 @@ void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint )
mLastHeldTime = 0.f;
}
}
// static
void LLScrollingPanelParam::onHintMinHeldDown( void* userdata )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
self->onHintHeldDown( self->mHintMin );
}
// static
void LLScrollingPanelParam::onHintMaxHeldDown( void* userdata )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
self->onHintHeldDown( self->mHintMax );
}
void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
void LLScrollingPanelParam::onHintHeldDown( bool max )
{
LLVisualParamHint* hint = max ? mHintMax : mHintMin;
LLViewerVisualParam* param = hint->getVisualParam();
LLWearable* wearable = gAgentWearables.getWearable((LLWearableType::EType)param->getWearableType(),0); // TODO: MULTI-WEARABLE
@@ -1691,59 +1639,14 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
}
}
// static
void LLScrollingPanelParam::onHintMinMouseUp( void* userdata )
void LLScrollingPanelParam::onHintMouseUp( bool max )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32();
F32 elapsed_time = mMouseDownTimer.getElapsedTimeF32();
LLVOAvatar* avatar = gAgentAvatarp;
if (avatar)
{
LLVisualParamHint* hint = self->mHintMin;
if (elapsed_time < PARAM_STEP_TIME_THRESHOLD)
{
LLViewerVisualParam* param = hint->getVisualParam();
LLWearable* wearable = gAgentWearables.getWearable((LLWearableType::EType)param->getWearableType(),0); // TODO: MULTI-WEARABLE
if(wearable)
{
// step in direction
F32 current_weight = wearable->getVisualParamWeight( param->getID() );
F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight();
// step a fraction in the negative direction
F32 new_weight = current_weight - (range / 10.f);
F32 new_percent = self->weightToPercent(new_weight);
LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
if (slider)
{
if (slider->getMinValue() < new_percent
&& new_percent < slider->getMaxValue())
{
wearable->setVisualParamWeight(param->getID(), new_weight, TRUE);
wearable->writeToAvatar();
slider->setValue( self->weightToPercent( new_weight ) );
}
}
}
}
}
LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
}
void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
{
LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32();
LLVOAvatar* avatar = gAgentAvatarp;
if (avatar)
{
LLVisualParamHint* hint = self->mHintMax;
LLVisualParamHint* hint = max ? mHintMax : mHintMin;
if (elapsed_time < PARAM_STEP_TIME_THRESHOLD)
{
@@ -1754,11 +1657,14 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
{
// step in direction
F32 current_weight = wearable->getVisualParamWeight( param->getID() );
F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight();
F32 range = mHintMax->getVisualParamWeight() - mHintMin->getVisualParamWeight();
//if min, range should be negative.
if(!max)
range *= -1.f;
// step a fraction in the negative direction
F32 new_weight = current_weight + (range / 10.f);
F32 new_percent = self->weightToPercent(new_weight);
LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
F32 new_percent = weightToPercent(new_weight);
LLSliderCtrl* slider = getChild<LLSliderCtrl>("param slider");
if (slider)
{
if (slider->getMinValue() < new_percent
@@ -1766,14 +1672,14 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
{
wearable->setVisualParamWeight(param->getID(), new_weight, TRUE);
wearable->writeToAvatar();
slider->setValue( self->weightToPercent( new_weight ) );
slider->setValue( weightToPercent( new_weight ) );
}
}
}
}
}
LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
LLVisualParamHint::requestHintUpdates( mHintMin, mHintMax );
}

View File

@@ -102,7 +102,6 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =
};
// Local prototypes
void commit_select_tool(LLUICtrl *ctrl, void *data);
void commit_select_component(LLUICtrl *ctrl, void *data);
void click_show_more(void*);
void click_popup_info(void*);
@@ -123,6 +122,7 @@ void commit_radio_orbit(LLUICtrl *, void*);
void commit_radio_pan(LLUICtrl *, void*);
void commit_grid_mode(LLUICtrl *, void*);
void commit_slider_zoom(LLUICtrl *, void*);
void commit_select_tool(LLUICtrl *ctrl, void *data);
//static
@@ -254,15 +254,15 @@ BOOL LLFloaterTools::postBuild()
mRadioSpin = getChild<LLCheckBoxCtrl>("radio spin");
childSetCommitCallback("radio spin",click_popup_grab_spin,NULL);
mRadioPosition = getChild<LLCheckBoxCtrl>("radio position");
childSetCommitCallback("radio position",commit_select_tool,LLToolCompTranslate::getInstance());
childSetCommitCallback("radio position",commit_select_tool,NULL);
mRadioRotate = getChild<LLCheckBoxCtrl>("radio rotate");
childSetCommitCallback("radio rotate",commit_select_tool,LLToolCompRotate::getInstance());
childSetCommitCallback("radio rotate",commit_select_tool,NULL);
mRadioStretch = getChild<LLCheckBoxCtrl>("radio stretch");
childSetCommitCallback("radio stretch",commit_select_tool,LLToolCompScale::getInstance());
childSetCommitCallback("radio stretch",commit_select_tool,NULL);
mRadioSelectFace = getChild<LLCheckBoxCtrl>("radio select face");
childSetCommitCallback("radio select face",commit_select_tool,LLToolFace::getInstance());
childSetCommitCallback("radio select face",commit_select_tool,NULL);
mRadioAlign = getChild<LLCheckBoxCtrl>("radio align");
childSetCommitCallback("radio align",commit_select_tool,QToolAlign::getInstance());
childSetCommitCallback("radio align",commit_select_tool,NULL);
mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts");
childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
childSetCommitCallback("checkbox edit linked parts",commit_select_component,this);
@@ -307,7 +307,7 @@ BOOL LLFloaterTools::postBuild()
mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates");
childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates"));
mRadioSelectLand = getChild<LLCheckBoxCtrl>("radio select land");
childSetCommitCallback("radio select land",commit_select_tool, LLToolSelectLand::getInstance());
childSetCommitCallback("radio select land",commit_select_tool, NULL);
mRadioDozerFlatten = getChild<LLCheckBoxCtrl>("radio flatten");
childSetCommitCallback("radio flatten",click_popup_dozer_mode, (void*)0);
mRadioDozerRaise = getChild<LLCheckBoxCtrl>("radio raise");
@@ -997,7 +997,33 @@ void click_apply_to_selection(void* user)
void commit_select_tool(LLUICtrl *ctrl, void *data)
{
S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners");
gFloaterTools->setEditTool(data);
LLCheckBoxCtrl* group = (LLCheckBoxCtrl*)ctrl;
std::string selected = group->getName();
if (selected == "radio position")
{
LLFloaterTools::setEditTool( LLToolCompTranslate::getInstance() );
}
else if (selected == "radio rotate")
{
LLFloaterTools::setEditTool( LLToolCompRotate::getInstance() );
}
else if (selected == "radio stretch")
{
LLFloaterTools::setEditTool( LLToolCompScale::getInstance() );
}
else if (selected == "radio select face")
{
LLFloaterTools::setEditTool( LLToolFace::getInstance() );
}
else if (selected == "radio align")
{
LLFloaterTools::setEditTool( QToolAlign::getInstance() );
}
else if (selected == "radio select land")
{
LLFloaterTools::setEditTool( LLToolSelectLand::getInstance());
}
gSavedSettings.setBOOL("ShowParcelOwners", show_owners);
}
@@ -1051,7 +1077,8 @@ void LLFloaterTools::onClickGridOptions(void* data)
void LLFloaterTools::setEditTool(void* tool_pointer)
{
select_tool(tool_pointer);
LLTool *tool = (LLTool *)tool_pointer;
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool );
}
void LLFloaterTools::onFocusReceived()

View File

@@ -178,6 +178,7 @@ class AIFilePicker;
class LLInventoryFVBridgeBuilder
{
public:
LLInventoryFVBridgeBuilder() {}
virtual ~LLInventoryFVBridgeBuilder() {}
virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
LLAssetType::EType actual_asset_type,
@@ -627,6 +628,7 @@ public:
class LLRecentInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder
{
public:
LLRecentInventoryBridgeBuilder(): LLInventoryFVBridgeBuilder() {}
// Overrides FolderBridge for Recent Inventory Panel.
// It use base functionality for bridges other than FolderBridge.
virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,

View File

@@ -1435,10 +1435,10 @@ bool idle_startup()
{
case LLUserAuth::E_OK:
response = LLUserAuth::getInstance()->getResponse();
login_response = response["login"];
reason_response = response["reason"];
message_response = response["message"];
message_id = response["message_id"];
login_response = response["login"].asString();
reason_response = response["reason"].asString();
message_response = response["message"].asString();
message_id = response["message_id"].asString();
if(login_response == "true")
{
@@ -4293,45 +4293,45 @@ bool process_login_success_response(std::string& password)
// Override grid info with anything sent in the login response
std::string tmp = response["gridname"];
std::string tmp = response["gridname"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setGridName(tmp);
tmp = response["loginuri"];
tmp = response["loginuri"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginUri(tmp);
tmp = response["welcome"];
tmp = response["welcome"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp);
tmp = response["loginpage"];
tmp = response["loginpage"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp);
tmp = response["economy"];
tmp = response["economy"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp);
tmp = response["helperuri"];
tmp = response["helperuri"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp);
tmp = response["about"];
tmp = response["about"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp);
tmp = response["website"];
tmp = response["website"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp);
tmp = response["help"];
tmp = response["help"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp);
tmp = response["support"];
tmp = response["support"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp);
tmp = response["register"];
tmp = response["register"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp);
tmp = response["account"];
tmp = response["account"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp);
tmp = response["password"];
tmp = response["password"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp);
tmp = response["search"];
tmp = response["search"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp);
tmp = response["currency"];
tmp = response["currency"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp);
tmp = response["real_currency"];
tmp = response["real_currency"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp);
tmp = response["directory_fee"];
tmp = response["directory_fee"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str()));
tmp = response["max_groups"];
tmp = response["max_groups"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str()));
tmp = response["max-agent-groups"];
tmp = response["max-agent-groups"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str()));
tmp = response["VoiceConnector"];
tmp = response["VoiceConnector"].asString();
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setVoiceConnector(tmp);
gHippoGridManager->saveFile();
gHippoLimits->setLimits();
@@ -4351,4 +4351,4 @@ bool process_login_success_response(std::string& password)
success = true;
}
return success;
}
}

View File

@@ -236,8 +236,8 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3
const F32 xyScaleInv = (1.f / xyScale)*(0.2222222222f);
F32 vec[3] = {
fmod((F32)(mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f),
fmod((F32)(mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f),
(F32)fmod((mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f),
(F32)fmod((mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f),
0.f
};
F32 rand_val = llclamp(noise2(vec)* 0.75f + 0.5f, 0.f, 1.f);

View File

@@ -2,31 +2,25 @@
* @file lltextureview.cpp
* @brief LLTextureView class implementation
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Copyright (c) 2001-2009, Linden Research, Inc.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
* Copyright (C) 2010, Linden Research, Inc.
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -44,16 +38,21 @@
#include "llrender.h"
#include "llappviewer.h"
#include "llhoverview.h"
#include "llselectmgr.h"
#include "lltexlayer.h"
#include "lltexturecache.h"
#include "lltexturefetch.h"
#include "llviewercontrol.h"
#include "llviewerobject.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "llvovolume.h"
#include "llviewerstats.h"
// For avatar texture view
#include "llvoavatarself.h"
#include "lltexlayer.h"
extern F32 texmem_lower_bound_scale;
LLTextureView *gTextureView = NULL;
@@ -61,6 +60,7 @@ LLTextureSizeView *gTextureSizeView = NULL;
LLTextureSizeView *gTextureCategoryView = NULL;
#define HIGH_PRIORITY 100000000.f
//static
std::set<LLViewerFetchedTexture*> LLTextureView::sDebugImages;
@@ -381,6 +381,98 @@ LLRect LLTextureBar::getRequiredRect()
////////////////////////////////////////////////////////////////////////////
class LLAvatarTexBar : public LLView
{
public:
LLAvatarTexBar(const std::string& name, LLTextureView* texview)
: LLView(name, FALSE),
mTextureView(texview)
{
S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
setRect(LLRect(0,0,100,line_height * 4));
}
virtual void draw();
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual LLRect getRequiredRect(); // Return the height of this object, given the set options.
private:
LLTextureView* mTextureView;
};
void LLAvatarTexBar::draw()
{
if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) return;
LLVOAvatarSelf* avatarp = gAgentAvatarp;
if (!avatarp) return;
const S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
const S32 v_offset = 0;
const S32 l_offset = 3;
//----------------------------------------------------------------------------
LLGLSUIDefault gls_ui;
LLColor4 color;
U32 line_num = 1;
for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();
baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end();
++baked_iter)
{
const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first;
const LLTexLayerSet *layerset = avatarp->debugGetLayerSet(baked_index);
if (!layerset) continue;
const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite();
if (!layerset_buffer) continue;
LLColor4 text_color = LLColor4::white;
if (layerset_buffer->uploadNeeded())
{
text_color = LLColor4::red;
}
if (layerset_buffer->uploadInProgress())
{
text_color = LLColor4::magenta;
}
std::string text = layerset_buffer->dumpTextureInfo();
LLFontGL::getFontMonospace()->renderUTF8(text, 0, l_offset, v_offset + line_height*line_num,
text_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
line_num++;
}
const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout");
const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");
LLColor4 header_color(1.f, 1.f, 1.f, 0.9f);
const std::string texture_timeout_str = texture_timeout ? llformat("%d",texture_timeout) : "Disabled";
const std::string override_tex_discard_level_str = override_tex_discard_level ? llformat("%d",override_tex_discard_level) : "Disabled";
std::string header_text = llformat("[ Timeout('AvatarBakedTextureUploadTimeout'):%s ] [ LOD_Override('TextureDiscardLevel'):%s ]", texture_timeout_str.c_str(), override_tex_discard_level_str.c_str());
LLFontGL::getFontMonospace()->renderUTF8(header_text, 0, l_offset, v_offset + line_height*line_num,
header_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
line_num++;
std::string section_text = "Avatar Textures Information:";
LLFontGL::getFontMonospace()->renderUTF8(section_text, 0, 0, v_offset + line_height*line_num,
header_color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT);
}
BOOL LLAvatarTexBar::handleMouseDown(S32 x, S32 y, MASK mask)
{
return FALSE;
}
LLRect LLAvatarTexBar::getRequiredRect()
{
LLRect rect;
rect.mTop = 100;
if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) rect.mTop = 0;
return rect;
}
////////////////////////////////////////////////////////////////////////////
class LLGLTexMemBar : public LLView
{
public:
@@ -410,38 +502,39 @@ void LLGLTexMemBar::draw()
F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;
F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;
S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
S32 v_offset = 0;
F32 total_texture_downloaded = (F32)gTotalTextureBytes / (1024 * 1024);
F32 total_object_downloaded = (F32)gTotalObjectBytes / (1024 * 1024);
// U32 cache_max_entries = LLAppViewer::getTextureCache()->getMaxEntries();
U32 total_http_requests = LLAppViewer::getTextureFetch()->getTotalNumHTTPRequests() ;
//----------------------------------------------------------------------------
LLGLSUIDefault gls_ui;
LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
LLColor4 color;
std::string text;
std::string text = "";
S32 global_raw_memory;
{
global_raw_memory = *AIAccess<S32>(LLImageRaw::sGlobalRawMemory);
}
text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot Tex: %.1f MB Tot Obj: %.1f MB",
text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB FBO: %d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot Tex: %.1f MB Tot Obj: %.1f MB Tot Htp: %d",
total_mem,
max_total_mem,
bound_mem,
max_bound_mem,
LLRenderTarget::sBytesAllocated/(1024*1024),
global_raw_memory >> 20, discard_bias,
cache_usage, cache_max_usage, total_texture_downloaded, total_object_downloaded);
cache_usage, cache_max_usage, total_texture_downloaded, total_object_downloaded, total_http_requests);
//, cache_entries, cache_max_entries
LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, line_height*3,
LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
//----------------------------------------------------------------------------
#if 0
S32 bar_left = 400;
S32 bar_width = 200;
S32 top = line_height*3 - 2;
S32 top = line_height*3 - 2 + v_offset;
S32 bottom = top - 6;
S32 left = bar_left;
S32 right = left + bar_width;
@@ -469,7 +562,7 @@ void LLGLTexMemBar::draw()
color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green :
(total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red;
color[VALPHA] = .75f;
gGL.diffuseColor4f(color.mV);
gGL.diffuseColor4fv(color.mV);
gl_rect_2d(left, top, right, bottom); // red/yellow/green
@@ -492,7 +585,7 @@ void LLGLTexMemBar::draw()
color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green :
(bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red;
color[VALPHA] = .75f;
gGL.diffuseColor4f(color.mV);
gGL.diffuseColor4fv(color.mV);
gl_rect_2d(left, top, right, bottom);
#else
@@ -512,7 +605,7 @@ void LLGLTexMemBar::draw()
LLAppViewer::getImageDecodeThread()->getPending(),
gTextureList.mCreateTextureList.size());
LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, line_height*2,
LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*2,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
left += LLFontGL::getFontMonospace()->getWidth(text);
@@ -521,40 +614,40 @@ void LLGLTexMemBar::draw()
color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
color[VALPHA] = text_color[VALPHA];
text = llformat("BW:%.0f/%.0f",bandwidth, max_bandwidth);
LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*2,
LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, v_offset + line_height*2,
color, LLFontGL::LEFT, LLFontGL::TOP);
S32 dx1 = 0;
if (LLAppViewer::getTextureFetch()->mDebugPause)
{
LLFontGL::getFontMonospace()->renderUTF8(std::string("!"), 0, title_x1, line_height,
LLFontGL::getFontMonospace()->renderUTF8(std::string("!"), 0, title_x1, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
dx1 += 8;
}
if (mTextureView->mFreezeView)
{
LLFontGL::getFontMonospace()->renderUTF8(std::string("*"), 0, title_x1, line_height,
LLFontGL::getFontMonospace()->renderUTF8(std::string("*"), 0, title_x1, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
dx1 += 8;
}
if (mTextureView->mOrderFetch)
{
LLFontGL::getFontMonospace()->renderUTF8(title_string1b, 0, title_x1+dx1, line_height,
LLFontGL::getFontMonospace()->renderUTF8(title_string1b, 0, title_x1+dx1, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
}
else
{
LLFontGL::getFontMonospace()->renderUTF8(title_string1a, 0, title_x1+dx1, line_height,
LLFontGL::getFontMonospace()->renderUTF8(title_string1a, 0, title_x1+dx1, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
}
LLFontGL::getFontMonospace()->renderUTF8(title_string2, 0, title_x2, line_height,
LLFontGL::getFontMonospace()->renderUTF8(title_string2, 0, title_x2, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
LLFontGL::getFontMonospace()->renderUTF8(title_string3, 0, title_x3, line_height,
LLFontGL::getFontMonospace()->renderUTF8(title_string3, 0, title_x3, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
LLFontGL::getFontMonospace()->renderUTF8(title_string4, 0, title_x4, line_height,
LLFontGL::getFontMonospace()->renderUTF8(title_string4, 0, title_x4, v_offset + line_height,
text_color, LLFontGL::LEFT, LLFontGL::TOP);
}
@@ -566,7 +659,7 @@ BOOL LLGLTexMemBar::handleMouseDown(S32 x, S32 y, MASK mask)
LLRect LLGLTexMemBar::getRequiredRect()
{
LLRect rect;
rect.mTop = 8;
rect.mTop = 50;
return rect;
}
@@ -646,6 +739,7 @@ LLTextureView::LLTextureView(const std::string& name, const LLRect& rect)
setDisplayChildren(TRUE);
mGLTexMemBar = 0;
mAvatarTexBar = 0;
}
LLTextureView::~LLTextureView()
@@ -653,6 +747,9 @@ LLTextureView::~LLTextureView()
// Children all cleaned up by default view destructor.
delete mGLTexMemBar;
mGLTexMemBar = 0;
delete mAvatarTexBar;
mAvatarTexBar = 0;
}
typedef std::pair<F32,LLViewerFetchedTexture*> decode_pair_t;
@@ -664,6 +761,15 @@ struct compare_decode_pair
}
};
struct KillView
{
void operator()(LLView* viewp)
{
viewp->getParent()->removeChild(viewp);
viewp->die();
}
};
void LLTextureView::draw()
{
if (!mFreezeView)
@@ -671,12 +777,23 @@ void LLTextureView::draw()
// LLViewerObject *objectp;
// S32 te;
for_each(mTextureBars.begin(), mTextureBars.end(), DeletePointer());
for_each(mTextureBars.begin(), mTextureBars.end(), KillView());
mTextureBars.clear();
delete mGLTexMemBar;
mGLTexMemBar = 0;
if (mGLTexMemBar)
{
removeChild(mGLTexMemBar);
mGLTexMemBar->die();
mGLTexMemBar = 0;
}
if (mAvatarTexBar)
{
removeChild(mAvatarTexBar);
mAvatarTexBar->die();
mAvatarTexBar = 0;
}
typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t;
display_list_t display_image_list;
@@ -813,6 +930,7 @@ void LLTextureView::draw()
static S32 max_count = 50;
S32 count = 0;
mNumTextureBars = 0 ;
for (display_list_t::iterator iter = display_image_list.begin();
iter != display_image_list.end(); iter++)
{
@@ -840,6 +958,9 @@ void LLTextureView::draw()
mGLTexMemBar = new LLGLTexMemBar("gl texmem bar", this);
addChild(mGLTexMemBar);
mAvatarTexBar = new LLAvatarTexBar("gl avatartex bar", this);
addChild(mAvatarTexBar);
reshape(getRect().getWidth(), getRect().getHeight(), TRUE);
/*
@@ -920,7 +1041,7 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
}
//-----------------------------------------------------------------
LLTextureSizeView::LLTextureSizeView(const std::string& name) : LLView(name, FALSE)
LLTextureSizeView::LLTextureSizeView(const std::string& name) : LLContainerView(name, LLRect())
{
setVisible(FALSE) ;

View File

@@ -2,31 +2,25 @@
* @file lltextureview.h
* @brief LLTextureView class header file
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Copyright (c) 2001-2009, Linden Research, Inc.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
* Copyright (C) 2010, Linden Research, Inc.
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -38,11 +32,13 @@
class LLViewerFetchedTexture;
class LLTextureBar;
class LLGLTexMemBar;
class LLAvatarTexBar;
class LLTextureView : public LLContainerView
{
friend class LLTextureBar;
friend class LLGLTexMemBar;
friend class LLAvatarTexBar;
public:
LLTextureView(const std::string& name, const LLRect& rect);
~LLTextureView();
@@ -71,13 +67,13 @@ private:
U32 mNumTextureBars;
LLGLTexMemBar* mGLTexMemBar;
LLAvatarTexBar* mAvatarTexBar;
public:
static std::set<LLViewerFetchedTexture*> sDebugImages;
};
class LLGLTexSizeBar;
class LLTextureSizeView : public LLView
class LLTextureSizeView : public LLContainerView
{
public:
LLTextureSizeView(const std::string& name);

View File

@@ -537,7 +537,7 @@ void LLToolBar::onClickDirectory(void*)
// static
void LLToolBar::onClickBuild(void*)
{
toggle_build_mode();
LLToolMgr::getInstance()->toggleBuildMode();
}

View File

@@ -51,10 +51,18 @@
#include "lltoolselectland.h"
#include "lltoolobjpicker.h"
#include "lltoolpipette.h"
#include "llviewerparcelmgr.h"
#include "llagent.h"
#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llmemberlistener.h"
#include "llevent.h"
#include "llviewerjoystick.h"
#include "llviewermenu.h"
#include "llviewerparcelmgr.h"
#include "llfirstuse.h"
#include "llfloatertools.h"
#include "rlvhandler.h"
// Used when app not active to avoid processing hover.
@@ -69,6 +77,24 @@ LLToolset* gFaceEditToolset = NULL;
/////////////////////////////////////////////////////
// LLToolMgr
class LLViewBuildMode : public LLMemberListener<LLView>
{
bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
{
LLToolMgr::getInstance()->toggleBuildMode();
return true;
}
};
class LLViewCheckBuildMode : public LLMemberListener<LLView>
{
bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
{
bool new_value = LLToolMgr::getInstance()->inEdit();
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
};
LLToolMgr::LLToolMgr()
:
mBaseTool(NULL),
@@ -88,6 +114,14 @@ LLToolMgr::LLToolMgr()
gFaceEditToolset = new LLToolset("FaceEdit");
}
void LLToolMgr::initMenu(std::vector<LLPointer<LLMemberListener<LLView> > >& menu_list)
{
menu_list.push_back(new LLViewBuildMode());
menu_list.back()->registerListener(gMenuHolder, "View.BuildMode");
menu_list.push_back(new LLViewCheckBuildMode());
menu_list.back()->registerListener(gMenuHolder, "View.CheckBuildMode");
}
void LLToolMgr::initTools()
{
static BOOL initialized = FALSE;
@@ -236,7 +270,7 @@ void LLToolMgr::updateToolStatus()
getCurrentTool();
}
BOOL LLToolMgr::inEdit()
bool LLToolMgr::inEdit()
{
return mBaseTool != LLToolPie::getInstance() && mBaseTool != gToolNull;
}
@@ -245,6 +279,77 @@ bool LLToolMgr::canEdit()
{
return LLViewerParcelMgr::getInstance()->allowAgentBuild();
}
void LLToolMgr::toggleBuildMode()
{
if (!inBuildMode())
{
ECameraMode camMode = gAgentCamera.getCameraMode();
if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode)
{
// pull the user out of mouselook or appearance mode when entering build mode
handle_reset_view();
}
if (gSavedSettings.getBOOL("EditCameraMovement"))
{
// camera should be set
if (LLViewerJoystick::getInstance()->getOverrideCamera())
{
handle_toggle_flycam();
}
if (gAgentCamera.getFocusOnAvatar())
{
// zoom in if we're looking at the avatar
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis()));
gAgentCamera.cameraZoomIn(0.666f);
gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
}
}
// [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b)
bool fRlvCanEdit = (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ));
if (!fRlvCanEdit)
{
LLObjectSelectionHandle hSel = LLSelectMgr::getInstance()->getSelection();
RlvSelectIsEditable f;
if ((hSel.notNull()) && ((hSel->getFirstRootNode(&f, TRUE)) != NULL))
LLSelectMgr::getInstance()->deselectAll();
}
// [/RLVa:KB]
setCurrentToolset(gBasicToolset);
getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
// Could be first use
LLFirstUse::useBuild();
gAgentCamera.resetView(false);
// avoid spurious avatar movements
LLViewerJoystick::getInstance()->setNeedsReset();
}
else
{
if (gSavedSettings.getBOOL("EditCameraMovement"))
{
// just reset the view, will pull us out of edit mode
handle_reset_view();
}
else
{
// manually disable edit mode, but do not affect the camera
gAgentCamera.resetView(false);
gFloaterTools->close();
gViewerWindow->showCursor();
}
// avoid spurious avatar movements pulling out of edit mode
LLViewerJoystick::getInstance()->setNeedsReset();
}
}
bool LLToolMgr::inBuildMode()
{
// when entering mouselook inEdit() immediately returns true before
@@ -408,9 +513,3 @@ void LLToolset::selectPrevTool()
selectToolByIndex((S32)mToolList.size()-1);
}
}
void select_tool( void *tool_pointer )
{
LLTool *tool = (LLTool *)tool_pointer;
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool );
}

View File

@@ -35,8 +35,11 @@
#include "llkeyboard.h"
#include "llmemberlistener.h"
class LLTool;
class LLToolset;
class LLView;
// Key bindings for common operations
const MASK MASK_VERTICAL = MASK_CONTROL;
@@ -52,14 +55,17 @@ public:
LLToolMgr();
~LLToolMgr();
void initMenu(std::vector<LLPointer<LLMemberListener<LLView> > >& menu_list);
// Must be called after gSavedSettings set up.
void initTools();
LLTool* getCurrentTool(); // returns active tool, taking into account keyboard state
LLTool* getBaseTool(); // returns active tool when overrides are deactivated
BOOL inEdit();
bool inEdit();
bool canEdit();
void toggleBuildMode();
/* Determines if we are in Build mode or not. */
bool inBuildMode();
@@ -118,10 +124,6 @@ protected:
tool_list_t mToolList;
};
// Handy callbacks for switching tools
void select_tool(void *tool);
// Globals
extern LLToolset* gBasicToolset;

View File

@@ -75,7 +75,7 @@
#include "rlvhandler.h"
// [/RLVa:KB]
extern void handle_buy(void*);
extern void handle_buy();
extern BOOL gDebugClicks;
@@ -627,7 +627,7 @@ void LLToolPie::selectionPropertiesReceived()
switch (click_action)
{
case CLICK_ACTION_BUY:
handle_buy(NULL);
handle_buy();
break;
case CLICK_ACTION_PAY:
handle_give_money_dialog();

View File

@@ -164,6 +164,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object)
if (isObjectAttached(object))
{
llinfos << "(same object re-attached)" << llendl;
LL_INFOS("Attachment") << object->getID() << " ("<<object->getAttachmentPointName()<<") OBJECT re-attached" << llendl;
removeObject(object);
// Pass through anyway to let setupDrawable()
// re-connect object to the joint correctly
@@ -178,6 +179,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object)
if (getAttachedObject(object->getAttachmentItemID()))
{
llinfos << "(same object re-attached)" << llendl;
LL_INFOS("Attachment") << object->getID() << " ("<<object->getAttachmentPointName()<<") ITEM re-attached" << llendl;
object->markDead();
// If this happens to be attached to self, then detach.

View File

@@ -344,7 +344,6 @@ typedef LLMemberListener<LLView> view_listener_t;
//
// Local prototypes
//
void handle_leave_group(void *);
// File Menu
void handle_compress_image(void*);
@@ -368,37 +367,34 @@ void handle_region_clear_temp_asset_data(void*);
BOOL sitting_on_selection();
void near_sit_object();
void label_sit_or_stand(std::string& label, void*);
//void label_sit_or_stand(std::string& label, void*);
// buy and take alias into the same UI positions, so these
// declarations handle this mess.
BOOL is_selection_buy_not_take();
S32 selection_price();
BOOL enable_take();
void handle_take();
bool confirm_take(const LLSD& notification, const LLSD& response);
BOOL enable_buy(void*);
void handle_buy(void *);
bool confirm_take(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle selection_handle);
void handle_buy_object(LLSaleInfo sale_info);
void handle_buy_contents(LLSaleInfo sale_info);
void label_touch(std::string& label, void*);
bool for_sale_selection(LLSelectNode* nodep);
// Land pie menu
void near_sit_down_point(BOOL success, void *);
// Avatar pie menu
void handle_follow(void *userdata);
void handle_talk_to(void *userdata);
// Debug menu
void show_permissions_control(void*);
void toggle_build_options(void* user_data);
void reload_ui(void*);
void handle_agent_stop_moving(void*);
void print_packets_lost(void*);
void drop_packet(void*);
void velocity_interpolate( void* data );
void toggle_wind_audio(void);
void toggle_water_audio(void);
void handle_rebake_textures(void*);
BOOL check_admin_override(void*);
void handle_admin_override_toggle(void*);
@@ -407,14 +403,6 @@ void handle_toggle_hacked_godmode(void*);
BOOL check_toggle_hacked_godmode(void*);
#endif
void toggle_glow(void *);
BOOL check_glow(void *);
void toggle_vertex_shaders(void *);
BOOL check_vertex_shaders(void *);
void toggle_cull_small(void *);
void toggle_show_xui_names(void *);
BOOL check_show_xui_names(void *);
@@ -568,14 +556,8 @@ void handle_crash(void*);
void handle_dump_followcam(void*);
void handle_viewer_enable_message_log(void*);
void handle_viewer_disable_message_log(void*);
void handle_send_postcard(void*);
void handle_gestures_old(void*);
void handle_focus(void *);
BOOL enable_buy_land(void*);
void handle_move(void*);
void handle_show_inventory(void*);
void handle_activate(void*);
BOOL enable_activate(void*);
// Help menu
void handle_buy_currency(void*);
@@ -687,6 +669,8 @@ void set_underclothes_menu_options()
}
}
static std::vector<LLPointer<view_listener_t> > sMenus;
void init_menus()
{
S32 top = gViewerWindow->getRootView()->getRect().getHeight();
@@ -892,6 +876,7 @@ void init_menus()
gMenuHolder->addChild(gLoginMenuBarView);
LLToolMgr::getInstance()->initMenu(sMenus);
}
@@ -900,8 +885,6 @@ void init_client_menu(LLMenuGL* menu)
{
LLMenuGL* sub_menu = NULL;
//menu->addChild(new LLMenuItemCallGL("Permissions Control", &show_permissions_control));
// this is now in the view menu so we don't need it here!
{
// *TODO: Translate
@@ -1544,7 +1527,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
menu->addSeparator();
menu->addChild(new LLMenuItemCheckGL("Axes", menu_toggle_control, NULL, menu_check_control, (void*)"ShowAxes"));
//menu->addChild(new LLMenuItemCheckGL("Cull Small Objects", toggle_cull_small, NULL, menu_check_control, (void*)"RenderCullBySize"));
menu->addSeparator();
menu->addChild(new LLMenuItemCheckGL("Hide Selected", menu_toggle_control, NULL, menu_check_control, (void*)"HideSelectedObjects"));
@@ -1809,8 +1791,6 @@ void init_server_menu(LLMenuGL* menu)
menu->createJumpKeys();
}
static std::vector<LLPointer<view_listener_t> > sMenus;
//-----------------------------------------------------------------------------
// cleanup_menus()
//-----------------------------------------------------------------------------
@@ -1968,18 +1948,19 @@ class LLObjectEnableTouch : public view_listener_t
}
};
void label_touch(std::string& label, void*)
{
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mTouchName.empty())
{
label.assign(node->mTouchName);
}
else
{
label.assign("Touch");
}
}
//void label_touch(std::string& label, void*)
//{
// LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
// if (node && node->mValid && !node->mTouchName.empty())
// {
// label.assign(node->mTouchName);
// }
// else
// {
// label.assign("Touch");
// }
//}
bool handle_object_open()
{
@@ -2028,95 +2009,7 @@ class LLObjectEnableOpen : public view_listener_t
};
class LLViewCheckBuildMode : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
bool new_value = LLToolMgr::getInstance()->inEdit();
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
};
bool toggle_build_mode()
{
if (LLToolMgr::getInstance()->inBuildMode())
{
if (gSavedSettings.getBOOL("EditCameraMovement"))
{
// just reset the view, will pull us out of edit mode
handle_reset_view();
}
else
{
// manually disable edit mode, but do not affect the camera
gAgentCamera.resetView(false);
gFloaterTools->close();
gViewerWindow->showCursor();
}
// avoid spurious avatar movements pulling out of edit mode
LLViewerJoystick::getInstance()->setNeedsReset();
}
else
{
ECameraMode camMode = gAgentCamera.getCameraMode();
if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode)
{
// pull the user out of mouselook or appearance mode when entering build mode
handle_reset_view();
}
if (gSavedSettings.getBOOL("EditCameraMovement"))
{
// camera should be set
if (LLViewerJoystick::getInstance()->getOverrideCamera())
{
handle_toggle_flycam();
}
if (gAgentCamera.getFocusOnAvatar())
{
// zoom in if we're looking at the avatar
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis()));
gAgentCamera.cameraZoomIn(0.666f);
gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
}
}
// [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b)
bool fRlvCanEdit = (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ));
if (!fRlvCanEdit)
{
LLObjectSelectionHandle hSel = LLSelectMgr::getInstance()->getSelection();
RlvSelectIsEditable f;
if ((hSel.notNull()) && ((hSel->getFirstRootNode(&f, TRUE)) != NULL))
LLSelectMgr::getInstance()->deselectAll();
}
// [/RLVa:KB]
LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
// Could be first use
LLFirstUse::useBuild();
gAgentCamera.resetView(false);
// avoid spurious avatar movements
LLViewerJoystick::getInstance()->setNeedsReset();
}
return true;
}
class LLViewBuildMode : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
return toggle_build_mode();
}
};
class LLViewJoystickFlycam : public view_listener_t
@@ -2517,15 +2410,18 @@ BOOL enable_has_attachments(void*)
//---------------------------------------------------------------------------
// Avatar pie menu
//---------------------------------------------------------------------------
void handle_follow(void *userdata)
{
// follow a given avatar by ID
LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
if (objectp)
{
gAgent.startFollowPilot(objectp->getID());
}
}
//---------------------------------------------------------------------------
// Avatar pie menu
//---------------------------------------------------------------------------
//void handle_follow(void *userdata)
//{
// // follow a given avatar by ID
// LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
// if (objectp)
// {
// gAgent.startFollowPilot(objectp->getID());
// }
//}
class LLObjectEnableMute : public view_listener_t
{
@@ -3415,16 +3311,6 @@ bool callback_leave_group(const LLSD& notification, const LLSD& response)
return false;
}
void handle_leave_group(void *)
{
if (gAgent.getGroupID() != LLUUID::null)
{
LLSD args;
args["GROUP"] = gAgent.getGroupName();
LLNotificationsUtil::add("GroupLeaveConfirmMember", args, LLSD(), callback_leave_group);
}
}
void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm, PermissionBit bit, const char* txt)
{
LLAggregatePermissions::EValue val = ag_perm.getValue(bit);
@@ -3447,32 +3333,35 @@ void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm
string.append(buffer);
}
BOOL enable_buy(void*)
bool enable_buy_object()
{
// In order to buy, there must only be 1 purchaseable object in
// the selection manger.
if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return FALSE;
if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return false;
LLViewerObject* obj = NULL;
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
if(node)
{
obj = node->getObject();
if(!obj) return FALSE;
if(!obj) return false;
if(node->mSaleInfo.isForSale() && node->mPermissions->getMaskOwner() & PERM_TRANSFER &&
(node->mPermissions->getMaskOwner() & PERM_COPY || node->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY))
if( for_sale_selection(node) )
{
if(obj->permAnyOwner()) return TRUE;
// *NOTE: Is this needed? This checks to see if anyone owns the
// object, dating back to when we had "public" objects owned by
// no one. JC
if(obj->permAnyOwner()) return true;
}
}
return FALSE;
return false;
}
class LLObjectEnableBuy : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
bool new_value = enable_buy(NULL);
bool new_value = enable_buy_object();
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -4108,15 +3997,6 @@ class LLLandSit : public view_listener_t
}
};
void show_permissions_control(void*)
{
LLFloaterPermissionsMgr* floaterp = LLFloaterPermissionsMgr::show();
floaterp->mPermissions->addPermissionsData("foo1", LLUUID::null, 0);
floaterp->mPermissions->addPermissionsData("foo2", LLUUID::null, 0);
floaterp->mPermissions->addPermissionsData("foo3", LLUUID::null, 0);
}
class LLCreateLandmarkCallback : public LLInventoryCallback
{
public:
@@ -4127,11 +4007,6 @@ public:
}
};
void reload_ui(void *)
{
LLUICtrlFactory::getInstance()->rebuild();
}
class LLWorldFly : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -4278,7 +4153,9 @@ void reset_view_final( BOOL proceed )
return;
}
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
gAgentCamera.resetView(TRUE, TRUE);
gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
}
class LLViewLookAtLastChatter : public view_listener_t
@@ -4994,7 +4871,7 @@ void handle_take()
LLNotification::Params params("ConfirmObjectTakeLock");
params.payload(payload)
.functor(confirm_take);
.functor(boost::bind(&confirm_take, _1, _2, LLSelectMgr::instance().getSelection()));
if(locked_but_takeable_object ||
!you_own_everything)
@@ -5021,7 +4898,7 @@ void handle_take()
}
}
bool confirm_take(const LLSD& notification, const LLSD& response)
bool confirm_take(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle selection_handle)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if(enable_take() && (option == 0))
@@ -5091,7 +4968,7 @@ class LLToolsBuyOrTake : public view_listener_t
if (total_price <= gStatusBar->getBalance() || total_price == 0)
{
handle_buy(NULL);
handle_buy();
}
else
{
@@ -5112,7 +4989,7 @@ class LLToolsEnableBuyOrTake : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
bool is_buy = is_selection_buy_not_take();
bool new_value = is_buy ? enable_buy(NULL) : enable_take();
bool new_value = is_buy ? enable_buy_object() : enable_take();
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
// Update label
@@ -5230,7 +5107,7 @@ void handle_buy_currency(void*)
// LLFloaterBuyCurrency::buyCurrency();
}
void handle_buy(void*)
void handle_buy()
{
if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
@@ -5252,11 +5129,26 @@ class LLObjectBuy : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
handle_buy(NULL);
handle_buy();
return true;
}
};
bool anyone_copy_selection(LLSelectNode* nodep)
{
bool perm_copy = (bool)(nodep->getObject()->permCopy());
bool all_copy = (bool)(nodep->mPermissions->getMaskEveryone() & PERM_COPY);
return perm_copy && all_copy;
}
bool for_sale_selection(LLSelectNode* nodep)
{
return nodep->mSaleInfo.isForSale()
&& nodep->mPermissions->getMaskOwner() & PERM_TRANSFER
&& (nodep->mPermissions->getMaskOwner() & PERM_COPY
|| nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY);
}
BOOL sitting_on_selection()
{
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
@@ -6843,33 +6735,6 @@ class LLShowAgentGroups : public view_listener_t
return true;
}
};
void handle_focus(void *)
{
if (gDisconnected)
{
return;
}
if (gAgentCamera.getFocusOnAvatar())
{
// zoom in if we're looking at the avatar
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
gAgentCamera.cameraZoomIn(0.666f);
}
else
{
gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
}
gViewerWindow->moveCursorToCenter();
// Switch to camera toolset
// LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset);
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCamera::getInstance() );
}
class LLLandEdit : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -6928,26 +6793,6 @@ BOOL enable_buy_land(void*)
}
void handle_move(void*)
{
if (gAgentCamera.getFocusOnAvatar())
{
// zoom in if we're looking at the avatar
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
gAgentCamera.cameraZoomIn(0.666f);
}
else
{
gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
}
gViewerWindow->moveCursorToCenter();
LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
}
class LLObjectAttachToAvatar : public view_listener_t
{
@@ -7558,16 +7403,6 @@ class LLAvatarSendIM : public view_listener_t
}
};
void handle_activate(void*)
{
}
BOOL enable_activate(void*)
{
return FALSE;
}
namespace
{
struct QueueObjects : public LLSelectedObjectFunctor
@@ -8302,19 +8137,6 @@ BOOL enable_god_basic(void*)
//return gAgent.getGodLevel() > GOD_NOT;
}
#if 0 // 1.9.2
void toggle_vertex_shaders(void *)
{
BOOL use_shaders = gPipeline.getUseVertexShaders();
gPipeline.setUseVertexShaders(use_shaders);
}
BOOL check_vertex_shaders(void *)
{
return gPipeline.getUseVertexShaders();
}
#endif
void toggle_show_xui_names(void *)
{
BOOL showXUINames = gSavedSettings.getBOOL("ShowXUINames");
@@ -8328,15 +8150,6 @@ BOOL check_show_xui_names(void *)
return gSavedSettings.getBOOL("ShowXUINames");
}
void toggle_cull_small(void *)
{
// gPipeline.mCullBySize = !gPipeline.mCullBySize;
//
// gSavedSettings.setBOOL("RenderCullBySize", gPipeline.mCullBySize);
}
class LLToolsSelectOnlyMyObjects : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -9254,7 +9067,7 @@ class LLEditTakeOff : public view_listener_t
&& (gAgentWearables.getWearableCount(type) > 0))
{
// MULTI-WEARABLES: assuming user wanted to remove top shirt.
U32 wearable_index = gAgentWearables.getWearableCount(type) - 1;
S32 wearable_index = gAgentWearables.getWearableCount(type) - 1;
// [RLVa:KB] - Checked: 2010-06-09 (RLVa-1.2.0g) | Added: RLVa-1.2.0g
if ( (rlv_handler_t::isEnabled()) && (gRlvWearableLocks.hasLockedWearable(type)) )
@@ -9424,7 +9237,7 @@ class LLWorldDayCycle : public view_listener_t
}
};
static void addMenu(view_listener_t *menu, const std::string& name)
void addMenu(view_listener_t *menu, const std::string& name)
{
sMenus.push_back(menu);
menu->registerListener(gMenuHolder, name);
@@ -9494,7 +9307,6 @@ void initialize_menus()
// View menu
addMenu(new LLViewMouselook(), "View.Mouselook");
addMenu(new LLViewBuildMode(), "View.BuildMode");
addMenu(new LLViewJoystickFlycam(), "View.JoystickFlycam");
addMenu(new LLViewCommunicate(), "View.Communicate");
addMenu(new LLViewResetView(), "View.ResetView");
@@ -9514,7 +9326,6 @@ void initialize_menus()
addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList");
addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips");
addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent");

View File

@@ -39,7 +39,7 @@ class LLUICtrl;
class LLView;
class LLParcelSelection;
class LLObjectSelection;
class LLSelectNode;
void pre_init_menus();
void init_menus();
@@ -97,8 +97,17 @@ void exchange_callingcard(const LLUUID& dest_id);
void handle_gestures(void*);
void handle_sit_down(void*);
bool toggle_build_mode();
void handle_object_build(void*);
void handle_buy();
// Can anyone take a free copy of the object?
// *TODO: Move to separate file
bool anyone_copy_selection(LLSelectNode* nodep);
// Is this selected object for sale?
// *TODO: Move to separate file
bool for_sale_selection(LLSelectNode* nodep);
void handle_save_snapshot(void *);
void handle_toggle_flycam();
void handle_fake_away_status(void*);
@@ -106,6 +115,7 @@ void handle_fake_away_status(void*);
bool handle_sit_or_stand();
bool handle_give_money_dialog();
bool handle_object_open();
bool enable_buy_object();
bool handle_go_to();
// Export to XML or Collada

View File

@@ -4853,7 +4853,9 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
// Don't play sounds from gestures if they are not enabled.
if (object_id == owner_id && !gSavedSettings.getBOOL("EnableGestureSounds"))
{
return;
// Don't mute own gestures, if they're not muted.
if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
return;
}
// <edit>

View File

@@ -1769,6 +1769,22 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
LLViewerObject *sent_parentp = gObjectList.findObject(parent_uuid);
if(isAttachment())
{
llassert_always(gAgentID.notNull());
if(parent_uuid == gAgentID)
{
static std::map<LLUUID,bool> state_map;
std::map<LLUUID,bool>::iterator it = state_map.find(getID());
if(it == state_map.end() || (!it->second && sent_parentp))
{
it->second = sent_parentp != NULL;
LL_INFOS("Attachment") << getID() << " ("<<getAttachmentPointName()<<") has " << (sent_parentp ? "" : "no ") << "parent." << llendl;
}
}
}
//
// Check to see if we have the corresponding viewer object for the parent.
//

View File

@@ -1107,7 +1107,7 @@ public:
}
else if( i != you_index)
{
U32 loc = x << 16 | y << 8 | z; loc = loc;
//U32 loc = x << 16 | y << 8 | z; //Unused variable, why did this exist?
U32 pos = 0x0;
pos |= x;
pos <<= 8;

View File

@@ -89,7 +89,7 @@ const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
// ST_VERSION
StatAttributes("Version", TRUE, FALSE),
// ST_AVATAR_EDIT_SECONDS
StatAttributes("Seconds in Edit Appearence", FALSE, TRUE),
StatAttributes("Seconds in Edit Appearance", FALSE, TRUE),
// ST_TOOLBOX_SECONDS
StatAttributes("Seconds using Toolbox", FALSE, TRUE),
// ST_CHAT_COUNT

View File

@@ -824,7 +824,9 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
//------------------------------------------------------------------------
LLVOAvatar::~LLVOAvatar()
{
if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
//App teardown is a mess. Avatar destruction can be unpredictable due to all potential refs to the smartptr.
//Cannot guarantee that LLNotificationUtil will be usable during shutdown chain.
if (!LLApp::isQuitting() && gSavedSettings.getBOOL("DebugAvatarRezTime"))
{
if (!mFullyLoaded)
{
@@ -6753,10 +6755,19 @@ void LLVOAvatar::addChild(LLViewerObject *childp)
LLViewerObject::addChild(childp);
if (childp->mDrawable)
{
if(isSelf())
{
LL_INFOS("Attachment") << childp->getID() << " ("<<childp->getAttachmentPointName()<<") attached." << llendl;
llassert(std::find(mPendingAttachment.begin(), mPendingAttachment.end(), childp) == mPendingAttachment.end());
}
attachObject(childp);
}
else
{
if(isSelf())
{
LL_INFOS("Attachment") << childp->getID() << " ("<<childp->getAttachmentPointName()<<") pending." << llendl;
}
mPendingAttachment.push_back(childp);
}
}
@@ -6890,6 +6901,10 @@ void LLVOAvatar::lazyAttach()
{
if (mPendingAttachment[i]->mDrawable)
{
if(isSelf())
{
LL_INFOS("Attachment") << mPendingAttachment[i]->getID() << " ("<<mPendingAttachment[i]->getAttachmentPointName()<<") done pending. attached." << llendl;
}
attachObject(mPendingAttachment[i]);
}
else

View File

@@ -469,7 +469,7 @@ void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code)
case CURLE_SSL_CACERT:
case CURLE_SSL_CONNECT_ERROR:
message =
"Often this means that your computer\'s clock is set incorrectly.\n"
"Often this means that your computer's clock is set incorrectly.\n"
"Please go to Control Panels and make sure the time and date\n"
"are set correctly.\n"
"\n"

View File

@@ -22,7 +22,7 @@
follows="top|left"
font="SansSerif"
height="343"
bg_readonly_color="Transparent"
bg_readonly_color="transparent"
left="1"
max_length="65536"
name="support_editor"
@@ -49,7 +49,7 @@
<text_editor
enabled="false"
follows="left|top"
bg_readonly_color="Transparent"
bg_readonly_color="transparent"
left="1"
text_color="LtGray"
max_length="65536"

View File

@@ -7214,9 +7214,9 @@ Click 'Wear' to attach the Physics Wearable, or click 'Cancel' if you wish to ma
<notification
icon="alert.tga"
name="SGIncompleteAppearence"
name="SGIncompleteAppearance"
type="alert">
Sending incomplete appearence. You may appear to others as a cloud.
Sending incomplete appearance. You may appear to others as a cloud.
Your shape, skin, hair or eyes might be defect.
<usetemplate

View File

@@ -2524,4 +2524,144 @@ Sets value of param property for plugin module.
(OpenSim only.)
</string>
<string name="Unnamed">(Unnamed)</string>
<string name="LSLTipText_llGetMassMKS">
float llGetMassMKS()
Returns a float that is the mass (in
Kilograms) of the object that the
script is attached to.
</string>
<string name="LSLTipText_llGetMemoryLimit">
integer llGetMemoryLimit()
Get the maximum memory a script can use.
</string>
<string name="LSLTipText_llGetParcelMusicURL">
string llGetParcelMusicURL()
Returns a string containing the parcel streaming audio URL.
The object owner must also be the land owner.
</string>
<string name="LSLTipText_llGetPhysicsMaterial">
list llGetPhysicsMaterial()
Used to get the physical characteristics of an object.
Returns a list in the form [ float gravity_multiplier, float restitution, float friction, float density ]
</string>
<string name="LSLTipText_llManageEstateAccess">
integer llManageEstateAccess(integer action, key avatar)
Used to add or remove agents from the estate's agent access or ban lists or groups from the estate's group access list.
</string>
<string name="LSLTipText_llSetAngularVelocity">
llSetAngularVelocity(vector force, integer local)
Applies rotational velocity to object.
</string>
<string name="LSLTipText_llSetKeyframedMotion">
llSetKeyframedMotion(list keyframes, list options)
Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between keyframes by the simulator.
</string>
<string name="LSLTipText_llSetPhysicsMaterial">
llSetPhysicsMaterial(integer material, float gravity,
float restitution, float friction, float density)
Used for setting the physical characteristics of an object.
</string>
<string name="LSLTipText_llSetRegionPos">
integer llSetRegionPos(vector position)
Tries to move the entire object so that the root prim is within 0.1m of position
</string>
<string name="LSLTipText_llSetVelocity">
llSetVelocity(vector force, integer local)
Applies velocity to an object
</string>
<string name="LSLTipText_llTransferLindenDollars">
key llTransferLindenDollars(key destination, integer amount)
Transfer amount of L$ money from script owner to destination avatar.
</string>
<!-- Pathfinder functions. Current state: alpha -->
<string name="LSLTipText_llCreateCharacter">
llCreateCharacter(list options)
Creates a pathfinding entity, known as a "character" from the object containing the script.
</string>
<string name="LSLTipText_llDeleteCharacter">
llDeleteCharacter()
Convert the current linkset back to a standard object, removing all pathfinding properties.
</string>
<string name="LSLTipText_llEvade">
llEvade(key target, list options)
Characters will try to hide from their pursuers if there is a good hiding spot along their fleeing path.
</string>
<string name="LSLTipText_llExecCharacterCmd">
llExecCharacterCmd(integer command, list options)
Send a command to the pathing system.
</string>
<string name="LSLTipText_llGetClosestNavPoint">
list llGetClosestNavPoint(vector point, list options)
Finds the closest navpoint and returns a list with a single vector if succesful. Returns empty list when no navpoints found.
</string>
<string name="LSLTipText_llFleeFrom">
llFleeFrom(vector source, float distance, list options)
Tells an object to keep away from a defined position in the region or adjacent regions.
</string>
<string name="LSLTipText_llNavigateTo">
llNavigateTo(vector pos, list options)
Tells an object to travel to a defined position in the region or adjacent regions.
</string>
<string name="LSLTipText_llPatrolPoints">
llPatrolPoints(list patrolPoints, list options)
Sets the object patrolling between the points specified in patrolPoints.
</string>
<string name="LSLTipText_llPursue">
llPursue(key target, list options)
Causes the object to pursue a target.
</string>
<string name="LSLTipText_llUpdateCharacter">
llUpdateCharacter(list options)
Updates settings for a character.
</string>
<string name="LSLTipText_llWanderWithin">
llWanderWithin(vector origin, float dist, list options)
Sets a character to wander about a central spot within a specified radius.
</string>
<string name="LSLTipText_osIsNpc">
integer osIsNpc(key npc)
Returns TRUE if the given key is an NPC, false otherwise.
(OpenSim only.)
</string>
<string name="LSLTipText_osNpcGetOwner">
key osNpcGetOwner(key npc)
Return the owner key of the given NPC. If the NPC is unowned or the input key does not belong to an NPC then it returns NULL_KEY.
(OpenSim only.)
</string>
<string name="LSLTipText_osGetGridCustom">
string osGetGridCustom(string key)
Reads configuration strings from the [GridInfo] setion in OpenSim.ini.
(OpenSim only.)
</string>
<string name="LSLTipText_osGetGridHomeURI">
string osGetGridHomeURI()
Returns the hypergrid URI of the grid where the user logged in.
(OpenSim only.)
</string>
<string name="LSLTipText_osNpcPlayAnimation">
osNpcPlayAnimation(key npc, string animation)
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same object as the script.
(OpenSim only.)
</string>
<string name="LSLTipText_osNpcSit">
osNpcSit(key npc, key target, integer options)
Sit an NPC on a prim target. No options have been implemented yet, so always input 0.
(OpenSim only.)
</string>
<string name="LSLTipText_osNpcStand">
osNpcStand(key npc)
Make an NPC stand up.
(OpenSim only.)
</string>
<string name="LSLTipText_osNpcStopAnimation">
osNpcStopAnimation(key npc, string animation)
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.
(OpenSim only.)
</string>
<string name="LSLTipText_osSetRot">
osSetRot(key target, quaternion rotation)
Rotates an object or avatar.
(OpenSim only.)
</string>
</strings>

View File

@@ -40,6 +40,9 @@
#include "volume_catcher.h"
#ifndef LL_WINDOWS
#include <unistd.h>
#endif
extern "C" {
#include <glib.h>