summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/contributions.txt2
-rw-r--r--indra/llaudio/llaudioengine.cpp5
-rw-r--r--indra/llaudio/llaudioengine.h2
-rw-r--r--indra/llaudio/llaudioengine_fmod.cpp92
-rw-r--r--indra/llaudio/llaudioengine_fmod.h7
-rw-r--r--indra/llaudio/llaudioengine_openal.cpp10
-rw-r--r--indra/llaudio/llaudioengine_openal.h24
-rw-r--r--indra/llaudio/llwindgen.h165
-rw-r--r--indra/llmath/llmath.h15
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/llagentcamera.cpp1
-rw-r--r--indra/newview/llagentwearables.cpp6
-rw-r--r--indra/newview/llappearancemgr.cpp2
-rw-r--r--indra/newview/llavataractions.cpp2
-rw-r--r--indra/newview/llcofwearables.cpp90
-rw-r--r--indra/newview/llfloateravatarpicker.cpp13
-rw-r--r--indra/newview/llfloateravatarpicker.h2
-rw-r--r--indra/newview/llfloatersnapshot.cpp118
-rw-r--r--indra/newview/llfloatersnapshot.h9
-rw-r--r--indra/newview/llinventorybridge.cpp8
-rw-r--r--indra/newview/llinventoryfunctions.cpp5
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.cpp87
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.h86
-rw-r--r--indra/newview/llpaneloutfitedit.cpp137
-rw-r--r--indra/newview/llpaneloutfitedit.h25
-rw-r--r--indra/newview/lltoastalertpanel.cpp10
-rw-r--r--indra/newview/llviewertexture.cpp10
-rw-r--r--indra/newview/llviewertexture.h1
-rw-r--r--indra/newview/llvoavatar.cpp5
-rw-r--r--indra/newview/llvoavatarself.cpp10
-rw-r--r--indra/newview/llvoicevivox.cpp1
-rw-r--r--indra/newview/llwearable.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml192
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml19
-rw-r--r--indra/newview/skins/default/xui/en/menu_outfit_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml61
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml1
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_bottomtray.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_login.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_avatar_textures.xml73
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_moveview.xml36
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_notecard.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/menu_attachment_self.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_avatar_self.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_bottomtray.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_participant_list.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml109
-rw-r--r--indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_cof_wearables.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_shape.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_wearable.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_land_money.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_notices.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_main_inventory.xml66
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfit_edit.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_chat.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_appearance.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml158
81 files changed, 1186 insertions, 683 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 5667b69c28..a74cf32afa 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -25,6 +25,7 @@ Aimee Trescothick
VWR-3903
VWR-4083
VWR-4106
+ VWR-5308
VWR-6348
VWR-6358
VWR-6360
@@ -252,6 +253,7 @@ Gigs Taggart
VWR-2491
VWR-2502
VWR-2331
+ VWR-5308
VWR-8781
VWR-8783
Ginko Bayliss
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index b92ccd1d77..9f4c108dff 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -548,12 +548,11 @@ void LLAudioEngine::enableWind(bool enable)
{
if (enable && (!mEnableWind))
{
- initWind();
- mEnableWind = enable;
+ mEnableWind = initWind();
}
else if (mEnableWind && (!enable))
{
- mEnableWind = enable;
+ mEnableWind = false;
cleanupWind();
}
}
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index d287104204..5876cef4ea 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -195,7 +195,7 @@ protected:
virtual LLAudioBuffer *createBuffer() = 0;
virtual LLAudioChannel *createChannel() = 0;
- virtual void initWind() = 0;
+ virtual bool initWind() = 0;
virtual void cleanupWind() = 0;
virtual void setInternalGain(F32 gain) = 0;
diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp
index d7f58defca..7a8a04afa1 100644
--- a/indra/llaudio/llaudioengine_fmod.cpp
+++ b/indra/llaudio/llaudioengine_fmod.cpp
@@ -54,13 +54,12 @@ extern "C" {
void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int length, void* userdata);
}
-FSOUND_DSPUNIT *gWindDSP = NULL;
-
LLAudioEngine_FMOD::LLAudioEngine_FMOD()
{
mInited = false;
mWindGen = NULL;
+ mWindDSP = NULL;
}
@@ -258,10 +257,10 @@ void LLAudioEngine_FMOD::allocateListener(void)
void LLAudioEngine_FMOD::shutdown()
{
- if (gWindDSP)
+ if (mWindDSP)
{
- FSOUND_DSP_SetActive(gWindDSP,false);
- FSOUND_DSP_Free(gWindDSP);
+ FSOUND_DSP_SetActive(mWindDSP,false);
+ FSOUND_DSP_Free(mWindDSP);
}
stopInternetStream();
@@ -289,29 +288,66 @@ LLAudioChannel * LLAudioEngine_FMOD::createChannel()
}
-void LLAudioEngine_FMOD::initWind()
+bool LLAudioEngine_FMOD::initWind()
{
- mWindGen = new LLWindGen<MIXBUFFERFORMAT>;
+ if (!mWindGen)
+ {
+ bool enable;
+
+ switch (FSOUND_GetMixer())
+ {
+ case FSOUND_MIXER_MMXP5:
+ case FSOUND_MIXER_MMXP6:
+ case FSOUND_MIXER_QUALITY_MMXP5:
+ case FSOUND_MIXER_QUALITY_MMXP6:
+ enable = (typeid(MIXBUFFERFORMAT) == typeid(S16));
+ break;
+ case FSOUND_MIXER_BLENDMODE:
+ enable = (typeid(MIXBUFFERFORMAT) == typeid(S32));
+ break;
+ case FSOUND_MIXER_QUALITY_FPU:
+ enable = (typeid(MIXBUFFERFORMAT) == typeid(F32));
+ break;
+ default:
+ // FSOUND_GetMixer() does not return a valid mixer type on Darwin
+ LL_INFOS("AppInit") << "Unknown FMOD mixer type, assuming default" << LL_ENDL;
+ enable = true;
+ break;
+ }
+
+ if (enable)
+ {
+ mWindGen = new LLWindGen<MIXBUFFERFORMAT>(FSOUND_GetOutputRate());
+ }
+ else
+ {
+ LL_WARNS("AppInit") << "Incompatible FMOD mixer type, wind noise disabled" << LL_ENDL;
+ }
+ }
+
+ mNextWindUpdate = 0.0;
- if (!gWindDSP)
+ if (mWindGen && !mWindDSP)
{
- gWindDSP = FSOUND_DSP_Create(&windCallback, FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT + 20, mWindGen);
+ mWindDSP = FSOUND_DSP_Create(&windCallback, FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT + 20, mWindGen);
}
- if (gWindDSP)
+ if (mWindDSP)
{
- FSOUND_DSP_SetActive(gWindDSP, true);
+ FSOUND_DSP_SetActive(mWindDSP, true);
+ return true;
}
- mNextWindUpdate = 0.0;
+
+ return false;
}
void LLAudioEngine_FMOD::cleanupWind()
{
- if (gWindDSP)
+ if (mWindDSP)
{
- FSOUND_DSP_SetActive(gWindDSP, false);
- FSOUND_DSP_Free(gWindDSP);
- gWindDSP = NULL;
+ FSOUND_DSP_SetActive(mWindDSP, false);
+ FSOUND_DSP_Free(mWindDSP);
+ mWindDSP = NULL;
}
delete mWindGen;
@@ -740,30 +776,12 @@ void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int len
// originalbuffer = fmod's original mixbuffer.
// newbuffer = the buffer passed from the previous DSP unit.
// length = length in samples at this mix time.
- // param = user parameter passed through in FSOUND_DSP_Create.
- //
- // modify the buffer in some fashion
+ // userdata = user parameter passed through in FSOUND_DSP_Create.
LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *windgen =
(LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *)userdata;
- U8 stride;
-
-#if LL_DARWIN
- stride = sizeof(LLAudioEngine_FMOD::MIXBUFFERFORMAT);
-#else
- int mixertype = FSOUND_GetMixer();
- if (mixertype == FSOUND_MIXER_BLENDMODE ||
- mixertype == FSOUND_MIXER_QUALITY_FPU)
- {
- stride = 4;
- }
- else
- {
- stride = 2;
- }
-#endif
-
- newbuffer = windgen->windGenerate((LLAudioEngine_FMOD::MIXBUFFERFORMAT *)newbuffer, length, stride);
+
+ newbuffer = windgen->windGenerate((LLAudioEngine_FMOD::MIXBUFFERFORMAT *)newbuffer, length);
return newbuffer;
}
diff --git a/indra/llaudio/llaudioengine_fmod.h b/indra/llaudio/llaudioengine_fmod.h
index 3968657cba..0e386a3884 100644
--- a/indra/llaudio/llaudioengine_fmod.h
+++ b/indra/llaudio/llaudioengine_fmod.h
@@ -55,15 +55,15 @@ public:
virtual void shutdown();
- /*virtual*/ void initWind();
+ /*virtual*/ bool initWind();
/*virtual*/ void cleanupWind();
/*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water);
#if LL_DARWIN
- typedef S32 MIXBUFFERFORMAT;
+ typedef S32 MIXBUFFERFORMAT;
#else
- typedef S16 MIXBUFFERFORMAT;
+ typedef S16 MIXBUFFERFORMAT;
#endif
protected:
@@ -83,6 +83,7 @@ protected:
void* mUserData;
LLWindGen<MIXBUFFERFORMAT> *mWindGen;
+ FSOUND_DSPUNIT *mWindDSP;
};
diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp
index a5982ccbd6..887c791790 100644
--- a/indra/llaudio/llaudioengine_openal.cpp
+++ b/indra/llaudio/llaudioengine_openal.cpp
@@ -370,7 +370,7 @@ U32 LLAudioBufferOpenAL::getLength()
// ------------
-void LLAudioEngine_OpenAL::initWind()
+bool LLAudioEngine_OpenAL::initWind()
{
ALenum error;
llinfos << "LLAudioEngine_OpenAL::initWind() start" << llendl;
@@ -397,10 +397,12 @@ void LLAudioEngine_OpenAL::initWind()
if(mWindBuf==NULL)
{
llerrs << "LLAudioEngine_OpenAL::initWind() Error creating wind memory buffer" << llendl;
- mEnableWind=false;
+ return false;
}
llinfos << "LLAudioEngine_OpenAL::initWind() done" << llendl;
+
+ return true;
}
void LLAudioEngine_OpenAL::cleanupWind()
@@ -508,14 +510,14 @@ void LLAudioEngine_OpenAL::updateWind(LLVector3 wind_vec, F32 camera_altitude)
alGenBuffers(1,&buffer);
if((error=alGetError()) != AL_NO_ERROR)
{
- llwarns << "LLAudioEngine_OpenAL::initWind() Error creating wind buffer: " << error << llendl;
+ llwarns << "LLAudioEngine_OpenAL::updateWind() Error creating wind buffer: " << error << llendl;
break;
}
alBufferData(buffer,
AL_FORMAT_STEREO16,
mWindGen->windGenerate(mWindBuf,
- mWindBufSamples, 2),
+ mWindBufSamples),
mWindBufBytes,
mWindBufFreq);
error = alGetError();
diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h
index 5aca03e195..16125b2476 100644
--- a/indra/llaudio/llaudioengine_openal.h
+++ b/indra/llaudio/llaudioengine_openal.h
@@ -57,23 +57,23 @@ class LLAudioEngine_OpenAL : public LLAudioEngine
LLAudioBuffer* createBuffer();
LLAudioChannel* createChannel();
- /*virtual*/ void initWind();
+ /*virtual*/ bool initWind();
/*virtual*/ void cleanupWind();
/*virtual*/ void updateWind(LLVector3 direction, F32 camera_altitude);
private:
void * windDSP(void *newbuffer, int length);
- typedef S16 WIND_SAMPLE_T;
- LLWindGen<WIND_SAMPLE_T> *mWindGen;
- S16 *mWindBuf;
- U32 mWindBufFreq;
- U32 mWindBufSamples;
- U32 mWindBufBytes;
- ALuint mWindSource;
- int mNumEmptyWindALBuffers;
-
- static const int MAX_NUM_WIND_BUFFERS = 80;
- static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec
+ typedef S16 WIND_SAMPLE_T;
+ LLWindGen<WIND_SAMPLE_T> *mWindGen;
+ S16 *mWindBuf;
+ U32 mWindBufFreq;
+ U32 mWindBufSamples;
+ U32 mWindBufBytes;
+ ALuint mWindSource;
+ int mNumEmptyWindALBuffers;
+
+ static const int MAX_NUM_WIND_BUFFERS = 80;
+ static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec
};
class LLAudioChannelOpenAL : public LLAudioChannel
diff --git a/indra/llaudio/llwindgen.h b/indra/llaudio/llwindgen.h
index 847bfa6e9d..1908b2545f 100644
--- a/indra/llaudio/llwindgen.h
+++ b/indra/llaudio/llwindgen.h
@@ -33,104 +33,149 @@
#define WINDGEN_H
#include "llcommon.h"
-#include "llrand.h"
template <class MIXBUFFERFORMAT_T>
class LLWindGen
{
public:
- LLWindGen() :
+ LLWindGen(const U32 sample_rate = 44100) :
mTargetGain(0.f),
mTargetFreq(100.f),
mTargetPanGainR(0.5f),
- mbuf0(0.0),
- mbuf1(0.0),
- mbuf2(0.0),
- mbuf3(0.0),
- mbuf4(0.0),
- mbuf5(0.0),
- mY0(0.0),
- mY1(0.0),
+ mInputSamplingRate(sample_rate),
+ mSubSamples(2),
+ mFilterBandWidth(50.f),
+ mBuf0(0.0f),
+ mBuf1(0.0f),
+ mBuf2(0.0f),
+ mY0(0.0f),
+ mY1(0.0f),
mCurrentGain(0.f),
mCurrentFreq(100.f),
- mCurrentPanGainR(0.5f) {};
-
- static const U32 getInputSamplingRate() {return mInputSamplingRate;}
+ mCurrentPanGainR(0.5f)
+ {
+ mSamplePeriod = (F32)mSubSamples / (F32)mInputSamplingRate;
+ mB2 = expf(-F_TWO_PI * mFilterBandWidth * mSamplePeriod);
+ }
+ const U32 getInputSamplingRate() { return mInputSamplingRate; }
+
// newbuffer = the buffer passed from the previous DSP unit.
// numsamples = length in samples-per-channel at this mix time.
- // stride = number of bytes between start of each sample.
// NOTE: generates L/R interleaved stereo
- MIXBUFFERFORMAT_T* windGenerate(MIXBUFFERFORMAT_T *newbuffer, int numsamples, int stride)
+ MIXBUFFERFORMAT_T* windGenerate(MIXBUFFERFORMAT_T *newbuffer, int numsamples)
{
- U8 *cursamplep = (U8*)newbuffer;
+ MIXBUFFERFORMAT_T *cursamplep = newbuffer;
+
+ // Filter coefficients
+ F32 a0 = 0.0f, b1 = 0.0f;
- double bandwidth = 50.0F;
- double a0,b1,b2;
+ // No need to clip at normal volumes
+ bool clip = mCurrentGain > 2.0f;
- // calculate resonant filter coeffs
- b2 = exp(-(F_TWO_PI) * (bandwidth / mInputSamplingRate));
+ bool interp_freq = false;
- while (numsamples--)
+ //if the frequency isn't changing much, we don't need to interpolate in the inner loop
+ if (llabs(mTargetFreq - mCurrentFreq) < (mCurrentFreq * 0.112))
{
- mCurrentFreq = (float)((0.999 * mCurrentFreq) + (0.001 * mTargetFreq));
- mCurrentGain = (float)((0.999 * mCurrentGain) + (0.001 * mTargetGain));
- mCurrentPanGainR = (float)((0.999 * mCurrentPanGainR) + (0.001 * mTargetPanGainR));
- b1 = (-4.0 * b2) / (1.0 + b2) * cos(F_TWO_PI * (mCurrentFreq / mInputSamplingRate));
- a0 = (1.0 - b2) * sqrt(1.0 - (b1 * b1) / (4.0 * b2));
- double nextSample;
+ // calculate resonant filter coefficients
+ mCurrentFreq = mTargetFreq;
+ b1 = (-4.0f * mB2) / (1.0f + mB2) * cosf(F_TWO_PI * (mCurrentFreq * mSamplePeriod));
+ a0 = (1.0f - mB2) * sqrtf(1.0f - (b1 * b1) / (4.0f * mB2));
+ }
+ else
+ {
+ interp_freq = true;
+ }
+
+ while (numsamples)
+ {
+ F32 next_sample;
+
+ // Start with white noise
+ // This expression is fragile, rearrange it and it will break!
+ next_sample = (F32)rand() * (1.0f / (F32)(RAND_MAX / (U16_MAX / 8))) + (F32)(S16_MIN / 8);
- // start with white noise
- nextSample = ll_frand(2.0f) - 1.0f;
+ // Apply a pinking filter
+ // Magic numbers taken from PKE method at http://www.firstpr.com.au/dsp/pink-noise/
+ mBuf0 = mBuf0 * 0.99765f + next_sample * 0.0990460f;
+ mBuf1 = mBuf1 * 0.96300f + next_sample * 0.2965164f;
+ mBuf2 = mBuf2 * 0.57000f + next_sample * 1.0526913f;
- // apply pinking filter
- mbuf0 = 0.997f * mbuf0 + 0.0126502f * nextSample;
- mbuf1 = 0.985f * mbuf1 + 0.0139083f * nextSample;
- mbuf2 = 0.950f * mbuf2 + 0.0205439f * nextSample;
- mbuf3 = 0.850f * mbuf3 + 0.0387225f * nextSample;
- mbuf4 = 0.620f * mbuf4 + 0.0465932f * nextSample;
- mbuf5 = 0.250f * mbuf5 + 0.1093477f * nextSample;
+ next_sample = mBuf0 + mBuf1 + mBuf2 + next_sample * 0.1848f;
- nextSample = mbuf0 + mbuf1 + mbuf2 + mbuf3 + mbuf4 + mbuf5;
+ if (interp_freq)
+ {
+ // calculate and interpolate resonant filter coefficients
+ mCurrentFreq = (0.999f * mCurrentFreq) + (0.001f * mTargetFreq);
+ b1 = (-4.0f * mB2) / (1.0f + mB2) * cosf(F_TWO_PI * (mCurrentFreq * mSamplePeriod));
+ a0 = (1.0f - mB2) * sqrtf(1.0f - (b1 * b1) / (4.0f * mB2));
+ }
- // do a resonant filter on the noise
- nextSample = (double)( a0 * nextSample - b1 * mY0 - b2 * mY1 );
+ // Apply a resonant low-pass filter on the pink noise
+ next_sample = a0 * next_sample - b1 * mY0 - mB2 * mY1;
mY1 = mY0;
- mY0 = nextSample;
+ mY0 = next_sample;
- nextSample *= mCurrentGain;
+ mCurrentGain = (0.999f * mCurrentGain) + (0.001f * mTargetGain);
+ mCurrentPanGainR = (0.999f * mCurrentPanGainR) + (0.001f * mTargetPanGainR);
- MIXBUFFERFORMAT_T sample;
+ // For a 3dB pan law use:
+ // next_sample *= mCurrentGain * ((mCurrentPanGainR*(mCurrentPanGainR-1)*1.652+1.413);
+ next_sample *= mCurrentGain;
- sample = llfloor(((F32)nextSample*32768.f*(1.0f - mCurrentPanGainR))+0.5f);
- *(MIXBUFFERFORMAT_T*)cursamplep = llclamp(sample, (MIXBUFFERFORMAT_T)-32768, (MIXBUFFERFORMAT_T)32767);
- cursamplep += stride;
-
- sample = llfloor(((F32)nextSample*32768.f*mCurrentPanGainR)+0.5f);
- *(MIXBUFFERFORMAT_T*)cursamplep = llclamp(sample, (MIXBUFFERFORMAT_T)-32768, (MIXBUFFERFORMAT_T)32767);
- cursamplep += stride;
+ // delta is used to interpolate between synthesized samples
+ F32 delta = (next_sample - mLastSample) / (F32)mSubSamples;
+
+ // Fill the audio buffer, clipping if necessary
+ for (U8 i=mSubSamples; i && numsamples; --i, --numsamples)
+ {
+ mLastSample = mLastSample + delta;
+ S32 sample_right = (S32)(mLastSample * mCurrentPanGainR);
+ S32 sample_left = (S32)mLastSample - sample_right;
+
+ if (!clip)
+ {
+ *cursamplep = (MIXBUFFERFORMAT_T)sample_left;
+ ++cursamplep;
+ *cursamplep = (MIXBUFFERFORMAT_T)sample_right;
+ ++cursamplep;
+ }
+ else
+ {
+ *cursamplep = (MIXBUFFERFORMAT_T)llclamp(sample_left, (S32)S16_MIN, (S32)S16_MAX);
+ ++cursamplep;
+ *cursamplep = (MIXBUFFERFORMAT_T)llclamp(sample_right, (S32)S16_MIN, (S32)S16_MAX);
+ ++cursamplep;
+ }
+ }
}
return newbuffer;
}
-
+
+public:
F32 mTargetGain;
F32 mTargetFreq;
F32 mTargetPanGainR;
-
+
private:
- static const U32 mInputSamplingRate = 44100;
- F64 mbuf0;
- F64 mbuf1;
- F64 mbuf2;
- F64 mbuf3;
- F64 mbuf4;
- F64 mbuf5;
- F64 mY0;
- F64 mY1;
+ U32 mInputSamplingRate;
+ U8 mSubSamples;
+ F32 mSamplePeriod;
+ F32 mFilterBandWidth;
+ F32 mB2;
+
+ F32 mBuf0;
+ F32 mBuf1;
+ F32 mBuf2;
+ F32 mY0;
+ F32 mY1;
+
F32 mCurrentGain;
F32 mCurrentFreq;
F32 mCurrentPanGainR;
+ F32 mLastSample;
};
#endif
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h
index 209b506c30..c3c15e1374 100644
--- a/indra/llmath/llmath.h
+++ b/indra/llmath/llmath.h
@@ -61,11 +61,11 @@
#endif
// Single Precision Floating Point Routines
-#ifndef fsqrtf
-#define fsqrtf(x) ((F32)sqrt((F64)(x)))
-#endif
#ifndef sqrtf
-#define sqrtf(x) ((F32)sqrt((F64)(x)))
+#define sqrtf(x) ((F32)sqrt((F64)(x)))
+#endif
+#ifndef fsqrtf
+#define fsqrtf(x) sqrtf(x)
#endif
#ifndef cosf
@@ -78,11 +78,14 @@
#define tanf(x) ((F32)tan((F64)(x)))
#endif
#ifndef acosf
-#define acosf(x) ((F32)acos((F64)(x)))
+#define acosf(x) ((F32)acos((F64)(x)))
#endif
#ifndef powf
-#define powf(x,y) ((F32)pow((F64)(x),(F64)(y)))
+#define powf(x,y) ((F32)pow((F64)(x),(F64)(y)))
+#endif
+#ifndef expf
+#define expf(x) ((F32)exp((F64)(x)))
#endif
const F32 GRAVITY = -9.8f;
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0af77b6a84..d4aebe6cb1 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -583,7 +583,7 @@
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <integer>180</integer>
+ <integer>120</integer>
</map>
<key>AvatarSex</key>
<map>
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 644363826a..c3f075fd49 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2360,6 +2360,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
mAnimationDuration = gSavedSettings.getF32("ZoomTime");
}
}
+ gAgentAvatarp->updateMeshTextures();
}
else
{
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index cfa0a4d729..342f9a5d80 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -751,7 +751,7 @@ U32 LLAgentWearables::pushWearable(const LLWearableType::EType type, LLWearable
void LLAgentWearables::wearableUpdated(LLWearable *wearable)
{
- gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE);
+ gAgentAvatarp->wearableUpdated(wearable->getType(), FALSE);
wearable->refreshName();
wearable->setLabelUpdated();
@@ -795,7 +795,7 @@ void LLAgentWearables::popWearable(const LLWearableType::EType type, U32 index)
if (wearable)
{
mWearableDatas[type].erase(mWearableDatas[type].begin() + index);
- gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE);
+ gAgentAvatarp->wearableUpdated(wearable->getType(), FALSE);
wearable->setLabelUpdated();
}
}
@@ -2006,6 +2006,8 @@ bool LLAgentWearables::moveWearable(const LLViewerInventoryItem* item, bool clos
// static
void LLAgentWearables::createWearable(LLWearableType::EType type, bool wear, const LLUUID& parent_id)
{
+ if (type == LLWearableType::WT_INVALID || type == LLWearableType::WT_NONE) return;
+
LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
LLAssetType::EType asset_type = wearable->getAssetType();
LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 135629bb8d..12d2752180 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2139,7 +2139,7 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b
bool result = false;
if (result = gAgentWearables.moveWearable(item, closer_to_body))
{
- gAgentAvatarp->wearableUpdated(item->getWearableType(), TRUE);
+ gAgentAvatarp->wearableUpdated(item->getWearableType(), FALSE);
}
setOutfitDirty(true);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 01d6c3a8d5..2dafe295fe 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -656,6 +656,8 @@ void LLAvatarActions::shareWithAvatars()
LLFloaterAvatarPicker* picker =
LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
+ picker->openFriendsTab();
+ LLNotificationsUtil::add("ShareNotification");
}
// static
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 916d53da3c..611396b0e5 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -58,13 +58,19 @@ static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR;
class CofContextMenu : public LLListContextMenu
{
protected:
- static void updateCreateWearableLabel(LLMenuGL* menu, const LLUUID& item_id)
+ CofContextMenu(LLCOFWearables* cof_wearables)
+ : mCOFWearables(cof_wearables)
+ {
+ llassert(mCOFWearables);
+ }
+
+ void updateCreateWearableLabel(LLMenuGL* menu, const LLUUID& item_id)
{
LLMenuItemGL* menu_item = menu->getChild<LLMenuItemGL>("create_new");
+ LLWearableType::EType w_type = getWearableType(item_id);
// Hide the "Create new <WEARABLE_TYPE>" if it's irrelevant.
- LLViewerInventoryItem* item = gInventory.getLinkedItem(item_id);
- if (!item || !item->isWearableType())
+ if (w_type == LLWearableType::WT_NONE)
{
menu_item->setVisible(FALSE);
return;
@@ -72,25 +78,67 @@ protected:
// Set proper label for the "Create new <WEARABLE_TYPE>" menu item.
LLStringUtil::format_map_t args;
- LLWearableType::EType w_type = item->getWearableType();
args["[WEARABLE_TYPE]"] = LLWearableType::getTypeDefaultNewName(w_type);
std::string new_label = LLTrans::getString("CreateNewWearable", args);
menu_item->setLabel(new_label);
}
- static void createNew(const LLUUID& item_id)
+ void createNew(const LLUUID& item_id)
{
- LLViewerInventoryItem* item = gInventory.getLinkedItem(item_id);
- if (!item || !item->isWearableType()) return;
+ LLAgentWearables::createWearable(getWearableType(item_id), true);
+ }
+
+ // Get wearable type of the given item.
+ //
+ // There is a special case: so-called "dummy items"
+ // (i.e. the ones that are there just to indicate that you're not wearing
+ // any wearables of the corresponding type. They are currently grayed out
+ // and suffixed with "not worn").
+ // Those items don't have an UUID, but they do have an associated wearable type.
+ // If the user has invoked context menu for such item,
+ // we ignore the passed item_id and retrieve wearable type from the item.
+ LLWearableType::EType getWearableType(const LLUUID& item_id)
+ {
+ if (!isDummyItem(item_id))
+ {
+ LLViewerInventoryItem* item = gInventory.getLinkedItem(item_id);
+ if (item && item->isWearableType())
+ {
+ return item->getWearableType();
+ }
+ }
+ else if (mCOFWearables) // dummy item selected
+ {
+ LLPanelDummyClothingListItem* item;
+
+ item = dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem());
+ if (item)
+ {
+ return item->getWearableType();
+ }
+ }
+
+ return LLWearableType::WT_NONE;
+ }
- LLAgentWearables::createWearable(item->getWearableType(), true);
+ static bool isDummyItem(const LLUUID& item_id)
+ {
+ return item_id.isNull();
}
+
+ LLCOFWearables* mCOFWearables;
};
//////////////////////////////////////////////////////////////////////////
-class CofAttachmentContextMenu : public LLListContextMenu
+class CofAttachmentContextMenu : public CofContextMenu
{
+public:
+ CofAttachmentContextMenu(LLCOFWearables* cof_wearables)
+ : CofContextMenu(cof_wearables)
+ {
+ }
+
protected:
/*virtual*/ LLContextMenu* createMenu()
@@ -108,8 +156,13 @@ protected:
class CofClothingContextMenu : public CofContextMenu
{
-protected:
+public:
+ CofClothingContextMenu(LLCOFWearables* cof_wearables)
+ : CofContextMenu(cof_wearables)
+ {
+ }
+protected:
/*virtual*/ LLContextMenu* createMenu()
{
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
@@ -121,7 +174,7 @@ protected:
registrar.add("Clothing.MoveUp", boost::bind(moveWearable, selected_id, false));
registrar.add("Clothing.MoveDown", boost::bind(moveWearable, selected_id, true));
registrar.add("Clothing.Edit", boost::bind(LLAgentWearables::editWearable, selected_id));
- registrar.add("Clothing.Create", boost::bind(createNew, selected_id));
+ registrar.add("Clothing.Create", boost::bind(&CofClothingContextMenu::createNew, this, selected_id));
enable_registrar.add("Clothing.OnEnable", boost::bind(&CofClothingContextMenu::onEnable, this, _2));
@@ -171,8 +224,13 @@ protected:
class CofBodyPartContextMenu : public CofContextMenu
{
-protected:
+public:
+ CofBodyPartContextMenu(LLCOFWearables* cof_wearables)
+ : CofContextMenu(cof_wearables)
+ {
+ }
+protected:
/*virtual*/ LLContextMenu* createMenu()
{
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
@@ -184,7 +242,7 @@ protected:
LLPanelOutfitEdit* panel_oe = dynamic_cast<LLPanelOutfitEdit*>(LLSideTray::getInstance()->getPanel("panel_outfit_edit"));
registrar.add("BodyPart.Replace", boost::bind(&LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked, panel_oe, selected_id));
registrar.add("BodyPart.Edit", boost::bind(LLAgentWearables::editWearable, selected_id));
- registrar.add("BodyPart.Create", boost::bind(createNew, selected_id));
+ registrar.add("BodyPart.Create", boost::bind(&CofBodyPartContextMenu::createNew, this, selected_id));
enable_registrar.add("BodyPart.OnEnable", boost::bind(&CofBodyPartContextMenu::onEnable, this, _2));
@@ -219,9 +277,9 @@ LLCOFWearables::LLCOFWearables() : LLPanel(),
mBodyParts(NULL),
mLastSelectedList(NULL)
{
- mClothingMenu = new CofClothingContextMenu();
- mAttachmentMenu = new CofAttachmentContextMenu();
- mBodyPartMenu = new CofBodyPartContextMenu();
+ mClothingMenu = new CofClothingContextMenu(this);
+ mAttachmentMenu = new CofAttachmentContextMenu(this);
+ mBodyPartMenu = new CofBodyPartContextMenu(this);
};
LLCOFWearables::~LLCOFWearables()
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 96364f9418..8f6816b845 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -446,6 +446,19 @@ BOOL LLFloaterAvatarPicker::handleDragAndDrop(S32 x, S32 y, MASK mask,
return TRUE;
}
+
+void LLFloaterAvatarPicker::openFriendsTab()
+{
+ LLTabContainer* tab_container = getChild<LLTabContainer>("ResidentChooserTabs");
+ if (tab_container == NULL)
+ {
+ llassert(tab_container != NULL);
+ return;
+ }
+
+ tab_container->selectTabByName("FriendsPanel");
+}
+
// static
void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**)
{
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
index e69b814f9f..0af72e85a0 100644
--- a/indra/newview/llfloateravatarpicker.h
+++ b/indra/newview/llfloateravatarpicker.h
@@ -66,6 +66,8 @@ public:
void *cargo_data, EAcceptance *accept,
std::string& tooltip_msg);
+ void openFriendsTab();
+
private:
void editKeystroke(class LLLineEditor* caller, void* user_data);
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 5bea3325a8..00981d3c25 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -91,10 +91,6 @@
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
-S32 LLFloaterSnapshot::sUIWinHeightLong = 526 ;
-S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 230 ;
-S32 LLFloaterSnapshot::sUIWinWidth = 215 ;
-
LLSnapshotFloaterView* gSnapshotFloaterView = NULL;
const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f;
@@ -1172,9 +1168,6 @@ public:
}
static void onClickNewSnapshot(void* data);
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
- //static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data);
- static void onClickLess(void* data) ;
- static void onClickMore(void* data) ;
static void onClickUICheck(LLUICtrl *ctrl, void* data);
static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
static void onClickKeepOpenCheck(LLUICtrl *ctrl, void* data);
@@ -1188,7 +1181,7 @@ public:
static void onCommitCustomResolution(LLUICtrl *ctrl, void* data);
static void onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type);
static void onCommitProfilePic(LLFloaterSnapshot* view);
- static void onToggleAdvanced(LLUICtrl *ctrl, void* data);
+ static void showAdvanced(LLFloaterSnapshot* view, const BOOL visible);
static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;
static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value);
@@ -1399,41 +1392,6 @@ void LLFloaterSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data)
}
}
-void LLFloaterSnapshot::Impl::onClickMore(void* data)
-{
- gSavedSettings.setBOOL( "AdvanceSnapshot", TRUE );
-
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
- if (view)
- {
- view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() );
- view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong());
- updateControls(view) ;
- updateLayout(view) ;
- if(getPreviewView(view))
- {
- getPreviewView(view)->setThumbnailImageSize() ;
- }
- }
-}
-void LLFloaterSnapshot::Impl::onClickLess(void* data)
-{
- gSavedSettings.setBOOL( "AdvanceSnapshot", FALSE );
-
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
- if (view)
- {
- view->translate( 0, view->getUIWinHeightLong() - view->getUIWinHeightShort() );
- view->reshape(view->getRect().getWidth(), view->getUIWinHeightShort());
- updateControls(view) ;
- updateLayout(view) ;
- if(getPreviewView(view))
- {
- getPreviewView(view)->setThumbnailImageSize() ;
- }
- }
-}
-
// static
void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
{
@@ -1691,30 +1649,28 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data)
}
//static
-void LLFloaterSnapshot::Impl::onToggleAdvanced(LLUICtrl* ctrl, void* data)
+void LLFloaterSnapshot::Impl::showAdvanced(LLFloaterSnapshot* view, const BOOL visible)
{
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
-
LLPanel* advanced_panel = view->getChild<LLPanel>("snapshot_advanced");
- if (advanced_panel->getVisible())
+ if (advanced_panel->getVisible() != visible)
{
- advanced_panel->setVisible(false);
+ gSavedSettings.setBOOL("AdvanceSnapshot", visible);
- // shrink floater back to original size
- view->reshape(view->getRect().getWidth() - advanced_panel->getRect().getWidth(), view->getRect().getHeight());
+ advanced_panel->setVisible(visible);
+ view->getChild<LLButton>("hide_advanced")->setVisible(visible);
+ view->getChild<LLButton>("show_advanced")->setVisible(!visible);
- view->getChild<LLButton>("hide_advanced")->setVisible(false);
- view->getChild<LLButton>("show_advanced")->setVisible(true);
- }
- else
- {
- advanced_panel->setVisible(true);
- // stretch the floater so it can accommodate the advanced panel
- view->reshape(view->getRect().getWidth() + advanced_panel->getRect().getWidth(), view->getRect().getHeight());
-
- view->getChild<LLButton>("hide_advanced")->setVisible(true);
- view->getChild<LLButton>("show_advanced")->setVisible(false);
+ if (visible)
+ {
+ // stretch the floater so it can accommodate the advanced panel
+ view->reshape(view->getRect().getWidth() + advanced_panel->getRect().getWidth(), view->getRect().getHeight());
+ }
+ else
+ {
+ // shrink floater back to original size
+ view->reshape(view->getRect().getWidth() - advanced_panel->getRect().getWidth(), view->getRect().getHeight());
+ }
}
}
@@ -2002,6 +1958,11 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
impl (*(new Impl))
{
//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE);
+
+ mCommitCallbackRegistrar.add("Snapshot.ShowButtons", boost::bind(&LLFloaterSnapshot::updateButtons, this, _2));
+ mCommitCallbackRegistrar.add("Snapshot.ShowAdvanced", boost::bind(&Impl::showAdvanced, this, true));
+ mCommitCallbackRegistrar.add("Snapshot.HideAdvanced", boost::bind(&Impl::showAdvanced, this, false));
+ mCommitCallbackRegistrar.add("Snapshot.Refresh", boost::bind(&Impl::onClickNewSnapshot, this));
}
// Destroys the object
@@ -2023,27 +1984,14 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
BOOL LLFloaterSnapshot::postBuild()
{
-
- getChild<LLButton>("share")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SHARE));
- getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SAVE));
- getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_MAIN));
-
getChild<LLButton>("share_to_web")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_WEB));
getChild<LLButton>("share_to_email")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_POSTCARD));
getChild<LLButton>("save_to_inventory")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_TEXTURE));
getChild<LLButton>("save_to_computer")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_LOCAL));
getChild<LLButton>("set_profile_pic")->setCommitCallback(boost::bind(&Impl::onCommitProfilePic, this));
- childSetCommitCallback("show_advanced", Impl::onToggleAdvanced, this);
- childSetCommitCallback("hide_advanced", Impl::onToggleAdvanced, this);
-
childSetCommitCallback("local_format_combo", Impl::onCommitSnapshotFormat, this);
- childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);
-
- childSetAction("more_btn", Impl::onClickMore, this);
- childSetAction("less_btn", Impl::onClickLess, this);
-
childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this);
childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));
@@ -2095,12 +2043,13 @@ BOOL LLFloaterSnapshot::postBuild()
impl.mPreviewHandle = previewp->getHandle();
impl.updateControls(this);
impl.updateLayout(this);
+ impl.showAdvanced(this, gSavedSettings.getBOOL("AdvanceSnapshot"));
//save off the refresh button's rectangle so we can apply offsets with thumbnail resize
mRefreshBtnRect = getChild<LLButton>("new_snapshot_btn")->getRect();
// make sure we share/hide the general buttons
- updateButtons(SNAPSHOT_MAIN);
+ updateButtons(LLSD("main"));
return LLDockableFloater::postBuild();
}
@@ -2190,19 +2139,20 @@ void LLFloaterSnapshot::update()
}
}
-bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode)
+bool LLFloaterSnapshot::updateButtons(const LLSD& mode)
{
- childSetVisible("share", mode == SNAPSHOT_MAIN);
- childSetVisible("save", mode == SNAPSHOT_MAIN);
- childSetVisible("set_profile_pic", mode == SNAPSHOT_MAIN);
+ std::string button_mode = mode.asString();
-// childSetVisible("share_to_web", mode == SNAPSHOT_SHARE);
- childSetVisible("share_to_email", mode == SNAPSHOT_SHARE);
+ bool mode_main("main" == button_mode);
+ bool mode_share("share" == button_mode);
+ bool mode_save("save" == button_mode);
- childSetVisible("save_to_inventory", mode == SNAPSHOT_SAVE);
- childSetVisible("save_to_computer", mode == SNAPSHOT_SAVE);
+ // Default to a known state if mode is invalid.
+ if (!mode_main && !mode_share && !mode_save) mode_main = true;
- childSetVisible("cancel", mode != SNAPSHOT_MAIN);
+ childSetVisible("panel_snapshot_main", mode_main);
+ childSetVisible("panel_snapshot_share", mode_share);
+ childSetVisible("panel_snapshot_save", mode_save);
return true;
}
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index 931d355748..8c4373c35c 100644
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -47,13 +47,6 @@ public:
SNAPSHOT_FORMAT_BMP
} ESnapshotFormat;
- enum ESnapshotMode
- {
- SNAPSHOT_SHARE,
- SNAPSHOT_SAVE,
- SNAPSHOT_MAIN
- };
-
LLFloaterSnapshot(const LLSD& key);
virtual ~LLFloaterSnapshot();
@@ -66,7 +59,7 @@ public:
void setAsProfilePic(const LLUUID& image_id);
- bool updateButtons(ESnapshotMode mode);
+ bool updateButtons(const LLSD& mode);
static S32 getUIWinHeightLong() {return sUIWinHeightLong ;}
static S32 getUIWinHeightShort() {return sUIWinHeightShort ;}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 3a9c5ba698..94d421f61c 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2208,13 +2208,7 @@ void LLFolderBridge::determineFolderType()
BOOL LLFolderBridge::isItemRenameable() const
{
- LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
- if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())
- && (cat->getOwnerID() == gAgent.getID()))
- {
- return TRUE;
- }
- return FALSE;
+ return get_is_category_renameable(getInventoryModel(), mUUID);
}
void LLFolderBridge::restoreItem()
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index ca6cede7e9..c86d463a08 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -309,6 +309,11 @@ BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id)
BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id)
{
+ if (!model)
+ {
+ return FALSE;
+ }
+
LLViewerInventoryCategory* cat = model->getCategory(id);
if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()) &&
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index b4f0947b2c..ce44e37017 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -33,15 +33,14 @@
#include "llviewerprecompiledheaders.h"
#include "llinventorymodelbackgroundfetch.h"
-// Seraph clean this up
#include "llagent.h"
+#include "llappviewer.h"
+#include "llcallbacklist.h"
#include "llinventorypanel.h"
#include "llviewercontrol.h"
#include "llviewermessage.h"
-#include "llviewerwindow.h"
-#include "llappviewer.h"
#include "llviewerregion.h"
-#include "llcallbacklist.h"
+#include "llviewerwindow.h"
const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f;
const S32 MAX_FETCH_RETRIES = 10;
@@ -63,47 +62,47 @@ LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch()
{
}
-bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete()
+bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete() const
{
return mFetchQueue.empty() && mBulkFetchCount<=0;
}
-bool LLInventoryModelBackgroundFetch::libraryFetchStarted()
+bool LLInventoryModelBackgroundFetch::libraryFetchStarted() const
{
return mRecursiveLibraryFetchStarted;
}
-bool LLInventoryModelBackgroundFetch::libraryFetchCompleted()
+bool LLInventoryModelBackgroundFetch::libraryFetchCompleted() const
{
return libraryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getLibraryRootFolderID());
}
-bool LLInventoryModelBackgroundFetch::libraryFetchInProgress()
+bool LLInventoryModelBackgroundFetch::libraryFetchInProgress() const
{
return libraryFetchStarted() && !libraryFetchCompleted();
}
-bool LLInventoryModelBackgroundFetch::inventoryFetchStarted()
+bool LLInventoryModelBackgroundFetch::inventoryFetchStarted() const
{
return mRecursiveInventoryFetchStarted;
}
-bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted()
+bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted() const
{
return inventoryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getRootFolderID());
}
-bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress()
+bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress() const
{
return inventoryFetchStarted() && !inventoryFetchCompleted();
}
-bool LLInventoryModelBackgroundFetch::isEverythingFetched()
+bool LLInventoryModelBackgroundFetch::isEverythingFetched() const
{
return mAllFoldersFetched;
}
-BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive()
+BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() const
{
return mBackgroundFetchActive;
}
@@ -132,7 +131,7 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive
}
else
{
- // specific folder requests go to front of queue
+ // Specific folder requests go to front of queue.
if (mFetchQueue.empty() || mFetchQueue.front().mCatUUID != cat_id)
{
mFetchQueue.push_front(FetchQueueInfo(cat_id, recursive));
@@ -187,7 +186,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
{
if (mBackgroundFetchActive && gAgent.getRegion())
{
- //If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
+ // If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
if (!url.empty())
{
@@ -195,8 +194,12 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
return;
}
- //DEPRECATED OLD CODE FOLLOWS.
- // no more categories to fetch, stop fetch process
+#if 1
+ //--------------------------------------------------------------------------------
+ // DEPRECATED OLD CODE
+ //
+
+ // No more categories to fetch, stop fetch process.
if (mFetchQueue.empty())
{
llinfos << "Inventory fetch completed" << llendl;
@@ -209,11 +212,11 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f);
if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time)
{
- // double timeouts on failure
+ // Double timeouts on failure.
mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
llinfos << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
- // fetch is no longer considered "timely" although we will wait for full time-out
+ // fetch is no longer considered "timely" although we will wait for full time-out.
mTimelyFetchPending = FALSE;
}
@@ -226,14 +229,14 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
if(gDisconnected)
{
- // just bail if we are disconnected.
+ // Just bail if we are disconnected.
break;
}
const FetchQueueInfo info = mFetchQueue.front();
LLViewerInventoryCategory* cat = gInventory.getCategory(info.mCatUUID);
- // category has been deleted, remove from queue.
+ // Category has been deleted, remove from queue.
if (!cat)
{
mFetchQueue.pop_front();
@@ -243,8 +246,8 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches &&
LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
{
- // category exists but has no children yet, fetch the descendants
- // for now, just request every time and rely on retry timer to throttle
+ // Category exists but has no children yet, fetch the descendants
+ // for now, just request every time and rely on retry timer to throttle.
if (cat->fetch())
{
mFetchTimer.reset();
@@ -258,13 +261,13 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
break;
}
}
- // do I have all my children?
+ // Do I have all my children?
else if (gInventory.isCategoryComplete(info.mCatUUID))
{
- // finished with this category, remove from queue
+ // Finished with this category, remove from queue.
mFetchQueue.pop_front();
- // add all children to queue
+ // Add all children to queue.
LLInventoryModel::cat_array_t* categories;
LLInventoryModel::item_array_t* items;
gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items);
@@ -275,10 +278,10 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(),info.mRecursive));
}
- // we received a response in less than the fast time
+ // We received a response in less than the fast time.
if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time)
{
- // shrink timeouts based on success
+ // Shrink timeouts based on success.
mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
//llinfos << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
@@ -289,8 +292,8 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
}
else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches)
{
- // received first packet, but our num descendants does not match db's num descendants
- // so try again later
+ // Received first packet, but our num descendants does not match db's num descendants
+ // so try again later.
mFetchQueue.pop_front();
if (mNumFetchRetries++ < MAX_FETCH_RETRIES)
@@ -303,9 +306,14 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
break;
}
- // not enough time has elapsed to do a new fetch
+ // Not enough time has elapsed to do a new fetch
break;
}
+
+ //
+ // DEPRECATED OLD CODE
+ //--------------------------------------------------------------------------------
+#endif
}
}
@@ -333,10 +341,10 @@ protected:
BOOL getIsRecursive(const LLUUID& cat_id) const;
private:
LLSD mRequestSD;
- uuid_vec_t mRecursiveCatUUIDs; // Hack for storing away which cat fetches are recursive.
+ uuid_vec_t mRecursiveCatUUIDs; // hack for storing away which cat fetches are recursive
};
-//If we get back a normal response, handle it here
+// If we get back a normal response, handle it here.
void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
{
LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
@@ -428,7 +436,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
gInventory.updateItem(titem);
}
- // set version and descendentcount according to message.
+ // Set version and descendentcount according to message.
LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
if(cat)
{
@@ -448,7 +456,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
{
LLSD folder_sd = *folder_it;
- //These folders failed on the dataserver. We probably don't want to retry them.
+ // These folders failed on the dataserver. We probably don't want to retry them.
llinfos << "Folder " << folder_sd["folder_id"].asString()
<< "Error: " << folder_sd["error"].asString() << llendl;
}
@@ -465,7 +473,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
gInventory.notifyObservers("fetchDescendents");
}
-//If we get back an error (not found, etc...), handle it here
+// If we get back an error (not found, etc...), handle it here.
void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason)
{
LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
@@ -475,7 +483,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str
fetcher->incrBulkFetch(-1);
- if (status==499) // Timed out.
+ if (status==499) // timed out
{
for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
folder_it != mRequestSD["folders"].endArray();
@@ -502,7 +510,8 @@ BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat
return (std::find(mRecursiveCatUUIDs.begin(),mRecursiveCatUUIDs.end(), cat_id) != mRecursiveCatUUIDs.end());
}
-//static Bundle up a bunch of requests to send all at once.
+// Bundle up a bunch of requests to send all at once.
+// static
void LLInventoryModelBackgroundFetch::bulkFetch(std::string url)
{
//Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.
@@ -521,7 +530,7 @@ void LLInventoryModelBackgroundFetch::bulkFetch(std::string url)
(mBulkFetchCount > max_concurrent_fetches) ||
(mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches))
{
- return; // just bail if we are disconnected.
+ return; // just bail if we are disconnected
}
U32 folder_count=0;
diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h
index c1e37eda8f..04f96586d7 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.h
+++ b/indra/newview/llinventorymodelbackgroundfetch.h
@@ -33,39 +33,15 @@
#ifndef LL_LLINVENTORYMODELBACKGROUNDFETCH_H
#define LL_LLINVENTORYMODELBACKGROUNDFETCH_H
-// Seraph clean this up
-#include "llassettype.h"
-#include "llfoldertype.h"
-#include "lldarray.h"
-#include "llframetimer.h"
-#include "llhttpclient.h"
+#include "llsingleton.h"
#include "lluuid.h"
-#include "llpermissionsflags.h"
-#include "llstring.h"
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-// Seraph clean this up
-class LLInventoryObserver;
-class LLInventoryObject;
-class LLInventoryItem;
-class LLInventoryCategory;
-class LLViewerInventoryItem;
-class LLViewerInventoryCategory;
-class LLViewerInventoryItem;
-class LLViewerInventoryCategory;
-class LLMessageSystem;
-class LLInventoryCollectFunctor;
-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryModelBackgroundFetch
//
-// This class handles background fetch.
+// This class handles background fetches, which are fetches of
+// inventory folder. Fetches can be recursive or not.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
class LLInventoryModelBackgroundFetch : public LLSingleton<LLInventoryModelBackgroundFetch>
{
friend class LLInventoryModelFetchDescendentsResponder;
@@ -75,48 +51,37 @@ public:
~LLInventoryModelBackgroundFetch();
// Start and stop background breadth-first fetching of inventory contents.
- // This gets triggered when performing a filter-search
+ // This gets triggered when performing a filter-search.
void start(const LLUUID& cat_id = LLUUID::null, BOOL recursive = TRUE);
- BOOL backgroundFetchActive();
- bool isEverythingFetched();
- void incrBulkFetch(S16 fetching);
- void stopBackgroundFetch(); // stop fetch process
- bool isBulkFetchProcessingComplete();
- // Add categories to a list to be fetched in bulk.
- void bulkFetch(std::string url);
+ BOOL backgroundFetchActive() const;
+ bool isEverythingFetched() const; // completing the fetch once per session should be sufficient
- bool libraryFetchStarted();
- bool libraryFetchCompleted();
- bool libraryFetchInProgress();
+ bool libraryFetchStarted() const;
+ bool libraryFetchCompleted() const;
+ bool libraryFetchInProgress() const;
- bool inventoryFetchStarted();
- bool inventoryFetchCompleted();
- bool inventoryFetchInProgress();
- void findLostItems();
+ bool inventoryFetchStarted() const;
+ bool inventoryFetchCompleted() const;
+ bool inventoryFetchInProgress() const;
- void setAllFoldersFetched();
+ void findLostItems();
+protected:
+ void incrBulkFetch(S16 fetching);
+ bool isBulkFetchProcessingComplete() const;
+ void bulkFetch(std::string url);
- static void backgroundFetchCB(void*); // background fetch idle function
void backgroundFetch();
-
- struct FetchQueueInfo
- {
- FetchQueueInfo(const LLUUID& id, BOOL recursive) :
- mCatUUID(id), mRecursive(recursive)
- {
- }
- LLUUID mCatUUID;
- BOOL mRecursive;
- };
-protected:
+ static void backgroundFetchCB(void*); // background fetch idle function
+ void stopBackgroundFetch(); // stop fetch process
+
+ void setAllFoldersFetched();
bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) const;
private:
BOOL mRecursiveInventoryFetchStarted;
BOOL mRecursiveLibraryFetchStarted;
BOOL mAllFoldersFetched;
- // completing the fetch once per session should be sufficient
BOOL mBackgroundFetchActive;
S16 mBulkFetchCount;
BOOL mTimelyFetchPending;
@@ -126,6 +91,15 @@ private:
F32 mMinTimeBetweenFetches;
F32 mMaxTimeBetweenFetches;
+ struct FetchQueueInfo
+ {
+ FetchQueueInfo(const LLUUID& id, BOOL recursive) :
+ mCatUUID(id), mRecursive(recursive)
+ {
+ }
+ LLUUID mCatUUID;
+ BOOL mRecursive;
+ };
typedef std::deque<FetchQueueInfo> fetch_queue_t;
fetch_queue_t mFetchQueue;
};
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index e07d5c064b..d7e06a951b 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -189,7 +189,8 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
mInitialized(false),
mAddWearablesPanel(NULL),
mWearableListMaskCollector(NULL),
- mWearableListTypeCollector(NULL)
+ mWearableListTypeCollector(NULL),
+ mFilterComboBox(NULL)
{
mSavedFolderState = new LLSaveFolderState();
mSavedFolderState->setApply(FALSE);
@@ -235,12 +236,12 @@ BOOL LLPanelOutfitEdit::postBuild()
mListViewBtn = getChild<LLButton>("list_view_btn");
childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);
- childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredFolderWearablesPanel, this), NULL);
- childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredWearablesPanel, this), NULL);
+ childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesFolderView, this), NULL);
+ childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
- mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this));
+ mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
mCOFWearables->getCOFCallbacks().mAddWearable = boost::bind(&LLPanelOutfitEdit::onAddWearableClicked, this);
mCOFWearables->getCOFCallbacks().mEditWearable = boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this);
@@ -258,19 +259,20 @@ BOOL LLPanelOutfitEdit::postBuild()
mCOFDragAndDropObserver = new LLCOFDragAndDropObserver(mInventoryItemsPanel->getModel());
- LLComboBox* type_filter = getChild<LLComboBox>("filter_wearables_combobox");
- type_filter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onTypeFilterChanged, this, _1));
- type_filter->removeall();
+ mFilterComboBox = getChild<LLComboBox>("filter_wearables_combobox");
+ mFilterComboBox->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onTypeFilterChanged, this, _1));
+ mFilterComboBox->removeall();
for (U32 i = 0; i < mLookItemTypes.size(); ++i)
{
- type_filter->add(mLookItemTypes[i].displayName);
+ mFilterComboBox->add(mLookItemTypes[i].displayName);
}
- type_filter->setCurrentByIndex(LIT_ALL);
+ mFilterComboBox->setCurrentByIndex(LIT_ALL);
mSearchFilter = getChild<LLFilterEditor>("look_item_filter");
mSearchFilter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onSearchEdit, this, _2));
- childSetAction("show_add_wearables_btn", boost::bind(&LLPanelOutfitEdit::toggleAddWearablesPanel, this));
+ childSetAction("show_add_wearables_btn", boost::bind(&LLPanelOutfitEdit::onAddMoreButtonClicked, this));
+
childSetAction("add_to_outfit_btn", boost::bind(&LLPanelOutfitEdit::onAddToOutfitClicked, this));
mEditWearableBtn = getChild<LLButton>("edit_wearable_btn");
@@ -353,7 +355,7 @@ void LLPanelOutfitEdit::showWearablesFilter()
}
}
-void LLPanelOutfitEdit::showFilteredWearablesPanel()
+void LLPanelOutfitEdit::showWearablesListView()
{
if(switchPanels(mInventoryItemsPanel, mWearableItemsPanel))
{
@@ -364,7 +366,7 @@ void LLPanelOutfitEdit::showFilteredWearablesPanel()
mListViewBtn->setToggleState(TRUE);
}
-void LLPanelOutfitEdit::showFilteredFolderWearablesPanel()
+void LLPanelOutfitEdit::showWearablesFolderView()
{
if(switchPanels(mWearableItemsPanel, mInventoryItemsPanel))
{
@@ -377,17 +379,12 @@ void LLPanelOutfitEdit::showFilteredFolderWearablesPanel()
void LLPanelOutfitEdit::onTypeFilterChanged(LLUICtrl* ctrl)
{
- LLComboBox* type_filter = dynamic_cast<LLComboBox*>(ctrl);
- llassert(type_filter);
- if (type_filter)
- {
- U32 curr_filter_type = type_filter->getCurrentIndex();
- mInventoryItemsPanel->setFilterTypes(mLookItemTypes[curr_filter_type].inventoryMask);
+ U32 curr_filter_type = mFilterComboBox->getCurrentIndex();
+ mInventoryItemsPanel->setFilterTypes(mLookItemTypes[curr_filter_type].inventoryMask);
+
+ mWearableListMaskCollector->setFilterMask(mLookItemTypes[curr_filter_type].inventoryMask);
+ mWearableListManager->setFilterCollector(mWearableListMaskCollector);
- mWearableListMaskCollector->setFilterMask(mLookItemTypes[curr_filter_type].inventoryMask);
- mWearableListManager->setFilterCollector(mWearableListMaskCollector);
- }
-
mSavedFolderState->setApply(TRUE);
mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
@@ -471,7 +468,7 @@ void LLPanelOutfitEdit::onAddWearableClicked(void)
if(item)
{
- showFilteredWearableItemsList(item->getWearableType());
+ showFilteredWearablesListView(item->getWearableType());
}
}
@@ -481,7 +478,7 @@ void LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id
if (item && item->getType() == LLAssetType::AT_BODYPART)
{
- showFilteredWearableItemsList(item->getWearableType());
+ showFilteredWearablesListView(item->getWearableType());
}
}
@@ -538,24 +535,81 @@ void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderView
current_item->addChild(mAddToLookBtn); */
}
-void LLPanelOutfitEdit::onOutfitItemSelectionChange(void)
-{
- LLUUID item_id = mCOFWearables->getSelectedUUID();
- //*TODO show Edit Wearable Button
+void LLPanelOutfitEdit::applyFilter(e_look_item_type type)
+{
+ mFilterComboBox->setCurrentByIndex(type);
+ mFilterComboBox->onCommit();
+}
+
+void LLPanelOutfitEdit::filterWearablesBySelectedItem(void)
+{
+ if (!mAddWearablesPanel->getVisible()) return;
+
+ uuid_vec_t ids;
+ mCOFWearables->getSelectedUUIDs(ids);
- LLViewerInventoryItem* item_to_remove = gInventory.getItem(item_id);
- if (!item_to_remove) return;
+ bool nothing_selected = ids.empty();
+ bool one_selected = ids.size() == 1;
+ bool more_than_one_selected = ids.size() > 1;
+ bool is_dummy_item = (ids.size() && dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem()));
- switch (item_to_remove->getType())
+ //resetting selection if no item is selected or than one item is selected
+ if (nothing_selected || more_than_one_selected)
{
- case LLAssetType::AT_CLOTHING:
- case LLAssetType::AT_OBJECT:
- default:
- break;
+ if (nothing_selected)
+ {
+ showWearablesFolderView();
+ }
+
+ if (more_than_one_selected)
+ {
+ showWearablesListView();
+ }
+
+ applyFilter(LIT_ALL);
+ return;
}
+
+
+ //filter wearables by a type represented by a dummy item
+ if (one_selected && is_dummy_item)
+ {
+ onAddWearableClicked();
+ return;
+ }
+
+ LLViewerInventoryItem* item = gInventory.getItem(ids[0]);
+ if (!item && ids[0].notNull())
+ {
+ //Inventory misses an item with non-zero id
+ showWearablesListView();
+ applyFilter(LIT_ALL);
+ return;
+ }
+
+ if (one_selected && !is_dummy_item)
+ {
+ if (item->isWearableType())
+ {
+ //single clothing or bodypart item is selected
+ showFilteredWearablesListView(item->getWearableType());
+ mFilterComboBox->setLabel(getString("Filter.Custom"));
+ return;
+ }
+ else
+ {
+ //attachment is selected
+ showWearablesListView();
+ applyFilter(LIT_ATTACHMENT);
+ return;
+ }
+ }
+
}
+
+
void LLPanelOutfitEdit::update()
{
mCOFWearables->refresh();
@@ -676,12 +730,21 @@ void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button)
LLMenuGL::showPopup(clicked_button, mGearMenu, 0, menu_y);
}
-void LLPanelOutfitEdit::showFilteredWearableItemsList(LLWearableType::EType type)
+void LLPanelOutfitEdit::onAddMoreButtonClicked()
+{
+ toggleAddWearablesPanel();
+ filterWearablesBySelectedItem();
+}
+
+void LLPanelOutfitEdit::showFilteredWearablesListView(LLWearableType::EType type)
{
+ mFilterComboBox->setLabel(getString("Filter.Custom"));
mWearableListTypeCollector->setType(type);
mWearableListManager->setFilterCollector(mWearableListTypeCollector);
showAddWearablesPanel(true);
- showFilteredWearablesPanel();
+ showWearablesListView();
}
+
+
// EOF
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 24ecf75c18..d19ede04f1 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -47,6 +47,7 @@
class LLButton;
class LLCOFWearables;
+class LLComboBox;
class LLTextBox;
class LLInventoryCategory;
class LLOutfitObserver;
@@ -94,15 +95,27 @@ public:
void toggleAddWearablesPanel();
void showAddWearablesPanel(bool show__add_wearables);
+
+ //following methods operate with "add wearables" panel
void showWearablesFilter();
- void showFilteredWearablesPanel();
- void showFilteredFolderWearablesPanel();
+ void showWearablesListView();
+ void showWearablesFolderView();
void onTypeFilterChanged(LLUICtrl* ctrl);
void onSearchEdit(const std::string& string);
void onInventorySelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
void onAddToOutfitClicked(void);
- void onOutfitItemSelectionChange(void);
+
+ void applyFilter(e_look_item_type type);
+
+ /**
+ * Filter items in views of Add Wearables Panel and show appropriate view depending on currently selected COF item(s)
+ * No COF items selected - shows the folder view, reset filter
+ * 1 COF item selected - shows the list view and filters wearables there by a wearable type of the selected item
+ * More than 1 COF item selected - shows the list view and filters it by a type of the selected item (attachment or clothing)
+ */
+ void filterWearablesBySelectedItem(void);
+
void onRemoveFromOutfitClicked(void);
void onEditWearableClicked(void);
void onAddWearableClicked(void);
@@ -132,7 +145,8 @@ public:
private:
void onGearButtonClick(LLUICtrl* clicked_button);
- void showFilteredWearableItemsList(LLWearableType::EType type);
+ void onAddMoreButtonClicked();
+ void showFilteredWearablesListView(LLWearableType::EType type);
LLTextBox* mCurrentOutfitName;
@@ -145,6 +159,7 @@ private:
LLButton* mFolderViewBtn;
LLButton* mListViewBtn;
LLPanel* mAddWearablesPanel;
+ LLComboBox* mFilterComboBox;
LLFindNonLinksByMask* mWearableListMaskCollector;
LLFindWearablesOfType* mWearableListTypeCollector;
@@ -162,6 +177,8 @@ private:
bool mInitialized;
std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
+
+
};
#endif // LL_LLPANELOUTFITEDIT_H
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 6c6eda2e68..db1f4dc4cb 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -172,6 +172,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
params.tab_stop(false);
params.wrap(true);
params.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
+ params.allow_scroll(true);
LLTextBox * msg_box = LLUICtrlFactory::create<LLTextBox> (params);
// Compute max allowable height for the dialog text, so we can allocate
@@ -180,9 +181,16 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
gFloaterView->getRect().getHeight()
- LINE_HEIGHT // title bar
- 3*VPAD - BTN_HEIGHT;
+ // reshape to calculate real text width and height
msg_box->reshape( MAX_ALLOWED_MSG_WIDTH, max_allowed_msg_height );
msg_box->setValue(msg);
- msg_box->reshapeToFitText();
+
+ S32 pixel_width = msg_box->getTextPixelWidth();
+ S32 pixel_height = msg_box->getTextPixelHeight();
+
+ // We should use some space to prevent set textbox's scroller visible when it is unnecessary.
+ msg_box->reshape( llmin(MAX_ALLOWED_MSG_WIDTH,pixel_width + 2 * msg_box->getHPad() + HPAD),
+ llmin(max_allowed_msg_height,pixel_height + 2 * msg_box->getVPad()) ) ;
const LLRect& text_rect = msg_box->getRect();
S32 dialog_width = llmax( btn_total_width, text_rect.getWidth() ) + 2 * HPAD;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 7e779986df..9b5b210bf7 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -541,11 +541,6 @@ void LLViewerTexture::setBoostLevel(S32 level)
if(mBoostLevel != LLViewerTexture::BOOST_NONE)
{
setNoDelete() ;
-
- if(LLViewerTexture::BOOST_AVATAR_BAKED_SELF == mBoostLevel || LLViewerTexture::BOOST_AVATAR_BAKED == mBoostLevel)
- {
- mCanResetMaxVirtualSize = false ;
- }
}
if(gAuditTexture)
{
@@ -596,6 +591,11 @@ void LLViewerTexture::forceImmediateUpdate()
{
}
+void LLViewerTexture::setResetMaxVirtualSizeFlag(bool flag)
+{
+ mCanResetMaxVirtualSize = flag ;
+}
+
void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) const
{
if(needs_gltexture)
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 1bd4cc793d..361f56e02f 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -166,6 +166,7 @@ public:
void addTextureStats(F32 virtual_size, BOOL needs_gltexture = TRUE) const;
void resetTextureStats();
+ void setResetMaxVirtualSizeFlag(bool flag) ;
virtual F32 getMaxVirtualSize() ;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 1fa953f157..3e93dc1a90 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -4210,9 +4210,14 @@ void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel
mMaxPixelArea = llmax(pixel_area, mMaxPixelArea);
mMinPixelArea = llmin(pixel_area, mMinPixelArea);
imagep->resetTextureStats();
+ imagep->setResetMaxVirtualSizeFlag(false) ;
imagep->setCanUseHTTP(false) ; //turn off http fetching for baked textures.
imagep->addTextureStats(pixel_area / texel_area_ratio);
imagep->setBoostLevel(boost_level);
+ if(boost_level == LLViewerTexture::BOOST_AVATAR_BAKED_SELF)
+ {
+ imagep->setAdditionalDecodePriority(1.0f) ;
+ }
}
//virtual
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index eae92f8992..a4d888cd72 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -975,12 +975,6 @@ void LLVOAvatarSelf::wearableUpdated( LLWearableType::EType type, BOOL upload_re
const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second;
const LLVOAvatarDefines::EBakedTextureIndex index = baked_iter->first;
- // if we're editing our appearance, ensure that we're not using baked textures
- // The baked texture for alpha masks is set explicitly when you hit "save"
- if (gAgentCamera.cameraCustomizeAvatar())
- {
- setNewBakedTexture(index,IMG_DEFAULT_AVATAR);
- }
if (baked_dict)
{
for (LLVOAvatarDefines::wearables_vec_t::const_iterator type_iter = baked_dict->mWearables.begin();
@@ -2036,7 +2030,11 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe
F32 desired_pixels;
desired_pixels = llmin(mPixelArea, (F32)getTexImageArea());
imagep->setBoostLevel(getAvatarBoostLevel());
+
+ imagep->resetTextureStats();
+ imagep->setResetMaxVirtualSizeFlag(false) ;
imagep->addTextureStats( desired_pixels / texel_area_ratio );
+ imagep->setAdditionalDecodePriority(1.0f) ;
imagep->forceUpdateBindStats() ;
if (imagep->getDiscardLevel() < 0)
{
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 96bde129ee..39649f0370 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -5287,6 +5287,7 @@ void LLVivoxVoiceClient::setVoiceEnabled(bool enabled)
LLVoiceChannel::getCurrentVoiceChannel()->deactivate();
status = LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED;
}
+ notifyStatusObservers(status);
}
}
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 121e691710..46c736c853 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -705,7 +705,7 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake
}
gAgentAvatarp->updateVisualParams();
- gAgentAvatarp->wearableUpdated(type, TRUE);
+ gAgentAvatarp->wearableUpdated(type, FALSE);
// if( upload_bake )
// {
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index f3d297c303..7d81c3e551 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -38,91 +38,129 @@
left="20"
top_pad="-30"
name="new_snapshot_btn"
- width="23" />
+ width="23"
+ commit_callback.function="Snapshot.Refresh"/>
<line_editor
border_style="line"
border_thickness="1"
- follows="left|top"
- height="20"
- layout="topleft"
+ follows="left|top"
+ height="20"
+ layout="topleft"
left="10"
- max_length="500"
+ max_length="500"
name="description"
- top_pad="15"
- width="230"
+ top_pad="15"
+ width="230"
label="Description"/>
+ <panel
+ top_pad="20"
+ left="10"
+ height="83"
+ name="panel_snapshot_main"
+ width="130">
+ <button
+ label="Share Snapshot"
+ name="share"
+ top="0"
+ left="0"
+ width="130"
+ commit_callback.function="Snapshot.ShowButtons"
+ commit_callback.parameter="share"/>
+ <button
+ label="Save Snapshot"
+ name="save"
+ top_pad="7"
+ left_delta="0"
+ width="130"
+ commit_callback.function="Snapshot.ShowButtons"
+ commit_callback.parameter="save"/>
+ <button
+ label="Set As Profile Pic"
+ name="set_profile_pic"
+ top_pad="7"
+ left_delta="0"
+ width="130"/>
+ </panel>
+ <panel
+ top_delta="0"
+ left_delta="0"
+ height="83"
+ name="panel_snapshot_share"
+ width="130">
+ <button
+ label="Share to Web"
+ name="share_to_web"
+ top="0"
+ left="0"
+ visible="false"
+ width="130"/>
+ <button
+ label="Email Snapshot"
+ name="share_to_email"
+ top_pad="7"
+ left_delta="0"
+ width="130"/>
+ <button
+ label="Back"
+ name="cancel_share"
+ top_pad="7"
+ left_delta="0"
+ width="130"
+ commit_callback.function="Snapshot.ShowButtons"
+ commit_callback.parameter="main"/>
+ </panel>
+ <panel
+ top_delta="0"
+ left_delta="0"
+ height="83"
+ name="panel_snapshot_save"
+ width="130">
+ <button
+ label="Save to My Inventory"
+ name="save_to_inventory"
+ top="0"
+ left="0"
+ width="130"/>
+ <button
+ label="Save to My Computer"
+ name="save_to_computer"
+ top_pad="7"
+ left_delta="0"
+ width="130"/>
+ <button
+ label="Back"
+ name="cancel_save"
+ top_pad="7"
+ left_delta="0"
+ width="130"
+ commit_callback.function="Snapshot.ShowButtons"
+ commit_callback.parameter="main"/>
+ </panel>
<button
- label="Share Snapshot"
- name="share"
- top_pad="20"
- left="10"
- width="130"/>
+ follows="left"
+ height="22"
+ layout="topleft"
+ left="210"
+ name="show_advanced"
+ image_overlay="TabIcon_Close_Off"
+ bottom_delta="0"
+ width="30"
+ commit_callback.function="Snapshot.ShowAdvanced"/>
<button
- label="Share to Web"
- name="share_to_web"
- top_delta="0"
- left="10"
+ follows="left"
+ height="22"
+ layout="topleft"
+ left="210"
+ name="hide_advanced"
+ image_overlay="TabIcon_Open_Off"
+ top_delta="0"
visible="false"
- width="130"/>
- <button
- label="Save to My Inventory"
- name="save_to_inventory"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Save Snapshot"
- name="save"
- top_pad="7"
- left="10"
- width="130"/>
- <button
- label="Email Snapshot"
- name="share_to_email"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Save to My Computer"
- name="save_to_computer"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Set As Profile Pic"
- name="set_profile_pic"
- top_pad="7"
- left="10"
- width="130"/>
- <button
- label="Back"
- name="cancel"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- follows="left"
- height="22"
- layout="topleft"
- left="210"
- name="show_advanced"
- image_overlay="TabIcon_Close_Off"
- top_delta="1"
- width="30"/>
- <button
- follows="left"
- height="22"
- layout="topleft"
- left="210"
- visible="false"
- name="hide_advanced"
- image_overlay="TabIcon_Open_Off"
- top_delta="0"
- width="30"/>
+ width="30"
+ commit_callback.function="Snapshot.HideAdvanced"/>
<panel
- visible="false"
- left="250"
- top="17"
- name="snapshot_advanced"
- filename="panel_snapshot_advanced.xml"/>
+ visible="false"
+ left="250"
+ top="17"
+ name="snapshot_advanced"
+ filename="panel_snapshot_advanced.xml"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index 4e6a07d020..62365f7cc2 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -61,14 +61,6 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
- label="Empty Trash"
- layout="topleft"
- name="empty_trash">
- <on_click
- function="Inventory.GearDefault.Custom.Action"
- parameter="empty_trash" />
- </menu_item_call>
- <menu_item_call
label="Empty Lost and Found"
layout="topleft"
name="empty_lostnfound">
@@ -111,4 +103,15 @@
function="Inventory.GearDefault.Enable"
parameter="find_links" />
</menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+
+ <menu_item_call
+ label="Empty Trash"
+ layout="topleft"
+ name="empty_trash">
+ <on_click
+ function="Inventory.GearDefault.Custom.Action"
+ parameter="empty_trash" />
+ </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
index b5eda8e999..c4e31ed180 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
@@ -170,7 +170,7 @@
<menu_item_separator />
<menu_item_call
- label="Rename"
+ label="Rename Outfit"
layout="topleft"
name="rename">
<on_click
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6d3d0f13bf..76a41a3b13 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6207,7 +6207,7 @@ The button will be shown when there is enough space for it.
icon="notifytip.tga"
name="ShareNotification"
type="notifytip">
-Drag items from inventory onto a person in the resident picker
+Select residents to share with.
</notification>
<notification
icon="notifytip.tga"
@@ -6304,36 +6304,39 @@ Avatar '[NAME]' entered appearance mode.
Avatar '[NAME]' left appearance mode.
</notification>
- <notification
+ <notification
icon="alertmodal.tga"
name="NoConnect"
type="alertmodal">
- We're having trouble connecting using [PROTOCOL] [HOSTID].
- Please check your network and firewall setup.
- <form name="form">
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- </form>
- </notification>
+We're having trouble connecting using [PROTOCOL] [HOSTID].
+Please check your network and firewall setup.
+ <form name="form">
+ <button
+ default="true"
+ index="0"
+ name="OK"
+ text="OK"/>
+ </form>
+ </notification>
- <notification
- icon="alertmodal.tga"
- name="NoVoiceConnect"
- type="alertmodal">
- We're having trouble connecting your voiceserver using [HOSTID].
- Voice communications will not be available.
- Please check your network and firewall setup.
- <form name="form">
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- </form>
- </notification>
+ <notification
+ icon="alertmodal.tga"
+ name="NoVoiceConnect"
+ type="alertmodal">
+We're having trouble connecting to your voice server:
+
+[HOSTID]
+
+Voice communications will not be available.
+Please check your network and firewall setup.
+ <form name="form">
+ <button
+ default="true"
+ index="0"
+ name="OK"
+ text="OK"/>
+ </form>
+ </notification>
<notification
icon="notifytip.tga"
@@ -6361,7 +6364,7 @@ Are you sure you want to leave this call?
name="okcancelignore"
notext="No"
yestext="Yes"/>
- <unique/>
+ <unique/>
</notification>
<notification
@@ -6378,7 +6381,7 @@ Mute everyone?
name="okcancelignore"
yestext="Ok"
notext="Cancel"/>
- <unique/>
+ <unique/>
</notification>
<global name="UnsupportedCPU">
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index c9802a269c..741f60669a 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -51,6 +51,7 @@
<string name="Filter.All" value="All"/>
<string name="Filter.Clothes/Body" value="Clothes/Body"/>
<string name="Filter.Objects" value="Objects"/>
+ <string name="Filter.Custom" value="Custom filter"/>
<button
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 0d14a6b3c8..361af0e8fb 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3181,7 +3181,7 @@ Abuse Report</string>
<!-- language specific white-space characters, delimiters, spacers, item separation symbols -->
<string name="sentences_separator" value=" "></string>
- <string name="words_separator">, </string>
+ <string name="words_separator" value=", "/>
<string name="server_is_down">
Despite our best efforts, something unexpected has gone wrong.
diff --git a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
index 0e69671f06..e5703c559b 100644
--- a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml
@@ -4,11 +4,11 @@
<menu_item_check label="移動ボタン" name="ShowMoveButton"/>
<menu_item_check label="視界ボタン" name="ShowCameraButton"/>
<menu_item_check label="スナップショットボタン" name="ShowSnapshotButton"/>
- <menu_item_check label="サイドバーのボタン" name="ShowSidebarButton"/>
- <menu_item_check label="制作のボタン" name="ShowBuildButton"/>
- <menu_item_check label="検索のボタン" name="ShowSearchButton"/>
- <menu_item_check label="地図のボタン" name="ShowWorldMapButton"/>
- <menu_item_check label="ミニマップのボタン" name="ShowMiniMapButton"/>
+ <menu_item_check label="サイドバーボタン" name="ShowSidebarButton"/>
+ <menu_item_check label="制作ボタン" name="ShowBuildButton"/>
+ <menu_item_check label="検索ボタン" name="ShowSearchButton"/>
+ <menu_item_check label="地図ボタン" name="ShowWorldMapButton"/>
+ <menu_item_check label="ミニマップボタン" name="ShowMiniMapButton"/>
<menu_item_call label="切り取り" name="NearbyChatBar_Cut"/>
<menu_item_call label="コピー" name="NearbyChatBar_Copy"/>
<menu_item_call label="貼り付け" name="NearbyChatBar_Paste"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 1ac7677b07..c82f1198a4 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -349,7 +349,7 @@ L$ が不足しているのでこのグループに参加することができ
<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
</notification>
<notification name="InvalidCredentialFormat">
- 「ユーザー名」欄にアバターのファーストネームとラストネーム両方を入力してからログインしてください。
+ 「ユーザーネーム」欄にアバターのファーストネームとラストネーム両方を入力してからログインしてください。
</notification>
<notification name="AddClassified">
クラシファイド広告は、検索ディレクトリと [http://secondlife.com/community/classifieds secondlife.com] の「クラシファイド広告」セクションに一週間掲載されます。
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index f0ebc67ef5..47d7a88b4c 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -9,9 +9,9 @@
<layout_stack name="login_widgets">
<layout_panel name="login">
<text name="username_text">
- ユーザー名:
+ ユーザーネーム:
</text>
- <line_editor label="ユーザー名" name="username_edit" tool_tip="[SECOND_LIFE] ユーザー名"/>
+ <line_editor label="ユーザーネーム" name="username_edit" tool_tip="[SECOND_LIFE] ユーザーネーム"/>
<text name="password_text">
パスワード:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index 7671f58691..4044110b47 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -26,9 +26,9 @@ Placa gráfica: [GRAPHICS_CARD]
Versão libcurl: [LIBCURL_VERSION]
Versão J2C Decoder: [J2C_VERSION]
-Versão do driver de áudio: [AUDIO_DRIVER_VERSION]
+Versão do driver de áudio: [AUDIO_DRIVER_VERSION]
Versão Qt Webkit: [QT_WEBKIT_VERSION]
-Versão Vivox: [VIVOX_VERSION]
+Versão do servidor de voz: [VOICE_VERSION]
</floater.string>
<floater.string name="none">
(nenhum)
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index 787836a8bd..56ffcbdece 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -63,6 +63,9 @@
Nenhum lote selecionado.
Vá para o menu Mundo &gt; Sobre o terreno ou selecione outro lote para mostrar os detalhes.
</panel.string>
+ <panel.string name="time_stamp_template">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </panel.string>
<text name="Name:">
Nome:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
index 5fb64f64b3..9473ee7ce9 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
@@ -3,41 +3,48 @@
<floater.string name="InvalidAvatar">
AVATAR INVÁLIDO
</floater.string>
- <text name="composite_label">
- Texturas compostas
- </text>
- <button label="Tombar" label_selected="Tombar" name="Dump"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <texture_picker label="Cabelo" name="hair-baked"/>
- <texture_picker label="Cabelo" name="hair_grain"/>
- <texture_picker label="Cabelo alpha" name="hair_alpha"/>
- <texture_picker label="Cabeça" name="head-baked"/>
- <texture_picker label="Maquilagem" name="head_bodypaint"/>
- <texture_picker label="Cabeça Alpha" name="head_alpha"/>
- <texture_picker label="Tatuagem na cabeça" name="head_tattoo"/>
- <texture_picker label="Olhos" name="eyes-baked"/>
- <texture_picker label="Olho" name="eyes_iris"/>
- <texture_picker label="Olhos Alpha" name="eyes_alpha"/>
- <texture_picker label="Cintura acima" name="upper-baked"/>
- <texture_picker label="Pintura corporal, cintura para cima" name="upper_bodypaint"/>
- <texture_picker label="Camiseta" name="upper_undershirt"/>
- <texture_picker label="Luvas" name="upper_gloves"/>
- <texture_picker label="Camisa" name="upper_shirt"/>
- <texture_picker label="Jaqueta (cima)" name="upper_jacket"/>
- <texture_picker label="Alpha de cima" name="upper_alpha"/>
- <texture_picker label="Tatuagem parte de cima" name="upper_tattoo"/>
- <texture_picker label="Cintura para baixo" name="lower-baked"/>
- <texture_picker label="Pintura corporal, cintura para baixo" name="lower_bodypaint"/>
- <texture_picker label="Roupa de baixo" name="lower_underpants"/>
- <texture_picker label="Meias" name="lower_socks"/>
- <texture_picker label="Sapatos" name="lower_shoes"/>
- <texture_picker label="Calças" name="lower_pants"/>
- <texture_picker label="Jaqueta" name="lower_jacket"/>
- <texture_picker label="Alpha inferior" name="lower_alpha"/>
- <texture_picker label="Tatuagem de baixo" name="lower_tattoo"/>
- <texture_picker label="Saia" name="skirt-baked"/>
- <texture_picker label="Saia" name="skirt"/>
+ <text name="label">
+ Pronto
+Texturas
+ </text>
+ <text name="composite_label">
+ Compósito:
+Texturas
+ </text>
+ <button label="Enviar IDs para painel" label_selected="Dump" name="Dump"/>
+ <panel name="scroll_content_panel">
+ <texture_picker label="Cabelo" name="hair-baked"/>
+ <texture_picker label="Cabelo" name="hair_grain"/>
+ <texture_picker label="Cabelo alpha" name="hair_alpha"/>
+ <texture_picker label="Cabeça" name="head-baked"/>
+ <texture_picker label="Maquilagem" name="head_bodypaint"/>
+ <texture_picker label="Cabeça Alpha" name="head_alpha"/>
+ <texture_picker label="Tatuagem na cabeça" name="head_tattoo"/>
+ <texture_picker label="Olhos" name="eyes-baked"/>
+ <texture_picker label="Olho" name="eyes_iris"/>
+ <texture_picker label="Olhos Alpha" name="eyes_alpha"/>
+ <texture_picker label="Cintura acima" name="upper-baked"/>
+ <texture_picker label="Pintura corporal, cintura para cima" name="upper_bodypaint"/>
+ <texture_picker label="Camiseta" name="upper_undershirt"/>
+ <texture_picker label="Luvas" name="upper_gloves"/>
+ <texture_picker label="Camisa" name="upper_shirt"/>
+ <texture_picker label="Jaqueta (cima)" name="upper_jacket"/>
+ <texture_picker label="Alpha de cima" name="upper_alpha"/>
+ <texture_picker label="Tatuagem parte de cima" name="upper_tattoo"/>
+ <texture_picker label="Cintura para baixo" name="lower-baked"/>
+ <texture_picker label="Cintura para baixo" name="lower_bodypaint"/>
+ <texture_picker label="Roupa de baixo" name="lower_underpants"/>
+ <texture_picker label="Meias" name="lower_socks"/>
+ <texture_picker label="Sapatos" name="lower_shoes"/>
+ <texture_picker label="Calças" name="lower_pants"/>
+ <texture_picker label="Jaqueta" name="lower_jacket"/>
+ <texture_picker label="Alpha inferior" name="lower_alpha"/>
+ <texture_picker label="Tatuagem de baixo" name="lower_tattoo"/>
+ <texture_picker label="Saia" name="skirt-baked"/>
+ <texture_picker label="Saia" name="skirt"/>
+ </panel>
</panel>
</scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml
new file mode 100644
index 0000000000..24e41ac8c8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_buy_currency_html" title="COMPRAR MOEDA"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml
index 3a04528228..f8e4e76752 100644
--- a/indra/newview/skins/default/xui/pt/floater_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map" title="Mini Mapa">
+<floater name="Map" title="">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml
index 9c02570076..b1dc65e3af 100644
--- a/indra/newview/skins/default/xui/pt/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml
@@ -6,18 +6,48 @@
<string name="walk_back_tooltip">
Andar para trás (flecha para baixo ou S)
</string>
+ <string name="walk_left_tooltip">
+ Andar para a esquerda (Shift + Seta esquerda ou A)
+ </string>
+ <string name="walk_right_tooltip">
+ Andar para a direita (Shift + Seta direita ou D)
+ </string>
<string name="run_forward_tooltip">
Correr para frente (flecha para cima ou W)
</string>
<string name="run_back_tooltip">
Correr para trás (flecha para baixo ou S)
</string>
+ <string name="run_left_tooltip">
+ Correr para a esquerda (Shift + Seta esquerda ou A)
+ </string>
+ <string name="run_right_tooltip">
+ Correr para a direita (Shift + Seta direita ou D)
+ </string>
<string name="fly_forward_tooltip">
Voar para frente (flecha para cima ou W)
</string>
<string name="fly_back_tooltip">
Voar para trás (flecha para baixo ou S)
</string>
+ <string name="fly_left_tooltip">
+ Voar para a esquerda (Shift + Seta esquerda ou A)
+ </string>
+ <string name="fly_right_tooltip">
+ Voar para a direita (Shift + Seta direita ou D)
+ </string>
+ <string name="fly_up_tooltip">
+ Voar para cima (tecla E)
+ </string>
+ <string name="fly_down_tooltip">
+ Voar para baixo (tecla C)
+ </string>
+ <string name="jump_tooltip">
+ Pular (tecla E)
+ </string>
+ <string name="crouch_tooltip">
+ Agachar (tecla C)
+ </string>
<string name="walk_title">
Andar
</string>
@@ -28,10 +58,12 @@
Voar
</string>
<panel name="panel_actions">
- <button label="" label_selected="" name="turn left btn" tool_tip="Virar à esquerda (flecha ESQ ou A)"/>
- <button label="" label_selected="" name="turn right btn" tool_tip="Virar à direita (flecha DIR ou D)"/>
<button label="" label_selected="" name="move up btn" tool_tip="Voar para cima (tecla E)"/>
+ <button label="" label_selected="" name="turn left btn" tool_tip="Virar à esquerda (flecha ESQ ou A)"/>
+ <joystick_slide name="move left btn" tool_tip="Andar para a esquerda (Shift + Seta esquerda ou A)"/>
<button label="" label_selected="" name="move down btn" tool_tip="Voar para baixo (tecla C)"/>
+ <button label="" label_selected="" name="turn right btn" tool_tip="Virar à direita (flecha DIR ou D)"/>
+ <joystick_slide name="move right btn" tool_tip="Andar para a direita (Shift + Seta direita ou D)"/>
<joystick_turn name="forward btn" tool_tip="Andar para frente (flecha para cima ou W)"/>
<joystick_turn name="backward btn" tool_tip="Andar para trás (flecha para baixo ou S)"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
index e648a7d873..d094c1b63a 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -9,9 +9,6 @@
<floater.string name="Title">
Anotação: [NAME]
</floater.string>
- <floater.string label="Salvar" label_selected="Salvar" name="Save">
- Salvar
- </floater.string>
<text name="desc txt">
Descrição:
</text>
@@ -19,4 +16,5 @@
Carregando...
</text_editor>
<button label="Salvar" label_selected="Salvar" name="Save"/>
+ <button label="Excluir" label_selected="Excluir" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 74b45f1d1e..dbc8b3ffbe 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -67,9 +67,9 @@
<text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
þ: [COUNT]
</text>
- <check_box name="checkbox uniform"/>
- <text name="checkbox uniform label">
- Esticar ambos os lados
+ <check_box label="" name="checkbox uniform"/>
+ <text label="Esticar ambos lados" name="checkbox uniform label">
+ Esticar ambos lados
</text>
<check_box initial_value="true" label="Esticar texturas" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Mostrar na grade" name="checkbox snap to grid"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index de3178b946..5cb1b211cf 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -5,7 +5,7 @@
<menu_item_call label="Tirar" name="Detach"/>
<menu_item_call label="Largar" name="Drop"/>
<menu_item_call label="Ficar de pé" name="Stand Up"/>
- <menu_item_call label="Minha aparência" name="Appearance..."/>
+ <menu_item_call label="Trocar de look" name="Change Outfit"/>
<menu_item_call label="Meus amigos" name="Friends..."/>
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index ccbb921ebc..62055303b5 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -20,7 +20,9 @@
<context_menu label="Tirar ▶" name="Object Detach"/>
<menu_item_call label="Tirar tudo" name="Detach All"/>
</context_menu>
- <menu_item_call label="Minha aparência" name="Appearance..."/>
+ <menu_item_call label="Trocar de look" name="Chenge Outfit"/>
+ <menu_item_call label="Editar meu look" name="Edit Outfit"/>
+ <menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
<menu_item_call label="Meus amigos" name="Friends..."/>
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_bottomtray.xml b/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
index 43b446a67e..479d02512f 100644
--- a/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
@@ -4,6 +4,11 @@
<menu_item_check label="Botão de movimento" name="ShowMoveButton"/>
<menu_item_check label="Botão de ver" name="ShowCameraButton"/>
<menu_item_check label="Botão de fotos" name="ShowSnapshotButton"/>
+ <menu_item_check label="Botão da Barra lateral" name="ShowSidebarButton"/>
+ <menu_item_check label="Botão Construir" name="ShowBuildButton"/>
+ <menu_item_check label="Botão Buscar" name="ShowSearchButton"/>
+ <menu_item_check label="Botão Mapa" name="ShowWorldMapButton"/>
+ <menu_item_check label="Botão do Mini Mapa" name="ShowMiniMapButton"/>
<menu_item_call label="Cortar" name="NearbyChatBar_Cut"/>
<menu_item_call label="Copiar" name="NearbyChatBar_Copy"/>
<menu_item_call label="Colar" name="NearbyChatBar_Paste"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
index effc970eb8..c3e0608954 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu name="Gear Menu">
<menu_item_call label="Ficar de pé" name="stand_up"/>
- <menu_item_call label="Minha aparência" name="my_appearance"/>
+ <menu_item_call label="Trocar de look" name="change_outfit"/>
<menu_item_call label="Meu perfil" name="my_profile"/>
<menu_item_call label="Meus amigos" name="my_friends"/>
<menu_item_call label="Meus grupos" name="my_groups"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
index 345534261a..1b86b37075 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -54,6 +54,7 @@
<menu_item_call label="Remover item" name="Purge Item"/>
<menu_item_call label="Restaurar item" name="Restore Item"/>
<menu_item_call label="Abrir" name="Open"/>
+ <menu_item_call label="Abrir original" name="Open Original"/>
<menu_item_call label="Propriedades" name="Properties"/>
<menu_item_call label="Renomear" name="Rename"/>
<menu_item_call label="Copiar item UUID" name="Copy Asset UUID"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index 8ea87a06d1..a43ac271a9 100644
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -2,7 +2,7 @@
<menu_bar name="Login Menu">
<menu label="Eu" name="File">
<menu_item_call label="Preferências" name="Preferences..."/>
- <menu_item_call label="Sair" name="Quit"/>
+ <menu_item_call label="Sair do [APP_NAME]" name="Quit"/>
</menu>
<menu label="Ajuda" name="Help">
<menu_item_call label="Ajuda do [SECOND_LIFE]" name="Second Life Help"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
index c0db7752af..01f1d4ef80 100644
--- a/indra/newview/skins/default/xui/pt/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
@@ -14,8 +14,8 @@
<context_menu label="Opções do moderador &gt;" name="Moderator Options">
<menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
<menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Silenciar os demais" name="ModerateVoiceMuteOthers"/>
<menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Desfazer silenciar dos demais" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_call label="Silenciar todos" name="ModerateVoiceMute"/>
+ <menu_item_call label="Desfazer silenciar para todos" name="ModerateVoiceUnmute"/>
</context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 84ad056df6..b091cc2c97 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -7,7 +7,7 @@
</menu_item_call>
<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
<menu_item_call label="Meu perfil" name="Profile"/>
- <menu_item_call label="Minha aparência" name="Appearance"/>
+ <menu_item_call label="Trocar de look" name="ChangeOutfit"/>
<menu_item_check label="Meu inventário" name="Inventory"/>
<menu_item_check label="Meu inventário" name="ShowSidetrayInventory"/>
<menu_item_check label="Meus gestos" name="Gestures"/>
@@ -162,6 +162,7 @@
<menu_item_check label="Objetos flexíveis" name="Flexible Objects"/>
</menu>
<menu_item_check label="Executar diversas instâncias" name="Run Multiple Threads"/>
+ <menu_item_check label="Usar plugin de leitura de threads" name="Use Plugin Read Thread"/>
<menu_item_call label="Limpar cache de grupo" name="ClearGroupCache"/>
<menu_item_check label="Smoothing de mouse" name="Mouse Smoothing"/>
<menu label="Atalhos" name="Shortcuts">
@@ -188,7 +189,6 @@
<menu_item_call label="Mais zoom" name="Zoom In"/>
<menu_item_call label="Zoom padrão" name="Zoom Default"/>
<menu_item_call label="Menos zoom" name="Zoom Out"/>
- <menu_item_call label="Alternar tela inteira" name="Toggle Fullscreen"/>
</menu>
<menu_item_call label="Mostrar configurações de depuração" name="Debug Settings"/>
<menu_item_check label="Show Develop Menu" name="Debug Mode"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 462dcf2b21..e64940ecb1 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -323,6 +323,9 @@ Você precisa de uma conta para entrar no [SECOND_LIFE]. Você gostaria de abrir
</url>
<usetemplate name="okcancelbuttons" notext="Tentar novamente" yestext="Abrir conta"/>
</notification>
+ <notification name="InvalidCredentialFormat">
+ Digite o nome e sobrenome do seu avatar no campo Nome de usuário, depois faça o login novamente.
+ </notification>
<notification name="AddClassified">
Os anúncios serão publicados na seção &apos;Classificados&apos; das buscas e em [http://secondlife.com/community/classifieds secondlife.com] durante uma semana.
Escreva seu anúncio e clique em &apos;Publicar...&apos;
@@ -603,6 +606,11 @@ Esperada [VALIDS]
<notification name="CannotEncodeFile">
Impossível codificar o arquivo: [FILE]
</notification>
+ <notification name="CorruptedProtectedDataStore">
+ Não foi possível fazer a leitura dos dados protegidos, redefinindo.
+ Isso pode ocorrer após mudanças na configuração da rede.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CorruptResourceFile">
Fonte do arquivo corrompida: [FILE]
</notification>
@@ -962,6 +970,12 @@ em TODOS OS TERRENOS deste sim?
Por favor, insira um valor maior.
</notification>
+ <notification name="ConfirmItemDeleteHasLinks">
+ Pelo menos um dos itens possui links que levam a ele. Ao excluir o item, os links não funcionarão mais. Por isso, recomendamos excluir os links primeiro.
+
+Tem certeza de que quer excluir estes items?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ConfirmObjectDeleteLock">
Pelo menos um dos itens que você selecionou está trancado.
@@ -1103,6 +1117,42 @@ Pressione a tecla F1 para ajuda ou aprender mais sobre [SECOND_LIFE].
Por favor, escolha se o seu avatar é feminino ou masculino. Você pode mudar de idéia depois.
<usetemplate name="okcancelbuttons" notext="Feminino" yestext="Masculino"/>
</notification>
+ <notification name="CantTeleportToGrid">
+ Não foi possível ir para [SLURL], que fica em outro grid ([GRID]) em relação ao grid atual, ([CURRENT_GRID]). Feche o Visualizador e tente novamente.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="GeneralCertificateError">
+ Falha de conexão com o servidor.
+[REASON]
+
+SubjectName: [SUBJECT_NAME_STRING]
+IssuerName: [ISSUER_NAME_STRING]
+Válido de: [VALID_FROM]
+Válido até: [VALID_TO]
+MD5 Fingerprint: [SHA1_DIGEST]
+Impressão digital SHA1: [MD5_DIGEST]
+Uso da chave: [KEYUSAGE]
+Uso estendido da chave: [EXTENDEDKEYUSAGE]
+Identificador chave de assunto: [SUBJECTKEYIDENTIFIER]
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TrustCertificateError">
+ A autoridade de certificação deste servidor é desconhecida.
+
+Dados do certificado:
+SubjectName: [SUBJECT_NAME_STRING]
+IssuerName: [ISSUER_NAME_STRING]
+Válido de: [VALID_FROM]
+Válido até: [VALID_TO]
+MD5 Fingerprint: [SHA1_DIGEST]
+Impressão digital SHA1: [MD5_DIGEST]
+Uso da chave: [KEYUSAGE]
+Uso estendido da chave: [EXTENDEDKEYUSAGE]
+Identificador chave de assunto: [SUBJECTKEYIDENTIFIER]
+
+Confiar nesta autoridade?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Confiança"/>
+ </notification>
<notification name="NotEnoughCurrency">
[NAME] L$ [PRICE] Você não possui suficientes L$ para fazer isso.
</notification>
@@ -1493,9 +1543,9 @@ Ir para o Banco de Conhecimento para maiores informações sobre Classificaçõe
Você não é permitido nesta região devido à sua Classificação de maturidade.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- Você não pode entrar nessa região devido à sua seleção de maturidade.
+ Você não pode entrar nessa região devido à sua seleção de maturidade.
-Clique em &apos;Mudar preferência&apos; para aumentar o nível de maturidade e entrar nessa região. De agora em diante você pode buscar e acessar conteúdo [REGIONMATURITY] . Para modificar esta configuração, vá à Eu &gt; Preferências &gt; Geral.
+Clique em &apos;Mudar preferência&apos; para aumentar seu nível de maturidade e ganhar acesso imediato. Você então poderá fazer buscas e acessar conteúdo [REGIONMATURITY]. Para modificar o nível de maturidade, use o menu Eu &gt; Preferências &gt; Gerais.
<form name="form">
<button name="OK" text="Mudar preferência"/>
<button default="true" name="Cancel" text="Fechar"/>
@@ -2262,15 +2312,6 @@ Por favor, tente novamente em alguns instantes.
<button name="Mute" text="Bloquear"/>
</form>
</notification>
- <notification name="ObjectGiveItemUnknownUser">
- Um objeto chamado [OBJECTFROMNAME] de (residente desconhecido) lhe deu [OBJECTTYPE]:
-[ITEM_SLURL]
- <form name="form">
- <button name="Keep" text="Segure"/>
- <button name="Discard" text="Descarte"/>
- <button name="Mute" text="Bloquear"/>
- </form>
- </notification>
<notification name="UserGiveItem">
[NAME_SLURL] lhe deu [OBJECTTYPE]:
[ITEM_SLURL]
@@ -2583,8 +2624,52 @@ O botão será exibido quando houver espaço suficente.
<notification name="ShareNotification">
Arraste itens do inventário para uma pessoa no seletor de residentes
</notification>
+ <notification name="DeedToGroupFail">
+ Ocorreu uma falha durante a doação ao grupo.
+ </notification>
<notification name="AvatarRezNotification">
- O avatar de &apos;[NAME]&apos; renderizou em [TIME] s.
+ ( [EXISTENCE] segundos de vida )
+O avatar de &apos;[NAME]&apos; emergiu em [TIME] segundos.
+ </notification>
+ <notification name="AvatarRezSelfNotification">
+ ( [EXISTENCE] segundos de vida )
+Você confeccionou seu look em [TIME] segundos.
+ </notification>
+ <notification name="AvatarRezCloudNotification">
+ ( [EXISTENCE] segundos de vida )
+Avatar &apos;[NAME]&apos; transformou-se em nuvem.
+ </notification>
+ <notification name="AvatarRezArrivedNotification">
+ ( [EXISTENCE] segundos de vida )
+Avatar &apos;[NAME]&apos; surgiu.
+ </notification>
+ <notification name="AvatarRezLeftCloudNotification">
+ ( [EXISTENCE] segundos de vida )
+O avatar de &apos;[NAME]&apos; transformou-se em nuvem depois de [TIME] segundos.
+ </notification>
+ <notification name="AvatarRezEnteredAppearanceNotification">
+ ( [EXISTENCE] segundos de vida )
+Avatar &apos;[NAME]&apos; entrou no modo aparência.
+ </notification>
+ <notification name="AvatarRezLeftAppearanceNotification">
+ ( [EXISTENCE] segundos de vida )
+Avatar &apos;[NAME]&apos; sair do modo aparecer.
+ </notification>
+ <notification name="AvatarRezLeftNotification">
+ ( [EXISTENCE] segundos de vida )
+Avatar &apos;[NAME]&apos; saiu totalmente carregado.
+ </notification>
+ <notification name="ConfirmLeaveCall">
+ Tem certeza de que quer sair desta ligação?
+ <usetemplate ignoretext="Confirmar antes de deixar ligação" name="okcancelignore" notext="Não" yestext="Sim"/>
+ </notification>
+ <notification name="ConfirmMuteAll">
+ Você silenciou todos os participantes de uma ligação de grupo.
+Todos os demais residentes que entrarem na ligação mais tarde também serão silenciados, mesmo se você sair da ligação.
+
+
+Silenciar todos?
+ <usetemplate ignoretext="Confirmar antes de silenciar todos os participantes em ligações de grupo." name="okcancelignore" notext="OK" yestext="Cancelar"/>
</notification>
<global name="UnsupportedCPU">
- A velocidade da sua CPU não suporta os requisitos mínimos exigidos.
diff --git a/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml
new file mode 100644
index 0000000000..de764d8025
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+ <text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml
new file mode 100644
index 0000000000..094a03553b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+ <button label="Trocar" name="switch_btn"/>
+ <button label="Comprar &gt;" name="bodyparts_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
index 092135bd42..9fd7da55df 100644
--- a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
@@ -1,11 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="bottom_tray">
- <string name="SpeakBtnToolTip">
- Liga e desliga o microfone
- </string>
- <string name="VoiceControlBtnToolTip">
- Mostra/oculta os controles de voz
- </string>
+ <string name="SpeakBtnToolTip" value="Liga e desliga o microfone"/>
+ <string name="VoiceControlBtnToolTip" value="Mostra/oculta os controles de voz"/>
<layout_stack name="toolbar_stack">
<layout_panel name="speak_panel">
<talk_button name="talk">
@@ -24,6 +20,21 @@
<layout_panel name="snapshot_panel">
<button label="" name="snapshots" tool_tip="Tirar foto"/>
</layout_panel>
+ <layout_panel name="sidebar_btn_panel">
+ <button label="Barra lateral" name="sidebar_btn" tool_tip="Mostra/oculta a barra lateral"/>
+ </layout_panel>
+ <layout_panel name="build_btn_panel">
+ <button label="Construir" name="build_btn" tool_tip="Mostra/oculta ferramentas de Construção"/>
+ </layout_panel>
+ <layout_panel name="search_btn_panel">
+ <button label="Busca" name="search_btn" tool_tip="Mostra/oculta os gestos"/>
+ </layout_panel>
+ <layout_panel name="world_map_btn_panel">
+ <button label="Mapa" name="world_map_btn" tool_tip="Mostra/oculta o Mapa Múndi"/>
+ </layout_panel>
+ <layout_panel name="mini_map_btn_panel">
+ <button label="Mini Mapa" name="mini_map_btn" tool_tip="Mostra/oculta o Mini Mapa"/>
+ </layout_panel>
<layout_panel name="im_well_panel">
<chiclet_im_well name="im_well">
<button name="Unread IM messages" tool_tip="Conversas"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml
new file mode 100644
index 0000000000..bfdc7290d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="clothing_list_button_bar_panel">
+ <button label="Adicionar +" name="add_btn"/>
+ <button label="Comprar &gt;" name="clothing_shop_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml
new file mode 100644
index 0000000000..de764d8025
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="wearable_item">
+ <text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml b/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml
new file mode 100644
index 0000000000..3e4b12b001
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="cof_wearables">
+ <accordion name="cof_wearables_accordion">
+ <accordion_tab name="tab_attachments" title="Anexos"/>
+ <accordion_tab name="tab_clothing" title="Vestuário"/>
+ <accordion_tab name="tab_body_parts" title="Corpo"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml
new file mode 100644
index 0000000000..91d90a5660
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="deletable_wearable_item">
+ <text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml
new file mode 100644
index 0000000000..6af84de0c7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="dummy_clothing_item">
+ <text name="item_name" value="..."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
index 504486c3bb..6b9ac94cac 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
@@ -1,14 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <panel name="avatar_sex_panel">
- <text name="gender_text">
- Sexo:
- </text>
- <radio_group name="sex_radio">
- <radio_item label="Feminino" name="radio"/>
- <radio_item label="Masculino" name="radio2"/>
- </radio_group>
- </panel>
+ <text name="avatar_height">
+ [HEIGHT] metros de altura
+ </text>
<panel label="Camisa" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="Corpo"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
index 23cde50acc..f85bb3c499 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
@@ -4,5 +4,6 @@
<texture_picker label="Tatuagem de cabeça" name="Head Tattoo" tool_tip="Clique para escolher uma foto"/>
<texture_picker label="Tatuagem superior" name="Upper Tattoo" tool_tip="Selecione uma foto"/>
<texture_picker label="Tatuagem inferior" name="Lower Tattoo" tool_tip="Selecione uma foto"/>
+ <color_swatch label="Cor/Tonalidade" name="Color/Tint" tool_tip="Selecionar a cor"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
index a78539f274..f14a04f440 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
@@ -93,6 +93,12 @@
<text name="edit_wearable_title" value="Editando forma"/>
<panel label="Camisa" name="wearable_type_panel">
<text name="description_text" value="Forma:"/>
+ <radio_group name="sex_radio">
+ <radio_item label="" name="sex_male" tool_tip="Masculino" value="1"/>
+ <radio_item label="" name="sex_female" tool_tip="Feminino" value="0"/>
+ </radio_group>
+ <icon name="male_icon" tool_tip="Masculino"/>
+ <icon name="female_icon" tool_tip="Feminino"/>
</panel>
<panel label="gear_buttom_panel" name="gear_buttom_panel">
<button name="friends_viewsort_btn" tool_tip="Opções"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
index 6f21b78b10..e57a85a726 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
@@ -6,6 +6,9 @@
<panel.string name="cant_view_group_land_text">
Você não está autorizado a acessar terrenos de grupos
</panel.string>
+ <panel.string name="epmty_view_group_land_text">
+ Nada consta
+ </panel.string>
<panel.string name="cant_view_group_accounting_text">
Você não está autorizado a acessar os dados de contabilidade do grupo.
</panel.string>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
index 4b5a00c761..9ccb85cdf6 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
@@ -39,6 +39,7 @@ Cada grupo pode enviar no máximo 200 avisos/dia
<text name="string">
Arrastar e soltar o item aqui para anexá-lo:
</text>
+ <button label="Inventário" name="open_inventory" tool_tip="Inventário aberto"/>
<button label="Tirar" label_selected="Remover o anexo" name="remove_attachment" tool_tip="Remover anexo da notificação."/>
<button label="Enviar" label_selected="Enviar" name="send_notice"/>
<group_drop_target name="drop_target" tool_tip="Arrastar um item do inventário para a caixa para enviá-lo com o aviso. É preciso ter autorização de cópia e transferência do item para anexá-lo ao aviso."/>
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index 588b8deaa3..94a885960a 100644
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -8,18 +8,15 @@
</panel.string>
<layout_stack name="login_widgets">
<layout_panel name="login">
- <text name="first_name_text">
- Primeiro nome:
+ <text name="username_text">
+ Nome de usuário:
</text>
- <line_editor label="Nome" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
- <text name="last_name_text">
- Sobrenome:
- </text>
- <line_editor label="Sobrenome" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
+ <line_editor label="Nome de usuário" name="username_edit" tool_tip="[SECOND_LIFE] Nome de usuário"/>
<text name="password_text">
Senha:
</text>
<check_box label="Lembrar senha" name="remember_check"/>
+ <button label="conectar" name="connect_btn"/>
<text name="start_location_text">
Começar em:
</text>
@@ -27,7 +24,6 @@
<combo_box.item label="Última posição" name="MyLastLocation"/>
<combo_box.item label="Meu início" name="MyHome"/>
</combo_box>
- <button label="conectar" name="connect_btn"/>
</layout_panel>
<layout_panel name="links">
<text name="create_new_account_text">
diff --git a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
index 104c3bface..dbf8e4fa52 100644
--- a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
@@ -9,62 +9,20 @@
<text name="ItemcountText">
Itens:
</text>
- <menu_bar name="Inventory Menu">
- <menu label="Arquivo" name="File">
- <menu_item_call label="Abrir" name="Open"/>
- <menu label="Upload" name="upload">
- <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
- <menu_item_call label="Som (L$[COST])..." name="Upload Sound"/>
- <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>
- <menu_item_call label="Volume (L$[COST] per file)..." name="Bulk Upload"/>
- </menu>
- <menu_item_call label="Nova janela" name="New Window"/>
- <menu_item_call label="Mostrar filtros" name="Show Filters"/>
- <menu_item_call label="Restabelecer filtros" name="Reset Current"/>
- <menu_item_call label="Fechar todas as pastas" name="Close All Folders"/>
- <menu_item_call label="Esvaziar lixeira" name="Empty Trash"/>
- <menu_item_call label="Esvaziar achados e perdidos" name="Empty Lost And Found"/>
- </menu>
- <menu label="Crie" name="Create">
- <menu_item_call label="Nova pasta" name="New Folder"/>
- <menu_item_call label="Novo script" name="New Script"/>
- <menu_item_call label="Nova anotação" name="New Note"/>
- <menu_item_call label="Novo gesto" name="New Gesture"/>
- <menu label="Novas roupas" name="New Clothes">
- <menu_item_call label="Nova camisa" name="New Shirt"/>
- <menu_item_call label="Novas calças" name="New Pants"/>
- <menu_item_call label="Novos sapatos" name="New Shoes"/>
- <menu_item_call label="Novas meias" name="New Socks"/>
- <menu_item_call label="Nova blusa" name="New Jacket"/>
- <menu_item_call label="Nova saia" name="New Skirt"/>
- <menu_item_call label="Novas luvas" name="New Gloves"/>
- <menu_item_call label="Nova camiseta" name="New Undershirt"/>
- <menu_item_call label="Novas roupa de baixo" name="New Underpants"/>
- <menu_item_call label="Novo alpha" name="New Alpha"/>
- <menu_item_call label="Nova tatuagem" name="New Tattoo"/>
- </menu>
- <menu label="Nova parte do corpo" name="New Body Parts">
- <menu_item_call label="Nova forma" name="New Shape"/>
- <menu_item_call label="Nova pele" name="New Skin"/>
- <menu_item_call label="Novo cabelo" name="New Hair"/>
- <menu_item_call label="Novos olhos" name="New Eyes"/>
- </menu>
- </menu>
- <menu label="Classificar" name="Sort">
- <menu_item_check label="Por nome" name="By Name"/>
- <menu_item_check label="Por data" name="By Date"/>
- <menu_item_check label="Pastas sempre por nome" name="Folders Always By Name"/>
- <menu_item_check label="Pastas do sistema no topo" name="System Folders To Top"/>
- </menu>
- </menu_bar>
<filter_editor label="Filtro" name="inventory search editor"/>
<tab_container name="inventory filter tabs">
<inventory_panel label="Todos os itens" name="All Items"/>
- <inventory_panel label="Itens recentes" name="Recent Items"/>
+ <recent_inventory_panel label="Itens recentes" name="Recent Items"/>
</tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
- <button name="add_btn" tool_tip="Adicionar novo item"/>
- <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
- </panel>
+ <layout_stack name="bottom_panel">
+ <layout_panel name="options_gear_btn_panel">
+ <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+ </layout_panel>
+ <layout_panel name="add_btn_panel">
+ <button name="add_btn" tool_tip="Adicionar novo item"/>
+ </layout_panel>
+ <layout_panel name="trash_btn_panel">
+ <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
index 3dc8b4cc75..61e470586e 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
@@ -2,6 +2,8 @@
<!-- Side tray Outfit Edit panel -->
<panel label="Editar look" name="outfit_edit">
<string name="No Outfit" value="Nenhum"/>
+ <string name="unsaved_changes" value="Mudanças não salvas"/>
+ <string name="now_editing" value="Editando..."/>
<panel.string name="not_available">
(N\A)
</panel.string>
@@ -21,18 +23,13 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="Painel de controle de MIs" name="outfit_wearables_panel">
- <scroll_list name="look_items_list">
- <scroll_list.columns label="Ver item" name="look_item"/>
- <scroll_list.columns label="Ordenar itens" name="look_item_sort"/>
- </scroll_list>
<panel label="bottom_panel" name="edit_panel"/>
</layout_panel>
<layout_panel name="add_wearables_panel">
- <filter_editor label="Filtro" name="look_item_filter"/>
+ <text name="add_to_outfit_label" value="Adicionar ao look:"/>
<layout_stack name="filter_panels">
- <layout_panel label="Painel de controle de MIs" name="filter_button_panel">
- <text name="add_to_outfit_label" value="Adicionar ao look:"/>
- <button label="O" name="filter_button"/>
+ <layout_panel label="Painel de controle de MIs" name="filter_panel">
+ <filter_editor label="Filtro" name="look_item_filter"/>
</layout_panel>
</layout_stack>
<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index 17f5b6cbac..efeea89fa9 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -2,9 +2,9 @@
<!-- Side tray panel -->
<panel label="Pessoas" name="people_panel">
<string name="no_recent_people" value="Ninguém, recentemente. Em busca de alguém para conversar? Use a [secondlife:///app/search/people Busca] ou o [secondlife:///app/worldmap Mapa-Múndi]."/>
- <string name="no_filtered_recent_people" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
+ <string name="no_filtered_recent_people" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search]."/>
<string name="no_one_near" value="Ninguém por perto Em busca de alguém para conversar? Use a [secondlife:///app/search/people Busca] ou o [secondlife:///app/worldmap Mapa-Múndi]."/>
- <string name="no_one_filtered_near" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
+ <string name="no_one_filtered_near" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search]."/>
<string name="no_friends_online" value="Nenhum amigo online"/>
<string name="no_friends" value="Nenhum amigo"/>
<string name="no_friends_msg">
@@ -12,11 +12,11 @@
Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-Múndi].
</string>
<string name="no_filtered_friends_msg">
- Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups Busca].
+ Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search].
</string>
<string name="people_filter_label" value="Filtro de pessoas"/>
<string name="groups_filter_label" value="Filtro de grupos"/>
- <string name="no_filtered_groups_msg" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
+ <string name="no_filtered_groups_msg" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
<string name="no_groups_msg" value="À procura de grupos interessantes? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
<filter_editor label="Filtro" name="filter_input"/>
<tab_container name="tabs">
@@ -55,8 +55,8 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes" width="50"/>
<button label="MI" name="im_btn" tool_tip="Iniciar MI" width="24"/>
<button label="Chamada" name="call_btn" tool_tip="Ligar para este residente" width="61"/>
- <button label="Compartilhar" name="share_btn" width="82"/>
- <button label="Teletransporte" name="teleport_btn" tool_tip="Oferecer teletransporte" width="86"/>
+ <button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário" width="82"/>
+ <button label="Teletransporte" name="teleport_btn" tool_tip="Oferecer teletransporte" width="86"/>
<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir informação de grupo"/>
<button label="Bate-papo de grupo" name="chat_btn" tool_tip="Iniciar bate-papo"/>
<button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index 6f2cae0476..885aafc350 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -13,6 +13,7 @@
</text>
<check_box label="Construção/Edição" name="edit_camera_movement" tool_tip="Use o posicionamento automático da câmera quando entrar e sair do modo de edição"/>
<check_box label="Aparência" name="appearance_camera_movement" tool_tip="Use o posicionamento automático da câmera quando em modo de edição"/>
+ <check_box initial_value="1" label="Barra lateral" name="appearance_sidebar_positioning" tool_tip="Usar posicionamento automático da câmera na barra lateral"/>
<check_box label="Mostre-me em visão de mouse" name="first_person_avatar_visible"/>
<check_box label="Teclas de seta sempre me movem" name="arrow_keys_move_avatar_check"/>
<check_box label="Dê dois toques e pressione para correr" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index e566fde27c..02b0ef35fe 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -45,6 +45,7 @@
</text>
<check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/>
<check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/>
+ <check_box label="Ativar MIs e bate-papos de texto simples" name="plain_text_chat_history"/>
<text name="show_ims_in_label">
Mostrar MIs em:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index eb38323940..ccf213099e 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Gráficos" name="Display panel">
- <text name="UI Size:">
- Interface:
- </text>
<text name="QualitySpeed">
Qualidade e velocidade:
</text>
@@ -53,6 +50,10 @@ rápido
m
</text>
<slider label="Contador máx. de partículas:" name="MaxParticleCount"/>
+ <slider label="Distância máx. desenho avatar:" name="MaxAvatarDrawDistance"/>
+ <text name="DrawDistanceMeterText3">
+ m
+ </text>
<slider label="Qualidade de Pós-processamento:" name="RenderPostProcess"/>
<text name="MeshDetailText">
Detalhes de Malha:
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
index b8bbb4051a..f075f45b8f 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
@@ -1,9 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Looks" name="appearance panel">
<string name="No Outfit" value="Nenhum"/>
+ <string name="Unsaved Changes" value="Mudanças não salvas"/>
+ <string name="Now Wearing" value="Look atual..."/>
<panel name="panel_currentlook">
- <text name="currentlook_title">
- (não salvo)
+ <button label="E" name="editappearance_btn"/>
+ <button label="O" name="openoutfit_btn"/>
+ <text name="currentlook_status">
+ (Status)
</text>
</panel>
<filter_editor label="Filtrar looks" name="Filter"/>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index f634236cd2..31c96cad4c 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -4,6 +4,7 @@
<panel name="button_panel">
<button label="Perfil" name="info_btn"/>
<button label="Compartilhar" name="share_btn"/>
+ <button label="Comprar" name="shop_btn"/>
<button label="Vestir" name="wear_btn"/>
<button label="Tocar" name="play_btn"/>
<button label="Teletransportar" name="teleport_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 51b6581d42..f865124009 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -88,6 +88,24 @@
<string name="LoginDownloadingClothing">
Baixando roupas...
</string>
+ <string name="InvalidCertificate">
+ O servidor respondeu com um certificado inválido ou corrompido. Por favor contate o administrador do Grid.
+ </string>
+ <string name="CertInvalidHostname">
+ Um hostname inválido foi usado para acessar o servidor. Verifique o SLURL ou hostname do Grid.
+ </string>
+ <string name="CertExpired">
+ O certificado dado pelo Grid parece estar vencido. Verifique o relógio do sistema ou contate o administrador do Grid.
+ </string>
+ <string name="CertKeyUsage">
+ O certificado dado pelo servidor não pôde ser usado para SSL. Por favor contate o administrador do Grid.
+ </string>
+ <string name="CertBasicConstraints">
+ A cadeia de certificados do servidor tinha certificados demais. Por favor contate o administrador do Grid.
+ </string>
+ <string name="CertInvalidSignature">
+ A assinatura do certificado dado pelo servidor do Grid não pôde ser verificada. Por favor contate o administrador do Grid.
+ </string>
<string name="LoginFailedNoNetwork">
Erro de rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede.
</string>
@@ -819,6 +837,42 @@
<string name="invalid">
Inválido
</string>
+ <string name="shirt_not_worn">
+ Camisa não vestida
+ </string>
+ <string name="pants_not_worn">
+ Calças não vestidas
+ </string>
+ <string name="shoes_not_worn">
+ Sapatos não calçados
+ </string>
+ <string name="socks_not_worn">
+ Meias não calçadas
+ </string>
+ <string name="jacket_not_worn">
+ Jaqueta não vestida
+ </string>
+ <string name="gloves_not_worn">
+ Luvas não calçadas
+ </string>
+ <string name="undershirt_not_worn">
+ Camiseta não vestida
+ </string>
+ <string name="underpants_not_worn">
+ Roupa de baixo não vestida
+ </string>
+ <string name="skirt_not_worn">
+ Saia não vestida
+ </string>
+ <string name="alpha_not_worn">
+ Alpha não vestido
+ </string>
+ <string name="tattoo_not_worn">
+ Tatuagem não usada
+ </string>
+ <string name="invalid_not_worn">
+ inválido
+ </string>
<string name="NewWearable">
Novo [WEARABLE_ITEM]
</string>
@@ -889,7 +943,10 @@
Pressione ESC para retornar para visão do mundo
</string>
<string name="InventoryNoMatchingItems">
- Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups Busca].
+ Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search].
+ </string>
+ <string name="PlacesNoMatchingItems">
+ Não encontrou o que procura? Tente buscar no [secondlife:///app/search/groups/[SEARCH_TERM] Search].
</string>
<string name="FavoritesNoMatchingItems">
Arraste um marco para adicioná-lo aos seus favoritos.
@@ -919,6 +976,7 @@
<string name="Wave" value="Acenar"/>
<string name="HelloAvatar" value="Olá, avatar!"/>
<string name="ViewAllGestures" value="Ver todos&gt;&gt;"/>
+ <string name="GetMoreGestures" value="Mais &gt;&gt;"/>
<string name="Animations" value="Animações,"/>
<string name="Calling Cards" value="Cartões de visitas,"/>
<string name="Clothing" value="Vestuário,"/>
@@ -1542,6 +1600,9 @@
<string name="MuteGroup">
(grupo)
</string>
+ <string name="MuteExternal">
+ (Externo)
+ </string>
<string name="RegionNoCovenant">
Não foi definido um contrato para essa região.
</string>
@@ -3299,11 +3360,14 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="answered_call">
Ligação atendida
</string>
- <string name="started_call">
- Iniciou uma ligação de voz
+ <string name="you_started_call">
+ Você iniciou uma ligação de voz
+ </string>
+ <string name="you_joined_call">
+ Você entrou na ligação
</string>
- <string name="joined_call">
- Entrou na ligação
+ <string name="name_started_call">
+ [NAME] iniciou uma ligação de voz
</string>
<string name="ringing-im">
Entrando em ligação de voz...
@@ -3502,6 +3566,90 @@ Denunciar abuso
<string name="Contents">
Conteúdo
</string>
+ <string name="Gesture">
+ Gesto
+ </string>
+ <string name="Male Gestures">
+ Gestos masculinos
+ </string>
+ <string name="Female Gestures">
+ Gestos femininos
+ </string>
+ <string name="Other Gestures">
+ Outros gestos
+ </string>
+ <string name="Speech Gestures">
+ Gestos da fala
+ </string>
+ <string name="Common Gestures">
+ Gestos comuns
+ </string>
+ <string name="Male - Excuse me">
+ Perdão - masculino
+ </string>
+ <string name="Male - Get lost">
+ Deixe-me em paz - masculino
+ </string>
+ <string name="Male - Blow kiss">
+ Mandar beijo - masculino
+ </string>
+ <string name="Male - Boo">
+ Vaia - masculino
+ </string>
+ <string name="Male - Bored">
+ Maçante - masculino
+ </string>
+ <string name="Male - Hey">
+ Ôpa! - masculino
+ </string>
+ <string name="Male - Laugh">
+ Risada - masculino
+ </string>
+ <string name="Male - Repulsed">
+ Quero distância! - masculino
+ </string>
+ <string name="Male - Shrug">
+ Encolher de ombros - masculino
+ </string>
+ <string name="Male - Stick tougue out">
+ Mostrar a língua - masculino
+ </string>
+ <string name="Male - Wow">
+ Wow - masculino
+ </string>
+ <string name="FeMale - Excuse me">
+ Perdão - masc/fem
+ </string>
+ <string name="FeMale - Get lost">
+ Deixe-me em paz - feminino
+ </string>
+ <string name="FeMale - Blow kiss">
+ Mandar beijo - masc/fem
+ </string>
+ <string name="FeMale - Boo">
+ Vaia - masc/fem
+ </string>
+ <string name="Female - Bored">
+ Maçante - feminino
+ </string>
+ <string name="Female - Hey">
+ Ôpa - feminino
+ </string>
+ <string name="Female - Laugh">
+ Risada - feminina
+ </string>
+ <string name="Female - Repulsed">
+ Quero distância! - feminino
+ </string>
+ <string name="Female - Shrug">
+ Encolher ombros - feminino
+ </string>
+ <string name="Female - Stick tougue out">
+ Mostrar a língua - feminino
+ </string>
+ <string name="Female - Wow">
+ Wow - feminino
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>