merge from viewer2.
commit
05e15ccb82
|
|
@ -172,8 +172,8 @@ if (LINUX)
|
|||
if (NOT STANDALONE)
|
||||
# this stops us requiring a really recent glibc at runtime
|
||||
add_definitions(-fno-stack-protector)
|
||||
# linking can be so slow - give us a chance to figure out why
|
||||
set(CMAKE_CXX_LINK_FLAGS "-Wl,--stats,--no-keep-memory")
|
||||
# linking can be very memory-hungry, especially the final viewer link
|
||||
set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
|
||||
endif (NOT STANDALONE)
|
||||
endif (VIEWER)
|
||||
|
||||
|
|
|
|||
|
|
@ -181,6 +181,8 @@ LLVorbisDecodeState::LLVorbisDecodeState(const LLUUID &uuid, const std::string &
|
|||
mFileHandle = LLLFSThread::nullHandle();
|
||||
#endif
|
||||
// No default value for mVF, it's an ogg structure?
|
||||
// Hey, let's zero it anyway, for predictability.
|
||||
memset(&mVF, 0, sizeof(mVF));
|
||||
}
|
||||
|
||||
LLVorbisDecodeState::~LLVorbisDecodeState()
|
||||
|
|
|
|||
|
|
@ -114,7 +114,11 @@ static timer_tree_dfs_iterator_t end_timer_tree()
|
|||
class NamedTimerFactory : public LLSingleton<NamedTimerFactory>
|
||||
{
|
||||
public:
|
||||
NamedTimerFactory()
|
||||
NamedTimerFactory()
|
||||
: mActiveTimerRoot(NULL),
|
||||
mTimerRoot(NULL),
|
||||
mAppTimer(NULL),
|
||||
mRootFrameState(NULL)
|
||||
{}
|
||||
|
||||
/*virtual */ void initSingleton()
|
||||
|
|
|
|||
|
|
@ -565,19 +565,23 @@ LLEventTimer::LLEventTimer(F32 period)
|
|||
: mEventTimer()
|
||||
{
|
||||
mPeriod = period;
|
||||
mBusy = false;
|
||||
}
|
||||
|
||||
LLEventTimer::LLEventTimer(const LLDate& time)
|
||||
: mEventTimer()
|
||||
{
|
||||
mPeriod = (F32)(time.secondsSinceEpoch() - LLDate::now().secondsSinceEpoch());
|
||||
mBusy = false;
|
||||
}
|
||||
|
||||
|
||||
LLEventTimer::~LLEventTimer()
|
||||
{
|
||||
llassert(!mBusy); // this LLEventTimer was destroyed from within its own tick() function - bad. if you want tick() to cause destruction of its own timer, make it return true.
|
||||
}
|
||||
|
||||
//static
|
||||
void LLEventTimer::updateClass()
|
||||
{
|
||||
std::list<LLEventTimer*> completed_timers;
|
||||
|
|
@ -587,10 +591,12 @@ void LLEventTimer::updateClass()
|
|||
F32 et = timer.mEventTimer.getElapsedTimeF32();
|
||||
if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
|
||||
timer.mEventTimer.reset();
|
||||
timer.mBusy = true;
|
||||
if ( timer.tick() )
|
||||
{
|
||||
completed_timers.push_back( &timer );
|
||||
}
|
||||
timer.mBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ public:
|
|||
protected:
|
||||
LLTimer mEventTimer;
|
||||
F32 mPeriod;
|
||||
bool mBusy;
|
||||
};
|
||||
|
||||
U64 LL_COMMON_API totalTime(); // Returns current system time in microseconds
|
||||
|
|
|
|||
|
|
@ -343,20 +343,20 @@ public:
|
|||
/// Instantiate an LLTreeDFSIter to start a depth-first walk. Pass
|
||||
/// functors to extract the 'child begin' and 'child end' iterators from
|
||||
/// each node.
|
||||
LLTreeDFSIter(const ptr_type& node, const func_type& beginfunc, const func_type& endfunc):
|
||||
mBeginFunc(beginfunc),
|
||||
mEndFunc(endfunc),
|
||||
mSkipChildren(false)
|
||||
LLTreeDFSIter(const ptr_type& node, const func_type& beginfunc, const func_type& endfunc)
|
||||
: mBeginFunc(beginfunc),
|
||||
mEndFunc(endfunc),
|
||||
mSkipChildren(false)
|
||||
{
|
||||
// Only push back this node if it's non-NULL!
|
||||
if (node)
|
||||
mPending.push_back(node);
|
||||
}
|
||||
/// Instantiate an LLTreeDFSIter to mark the end of the walk
|
||||
LLTreeDFSIter() {}
|
||||
LLTreeDFSIter() : mSkipChildren(false) {}
|
||||
|
||||
/// flags iterator logic to skip traversing children of current node on next increment
|
||||
void skipDescendants(bool skip = true) { mSkipChildren = skip; }
|
||||
/// flags iterator logic to skip traversing children of current node on next increment
|
||||
void skipDescendants(bool skip = true) { mSkipChildren = skip; }
|
||||
|
||||
private:
|
||||
/// leverage boost::iterator_facade
|
||||
|
|
@ -405,8 +405,8 @@ private:
|
|||
func_type mBeginFunc;
|
||||
/// functor to extract end() child iterator
|
||||
func_type mEndFunc;
|
||||
/// flag which controls traversal of children (skip children of current node if true)
|
||||
bool mSkipChildren;
|
||||
/// flag which controls traversal of children (skip children of current node if true)
|
||||
bool mSkipChildren;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -451,21 +451,21 @@ public:
|
|||
/// Instantiate an LLTreeDFSPostIter to start a depth-first walk. Pass
|
||||
/// functors to extract the 'child begin' and 'child end' iterators from
|
||||
/// each node.
|
||||
LLTreeDFSPostIter(const ptr_type& node, const func_type& beginfunc, const func_type& endfunc):
|
||||
mBeginFunc(beginfunc),
|
||||
mEndFunc(endfunc),
|
||||
mSkipAncestors(false)
|
||||
{
|
||||
LLTreeDFSPostIter(const ptr_type& node, const func_type& beginfunc, const func_type& endfunc)
|
||||
: mBeginFunc(beginfunc),
|
||||
mEndFunc(endfunc),
|
||||
mSkipAncestors(false)
|
||||
{
|
||||
if (! node)
|
||||
return;
|
||||
mPending.push_back(typename list_type::value_type(node, false));
|
||||
makeCurrent();
|
||||
}
|
||||
/// Instantiate an LLTreeDFSPostIter to mark the end of the walk
|
||||
LLTreeDFSPostIter() {}
|
||||
LLTreeDFSPostIter() : mSkipAncestors(false) {}
|
||||
|
||||
/// flags iterator logic to skip traversing ancestors of current node on next increment
|
||||
void skipAncestors(bool skip = true) { mSkipAncestors = skip; }
|
||||
/// flags iterator logic to skip traversing ancestors of current node on next increment
|
||||
void skipAncestors(bool skip = true) { mSkipAncestors = skip; }
|
||||
|
||||
private:
|
||||
/// leverage boost::iterator_facade
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na
|
|||
: mWorkerThread(workerthread),
|
||||
mWorkerClassName(name),
|
||||
mRequestHandle(LLWorkerThread::nullHandle()),
|
||||
mRequestPriority(LLWorkerThread::PRIORITY_NORMAL),
|
||||
mMutex(NULL),
|
||||
mWorkFlags(0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -97,7 +97,8 @@ void info_callback(const char* msg, void*)
|
|||
}
|
||||
|
||||
|
||||
LLImageJ2COJ::LLImageJ2COJ() : LLImageJ2CImpl()
|
||||
LLImageJ2COJ::LLImageJ2COJ()
|
||||
: LLImageJ2CImpl()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,9 +51,6 @@ protected:
|
|||
// Divide a by b to the power of 2 and round upwards.
|
||||
return (a + (1 << b) - 1) >> b;
|
||||
}
|
||||
|
||||
// Temporary variables for in-progress decodes...
|
||||
LLImageRaw *mRawImagep;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ LLCamera::LLCamera() :
|
|||
mNearPlane(DEFAULT_NEAR_PLANE),
|
||||
mFarPlane(DEFAULT_FAR_PLANE),
|
||||
mFixedDistance(-1.f),
|
||||
mPlaneCount(6)
|
||||
mPlaneCount(6),
|
||||
mFrustumCornerDist(0.f)
|
||||
{
|
||||
calculateFrustumPlanes();
|
||||
}
|
||||
|
|
@ -55,7 +56,8 @@ LLCamera::LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_p
|
|||
LLCoordFrame(),
|
||||
mViewHeightInPixels(view_height_in_pixels),
|
||||
mFixedDistance(-1.f),
|
||||
mPlaneCount(6)
|
||||
mPlaneCount(6),
|
||||
mFrustumCornerDist(0.f)
|
||||
{
|
||||
mAspect = llclamp(aspect_ratio, MIN_ASPECT_RATIO, MAX_ASPECT_RATIO);
|
||||
mNearPlane = llclamp(near_plane, MIN_NEAR_PLANE, MAX_NEAR_PLANE);
|
||||
|
|
@ -648,7 +650,6 @@ void LLCamera::ignoreAgentFrustumPlane(S32 idx)
|
|||
|
||||
void LLCamera::calcAgentFrustumPlanes(LLVector3* frust)
|
||||
{
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
mAgentFrustum[i] = frust[i];
|
||||
|
|
|
|||
|
|
@ -42,11 +42,14 @@
|
|||
|
||||
LLPacketBuffer::LLPacketBuffer(const LLHost &host, const char *datap, const S32 size) : mHost(host)
|
||||
{
|
||||
mSize = 0;
|
||||
mData[0] = '!';
|
||||
|
||||
if (size > NET_BUFFER_SIZE)
|
||||
{
|
||||
llerrs << "Sending packet > " << NET_BUFFER_SIZE << " of size " << size << llendl;
|
||||
}
|
||||
else // we previously relied on llerrs being fatal to not get here...
|
||||
else
|
||||
{
|
||||
if (datap != NULL)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1196,6 +1196,7 @@ LLTransferTarget::LLTransferTarget(
|
|||
mType(type),
|
||||
mSourceType(source_type),
|
||||
mID(transfer_id),
|
||||
mChannelp(NULL),
|
||||
mGotInfo(FALSE),
|
||||
mSize(0),
|
||||
mLastPacketID(-1)
|
||||
|
|
|
|||
|
|
@ -226,7 +226,10 @@ void LLTransferSourceAsset::responderCallback(LLVFS *vfs, const LLUUID& uuid, LL
|
|||
|
||||
|
||||
|
||||
LLTransferSourceParamsAsset::LLTransferSourceParamsAsset() : LLTransferSourceParams(LLTST_ASSET)
|
||||
LLTransferSourceParamsAsset::LLTransferSourceParamsAsset()
|
||||
: LLTransferSourceParams(LLTST_ASSET),
|
||||
|
||||
mAssetType(LLAssetType::AT_NONE)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,12 @@ typedef void (*LLTTFCompleteCallback)(const LLTSCode status, void *user_data);
|
|||
class LLTransferTargetParamsFile : public LLTransferTargetParams
|
||||
{
|
||||
public:
|
||||
LLTransferTargetParamsFile() : LLTransferTargetParams(LLTTT_FILE) {}
|
||||
LLTransferTargetParamsFile()
|
||||
: LLTransferTargetParams(LLTTT_FILE),
|
||||
|
||||
mCompleteCallback(NULL),
|
||||
mUserData(NULL)
|
||||
{}
|
||||
void setFilename(const std::string& filename) { mFilename = filename; }
|
||||
void setCallback(LLTTFCompleteCallback cb, void *user_data) { mCompleteCallback = cb; mUserData = user_data; }
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,6 @@ protected:
|
|||
LLTTVFCompleteCallback mCompleteCallback;
|
||||
void* mUserDatap;
|
||||
S32 mErrCode;
|
||||
LLVFSThread::handle_t mHandle;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -104,6 +104,8 @@ void LLPluginClassMedia::reset()
|
|||
mSetMediaHeight = -1;
|
||||
mRequestedMediaWidth = 0;
|
||||
mRequestedMediaHeight = 0;
|
||||
mRequestedTextureWidth = 0;
|
||||
mRequestedTextureHeight = 0;
|
||||
mFullMediaWidth = 0;
|
||||
mFullMediaHeight = 0;
|
||||
mTextureWidth = 0;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ static const F32 PLUGIN_IDLE_SECONDS = 1.0f / 100.0f; // Each call to idle will
|
|||
|
||||
LLPluginProcessChild::LLPluginProcessChild()
|
||||
{
|
||||
mState = STATE_UNINITIALIZED;
|
||||
mInstance = NULL;
|
||||
mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
|
||||
mSleepTime = PLUGIN_IDLE_SECONDS; // default: send idle messages at 100Hz
|
||||
|
|
|
|||
|
|
@ -89,8 +89,9 @@ private:
|
|||
STATE_ERROR, // generic bailout state
|
||||
STATE_DONE // state machine will sit in this state after either error or normal termination.
|
||||
};
|
||||
EState mState;
|
||||
void setState(EState state);
|
||||
|
||||
EState mState;
|
||||
|
||||
LLHost mLauncherHost;
|
||||
LLSocket::ptr_t mSocket;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner)
|
|||
mOwner = owner;
|
||||
mBoundPort = 0;
|
||||
mState = STATE_UNINITIALIZED;
|
||||
mSleepTime = 0.0;
|
||||
mCPUUsage = 0.0;
|
||||
mDisableTimeout = false;
|
||||
mDebug = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,12 @@ LLCubeMap::LLCubeMap()
|
|||
mTextureCoordStage(0),
|
||||
mMatrixStage(0)
|
||||
{
|
||||
mTargets[0] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB;
|
||||
mTargets[1] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB;
|
||||
mTargets[2] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB;
|
||||
mTargets[3] = GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB;
|
||||
mTargets[4] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB;
|
||||
mTargets[5] = GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB;
|
||||
}
|
||||
|
||||
LLCubeMap::~LLCubeMap()
|
||||
|
|
@ -75,13 +81,6 @@ void LLCubeMap::initGL()
|
|||
|
||||
if (gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps)
|
||||
{
|
||||
mTargets[0] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB;
|
||||
mTargets[1] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB;
|
||||
mTargets[2] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB;
|
||||
mTargets[3] = GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB;
|
||||
mTargets[4] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB;
|
||||
mTargets[5] = GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB;
|
||||
|
||||
// Not initialized, do stuff.
|
||||
if (mImages[0].isNull())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -332,6 +332,8 @@ LLGLManager::LLGLManager() :
|
|||
mHasFragmentShader(FALSE),
|
||||
mHasOcclusionQuery(FALSE),
|
||||
mHasPointParameters(FALSE),
|
||||
mHasDrawBuffers(FALSE),
|
||||
mHasTextureRectangle(FALSE),
|
||||
|
||||
mHasAnisotropic(FALSE),
|
||||
mHasARBEnvCombine(FALSE),
|
||||
|
|
@ -671,7 +673,7 @@ void LLGLManager::initExtensions()
|
|||
llinfos << "initExtensions() checking shell variables to adjust features..." << llendl;
|
||||
// Our extension support for the Linux Client is very young with some
|
||||
// potential driver gotchas, so offer a semi-secret way to turn it off.
|
||||
if (getenv("LL_GL_NOEXT")) /* Flawfinder: ignore */
|
||||
if (getenv("LL_GL_NOEXT"))
|
||||
{
|
||||
//mHasMultitexture = FALSE; // NEEDED!
|
||||
mHasARBEnvCombine = FALSE;
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ hasGamma(false), hasLighting(false), calculatesAtmospherics(false)
|
|||
// LLGLSL Shader implementation
|
||||
//===============================
|
||||
LLGLSLShader::LLGLSLShader()
|
||||
: mProgramObject(0), mShaderLevel(0), mShaderGroup(SG_DEFAULT)
|
||||
: mProgramObject(0), mActiveTextureChannels(0), mShaderLevel(0), mShaderGroup(SG_DEFAULT), mUniformsDirty(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ LLPostProcess::LLPostProcess(void) :
|
|||
mSceneRenderTexture = NULL ;
|
||||
mNoiseTexture = NULL ;
|
||||
mTempBloomTexture = NULL ;
|
||||
|
||||
noiseTextureScale = 1.0f;
|
||||
|
||||
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.
|
||||
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME));
|
||||
|
|
|
|||
|
|
@ -733,8 +733,11 @@ void LLTexUnit::debugTextureUnit(void)
|
|||
|
||||
|
||||
LLRender::LLRender()
|
||||
: mDirty(false), mCount(0), mMode(LLRender::TRIANGLES),
|
||||
mMaxAnisotropy(0.f)
|
||||
: mDirty(false),
|
||||
mCount(0),
|
||||
mMode(LLRender::TRIANGLES),
|
||||
mCurrTextureUnitIndex(0),
|
||||
mMaxAnisotropy(0.f)
|
||||
{
|
||||
mBuffer = new LLVertexBuffer(immediate_mask, 0);
|
||||
mBuffer->allocateBuffer(4096, 0, TRUE);
|
||||
|
|
|
|||
|
|
@ -215,14 +215,18 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)
|
|||
|
||||
void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indices_offset) const
|
||||
{
|
||||
llassert(mRequestedNumVerts >= 0);
|
||||
|
||||
if (start >= (U32) mRequestedNumVerts ||
|
||||
end >= (U32) mRequestedNumVerts)
|
||||
end >= (U32) mRequestedNumVerts)
|
||||
{
|
||||
llerrs << "Bad vertex buffer draw range: [" << start << ", " << end << "]" << llendl;
|
||||
}
|
||||
|
||||
llassert(mRequestedNumIndices >= 0);
|
||||
|
||||
if (indices_offset >= (U32) mRequestedNumIndices ||
|
||||
indices_offset + count > (U32) mRequestedNumIndices)
|
||||
indices_offset + count > (U32) mRequestedNumIndices)
|
||||
{
|
||||
llerrs << "Bad index buffer draw range: [" << indices_offset << ", " << indices_offset+count << "]" << llendl;
|
||||
}
|
||||
|
|
@ -251,8 +255,9 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
|
|||
|
||||
void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
|
||||
{
|
||||
llassert(mRequestedNumIndices >= 0);
|
||||
if (indices_offset >= (U32) mRequestedNumIndices ||
|
||||
indices_offset + count > (U32) mRequestedNumIndices)
|
||||
indices_offset + count > (U32) mRequestedNumIndices)
|
||||
{
|
||||
llerrs << "Bad index buffer draw range: [" << indices_offset << ", " << indices_offset+count << "]" << llendl;
|
||||
}
|
||||
|
|
@ -281,8 +286,9 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
|
|||
|
||||
void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
|
||||
{
|
||||
llassert(mRequestedNumVerts >= 0);
|
||||
if (first >= (U32) mRequestedNumVerts ||
|
||||
first + count > (U32) mRequestedNumVerts)
|
||||
first + count > (U32) mRequestedNumVerts)
|
||||
{
|
||||
llerrs << "Bad vertex buffer draw range: [" << first << ", " << first+count << "]" << llendl;
|
||||
}
|
||||
|
|
@ -354,7 +360,14 @@ void LLVertexBuffer::clientCopy(F64 max_time)
|
|||
|
||||
LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
|
||||
LLRefCount(),
|
||||
mNumVerts(0), mNumIndices(0), mUsage(usage), mGLBuffer(0), mGLIndices(0),
|
||||
|
||||
mNumVerts(0),
|
||||
mNumIndices(0),
|
||||
mRequestedNumVerts(-1),
|
||||
mRequestedNumIndices(-1),
|
||||
mUsage(usage),
|
||||
mGLBuffer(0),
|
||||
mGLIndices(0),
|
||||
mMappedData(NULL),
|
||||
mMappedIndexData(NULL), mLocked(FALSE),
|
||||
mFinal(FALSE),
|
||||
|
|
@ -600,6 +613,8 @@ void LLVertexBuffer::updateNumVerts(S32 nverts)
|
|||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_UPDATE_VERTS);
|
||||
|
||||
llassert(nverts >= 0);
|
||||
|
||||
if (nverts >= 65535)
|
||||
{
|
||||
llwarns << "Vertex buffer overflow!" << llendl;
|
||||
|
|
@ -628,6 +643,9 @@ void LLVertexBuffer::updateNumVerts(S32 nverts)
|
|||
void LLVertexBuffer::updateNumIndices(S32 nindices)
|
||||
{
|
||||
LLMemType mt2(LLMemType::MTYPE_VERTEX_UPDATE_INDICES);
|
||||
|
||||
llassert(nindices >= 0);
|
||||
|
||||
mRequestedNumIndices = nindices;
|
||||
if (!mDynamicSize)
|
||||
{
|
||||
|
|
@ -668,6 +686,9 @@ void LLVertexBuffer::allocateBuffer(S32 nverts, S32 nindices, bool create)
|
|||
|
||||
void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)
|
||||
{
|
||||
llassert(newnverts >= 0);
|
||||
llassert(newnindices >= 0);
|
||||
|
||||
mRequestedNumVerts = newnverts;
|
||||
mRequestedNumIndices = newnindices;
|
||||
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ private:
|
|||
|
||||
// this is just for making it easy to look things up in a set organized by UUID -- DON'T USE IT
|
||||
// for anything real!
|
||||
LLNotification(LLUUID uuid) : mId(uuid), mCancelled(false), mRespondedTo(false), mIgnored(false), mTemporaryResponder(false) {}
|
||||
LLNotification(LLUUID uuid) : mId(uuid), mCancelled(false), mRespondedTo(false), mIgnored(false), mPriority(NOTIFICATION_PRIORITY_UNSPECIFIED), mTemporaryResponder(false) {}
|
||||
|
||||
void cancel();
|
||||
|
||||
|
|
|
|||
|
|
@ -2333,8 +2333,6 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele
|
|||
|
||||
LLColor4 color = (mEditor.getReadOnly() ? mStyle->getReadOnlyColor() : mStyle->getColor()) % alpha;
|
||||
|
||||
font = mStyle->getFont();
|
||||
|
||||
if( selection_start > seg_start )
|
||||
{
|
||||
// Draw normally
|
||||
|
|
|
|||
|
|
@ -2507,7 +2507,7 @@ void LLTextEditor::updateLinkSegments()
|
|||
// then update the link's HREF to be the same as the label text.
|
||||
// This lets users edit Urls in-place.
|
||||
LLStyleConstSP style = segment->getStyle();
|
||||
LLStyle* new_style = new LLStyle(*style);
|
||||
LLStyleSP new_style(new LLStyle(*style));
|
||||
LLWString url_label = wtext.substr(segment->getStart(), segment->getEnd()-segment->getStart());
|
||||
if (LLUrlRegistry::instance().hasUrl(url_label))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ std::string LLUrlEntryHTTPNoProtocol::getUrl(const std::string &string) const
|
|||
LLUrlEntrySLURL::LLUrlEntrySLURL()
|
||||
{
|
||||
// see http://slurl.com/about.php for details on the SLURL format
|
||||
mPattern = boost::regex("http://slurl.com/secondlife/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
|
||||
mPattern = boost::regex("http://(maps.secondlife.com|slurl.com)/secondlife/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
|
||||
boost::regex::perl|boost::regex::icase);
|
||||
mMenuName = "menu_url_slurl.xml";
|
||||
mTooltip = LLTrans::getString("TooltipSLURL");
|
||||
|
|
|
|||
|
|
@ -68,8 +68,12 @@ class LLPidLockFile
|
|||
{
|
||||
public:
|
||||
LLPidLockFile( ) :
|
||||
mSaving(FALSE), mWaiting(FALSE),
|
||||
mClean(TRUE), mPID(getpid())
|
||||
mAutosave(false),
|
||||
mSaving(false),
|
||||
mWaiting(false),
|
||||
mPID(getpid()),
|
||||
mNameTable(NULL),
|
||||
mClean(true)
|
||||
{
|
||||
mLockName = gDirUtilp->getTempDir() + gDirUtilp->getDirDelimiter() + "savelock";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,6 @@ protected:
|
|||
S32 mMode;
|
||||
LLVFS *mVFS;
|
||||
F32 mPriority;
|
||||
BOOL mOnReadQueue;
|
||||
|
||||
S32 mBytesRead;
|
||||
LLVFSThread::handle_t mHandle;
|
||||
|
|
|
|||
|
|
@ -131,6 +131,8 @@ LLXMLNode::LLXMLNode(const LLXMLNode& rhs) :
|
|||
mPrecision(rhs.mPrecision),
|
||||
mType(rhs.mType),
|
||||
mEncoding(rhs.mEncoding),
|
||||
mLineNumber(0),
|
||||
mParser(NULL),
|
||||
mParent(NULL),
|
||||
mChildren(NULL),
|
||||
mAttributes(),
|
||||
|
|
|
|||
|
|
@ -510,7 +510,8 @@ LLXmlTreeParser::LLXmlTreeParser(LLXmlTree* tree)
|
|||
: mTree(tree),
|
||||
mRoot( NULL ),
|
||||
mCurrent( NULL ),
|
||||
mDump( FALSE )
|
||||
mDump( FALSE ),
|
||||
mKeepContents(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -724,8 +724,8 @@ private:
|
|||
return false;
|
||||
|
||||
// allocate some space and grab it
|
||||
UInt8* item_data = new UInt8( size + 1 );
|
||||
memset( item_data, 0, ( size + 1 ) * sizeof( UInt8* ) );
|
||||
UInt8* item_data = new UInt8[ size + 1 ];
|
||||
memset( item_data, 0, ( size + 1 ) * sizeof( UInt8 ) );
|
||||
result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
|
||||
if ( noErr != result )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -608,6 +608,9 @@ MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_
|
|||
mLastMouseX = 0;
|
||||
mLastMouseY = 0;
|
||||
mFirstFocus = true;
|
||||
mBackgroundR = 0.0f;
|
||||
mBackgroundG = 0.0f;
|
||||
mBackgroundB = 0.0f;
|
||||
}
|
||||
|
||||
MediaPluginWebKit::~MediaPluginWebKit()
|
||||
|
|
|
|||
|
|
@ -2817,16 +2817,16 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FirstRunThisInstall</key>
|
||||
<key>HadFirstSuccessfulLogin</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Specifies that you have not run the viewer since you installed the latest update</string>
|
||||
<string>Specifies whether you have successfully logged in at least once before</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FirstSelectedDisabledPopups</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -2300,7 +2300,7 @@ public:
|
|||
|
||||
virtual ~LLLibraryOutfitsCopyDone()
|
||||
{
|
||||
if (!!LLApp::isExiting() && mLibraryOutfitsFetcher)
|
||||
if (!LLApp::isExiting() && mLibraryOutfitsFetcher)
|
||||
{
|
||||
gInventory.addObserver(mLibraryOutfitsFetcher);
|
||||
mLibraryOutfitsFetcher->done();
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ public:
|
|||
|
||||
virtual ~LLUpdateAppearanceOnDestroy()
|
||||
{
|
||||
if (!!LLApp::isExiting())
|
||||
if (!LLApp::isExiting())
|
||||
{
|
||||
LLAppearanceManager::instance().updateAppearanceFromCOF();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2632,7 +2632,7 @@ void LLAppViewer::handleViewerCrash()
|
|||
gDebugInfo["StartupState"] = LLStartUp::getStartupStateString();
|
||||
gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer) LLMemory::getCurrentRSS() >> 10;
|
||||
gDebugInfo["FirstLogin"] = (LLSD::Boolean) gAgent.isFirstLogin();
|
||||
gDebugInfo["FirstRunThisInstall"] = gSavedSettings.getBOOL("FirstRunThisInstall");
|
||||
gDebugInfo["HadFirstSuccessfulLogin"] = gSavedSettings.getBOOL("HadFirstSuccessfulLogin");
|
||||
|
||||
if(gLogoutInProgress)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -612,3 +612,13 @@ bool LLAvatarActions::isBlocked(const LLUUID& id)
|
|||
gCacheName->getFullName(id, name);
|
||||
return LLMuteList::getInstance()->isMuted(id, name);
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAvatarActions::canBlock(const LLUUID& id)
|
||||
{
|
||||
std::string firstname, lastname;
|
||||
gCacheName->getName(id, firstname, lastname);
|
||||
bool is_linden = !LLStringUtil::compareStrings(lastname, "Linden");
|
||||
bool is_self = id == gAgentID;
|
||||
return !is_self && !is_linden;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,6 +123,11 @@ public:
|
|||
*/
|
||||
static bool isBlocked(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* @return true if you can block the avatar
|
||||
*/
|
||||
static bool canBlock(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Return true if the avatar is in a P2P voice call with a given user
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -280,7 +280,13 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
|
|||
break;
|
||||
}
|
||||
|
||||
mSpeakBtn->setEnabled(enable);
|
||||
// We have to enable/disable right and left parts of speak button separately (EXT-4648)
|
||||
mSpeakBtn->setSpeakBtnEnabled(enable);
|
||||
// skipped to avoid button blinking
|
||||
if (status != STATUS_JOINING && status!= STATUS_LEFT_CHANNEL)
|
||||
{
|
||||
mSpeakBtn->setFlyoutBtnEnabled(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking());
|
||||
}
|
||||
}
|
||||
|
||||
void LLBottomTray::onMouselookModeOut()
|
||||
|
|
@ -410,9 +416,10 @@ BOOL LLBottomTray::postBuild()
|
|||
mSpeakPanel = getChild<LLPanel>("speak_panel");
|
||||
mSpeakBtn = getChild<LLSpeakButton>("talk");
|
||||
|
||||
// Speak button should be initially disabled because
|
||||
// Both parts of speak button should be initially disabled because
|
||||
// it takes some time between logging in to world and connecting to voice channel.
|
||||
mSpeakBtn->setEnabled(FALSE);
|
||||
mSpeakBtn->setSpeakBtnEnabled(false);
|
||||
mSpeakBtn->setFlyoutBtnEnabled(false);
|
||||
|
||||
// Localization tool doesn't understand custom buttons like <talk_button>
|
||||
mSpeakBtn->setSpeakToolTip( getString("SpeakBtnToolTip") );
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
#include "lltransientfloatermgr.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llvoicechannel.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
|
||||
static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids);
|
||||
void reshape_floater(LLCallFloater* floater, S32 delta_height);
|
||||
|
|
@ -677,7 +678,8 @@ void LLCallFloater::resetVoiceRemoveTimers()
|
|||
|
||||
void LLCallFloater::removeVoiceRemoveTimer(const LLUUID& voice_speaker_id)
|
||||
{
|
||||
mSpeakerDelayRemover->unsetActionTimer(voice_speaker_id);
|
||||
bool delete_it = true;
|
||||
mSpeakerDelayRemover->unsetActionTimer(voice_speaker_id, delete_it);
|
||||
}
|
||||
|
||||
bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)
|
||||
|
|
@ -731,11 +733,11 @@ void LLCallFloater::updateState(const LLVoiceChannel::EState& new_state)
|
|||
}
|
||||
else
|
||||
{
|
||||
reset();
|
||||
reset(new_state);
|
||||
}
|
||||
}
|
||||
|
||||
void LLCallFloater::reset()
|
||||
void LLCallFloater::reset(const LLVoiceChannel::EState& new_state)
|
||||
{
|
||||
// lets forget states from the previous session
|
||||
// for timers...
|
||||
|
|
@ -748,8 +750,18 @@ void LLCallFloater::reset()
|
|||
mParticipants = NULL;
|
||||
mAvatarList->clear();
|
||||
|
||||
// update floater to show Loading while waiting for data.
|
||||
mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
|
||||
// "loading" is shown in parcel with disabled voice only when state is "ringing"
|
||||
// to avoid showing it in nearby chat vcp all the time- "no_one_near" is now shown there (EXT-4648)
|
||||
bool show_loading = LLVoiceChannel::STATE_RINGING == new_state;
|
||||
if(!show_loading && !LLViewerParcelMgr::getInstance()->allowAgentVoice() && mVoiceType == VC_LOCAL_CHAT)
|
||||
{
|
||||
mAvatarList->setNoItemsCommentText(getString("no_one_near"));
|
||||
}
|
||||
else
|
||||
{
|
||||
// update floater to show Loading while waiting for data.
|
||||
mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
|
||||
}
|
||||
mAvatarList->setVisible(TRUE);
|
||||
mNonAvatarCaller->setVisible(FALSE);
|
||||
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ private:
|
|||
*
|
||||
* Clears all data from the latest voice session.
|
||||
*/
|
||||
void reset();
|
||||
void reset(const LLVoiceChannel::EState& new_state);
|
||||
|
||||
private:
|
||||
speaker_state_map_t mSpeakerStateMap;
|
||||
|
|
|
|||
|
|
@ -370,7 +370,8 @@ struct LLFavoritesSort
|
|||
|
||||
LLFavoritesBarCtrl::Params::Params()
|
||||
: image_drag_indication("image_drag_indication"),
|
||||
chevron_button("chevron_button")
|
||||
chevron_button("chevron_button"),
|
||||
label("label")
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -401,6 +402,10 @@ LLFavoritesBarCtrl::LLFavoritesBarCtrl(const LLFavoritesBarCtrl::Params& p)
|
|||
chevron_button_params.click_callback.function(boost::bind(&LLFavoritesBarCtrl::showDropDownMenu, this));
|
||||
mChevronButton = LLUICtrlFactory::create<LLButton> (chevron_button_params);
|
||||
addChild(mChevronButton);
|
||||
|
||||
LLTextBox::Params label_param(p.label);
|
||||
mBarLabel = LLUICtrlFactory::create<LLTextBox> (label_param);
|
||||
addChild(mBarLabel);
|
||||
}
|
||||
|
||||
LLFavoritesBarCtrl::~LLFavoritesBarCtrl()
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "llbutton.h"
|
||||
#include "lluictrl.h"
|
||||
#include "lltextbox.h"
|
||||
|
||||
#include "llinventoryobserver.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
|
@ -46,6 +47,7 @@ public:
|
|||
{
|
||||
Optional<LLUIImage*> image_drag_indication;
|
||||
Optional<LLButton::Params> chevron_button;
|
||||
Optional<LLTextBox::Params> label;
|
||||
Params();
|
||||
};
|
||||
|
||||
|
|
@ -139,6 +141,7 @@ private:
|
|||
LLUICtrl* mLandingTab;
|
||||
LLUICtrl* mLastTab;
|
||||
LLButton* mChevronButton;
|
||||
LLTextBox* mBarLabel;
|
||||
|
||||
LLUUID mDragItemId;
|
||||
BOOL mStartDrag;
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ std::string STATUS[] =
|
|||
"E_ST_NO_XLT_EASEOUT",
|
||||
"E_ST_NO_XLT_HAND",
|
||||
"E_ST_NO_XLT_EMOTE",
|
||||
"E_ST_BAD_ROOT"
|
||||
"E_ST_BAD_ROOT"
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -161,12 +161,17 @@ void LLGroupActions::join(const LLUUID& group_id)
|
|||
S32 cost = gdatap->mMembershipFee;
|
||||
LLSD args;
|
||||
args["COST"] = llformat("%d", cost);
|
||||
args["NAME"] = gdatap->mName;
|
||||
LLSD payload;
|
||||
payload["group_id"] = group_id;
|
||||
|
||||
if (can_afford_transaction(cost))
|
||||
{
|
||||
LLNotificationsUtil::add("JoinGroupCanAfford", args, payload, onJoinGroup);
|
||||
if(cost > 0)
|
||||
LLNotificationsUtil::add("JoinGroupCanAfford", args, payload, onJoinGroup);
|
||||
else
|
||||
LLNotificationsUtil::add("JoinGroupNoCost", args, payload, onJoinGroup);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1708,6 +1708,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
|||
bool start_message = true;
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap) return;
|
||||
|
||||
|
|
@ -1715,6 +1717,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
|||
it != member_ids.end(); ++it)
|
||||
{
|
||||
LLUUID& ejected_member_id = (*it);
|
||||
|
||||
llwarns << "LLGroupMgr::sendGroupMemberEjects -- ejecting member" << ejected_member_id << llendl;
|
||||
|
||||
// Can't use 'eject' to leave a group.
|
||||
if ((*it) == gAgent.getID()) continue;
|
||||
|
|
@ -1751,11 +1755,14 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
|||
if ((*rit).first.notNull() && (*rit).second!=0)
|
||||
{
|
||||
(*rit).second->removeMember(ejected_member_id);
|
||||
|
||||
llwarns << "LLGroupMgr::sendGroupMemberEjects - removing member from role " << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
group_datap->mMembers.erase(*it);
|
||||
|
||||
llwarns << "LLGroupMgr::sendGroupMemberEjects - deleting memnber data " << llendl;
|
||||
delete (*mit).second;
|
||||
}
|
||||
}
|
||||
|
|
@ -1764,6 +1771,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
|||
{
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
llwarns << "LLGroupMgr::sendGroupMemberEjects - done " << llendl;
|
||||
}
|
||||
|
||||
void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id)
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#include "llmenubutton.h"
|
||||
#include "llresmgr.h" // getMonetaryString
|
||||
#include "llsafehandle.h"
|
||||
#include "llsidetray.h"
|
||||
#include "lltextbox.h" // for description truncation
|
||||
#include "lltrans.h"
|
||||
#include "llui.h" // positionViewNearMouse()
|
||||
|
|
@ -643,8 +644,9 @@ void LLInspectObject::onClickOpen()
|
|||
|
||||
void LLInspectObject::onClickMoreInfo()
|
||||
{
|
||||
// *TODO: Show object info side panel, once that is implemented.
|
||||
LLNotificationsUtil::add("ClickUnimplemented");
|
||||
LLSD key;
|
||||
key["task"] = "task";
|
||||
LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -609,12 +609,12 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
std::vector<std::string> disabled_items;
|
||||
if(isInTrash())
|
||||
{
|
||||
items.push_back(std::string("PurgeItem"));
|
||||
items.push_back(std::string("Purge Item"));
|
||||
if (!isItemRemovable())
|
||||
{
|
||||
disabled_items.push_back(std::string("PurgeItem"));
|
||||
disabled_items.push_back(std::string("Purge Item"));
|
||||
}
|
||||
items.push_back(std::string("RestoreItem"));
|
||||
items.push_back(std::string("Restore Item"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2630,14 +2630,17 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
mItems.push_back(std::string("New Gesture"));
|
||||
mItems.push_back(std::string("New Clothes"));
|
||||
mItems.push_back(std::string("New Body Parts"));
|
||||
mItems.push_back(std::string("Change Type"));
|
||||
|
||||
LLViewerInventoryCategory *cat = getCategory();
|
||||
// Changing folder types is just a debug feature; this is fairly unsupported
|
||||
// and can lead to unexpected behavior if enabled.
|
||||
#if !LL_RELEASE_FOR_DOWNLOAD
|
||||
mItems.push_back(std::string("Change Type"));
|
||||
const LLViewerInventoryCategory *cat = getCategory();
|
||||
if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
|
||||
{
|
||||
mDisabledItems.push_back(std::string("Change Type"));
|
||||
}
|
||||
|
||||
#endif
|
||||
getClipboardEntries(false, mItems, mDisabledItems, flags);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -432,7 +432,26 @@ void LLInventoryPanel::initializeViews()
|
|||
rebuildViewsFor(mStartFolderID);
|
||||
|
||||
mViewsInitialized = true;
|
||||
|
||||
openStartFolderOrMyInventory();
|
||||
|
||||
// Special case for new user login
|
||||
if (gAgent.isFirstLogin())
|
||||
{
|
||||
// Auto open the user's library
|
||||
LLFolderViewFolder* lib_folder = mFolders->getFolderByID(gInventory.getLibraryRootFolderID());
|
||||
if (lib_folder)
|
||||
{
|
||||
lib_folder->setOpen(TRUE);
|
||||
}
|
||||
|
||||
// Auto close the user's my inventory folder
|
||||
LLFolderViewFolder* my_inv_folder = mFolders->getFolderByID(gInventory.getRootFolderID());
|
||||
if (my_inv_folder)
|
||||
{
|
||||
my_inv_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
|
||||
|
|
|
|||
|
|
@ -542,9 +542,9 @@ void LLMediaCtrl::navigateToLocalPage( const std::string& subdir, const std::str
|
|||
|
||||
if (! gDirUtilp->fileExists(expanded_filename))
|
||||
{
|
||||
if (language != "en-us")
|
||||
if (language != "en")
|
||||
{
|
||||
expanded_filename = gDirUtilp->findSkinnedFilename("html", "en-us", filename);
|
||||
expanded_filename = gDirUtilp->findSkinnedFilename("html", "en", filename);
|
||||
if (! gDirUtilp->fileExists(expanded_filename))
|
||||
{
|
||||
llwarns << "File " << subdir << delim << filename_in << "not found" << llendl;
|
||||
|
|
|
|||
|
|
@ -483,6 +483,7 @@ BOOL LLPanelAvatarProfile::postBuild()
|
|||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
registrar.add("Profile.Pay", boost::bind(&LLPanelAvatarProfile::pay, this));
|
||||
registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this));
|
||||
registrar.add("Profile.BlockUnblock", boost::bind(&LLPanelAvatarProfile::toggleBlock, this));
|
||||
registrar.add("Profile.Kick", boost::bind(&LLPanelAvatarProfile::kick, this));
|
||||
registrar.add("Profile.Freeze", boost::bind(&LLPanelAvatarProfile::freeze, this));
|
||||
registrar.add("Profile.Unfreeze", boost::bind(&LLPanelAvatarProfile::unfreeze, this));
|
||||
|
|
@ -490,6 +491,8 @@ BOOL LLPanelAvatarProfile::postBuild()
|
|||
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable;
|
||||
enable.add("Profile.EnableGod", boost::bind(&enable_god));
|
||||
enable.add("Profile.CheckItem", boost::bind(&LLPanelAvatarProfile::checkOverflowMenuItem, this, _2));
|
||||
enable.add("Profile.EnableItem", boost::bind(&LLPanelAvatarProfile::enableOverflowMenuItem, this, _2));
|
||||
|
||||
mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
|
||||
|
|
@ -666,6 +669,26 @@ void LLPanelAvatarProfile::fillAccountStatus(const LLAvatarData* avatar_data)
|
|||
childSetValue("acc_status_text", caption_text);
|
||||
}
|
||||
|
||||
bool LLPanelAvatarProfile::checkOverflowMenuItem(const LLSD& param)
|
||||
{
|
||||
std::string item = param.asString();
|
||||
|
||||
if (item == "is_blocked")
|
||||
return LLAvatarActions::isBlocked(getAvatarId());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLPanelAvatarProfile::enableOverflowMenuItem(const LLSD& param)
|
||||
{
|
||||
std::string item = param.asString();
|
||||
|
||||
if (item == "can_block")
|
||||
return LLAvatarActions::canBlock(getAvatarId());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::pay()
|
||||
{
|
||||
LLAvatarActions::pay(getAvatarId());
|
||||
|
|
@ -676,6 +699,11 @@ void LLPanelAvatarProfile::share()
|
|||
LLAvatarActions::share(getAvatarId());
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::toggleBlock()
|
||||
{
|
||||
LLAvatarActions::toggleBlock(getAvatarId());
|
||||
}
|
||||
|
||||
void LLPanelAvatarProfile::kick()
|
||||
{
|
||||
LLAvatarActions::kick(getAvatarId());
|
||||
|
|
|
|||
|
|
@ -192,12 +192,18 @@ protected:
|
|||
*/
|
||||
void share();
|
||||
|
||||
/**
|
||||
* Add/remove resident to/from your block list.
|
||||
*/
|
||||
void toggleBlock();
|
||||
|
||||
void kick();
|
||||
void freeze();
|
||||
void unfreeze();
|
||||
void csr();
|
||||
|
||||
|
||||
bool checkOverflowMenuItem(const LLSD& param);
|
||||
bool enableOverflowMenuItem(const LLSD& param);
|
||||
bool enableGod();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -81,11 +81,15 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E
|
|||
|
||||
void LLPanelChatControlPanel::updateCallButton()
|
||||
{
|
||||
// hide/show call button
|
||||
bool voice_enabled = LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking();
|
||||
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId);
|
||||
if (!session) return;
|
||||
|
||||
if (!session)
|
||||
{
|
||||
childSetEnabled("call_btn", false);
|
||||
return;
|
||||
}
|
||||
|
||||
bool session_initialized = session->mSessionInitialized;
|
||||
bool callback_enabled = session->mCallBackEnabled;
|
||||
|
|
|
|||
|
|
@ -676,7 +676,7 @@ void LLPanelLogin::refreshLocation( bool force_visible )
|
|||
// Don't show on first run after install
|
||||
// Otherwise ShowStartLocation defaults to true.
|
||||
show_start = gSavedSettings.getBOOL("ShowStartLocation")
|
||||
&& !gSavedSettings.getBOOL("FirstRunThisInstall");
|
||||
&& gSavedSettings.getBOOL("HadFirstSuccessfulLogin");
|
||||
}
|
||||
|
||||
sInstance->childSetVisible("start_location_combo", show_start);
|
||||
|
|
@ -847,7 +847,7 @@ void LLPanelLogin::loadLoginPage()
|
|||
oStr << "&auto_login=TRUE";
|
||||
}
|
||||
if (gSavedSettings.getBOOL("ShowStartLocation")
|
||||
&& !gSavedSettings.getBOOL("FirstRunThisInstall"))
|
||||
&& gSavedSettings.getBOOL("HadFirstSuccessfulLogin"))
|
||||
{
|
||||
oStr << "&show_start_location=TRUE";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,20 @@ BOOL LLPanelMe::postBuild()
|
|||
void LLPanelMe::onOpen(const LLSD& key)
|
||||
{
|
||||
LLPanelProfile::onOpen(key);
|
||||
|
||||
if(key.isUndefined() || key.has("edit_my_profile"))
|
||||
{
|
||||
// Open Edit My Profile panel by default (through Side Tray -> My Profile) (EXT-4823)
|
||||
buildEditPanel();
|
||||
openPanel(mEditPanel, getAvatarId());
|
||||
}
|
||||
else if(mEditPanel)
|
||||
{
|
||||
// When opening Me Panel through Side Tray LLPanelMe::onOpen() is called twice.
|
||||
// First time key can be undefined and second time - key may contain some data.
|
||||
// Lets close Edit Panel if key does contain some data on second call.
|
||||
closePanel(mEditPanel);
|
||||
}
|
||||
}
|
||||
|
||||
bool LLPanelMe::notifyChildren(const LLSD& info)
|
||||
|
|
|
|||
|
|
@ -164,11 +164,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)
|
|||
if (item == std::string("can_block"))
|
||||
{
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
std::string firstname, lastname;
|
||||
gCacheName->getName(id, firstname, lastname);
|
||||
bool is_linden = !LLStringUtil::compareStrings(lastname, "Linden");
|
||||
bool is_self = id == gAgentID;
|
||||
return !is_self && !is_linden;
|
||||
return LLAvatarActions::canBlock(id);
|
||||
}
|
||||
else if (item == std::string("can_add"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -197,11 +197,7 @@ void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key)
|
|||
}
|
||||
else
|
||||
{
|
||||
panel->setVisible(FALSE);
|
||||
if (panel->getParent() == this)
|
||||
{
|
||||
removeChild(panel);
|
||||
}
|
||||
closePanel(panel);
|
||||
|
||||
getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
|
||||
}
|
||||
|
|
@ -248,6 +244,16 @@ void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
|
|||
panel->setRect(new_rect);
|
||||
}
|
||||
|
||||
void LLPanelProfile::closePanel(LLPanel* panel)
|
||||
{
|
||||
panel->setVisible(FALSE);
|
||||
|
||||
if (panel->getParent() == this)
|
||||
{
|
||||
removeChild(panel);
|
||||
}
|
||||
}
|
||||
|
||||
S32 LLPanelProfile::notifyParent(const LLSD& info)
|
||||
{
|
||||
std::string action = info["action"];
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ public:
|
|||
|
||||
virtual void openPanel(LLPanel* panel, const LLSD& params);
|
||||
|
||||
virtual void closePanel(LLPanel* panel);
|
||||
|
||||
S32 notifyParent(const LLSD& info);
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ public:
|
|||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void setObjectID(const LLUUID& object_id);
|
||||
virtual void setObjectID(const LLUUID& object_id);
|
||||
void setItem( LLInventoryItem* item );
|
||||
|
||||
void setAssetId(const LLUUID& asset_id);
|
||||
|
|
|
|||
|
|
@ -74,22 +74,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
|
|||
mLastHeight(0),
|
||||
mLastWidth(0),
|
||||
mAspectRatio(0.f),
|
||||
mPreviewToSave(FALSE)
|
||||
mPreviewToSave(FALSE),
|
||||
mImage(NULL)
|
||||
{
|
||||
const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem());
|
||||
if(item)
|
||||
{
|
||||
mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID();
|
||||
mImageID = item->getAssetUUID();
|
||||
mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
|
||||
}
|
||||
else // not an item, assume it's an asset id
|
||||
{
|
||||
mImageID = mItemUUID;
|
||||
mCopyToInv = TRUE;
|
||||
mIsCopyable = TRUE;
|
||||
}
|
||||
|
||||
updateImageID();
|
||||
if (key.has("save_as"))
|
||||
{
|
||||
mPreviewToSave = TRUE;
|
||||
|
|
@ -97,7 +85,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
|
|||
//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
|
||||
}
|
||||
|
||||
|
||||
LLPreviewTexture::~LLPreviewTexture()
|
||||
{
|
||||
if( mLoadingFullImage )
|
||||
|
|
@ -493,3 +480,42 @@ LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
|
|||
}
|
||||
return mAssetStatus;
|
||||
}
|
||||
|
||||
void LLPreviewTexture::updateImageID()
|
||||
{
|
||||
const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem());
|
||||
if(item)
|
||||
{
|
||||
mImageID = item->getAssetUUID();
|
||||
mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID();
|
||||
mCopyToInv = FALSE;
|
||||
mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
|
||||
}
|
||||
else // not an item, assume it's an asset id
|
||||
{
|
||||
mImageID = mItemUUID;
|
||||
mShowKeepDiscard = FALSE;
|
||||
mCopyToInv = TRUE;
|
||||
mIsCopyable = TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* virtual */
|
||||
void LLPreviewTexture::setObjectID(const LLUUID& object_id)
|
||||
{
|
||||
mObjectUUID = object_id;
|
||||
|
||||
const LLUUID old_image_id = mImageID;
|
||||
|
||||
// Update what image we're pointing to, such as if we just specified the mObjectID
|
||||
// that this mItemID is part of.
|
||||
updateImageID();
|
||||
|
||||
// If the imageID has changed, start over and reload the new image.
|
||||
if (mImageID != old_image_id)
|
||||
{
|
||||
mAssetStatus = PREVIEW_ASSET_UNLOADED;
|
||||
loadAsset();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ public:
|
|||
void openToSave();
|
||||
|
||||
static void onSaveAsBtn(void* data);
|
||||
|
||||
/*virtual*/ void setObjectID(const LLUUID& object_id);
|
||||
protected:
|
||||
void init();
|
||||
/* virtual */ BOOL postBuild();
|
||||
|
|
@ -76,6 +78,7 @@ protected:
|
|||
static void onAspectRatioCommit(LLUICtrl*,void* userdata);
|
||||
|
||||
private:
|
||||
void updateImageID(); // set what image is being uploaded.
|
||||
void updateDimensions();
|
||||
LLUUID mImageID;
|
||||
LLPointer<LLViewerFetchedTexture> mImage;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@
|
|||
const std::string LLSLURL::PREFIX_SL_HELP = "secondlife://app.";
|
||||
const std::string LLSLURL::PREFIX_SL = "sl://";
|
||||
const std::string LLSLURL::PREFIX_SECONDLIFE = "secondlife://";
|
||||
const std::string LLSLURL::PREFIX_SLURL = "http://slurl.com/secondlife/";
|
||||
const std::string LLSLURL::PREFIX_SLURL_OLD = "http://slurl.com/secondlife/";
|
||||
const std::string LLSLURL::PREFIX_SLURL = "http://maps.secondlife.com/secondlife/";
|
||||
|
||||
const std::string LLSLURL::APP_TOKEN = "app/";
|
||||
|
||||
|
|
@ -63,6 +64,11 @@ std::string LLSLURL::stripProtocol(const std::string& url)
|
|||
{
|
||||
stripped.erase(0, PREFIX_SLURL.length());
|
||||
}
|
||||
else if (matchPrefix(stripped, PREFIX_SLURL_OLD))
|
||||
{
|
||||
stripped.erase(0, PREFIX_SLURL_OLD.length());
|
||||
}
|
||||
|
||||
|
||||
return stripped;
|
||||
}
|
||||
|
|
@ -74,6 +80,7 @@ bool LLSLURL::isSLURL(const std::string& url)
|
|||
if (matchPrefix(url, PREFIX_SL)) return true;
|
||||
if (matchPrefix(url, PREFIX_SECONDLIFE)) return true;
|
||||
if (matchPrefix(url, PREFIX_SLURL)) return true;
|
||||
if (matchPrefix(url, PREFIX_SLURL_OLD)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -83,7 +90,8 @@ bool LLSLURL::isSLURLCommand(const std::string& url)
|
|||
{
|
||||
if (matchPrefix(url, PREFIX_SL + APP_TOKEN) ||
|
||||
matchPrefix(url, PREFIX_SECONDLIFE + "/" + APP_TOKEN) ||
|
||||
matchPrefix(url, PREFIX_SLURL + APP_TOKEN) )
|
||||
matchPrefix(url, PREFIX_SLURL + APP_TOKEN) ||
|
||||
matchPrefix(url, PREFIX_SLURL_OLD + APP_TOKEN) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ public:
|
|||
static const std::string PREFIX_SL;
|
||||
static const std::string PREFIX_SECONDLIFE;
|
||||
static const std::string PREFIX_SLURL;
|
||||
static const std::string PREFIX_SLURL_OLD;
|
||||
|
||||
static const std::string APP_TOKEN;
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,16 @@ void LLSpeakButton::draw()
|
|||
mOutputMonitor->setIsMuted(!voiceenabled);
|
||||
LLUICtrl::draw();
|
||||
}
|
||||
void LLSpeakButton::setSpeakBtnEnabled(bool enabled)
|
||||
{
|
||||
LLButton* speak_btn = getChild<LLButton>("speak_btn");
|
||||
speak_btn->setEnabled(enabled);
|
||||
}
|
||||
void LLSpeakButton::setFlyoutBtnEnabled(bool enabled)
|
||||
{
|
||||
LLButton* show_btn = getChild<LLButton>("speak_flyout_btn");
|
||||
show_btn->setEnabled(enabled);
|
||||
}
|
||||
|
||||
LLSpeakButton::LLSpeakButton(const Params& p)
|
||||
: LLUICtrl(p)
|
||||
|
|
|
|||
|
|
@ -61,6 +61,10 @@ public:
|
|||
|
||||
/*virtual*/ ~LLSpeakButton();
|
||||
/*virtual*/ void draw();
|
||||
|
||||
// methods for enabling/disabling right and left parts of speak button separately(EXT-4648)
|
||||
void setSpeakBtnEnabled(bool enabled);
|
||||
void setFlyoutBtnEnabled(bool enabled);
|
||||
|
||||
// *HACK: Need to put tooltips in a translatable location,
|
||||
// the panel that contains this button.
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ void LLSpeakersDelayActionsStorage::setActionTimer(const LLUUID& speaker_id)
|
|||
}
|
||||
}
|
||||
|
||||
void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id)
|
||||
void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id, bool delete_it)
|
||||
{
|
||||
if (mActionTimersMap.size() == 0) return;
|
||||
|
||||
|
|
@ -213,7 +213,10 @@ void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id)
|
|||
|
||||
if (it_speaker != mActionTimersMap.end())
|
||||
{
|
||||
delete it_speaker->second;
|
||||
if (delete_it)
|
||||
{
|
||||
delete it_speaker->second;
|
||||
}
|
||||
mActionTimersMap.erase(it_speaker);
|
||||
}
|
||||
}
|
||||
|
|
@ -230,16 +233,15 @@ void LLSpeakersDelayActionsStorage::removeAllTimers()
|
|||
|
||||
bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_id)
|
||||
{
|
||||
unsetActionTimer(speaker_id);
|
||||
bool delete_it = false; // we're *in* this timer, return true to delete it, don't manually delete it
|
||||
unsetActionTimer(speaker_id, delete_it);
|
||||
|
||||
if (mActionCallback)
|
||||
{
|
||||
mActionCallback(speaker_id);
|
||||
}
|
||||
|
||||
// do not return true to avoid deleting of an timer twice:
|
||||
// in LLSpeakersDelayActionsStorage::unsetActionTimer() & LLEventTimer::updateClass()
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -291,7 +293,8 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin
|
|||
}
|
||||
}
|
||||
|
||||
mSpeakerDelayRemover->unsetActionTimer(speakerp->mID);
|
||||
bool delete_it = true;
|
||||
mSpeakerDelayRemover->unsetActionTimer(speakerp->mID, delete_it);
|
||||
|
||||
return speakerp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,11 +176,11 @@ public:
|
|||
void setActionTimer(const LLUUID& speaker_id);
|
||||
|
||||
/**
|
||||
* Removes stored LLSpeakerActionTimer for passed speaker UUID from internal map and deletes it.
|
||||
* Removes stored LLSpeakerActionTimer for passed speaker UUID from internal map and optionally deletes it.
|
||||
*
|
||||
* @see onTimerActionCallback()
|
||||
*/
|
||||
void unsetActionTimer(const LLUUID& speaker_id);
|
||||
void unsetActionTimer(const LLUUID& speaker_id, bool delete_it);
|
||||
|
||||
void removeAllTimers();
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -773,8 +773,6 @@ bool idle_startup()
|
|||
|
||||
LLPanelLogin::giveFocus();
|
||||
|
||||
gSavedSettings.setBOOL("FirstRunThisInstall", FALSE);
|
||||
|
||||
LLStartUp::setStartupState( STATE_LOGIN_WAIT ); // Wait for user input
|
||||
}
|
||||
else
|
||||
|
|
@ -1845,21 +1843,6 @@ bool idle_startup()
|
|||
{
|
||||
F32 timeout_frac = timeout.getElapsedTimeF32()/PRECACHING_DELAY;
|
||||
|
||||
// We now have an inventory skeleton, so if this is a user's first
|
||||
// login, we can start setting up their clothing and avatar
|
||||
// appearance. This helps to avoid the generic "Ruth" avatar in
|
||||
// the orientation island tutorial experience. JC
|
||||
if (gAgent.isFirstLogin()
|
||||
&& !sInitialOutfit.empty() // registration set up an outfit
|
||||
&& !sInitialOutfitGender.empty() // and a gender
|
||||
&& gAgent.getAvatarObject() // can't wear clothes without object
|
||||
&& !gAgent.isGenderChosen() ) // nothing already loading
|
||||
{
|
||||
// Start loading the wearables, textures, gestures
|
||||
LLStartUp::loadInitialOutfit( sInitialOutfit, sInitialOutfitGender );
|
||||
}
|
||||
|
||||
|
||||
// We now have an inventory skeleton, so if this is a user's first
|
||||
// login, we can start setting up their clothing and avatar
|
||||
// appearance. This helps to avoid the generic "Ruth" avatar in
|
||||
|
|
@ -2012,6 +1995,9 @@ bool idle_startup()
|
|||
|
||||
LLStartUp::setStartupState( STATE_STARTED );
|
||||
|
||||
// Mark that we have successfully logged in at least once
|
||||
gSavedSettings.setBOOL("HadFirstSuccessfulLogin", TRUE);
|
||||
|
||||
// Unmute audio if desired and setup volumes.
|
||||
// Unmute audio if desired and setup volumes.
|
||||
// This is a not-uncommon crash site, so surround it with
|
||||
|
|
@ -2536,6 +2522,11 @@ bool callback_choose_gender(const LLSD& notification, const LLSD& response)
|
|||
void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
|
||||
const std::string& gender_name )
|
||||
{
|
||||
// Not going through the processAgentInitialWearables path, so need to set this here.
|
||||
LLAppearanceManager::instance().setAttachmentInvLinkEnable(true);
|
||||
// Initiate creation of COF, since we're also bypassing that.
|
||||
gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
|
||||
|
||||
S32 gender = 0;
|
||||
std::string gestures;
|
||||
if (gender_name == "male")
|
||||
|
|
@ -2554,7 +2545,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
|
|||
LLInventoryModel::cat_array_t cat_array;
|
||||
LLInventoryModel::item_array_t item_array;
|
||||
LLNameCategoryCollector has_name(outfit_folder_name);
|
||||
gInventory.collectDescendentsIf(LLUUID::null,
|
||||
gInventory.collectDescendentsIf(gInventory.getLibraryRootFolderID(),
|
||||
cat_array,
|
||||
item_array,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
|
|
@ -2565,7 +2556,10 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
|
|||
}
|
||||
else
|
||||
{
|
||||
LLAppearanceManager::instance().wearOutfitByName(outfit_folder_name);
|
||||
LLInventoryCategory* cat = cat_array.get(0);
|
||||
bool do_copy = true;
|
||||
bool do_append = false;
|
||||
LLAppearanceManager::instance().wearInventoryCategory(cat, do_copy, do_append);
|
||||
}
|
||||
LLAppearanceManager::instance().wearOutfitByName(gestures);
|
||||
LLAppearanceManager::instance().wearOutfitByName(COMMON_GESTURES_FOLDER);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llfloaterreg.h"
|
||||
#include "llgroupactions.h"
|
||||
#include "llgroupiconctrl.h"
|
||||
#include "llimview.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llinstantmessage.h"
|
||||
#include "lltooltip.h"
|
||||
|
|
@ -52,9 +53,9 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif
|
|||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");
|
||||
|
||||
LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon");
|
||||
mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
|
||||
mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
|
||||
mAdhocIcon = getChild<LLAvatarIconCtrl>("adhoc_icon");
|
||||
mAvatarName = getChild<LLTextBox>("user_name");
|
||||
mTime = getChild<LLTextBox>("time_box");
|
||||
mMessage = getChild<LLTextBox>("message");
|
||||
|
|
@ -90,27 +91,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif
|
|||
mAvatarID = p.avatar_id;
|
||||
mNotification = p.notification;
|
||||
|
||||
mAvatarIcon->setVisible(FALSE);
|
||||
mGroupIcon->setVisible(FALSE);
|
||||
sys_msg_icon->setVisible(FALSE);
|
||||
|
||||
if(p.from == SYSTEM_FROM)
|
||||
{
|
||||
sys_msg_icon->setVisible(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LLGroupActions::isInGroup(mSessionID))
|
||||
{
|
||||
mGroupIcon->setVisible(TRUE);
|
||||
mGroupIcon->setValue(p.session_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
mAvatarIcon->setVisible(TRUE);
|
||||
mAvatarIcon->setValue(p.avatar_id);
|
||||
}
|
||||
}
|
||||
initIcon();
|
||||
|
||||
S32 maxLinesCount;
|
||||
std::istringstream ss( getString("message_max_lines_count") );
|
||||
|
|
@ -162,13 +143,27 @@ BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
|
||||
void LLToastIMPanel::showInspector()
|
||||
{
|
||||
if(LLGroupActions::isInGroup(mSessionID))
|
||||
LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID);
|
||||
if(!im_session)
|
||||
{
|
||||
LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID));
|
||||
llwarns << "Invalid IM session" << llendl;
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
switch(im_session->mSessionType)
|
||||
{
|
||||
case LLIMModel::LLIMSession::P2P_SESSION:
|
||||
LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID));
|
||||
break;
|
||||
case LLIMModel::LLIMSession::GROUP_SESSION:
|
||||
LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID));
|
||||
break;
|
||||
case LLIMModel::LLIMSession::ADHOC_SESSION:
|
||||
LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", im_session->mOtherParticipantID));
|
||||
break;
|
||||
default:
|
||||
llwarns << "Unknown IM session type" << llendl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -217,4 +212,48 @@ void LLToastIMPanel::spawnGroupIconToolTip()
|
|||
LLToolTipMgr::getInstance()->show(params);
|
||||
}
|
||||
|
||||
void LLToastIMPanel::initIcon()
|
||||
{
|
||||
LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon");
|
||||
|
||||
mAvatarIcon->setVisible(FALSE);
|
||||
mGroupIcon->setVisible(FALSE);
|
||||
sys_msg_icon->setVisible(FALSE);
|
||||
mAdhocIcon->setVisible(FALSE);
|
||||
|
||||
if(mAvatarName->getValue().asString() == SYSTEM_FROM)
|
||||
{
|
||||
sys_msg_icon->setVisible(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID);
|
||||
if(!im_session)
|
||||
{
|
||||
llwarns << "Invalid IM session" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
switch(im_session->mSessionType)
|
||||
{
|
||||
case LLIMModel::LLIMSession::P2P_SESSION:
|
||||
mAvatarIcon->setVisible(TRUE);
|
||||
mAvatarIcon->setValue(mAvatarID);
|
||||
break;
|
||||
case LLIMModel::LLIMSession::GROUP_SESSION:
|
||||
mGroupIcon->setVisible(TRUE);
|
||||
mGroupIcon->setValue(mSessionID);
|
||||
break;
|
||||
case LLIMModel::LLIMSession::ADHOC_SESSION:
|
||||
mAdhocIcon->setVisible(TRUE);
|
||||
mAdhocIcon->setValue(im_session->mOtherParticipantID);
|
||||
mAdhocIcon->setToolTip(im_session->mName);
|
||||
break;
|
||||
default:
|
||||
llwarns << "Unknown IM session type" << llendl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@ private:
|
|||
void spawnNameToolTip();
|
||||
void spawnGroupIconToolTip();
|
||||
|
||||
void initIcon();
|
||||
|
||||
static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
|
||||
|
||||
LLNotificationPtr mNotification;
|
||||
|
|
@ -73,6 +75,7 @@ private:
|
|||
LLUUID mAvatarID;
|
||||
LLAvatarIconCtrl* mAvatarIcon;
|
||||
LLGroupIconCtrl* mGroupIcon;
|
||||
LLAvatarIconCtrl* mAdhocIcon;
|
||||
LLTextBox* mAvatarName;
|
||||
LLTextBox* mTime;
|
||||
LLTextBox* mMessage;
|
||||
|
|
|
|||
|
|
@ -603,6 +603,10 @@ class LLAdvancedToggleHUDInfo : public view_listener_t
|
|||
{
|
||||
gDisplayFOV = !(gDisplayFOV);
|
||||
}
|
||||
else if ("badge" == info_type)
|
||||
{
|
||||
gDisplayBadge = !(gDisplayBadge);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -625,6 +629,10 @@ class LLAdvancedCheckHUDInfo : public view_listener_t
|
|||
{
|
||||
new_value = gDisplayFOV;
|
||||
}
|
||||
else if ("badge" == info_type)
|
||||
{
|
||||
new_value = gDisplayBadge;
|
||||
}
|
||||
return new_value;
|
||||
}
|
||||
};
|
||||
|
|
@ -7179,25 +7187,7 @@ void handle_buy_currency_test(void*)
|
|||
LLStringUtil::format_map_t replace;
|
||||
replace["[AGENT_ID]"] = gAgent.getID().asString();
|
||||
replace["[SESSION_ID]"] = gAgent.getSecureSessionID().asString();
|
||||
|
||||
// *TODO: Replace with call to LLUI::getLanguage() after windows-setup
|
||||
// branch merges in. JC
|
||||
std::string language = "en";
|
||||
language = gSavedSettings.getString("Language");
|
||||
if (language.empty() || language == "default")
|
||||
{
|
||||
language = gSavedSettings.getString("InstallLanguage");
|
||||
}
|
||||
if (language.empty() || language == "default")
|
||||
{
|
||||
language = gSavedSettings.getString("SystemLanguage");
|
||||
}
|
||||
if (language.empty() || language == "default")
|
||||
{
|
||||
language = "en";
|
||||
}
|
||||
|
||||
replace["[LANGUAGE]"] = language;
|
||||
replace["[LANGUAGE]"] = LLUI::getLanguage();
|
||||
LLStringUtil::format(url, replace);
|
||||
|
||||
llinfos << "buy currency url " << url << llendl;
|
||||
|
|
|
|||
|
|
@ -1478,6 +1478,11 @@ void inventory_offer_handler(LLOfferInfo* info)
|
|||
// Strip any SLURL from the message display. (DEV-2754)
|
||||
std::string msg = info->mDesc;
|
||||
int indx = msg.find(" ( http://slurl.com/secondlife/");
|
||||
if(indx == std::string::npos)
|
||||
{
|
||||
// try to find new slurl host
|
||||
indx = msg.find(" ( http://maps.secondlife.com/secondlife/");
|
||||
}
|
||||
if(indx >= 0)
|
||||
{
|
||||
LLStringUtil::truncate(msg, indx);
|
||||
|
|
|
|||
|
|
@ -1597,14 +1597,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
instance->mTeleportInProgress = FALSE;
|
||||
instance->mTeleportFinishedSignal(gAgent.getPositionGlobal());
|
||||
}
|
||||
|
||||
// HACK: This makes agents drop from the sky if they enter a parcel
|
||||
// which is set to no fly.
|
||||
BOOL was_flying = gAgent.getFlying();
|
||||
if (was_flying && !parcel->getAllowFly())
|
||||
{
|
||||
gAgent.setFlying(gAgent.canFly());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ S32 gDebugRaycastFaceHit;
|
|||
BOOL gDisplayWindInfo = FALSE;
|
||||
BOOL gDisplayCameraPos = FALSE;
|
||||
BOOL gDisplayFOV = FALSE;
|
||||
BOOL gDisplayBadge = FALSE;
|
||||
|
||||
S32 CHAT_BAR_HEIGHT = 28;
|
||||
S32 OVERLAY_BAR_HEIGHT = 20;
|
||||
|
|
@ -422,6 +423,11 @@ public:
|
|||
addText(xpos, ypos, llformat("FOV: %2.1f deg", RAD_TO_DEG * LLViewerCamera::getInstance()->getView()));
|
||||
ypos += y_inc;
|
||||
}
|
||||
if (gDisplayBadge)
|
||||
{
|
||||
addText(xpos, ypos+(y_inc/2), llformat("Hippos!", RAD_TO_DEG * LLViewerCamera::getInstance()->getView()));
|
||||
ypos += y_inc * 2;
|
||||
}
|
||||
|
||||
/*if (LLViewerJoystick::getInstance()->getOverrideCamera())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -506,5 +506,6 @@ extern S32 CHAT_BAR_HEIGHT;
|
|||
extern BOOL gDisplayCameraPos;
|
||||
extern BOOL gDisplayWindInfo;
|
||||
extern BOOL gDisplayFOV;
|
||||
extern BOOL gDisplayBadge;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -145,11 +145,20 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
|
|||
substitution["VERSION_PATCH"] = LLVersionInfo::getPatch();
|
||||
substitution["VERSION_BUILD"] = LLVersionInfo::getBuild();
|
||||
substitution["CHANNEL"] = LLVersionInfo::getChannel();
|
||||
substitution["LANGUAGE"] = LLUI::getLanguage();
|
||||
substitution["GRID"] = LLViewerLogin::getInstance()->getGridLabel();
|
||||
substitution["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
|
||||
substitution["SESSION_ID"] = gAgent.getSessionID();
|
||||
|
||||
// work out the current language
|
||||
std::string lang = LLUI::getLanguage();
|
||||
if (lang == "en-us")
|
||||
{
|
||||
// *HACK: the correct fix is to change English.lproj/language.txt,
|
||||
// but we're late in the release cycle and this is a less risky fix
|
||||
lang = "en";
|
||||
}
|
||||
substitution["LANGUAGE"] = lang;
|
||||
|
||||
// find the region ID
|
||||
LLUUID region_id;
|
||||
LLViewerRegion *region = gAgent.getRegion();
|
||||
|
|
@ -159,14 +168,14 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
|
|||
}
|
||||
substitution["REGION_ID"] = region_id;
|
||||
|
||||
// find the parcel ID
|
||||
LLUUID parcel_id;
|
||||
// find the parcel local ID
|
||||
S32 parcel_id = 0;
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
if (parcel)
|
||||
{
|
||||
parcel_id = parcel->getID();
|
||||
parcel_id = parcel->getLocalID();
|
||||
}
|
||||
substitution["PARCEL_ID"] = parcel_id;
|
||||
substitution["PARCEL_ID"] = llformat("%d", parcel_id);
|
||||
|
||||
// expand all of the substitution strings and escape the url
|
||||
std::string expanded_url = url;
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@
|
|||
reference="Black" />
|
||||
<color
|
||||
name="ContextSilhouetteColor"
|
||||
value="0.94 0.61 0 1" />
|
||||
reference="EmphasisColor" />
|
||||
<color
|
||||
name="DefaultHighlightDark"
|
||||
reference="White_10" />
|
||||
|
|
@ -602,7 +602,7 @@
|
|||
value="0.39 0.39 0.39 1" />
|
||||
<color
|
||||
name="ScriptErrorColor"
|
||||
value="Red" />
|
||||
reference="Red" />
|
||||
<color
|
||||
name="ScrollBGStripeColor"
|
||||
reference="Transparent" />
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 334 B |
|
|
@ -369,7 +369,7 @@ with the same filename but different name
|
|||
|
||||
<texture name="Parcel_Build_Dark" file_name="icons/Parcel_Build_Dark.png" preload="false" />
|
||||
<texture name="Parcel_BuildNo_Dark" file_name="icons/Parcel_BuildNo_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Damage_Dark.png" preload="false" />
|
||||
<texture name="Parcel_DamageNo_Dark" file_name="icons/Parcel_DamageNo_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Evry_Dark" file_name="icons/Parcel_Evry_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Exp_Dark" file_name="icons/Parcel_Exp_Dark.png" preload="false" />
|
||||
|
|
@ -377,6 +377,7 @@ with the same filename but different name
|
|||
<texture name="Parcel_FlyNo_Dark" file_name="icons/Parcel_FlyNo_Dark.png" preload="false" />
|
||||
<texture name="Parcel_ForSale_Dark" file_name="icons/Parcel_ForSale_Dark.png" preload="false" />
|
||||
<texture name="Parcel_ForSaleNo_Dark" file_name="icons/Parcel_ForSaleNo_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Health_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" />
|
||||
<texture name="Parcel_M_Dark" file_name="icons/Parcel_M_Dark.png" preload="false" />
|
||||
<texture name="Parcel_PG_Dark" file_name="icons/Parcel_PG_Dark.png" preload="false" />
|
||||
<texture name="Parcel_Push_Dark" file_name="icons/Parcel_Push_Dark.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -178,8 +178,8 @@
|
|||
follows="top|left"
|
||||
height="16"
|
||||
halign="right"
|
||||
left="150"
|
||||
width="170"
|
||||
left="140"
|
||||
width="180"
|
||||
layout="topleft"
|
||||
name="buy_action">
|
||||
[NAME] L$ [PRICE]
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@
|
|||
left="6"
|
||||
name="Keep"
|
||||
top_pad="5"
|
||||
width="100" />
|
||||
width="110" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="22"
|
||||
|
|
@ -123,7 +123,7 @@
|
|||
left_pad="5"
|
||||
name="Discard"
|
||||
top_delta="0"
|
||||
width="100" />
|
||||
width="110" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="22"
|
||||
|
|
@ -132,5 +132,5 @@
|
|||
left_pad="5"
|
||||
name="save_tex_btn"
|
||||
top_delta="0"
|
||||
width="100" />
|
||||
width="110" />
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@
|
|||
function="Self.EnableStandUp" />
|
||||
</menu_item_call>
|
||||
<context_menu
|
||||
label="Take Off >"
|
||||
label="Take Off ▶"
|
||||
layout="topleft"
|
||||
name="Take Off >">
|
||||
<context_menu
|
||||
label="Clothes >"
|
||||
label="Clothes ▶"
|
||||
layout="topleft"
|
||||
name="Clothes >">
|
||||
<menu_item_call
|
||||
|
|
@ -151,7 +151,7 @@
|
|||
<menu_item_call.on_enable
|
||||
function="Edit.EnableTakeOff"
|
||||
parameter="alpha" />
|
||||
</menu_item_call>
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
|
|
@ -164,11 +164,11 @@
|
|||
</menu_item_call>
|
||||
</context_menu>
|
||||
<context_menu
|
||||
label="HUD >"
|
||||
label="HUD ▶"
|
||||
layout="topleft"
|
||||
name="Object Detach HUD" />
|
||||
<context_menu
|
||||
label="Detach >"
|
||||
label="Detach ▶"
|
||||
layout="topleft"
|
||||
name="Object Detach" />
|
||||
<menu_item_call
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
</menu_item_call>
|
||||
<menu_item_separator layout="topleft" />
|
||||
<context_menu
|
||||
label="Put On >"
|
||||
label="Put On ▶"
|
||||
name="Put On" >
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
|
|
@ -77,15 +77,25 @@
|
|||
function="Object.EnableWear" />
|
||||
</menu_item_call>
|
||||
<context_menu
|
||||
label="Attach >"
|
||||
label="Attach ▶"
|
||||
name="Object Attach" />
|
||||
<context_menu
|
||||
label="Attach HUD >"
|
||||
label="Attach HUD ▶"
|
||||
name="Object Attach HUD" />
|
||||
</context_menu>
|
||||
<context_menu
|
||||
label="Remove >"
|
||||
label="Remove ▶"
|
||||
name="Remove">
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Take"
|
||||
name="Pie Object Take">
|
||||
<menu_item_call.on_click
|
||||
function="Tools.BuyOrTake" />
|
||||
<menu_item_call.on_enable
|
||||
function="Tools.EnableBuyOrTake"
|
||||
parameter="Buy,Take" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Report Abuse"
|
||||
|
|
@ -124,16 +134,6 @@
|
|||
</menu_item_call>
|
||||
</context_menu>
|
||||
<menu_item_separator layout="topleft" />
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Take"
|
||||
name="Pie Object Take">
|
||||
<menu_item_call.on_click
|
||||
function="Tools.BuyOrTake" />
|
||||
<menu_item_call.on_enable
|
||||
function="Tools.EnableBuyOrTake"
|
||||
parameter="Buy,Take" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Take Copy"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,19 @@
|
|||
<menu_item_call.on_click
|
||||
function="Profile.Share" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Block/Unblock"
|
||||
layout="topleft"
|
||||
name="block_unblock">
|
||||
<menu_item_check.on_click
|
||||
function="Profile.BlockUnblock" />
|
||||
<menu_item_check.on_check
|
||||
function="Profile.CheckItem"
|
||||
parameter="is_blocked" />
|
||||
<menu_item_check.on_enable
|
||||
function="Profile.EnableItem"
|
||||
parameter="can_block" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Kick"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -1998,6 +1998,18 @@
|
|||
function="Advanced.ToggleHUDInfo"
|
||||
parameter="fov" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Badge"
|
||||
layout="topleft"
|
||||
name="Badge"
|
||||
shortcut="alt|control|shift|h">
|
||||
<menu_item_check.on_check
|
||||
function="Advanced.CheckHUDInfo"
|
||||
parameter="badge" />
|
||||
<menu_item_check.on_click
|
||||
function="Advanced.ToggleHUDInfo"
|
||||
parameter="badge" />
|
||||
</menu_item_check>
|
||||
</menu>
|
||||
<menu
|
||||
create_jump_keys="true"
|
||||
|
|
|
|||
|
|
@ -391,14 +391,6 @@ Add this Ability to '[ROLE_NAME]'?
|
|||
notext="No"
|
||||
yestext="Yes"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="ClickUnimplemented"
|
||||
type="alertmodal">
|
||||
Sorry, not implemented yet.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="JoinGroupCanAfford"
|
||||
|
|
@ -411,6 +403,19 @@ Do you wish to proceed?
|
|||
yestext="Join"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="JoinGroupNoCost"
|
||||
type="alertmodal">
|
||||
You are Joining group [NAME].
|
||||
Do you wish to proceed?
|
||||
<usetemplate
|
||||
name="okcancelbuttons"
|
||||
notext="Cancel"
|
||||
yestext="Join"/>
|
||||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="JoinGroupCannotAfford"
|
||||
|
|
|
|||
|
|
@ -45,6 +45,17 @@
|
|||
name="group_icon"
|
||||
top="3"
|
||||
width="18" />
|
||||
<avatar_icon
|
||||
color="Green"
|
||||
follows="right"
|
||||
height="18"
|
||||
image_name="Generic_Person"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
mouse_opaque="false"
|
||||
name="adhoc_icon"
|
||||
top="3"
|
||||
width="18" />
|
||||
<!--<icon
|
||||
follows="right"
|
||||
height="20"
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ control_name="RememberPassword"
|
|||
follows="left|bottom"
|
||||
font="SansSerifSmall"
|
||||
height="16"
|
||||
label="Remember"
|
||||
label="Remember password"
|
||||
top_pad="3"
|
||||
name="remember_check"
|
||||
width="135" />
|
||||
|
|
|
|||
|
|
@ -141,12 +141,25 @@
|
|||
font="SansSerifSmall"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="102"
|
||||
left="0"
|
||||
name="favorite"
|
||||
image_drag_indication="Accordion_ArrowOpened_Off"
|
||||
bottom="55"
|
||||
tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
|
||||
width="590">
|
||||
<label
|
||||
follows="left|top"
|
||||
font.style="BOLD"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="favorites_bar_label"
|
||||
text_color="LtGray"
|
||||
tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
|
||||
top="12"
|
||||
width="102">
|
||||
Favorites Bar
|
||||
</label>
|
||||
<chevron_button name=">>"
|
||||
image_unselected="TabIcon_Close_Off"
|
||||
image_selected="TabIcon_Close_Off"
|
||||
|
|
@ -157,15 +170,4 @@
|
|||
top="15"
|
||||
height="15"/>
|
||||
</favorites_bar>
|
||||
<text
|
||||
follows="left|top"
|
||||
font.style="BOLD"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="-12"
|
||||
name="favorites_bar_label"
|
||||
text_color="LtGray"
|
||||
tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
|
||||
width="102">Favorites Bar</text>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<panel
|
||||
border="true"
|
||||
follows="left|top|right|bottom"
|
||||
follows="all"
|
||||
height="408"
|
||||
label="Advanced"
|
||||
layout="topleft"
|
||||
left="102"
|
||||
name="advanced"
|
||||
|
|
@ -13,130 +13,29 @@
|
|||
name="aspect_ratio_text">
|
||||
[NUM]:[DEN]
|
||||
</panel.string>
|
||||
<check_box
|
||||
control_name="UseChatBubbles"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
label="Bubble chat"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top="10"
|
||||
name="bubble_text_chat"
|
||||
width="150" />
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
color="0 0 0 1"
|
||||
control_name="BackgroundChatColor"
|
||||
follows="left|top"
|
||||
height="47"
|
||||
layout="topleft"
|
||||
left_delta="280"
|
||||
name="background"
|
||||
tool_tip="Choose color for bubble chat"
|
||||
top_delta="1"
|
||||
width="44">
|
||||
<color_swatch.init_callback
|
||||
function="Pref.getUIColor"
|
||||
parameter="BackgroundChatColor" />
|
||||
<color_swatch.commit_callback
|
||||
function="Pref.applyUIColor"
|
||||
parameter="BackgroundChatColor" />
|
||||
</color_swatch>
|
||||
<slider
|
||||
control_name="ChatBubbleOpacity"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.05"
|
||||
initial_value="1"
|
||||
label="Opacity"
|
||||
layout="topleft"
|
||||
left_delta="-230"
|
||||
top_pad="-28"
|
||||
label_width="50"
|
||||
name="bubble_chat_opacity"
|
||||
width="200" />
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
length="1"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top_pad="5"
|
||||
name="AspectRatioLabel1"
|
||||
tool_tip="width / height"
|
||||
label_width="50"
|
||||
width="120">
|
||||
Aspect ratio
|
||||
</text>
|
||||
<combo_box
|
||||
allow_text_entry="true"
|
||||
height="23"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
max_chars="100"
|
||||
name="aspect_ratio"
|
||||
tool_tip="width / height"
|
||||
top_delta="0"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 4:3 (Standard CRT)"
|
||||
name="item1"
|
||||
value="1.333333" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 5:4 (1280x1024 LCD)"
|
||||
name="item2"
|
||||
value="1.25" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 8:5 (Widescreen)"
|
||||
name="item3"
|
||||
value="1.6" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 16:9 (Widescreen)"
|
||||
name="item4"
|
||||
value="1.7777777" />
|
||||
</combo_box>
|
||||
<check_box
|
||||
control_name="FullScreenAutoDetectAspectRatio"
|
||||
follows="left|top"
|
||||
height="25"
|
||||
label="Auto-detect"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="aspect_auto_detect"
|
||||
width="256">
|
||||
<check_box.commit_callback
|
||||
function="Pref.AutoDetectAspect" />
|
||||
</check_box>
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
length="1"
|
||||
height="10"
|
||||
left="30"
|
||||
name="heading1"
|
||||
top_pad="5"
|
||||
width="270">
|
||||
Camera:
|
||||
</text>
|
||||
<icon
|
||||
follows="left|top"
|
||||
height="18"
|
||||
image_name="Cam_FreeCam_Off"
|
||||
layout="topleft"
|
||||
name="camera_icon"
|
||||
mouse_opaque="false"
|
||||
visible="true"
|
||||
width="18"
|
||||
left="30"
|
||||
top="10"/>
|
||||
<slider
|
||||
can_edit_text="true"
|
||||
control_name="CameraAngle"
|
||||
control_name="CameraAngle"
|
||||
decimal_digits="2"
|
||||
top_pad="5"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.025"
|
||||
initial_value="1.57"
|
||||
layout="topleft"
|
||||
label_width="100"
|
||||
label="View Angle"
|
||||
left_delta="50"
|
||||
label="View angle"
|
||||
left_pad="30"
|
||||
max_val="2.97"
|
||||
min_val="0.17"
|
||||
name="camera_fov"
|
||||
|
|
@ -165,11 +64,11 @@ Camera:
|
|||
type="string"
|
||||
length="1"
|
||||
height="10"
|
||||
left="30"
|
||||
left="80"
|
||||
name="heading2"
|
||||
width="270"
|
||||
top_pad="5">
|
||||
Automatic positioning for:
|
||||
Automatic position for:
|
||||
</text>
|
||||
<check_box
|
||||
control_name="EditCameraMovement"
|
||||
|
|
@ -177,7 +76,7 @@ Automatic positioning for:
|
|||
follows="left|top"
|
||||
label="Build/Edit"
|
||||
layout="topleft"
|
||||
left_delta="50"
|
||||
left_delta="30"
|
||||
name="edit_camera_movement"
|
||||
tool_tip="Use automatic camera positioning when entering and exiting edit mode"
|
||||
width="280"
|
||||
|
|
@ -191,27 +90,27 @@ Automatic positioning for:
|
|||
name="appearance_camera_movement"
|
||||
tool_tip="Use automatic camera positioning while in edit mode"
|
||||
width="242" />
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
length="1"
|
||||
height="10"
|
||||
left="30"
|
||||
name="heading3"
|
||||
top_pad="5"
|
||||
width="270">
|
||||
Avatars:
|
||||
</text>
|
||||
<icon
|
||||
follows="left|top"
|
||||
height="18"
|
||||
image_name="Move_Walk_Off"
|
||||
layout="topleft"
|
||||
name="avatar_icon"
|
||||
mouse_opaque="false"
|
||||
visible="true"
|
||||
width="18"
|
||||
top_pad="2"
|
||||
left="30"
|
||||
/>
|
||||
<check_box
|
||||
control_name="FirstPersonAvatarVisible"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Show me in Mouselook"
|
||||
layout="topleft"
|
||||
left_delta="50"
|
||||
left_pad="30"
|
||||
name="first_person_avatar_visible"
|
||||
width="256"
|
||||
top_pad="0"/>
|
||||
width="256" />
|
||||
<check_box
|
||||
control_name="ArrowKeysAlwaysMove"
|
||||
follows="left|top"
|
||||
|
|
@ -242,22 +141,61 @@ Avatars:
|
|||
name="enable_lip_sync"
|
||||
width="237"
|
||||
top_pad="0" />
|
||||
<check_box
|
||||
control_name="UseChatBubbles"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
label="Bubble chat"
|
||||
layout="topleft"
|
||||
left="78"
|
||||
top_pad="6"
|
||||
name="bubble_text_chat"
|
||||
width="150" />
|
||||
<slider
|
||||
control_name="ChatBubbleOpacity"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.05"
|
||||
initial_value="1"
|
||||
label="Opacity"
|
||||
layout="topleft"
|
||||
left="80"
|
||||
label_width="50"
|
||||
name="bubble_chat_opacity"
|
||||
width="200" />
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
color="0 0 0 1"
|
||||
control_name="BackgroundChatColor"
|
||||
follows="left|top"
|
||||
height="50"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="background"
|
||||
tool_tip="Choose color for bubble chat"
|
||||
width="38">
|
||||
<color_swatch.init_callback
|
||||
function="Pref.getUIColor"
|
||||
parameter="BackgroundChatColor" />
|
||||
<color_swatch.commit_callback
|
||||
function="Pref.applyUIColor"
|
||||
parameter="BackgroundChatColor" />
|
||||
</color_swatch>
|
||||
<check_box
|
||||
control_name="ShowScriptErrors"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Show script errors"
|
||||
label="Show script errors in:"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="show_script_errors"
|
||||
width="256"
|
||||
top_pad="5"/>
|
||||
width="256" />
|
||||
<radio_group
|
||||
enabled_control="ShowScriptErrors"
|
||||
control_name="ShowScriptErrorsLocation"
|
||||
follows="top|left"
|
||||
draw_border="false"
|
||||
height="40"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="50"
|
||||
name="show_location"
|
||||
|
|
@ -265,7 +203,7 @@ Avatars:
|
|||
width="364">
|
||||
<radio_item
|
||||
height="16"
|
||||
label="In chat"
|
||||
label="Nearby chat"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="0"
|
||||
|
|
@ -273,7 +211,7 @@ Avatars:
|
|||
width="315" />
|
||||
<radio_item
|
||||
height="16"
|
||||
label="In a window"
|
||||
label="Separate window"
|
||||
layout="topleft"
|
||||
left_delta="175"
|
||||
name="1"
|
||||
|
|
@ -284,50 +222,105 @@ Avatars:
|
|||
follows="top|left"
|
||||
enabled_control="EnableVoiceChat"
|
||||
control_name="PushToTalkToggle"
|
||||
height="20"
|
||||
label="Toggle mode for microphone when I press the Speak trigger key:"
|
||||
height="15"
|
||||
label="Toggle speak on/off when I press:"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="push_to_talk_toggle_check"
|
||||
width="237"
|
||||
top_pad="-25"
|
||||
tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
|
||||
<line_editor
|
||||
follows="top|left"
|
||||
control_name="PushToTalkButton"
|
||||
enabled="false"
|
||||
enabled="false"
|
||||
enabled_control="EnableVoiceChat"
|
||||
height="19"
|
||||
left_delta="50"
|
||||
max_length="254"
|
||||
height="23"
|
||||
left="80"
|
||||
max_length="200"
|
||||
name="modifier_combo"
|
||||
label="Push-to-Speak trigger"
|
||||
top_pad="0"
|
||||
width="280" />
|
||||
top_pad="5"
|
||||
width="200" />
|
||||
<button
|
||||
follows="top|left"
|
||||
enabled_control="EnableVoiceChat"
|
||||
height="23"
|
||||
label="Set Key"
|
||||
left_delta="0"
|
||||
left_pad="5"
|
||||
name="set_voice_hotkey_button"
|
||||
width="115"
|
||||
top_pad="5">
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="Pref.VoiceSetKey" />
|
||||
</button>
|
||||
<button
|
||||
bottom_delta="0"
|
||||
enabled_control="EnableVoiceChat"
|
||||
follows="left"
|
||||
follows="top|left"
|
||||
halign="center"
|
||||
height="23"
|
||||
label="Middle Mouse Button"
|
||||
left_delta="120"
|
||||
image_overlay="Refresh_Off"
|
||||
tool_tip="Reset to Middle Mouse Button"
|
||||
mouse_opaque="true"
|
||||
name="set_voice_middlemouse_button"
|
||||
width="160">
|
||||
left_pad="5"
|
||||
width="25">
|
||||
<button.commit_callback
|
||||
function="Pref.VoiceSetMiddleMouse" />
|
||||
</button>
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
length="1"
|
||||
height="13"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top_pad="8"
|
||||
name="AspectRatioLabel1"
|
||||
tool_tip="width / height"
|
||||
label_width="50"
|
||||
width="120">
|
||||
Aspect ratio
|
||||
</text>
|
||||
<combo_box
|
||||
allow_text_entry="true"
|
||||
height="23"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="80"
|
||||
max_chars="100"
|
||||
name="aspect_ratio"
|
||||
tool_tip="width / height"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 4:3 (Standard CRT)"
|
||||
name="item1"
|
||||
value="1.333333" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 5:4 (1280x1024 LCD)"
|
||||
name="item2"
|
||||
value="1.25" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 8:5 (Widescreen)"
|
||||
name="item3"
|
||||
value="1.6" />
|
||||
<combo_box.item
|
||||
enabled="true"
|
||||
label=" 16:9 (Widescreen)"
|
||||
name="item4"
|
||||
value="1.7777777" />
|
||||
</combo_box>
|
||||
<check_box
|
||||
control_name="FullScreenAutoDetectAspectRatio"
|
||||
follows="left|top"
|
||||
height="25"
|
||||
label="Automatic"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="aspect_auto_detect"
|
||||
width="256">
|
||||
<check_box.commit_callback
|
||||
function="Pref.AutoDetectAspect" />
|
||||
</check_box>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
border="true"
|
||||
height="500"
|
||||
height="408"
|
||||
label="Popups"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
follows="top|left"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
left="10"
|
||||
name="tell_me_label"
|
||||
top="10"
|
||||
width="300">
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
<check_box
|
||||
control_name="ChatOnlineNotification"
|
||||
height="16"
|
||||
label="When my friends log out or in"
|
||||
label="When my friends log in or out"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="friends_online_notify_checkbox"
|
||||
|
|
@ -42,38 +42,33 @@
|
|||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifBold"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
left="10"
|
||||
name="show_label"
|
||||
top_pad="14"
|
||||
top_pad="8"
|
||||
width="450">
|
||||
Always show these notifications:
|
||||
Always show:
|
||||
</text>
|
||||
<scroll_list
|
||||
follows="top|left"
|
||||
height="92"
|
||||
height="140"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
multi_select="true"
|
||||
multi_select="true"
|
||||
name="enabled_popups"
|
||||
width="475" />
|
||||
<button
|
||||
enabled_control="FirstSelectedDisabledPopups"
|
||||
follows="top|left"
|
||||
height="23"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_overlay="Arrow_Up"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
left_delta="137"
|
||||
left="180"
|
||||
name="enable_this_popup"
|
||||
top_pad="10"
|
||||
width="43">
|
||||
top_pad="5"
|
||||
width="40">
|
||||
<button.commit_callback
|
||||
function="Pref.ClickEnablePopup" />
|
||||
</button>
|
||||
|
|
@ -81,17 +76,13 @@
|
|||
enabled_control="FirstSelectedEnabledPopups"
|
||||
follows="top|left"
|
||||
height="23"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_overlay="Arrow_Down"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
left_pad="50"
|
||||
left_pad="40"
|
||||
name="disable_this_popup"
|
||||
top_delta="0"
|
||||
width="43">
|
||||
width="40">
|
||||
<button.commit_callback
|
||||
function="Pref.ClickDisablePopup" />
|
||||
</button>
|
||||
|
|
@ -99,21 +90,20 @@
|
|||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifBold"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
left="10"
|
||||
name="dont_show_label"
|
||||
top_pad="10"
|
||||
top_pad="-10"
|
||||
width="450">
|
||||
Never show these notifications:
|
||||
Never show:
|
||||
</text>
|
||||
<scroll_list
|
||||
follows="top|left"
|
||||
height="92"
|
||||
height="140"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
multi_select="true"
|
||||
multi_select="true"
|
||||
name="disabled_popups"
|
||||
width="475" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -89,11 +89,12 @@
|
|||
<text
|
||||
font="SansSerifSmall"
|
||||
type="string"
|
||||
text_color="White_50"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
left_pad="10"
|
||||
name="language_textbox2"
|
||||
width="200">
|
||||
(Requires restart)
|
||||
|
|
@ -179,7 +180,7 @@
|
|||
left_pad="5"
|
||||
name="show_location_checkbox"
|
||||
top_delta="5"
|
||||
width="256" />
|
||||
width="256" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -203,21 +204,21 @@
|
|||
layout="topleft"
|
||||
name="radio"
|
||||
value="0"
|
||||
width="100" />
|
||||
width="75" />
|
||||
<radio_item
|
||||
label="On"
|
||||
layout="topleft"
|
||||
left_pad="12"
|
||||
name="radio2"
|
||||
value="1"
|
||||
width="100" />
|
||||
width="75" />
|
||||
<radio_item
|
||||
label="Show briefly"
|
||||
layout="topleft"
|
||||
left_pad="12"
|
||||
name="radio3"
|
||||
value="2"
|
||||
width="100" />
|
||||
value="2"
|
||||
width="160" />
|
||||
</radio_group>
|
||||
<check_box
|
||||
enabled_control="AvatarNameTagMode"
|
||||
|
|
@ -326,7 +327,7 @@
|
|||
left="30"
|
||||
mouse_opaque="false"
|
||||
name="text_box3"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="240">
|
||||
Busy mode response:
|
||||
</text>
|
||||
|
|
@ -335,18 +336,16 @@
|
|||
text_readonly_color="LabelDisabledColor"
|
||||
bg_writeable_color="LtGray"
|
||||
use_ellipses="false"
|
||||
bg_visible="true"
|
||||
border_visible="true"
|
||||
hover="false"
|
||||
commit_on_focus_lost = "true"
|
||||
follows="left|top"
|
||||
height="50"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
left="50"
|
||||
name="busy_response"
|
||||
width="400"
|
||||
width="440"
|
||||
word_wrap="true">
|
||||
log_in_to_change
|
||||
</text_editor>
|
||||
|
||||
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -33,16 +33,15 @@
|
|||
<button
|
||||
control_name="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<check_box
|
||||
control_name="MuteWhenMinimized"
|
||||
height="15"
|
||||
|
|
@ -74,20 +73,19 @@
|
|||
function="Pref.setControlFalse"
|
||||
parameter="MuteAmbient" />
|
||||
</slider>
|
||||
<button
|
||||
control_name="MuteAmbient"
|
||||
<button
|
||||
control_name="MuteAmbient"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_wind"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<slider
|
||||
control_name="AudioLevelUI"
|
||||
disabled_control="MuteAudio"
|
||||
|
|
@ -113,16 +111,15 @@
|
|||
control_name="MuteUI"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_ui"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<slider
|
||||
control_name="AudioLevelMedia"
|
||||
disabled_control="MuteAudio"
|
||||
|
|
@ -144,20 +141,19 @@
|
|||
function="Pref.setControlFalse"
|
||||
parameter="MuteMedia" />
|
||||
</slider>
|
||||
<button
|
||||
<button
|
||||
control_name="MuteMedia"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_media"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<slider
|
||||
control_name="AudioLevelSFX"
|
||||
disabled_control="MuteAudio"
|
||||
|
|
@ -179,20 +175,19 @@
|
|||
function="Pref.setControlFalse"
|
||||
parameter="MuteSounds" />
|
||||
</slider>
|
||||
<button
|
||||
<button
|
||||
control_name="MuteSounds"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_sfx"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<slider
|
||||
control_name="AudioLevelMusic"
|
||||
disabled_control="MuteAudio"
|
||||
|
|
@ -214,20 +209,19 @@
|
|||
function="Pref.setControlFalse"
|
||||
parameter="MuteMusic" />
|
||||
</slider>
|
||||
<button
|
||||
<button
|
||||
control_name="MuteMusic"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_music"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<check_box
|
||||
label_text.halign="left"
|
||||
follows="left|top"
|
||||
|
|
@ -236,10 +230,9 @@
|
|||
disabled_control="CmdLineDisableVoice"
|
||||
label="Enable voice"
|
||||
layout="topleft"
|
||||
font.style="BOLD"
|
||||
left="101"
|
||||
left="28"
|
||||
name="enable_voice_check"
|
||||
top_pad="13"
|
||||
top_pad="5"
|
||||
width="110"
|
||||
>
|
||||
</check_box>
|
||||
|
|
@ -265,21 +258,19 @@
|
|||
function="Pref.setControlFalse"
|
||||
parameter="MuteVoice" />
|
||||
</slider>
|
||||
<button
|
||||
<button
|
||||
control_name="MuteVoice"
|
||||
enabled_control="EnableVoiceChat"
|
||||
disabled_control="MuteAudio"
|
||||
follows="top|right"
|
||||
height="18"
|
||||
height="16"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
left_pad="16"
|
||||
name="mute_voice"
|
||||
left_pad="10"
|
||||
name="mute_audio"
|
||||
tab_stop="false"
|
||||
top_delta="-2"
|
||||
width="22" />
|
||||
width="16" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -366,7 +357,7 @@
|
|||
name="device_settings_panel"
|
||||
class="panel_voice_device_settings"
|
||||
width="501"
|
||||
top="280">
|
||||
top="285">
|
||||
<panel.string
|
||||
name="default_text">
|
||||
Default
|
||||
|
|
|
|||
|
|
@ -115,9 +115,6 @@
|
|||
<!-- Avatar name: More than one avatar is selected/used here -->
|
||||
<string name="AvatarNameMultiple">(multiple)</string>
|
||||
|
||||
<!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. -->
|
||||
<string name="AvatarNameHippos">(hippos)</string>
|
||||
|
||||
<!-- Group name: text shown for LLUUID::null -->
|
||||
<string name="GroupNameNone">(none)</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@
|
|||
top="19"
|
||||
left="2"
|
||||
follows="right|top"
|
||||
image_name="Parcel_Damage_Dark"
|
||||
image_name="Parcel_Health_Dark"
|
||||
/>
|
||||
<!-- Default text color is invisible on top of nav bar background -->
|
||||
<damage_text
|
||||
|
|
|
|||
|
|
@ -269,6 +269,7 @@ namespace tut
|
|||
template<> template<>
|
||||
void HTTPClientTestObject::test<2>()
|
||||
{
|
||||
skip("error test depends on dev's local ISP not supplying \"helpful\" search page");
|
||||
LLHTTPClient::get("http://www.invalid", newResult());
|
||||
runThePump();
|
||||
ensureStatusError();
|
||||
|
|
|
|||
16
install.xml
16
install.xml
|
|
@ -226,30 +226,30 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>609c469ee1857723260b5a9943b9c2c1</string>
|
||||
<string>84821102cb819257a66c8f38732647fc</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20091202.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20100119.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>7085044567999489d82b9ed28f16e480</string>
|
||||
<string>ee8e1b4bbcf137a84d6a85a1c51386ff</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20091202.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100119.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>b4aeefcba3d749f1e9f2a12c6f70192b</string>
|
||||
<string>af4badd6b2c10bc4db82ff1256695892</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux64-20091202.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux64-20100119.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>6746ae9fd9aff98b15f7b9f0f40334ab</string>
|
||||
<string>acbf7a4165a917a4e087879d1756b355</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-windows-20091204.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-windows-20100119.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
|
|||
Loading…
Reference in New Issue