diff options
65 files changed, 775 insertions, 308 deletions
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index ed70b1d9f2..7330b00bcf 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -543,14 +543,13 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb return 0; } - S32 off; - if (offset < 0) - off = LLAPRFile::seek(file_handle, APR_END, 0); - else - off = LLAPRFile::seek(file_handle, APR_SET, offset); + llassert(offset >= 0); + + if (offset > 0) + offset = LLAPRFile::seek(file_handle, APR_SET, offset); apr_size_t bytes_read; - if (off < 0) + if (offset < 0) { bytes_read = 0; } diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index b05a222b33..08cf11e593 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -182,7 +182,7 @@ typedef LLAtomic32<U32> LLAtomicU32; typedef LLAtomic32<S32> LLAtomicS32; // File IO convenience functions. -// Returns NULL if the file fails to openm sets *sizep to file size of not NULL +// Returns NULL if the file fails to open, sets *sizep to file size if not NULL // abbreviated flags #define LL_APR_R (APR_READ) // "r" #define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w" @@ -200,7 +200,7 @@ typedef LLAtomic32<S32> LLAtomicS32; // especially do not put some time-costly operations between open() and close(). // otherwise it might lock the APRFilePool. //there are two different apr_pools the APRFile can use: -// 1, a temperary pool passed to an APRFile function, which is used within this function and only once. +// 1, a temporary pool passed to an APRFile function, which is used within this function and only once. // 2, a global pool. // @@ -255,12 +255,12 @@ public: // Returns bytes read/written, 0 if read/write fails: static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); - static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); + static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); // offset<0 means append //******************************************************************************************************************************* }; /** - * @brief Function which approprately logs error or remains quiet on + * @brief Function which appropriately logs error or remains quiet on * APR_SUCCESS. * @return Returns <code>true</code> if status is an error condition. */ diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h index f9f1c024f2..ae26c85ce4 100644 --- a/indra/llmath/v2math.h +++ b/indra/llmath/v2math.h @@ -73,6 +73,8 @@ class LLVector2 void setVec(const LLVector2 &vec); // deprecated void setVec(const F32 *vec); // deprecated + inline bool isFinite() const; // checks to see if all values of LLVector2 are finite + F32 length() const; // Returns magnitude of LLVector2 F32 lengthSquared() const; // Returns magnitude squared of LLVector2 F32 normalize(); // Normalizes and returns the magnitude of LLVector2 @@ -218,6 +220,7 @@ inline void LLVector2::setVec(const F32 *vec) mV[VY] = vec[VY]; } + // LLVector2 Magnitude and Normalization Functions inline F32 LLVector2::length(void) const @@ -250,6 +253,12 @@ inline F32 LLVector2::normalize(void) return (mag); } +// checker +inline bool LLVector2::isFinite() const +{ + return (llfinite(mV[VX]) && llfinite(mV[VY])); +} + // deprecated inline F32 LLVector2::magVec(void) const { diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index dae759ca5f..00f0fd5b9a 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1778,8 +1778,18 @@ BOOL LLImageGL::getMask(const LLVector2 &tc) if (mPickMask) { - F32 u = tc.mV[0] - floorf(tc.mV[0]); - F32 v = tc.mV[1] - floorf(tc.mV[1]); + F32 u,v; + if (LL_LIKELY(tc.isFinite())) + { + u = tc.mV[0] - floorf(tc.mV[0]); + v = tc.mV[1] - floorf(tc.mV[1]); + } + else + { + LL_WARNS_ONCE("render") << "Ugh, non-finite u/v in mask pick" << LL_ENDL; + u = v = 0.f; + llassert(false); + } if (LL_UNLIKELY(u < 0.f || u > 1.f || v < 0.f || v > 1.f)) diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index da4abde451..29b6f490c8 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -91,15 +91,16 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask) S32 result; while (getNextFileInDir(dirname, mask, filename, FALSE)) { - if ((filename == ".") || (filename == "..")) + fullpath = dirname; + fullpath += getDirDelimiter(); + fullpath += filename; + + if(LLFile::isdir(fullpath)) { // skipping directory traversal filenames count++; continue; } - fullpath = dirname; - fullpath += getDirDelimiter(); - fullpath += filename; S32 retry_count = 0; while (retry_count < 5) diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp index e85cc437f4..49c198a82d 100644 --- a/indra/llvfs/lllfsthread.cpp +++ b/indra/llvfs/lllfsthread.cpp @@ -188,7 +188,7 @@ bool LLLFSThread::Request::processRequest() if (mOperation == FILE_READ) { llassert(mOffset >= 0); - LLAPRFile infile ; + LLAPRFile infile ; // auto-closes infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool()); if (!infile.getFileHandle()) { @@ -204,7 +204,6 @@ bool LLLFSThread::Request::processRequest() llassert_always(off >= 0); mBytesRead = infile.read(mBuffer, mBytes ); complete = true; - infile.close() ; // llinfos << "LLLFSThread::READ:" << mFileName << " Bytes: " << mBytesRead << llendl; } else if (mOperation == FILE_WRITE) @@ -212,7 +211,7 @@ bool LLLFSThread::Request::processRequest() apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY; if (mOffset < 0) flags |= APR_APPEND; - LLAPRFile outfile ; + LLAPRFile outfile ; // auto-closes outfile.open(mFileName, flags, mThread->getLocalAPRFilePool()); if (!outfile.getFileHandle()) { @@ -232,7 +231,6 @@ bool LLLFSThread::Request::processRequest() } mBytesRead = outfile.write(mBuffer, mBytes ); complete = true; - // llinfos << "LLLFSThread::WRITE:" << mFileName << " Bytes: " << mBytesRead << "/" << mBytes << " Offset:" << mOffset << llendl; } else diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 5ee56a2a99..e2da3d1ad8 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1544,16 +1544,14 @@ void LLWindowWin32::initCursors() mCursor[ UI_CURSOR_TOOLZOOMIN ] = LoadCursor(module, TEXT("TOOLZOOMIN")); mCursor[ UI_CURSOR_TOOLPICKOBJECT3 ] = LoadCursor(module, TEXT("TOOLPICKOBJECT3")); mCursor[ UI_CURSOR_PIPETTE ] = LoadCursor(module, TEXT("TOOLPIPETTE")); + mCursor[ UI_CURSOR_TOOLSIT ] = LoadCursor(module, TEXT("TOOLSIT")); + mCursor[ UI_CURSOR_TOOLBUY ] = LoadCursor(module, TEXT("TOOLBUY")); + mCursor[ UI_CURSOR_TOOLOPEN ] = LoadCursor(module, TEXT("TOOLOPEN")); // Color cursors - gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "res", "toolbuy.cur"); - - mCursor[UI_CURSOR_TOOLSIT] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->findSkinnedFilename("textures", "toolsit.cur")).c_str()); - mCursor[UI_CURSOR_TOOLBUY] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->findSkinnedFilename("textures", "toolbuy.cur")).c_str()); - mCursor[UI_CURSOR_TOOLOPEN] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->findSkinnedFilename("textures", "toolopen.cur")).c_str()); - mCursor[UI_CURSOR_TOOLPLAY] = loadColorCursor(TEXT("TOOLPLAY")); - mCursor[UI_CURSOR_TOOLPAUSE] = loadColorCursor(TEXT("TOOLPAUSE")); - mCursor[UI_CURSOR_TOOLMEDIAOPEN] = loadColorCursor(TEXT("TOOLMEDIAOPEN")); + mCursor[ UI_CURSOR_TOOLPLAY ] = loadColorCursor(TEXT("TOOLPLAY")); + mCursor[ UI_CURSOR_TOOLPAUSE ] = loadColorCursor(TEXT("TOOLPAUSE")); + mCursor[ UI_CURSOR_TOOLMEDIAOPEN ] = loadColorCursor(TEXT("TOOLMEDIAOPEN")); // Note: custom cursors that are not found make LoadCursor() return NULL. for( S32 i = 0; i < UI_CURSOR_COUNT; i++ ) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e6b266e0a7..a9e6a65b2b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1174,6 +1174,9 @@ if (WINDOWS) res/toolpickobject2.cur res/toolpickobject3.cur res/toolpipette.cur + res/toolbuy.cur + res/toolopen.cur + res/toolsit.cur ) set_source_files_properties(${viewer_RESOURCE_FILES} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5eeb09f9f4..fb01aacf9e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4,13 +4,14 @@ <key>AFKTimeout</key> <map> <key>Comment</key> - <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never)</string> + <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never). + Valid values are: 0, 120, 300, 600, 1800</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>S32</string> <key>Value</key> - <real>0</real> + <real>300</real> </map> <key>AdvanceSnapshot</key> <map> diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 158eef9319..5fb86dd92d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -299,7 +299,7 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*9.0*(1.0-spec.a)*(checkerboard-0.5); ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination // Get attributes from the 2D guess point. diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index dbccb7fb8b..1fd54b5607 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -298,7 +298,7 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*9.0*(1.0-spec.a)*(checkerboard-0.5); ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination // Get attributes from the 2D guess point. diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index ef81ed1308..45d921d861 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -301,7 +301,7 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*9.0*(1.0-spec.a)*(checkerboard-0.5); ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination // Get attributes from the 2D guess point. diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 407c5b6153..c7a5691d70 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -32,13 +32,18 @@ #include "llviewerprecompiledheaders.h" +// common +#include "lltrans.h" + #include "llavatarlist.h" #include "llagentdata.h" // for comparator // newview +#include "llavatariconctrl.h" #include "llcallingcard.h" // for LLAvatarTracker #include "llcachename.h" #include "llrecentpeople.h" +#include "lltextutil.h" #include "lluuid.h" #include "llvoiceclient.h" #include "llviewercontrol.h" // for gSavedSettings @@ -193,6 +198,18 @@ void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/) } } +void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name) +{ + LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL; + LLAvalineListItem* item = new LLAvalineListItem; + item->setAvatarId(item_id, session_id, true, false); + item->setName(item_name); + + addItem(item, item_id); + mIDs.push_back(item_id); + sort(); +} + ////////////////////////////////////////////////////////////////////////// // PROTECTED SECTION ////////////////////////////////////////////////////////////////////////// @@ -471,3 +488,61 @@ bool LLAvatarItemAgentOnTopComparator::doCompare(const LLAvatarListItem* avatar_ } return LLAvatarItemNameComparator::doCompare(avatar_item1,avatar_item2); } + +/************************************************************************/ +/* class LLAvalineListItem */ +/************************************************************************/ +LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarListItem(false) +, mIsHideNumber(hide_number) +{ + // should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called. + LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); +} + +BOOL LLAvalineListItem::postBuild() +{ + BOOL rv = LLAvatarListItem::postBuild(); + + if (rv) + { + setOnline(true); + showLastInteractionTime(false); + setShowProfileBtn(false); + setShowInfoBtn(false); + mAvatarIcon->setValue("Avaline_Icon"); + mAvatarIcon->setToolTip(std::string("")); + } + return rv; +} + +// to work correctly this method should be called AFTER setAvatarId for avaline callers with hidden phone number +void LLAvalineListItem::setName(const std::string& name) +{ + if (mIsHideNumber) + { + static U32 order = 0; + typedef std::map<LLUUID, U32> avaline_callers_nums_t; + static avaline_callers_nums_t mAvalineCallersNums; + + llassert(getAvatarId() != LLUUID::null); + + const LLUUID &uuid = getAvatarId(); + + if (mAvalineCallersNums.find(uuid) == mAvalineCallersNums.end()) + { + mAvalineCallersNums[uuid] = ++order; + LL_DEBUGS("Avaline") << "Set name for new avaline caller: " << uuid << ", order: " << order << LL_ENDL; + } + LLStringUtil::format_map_t args; + args["[ORDER]"] = llformat("%u", mAvalineCallersNums[uuid]); + std::string hidden_name = LLTrans::getString("AvalineCaller", args); + + LL_DEBUGS("Avaline") << "Avaline caller: " << uuid << ", name: " << hidden_name << LL_ENDL; + LLAvatarListItem::setName(hidden_name); + } + else + { + const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name); + LLAvatarListItem::setName(formatted_phone); + } +} diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 0203617867..528f796b8b 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -96,6 +96,8 @@ public: virtual S32 notifyParent(const LLSD& info); + void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name); + protected: void refresh(); @@ -175,4 +177,27 @@ protected: virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const; }; +/** + * Represents Avaline caller in Avatar list in Voice Control Panel and group chats. + */ +class LLAvalineListItem : public LLAvatarListItem +{ +public: + + /** + * Constructor + * + * @param hide_number - flag indicating if number should be hidden. + * In this case It will be shown as "Avaline Caller 1", "Avaline Caller 1", etc. + */ + LLAvalineListItem(bool hide_number = true); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void setName(const std::string& name); + +private: + bool mIsHideNumber; +}; + #endif // LL_LLAVATARLIST_H diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 44f88cce29..2a51eeacfc 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -212,21 +212,25 @@ void LLAvatarListItem::setState(EItemState item_style) mAvatarIcon->setColor(item_icon_color_map[item_style]); } -void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes) +void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes/* = false*/, bool is_resident/* = true*/) { if (mAvatarId.notNull()) LLAvatarTracker::instance().removeParticularFriendObserver(mAvatarId, this); mAvatarId = id; - mAvatarIcon->setValue(id); mSpeakingIndicator->setSpeakerId(id, session_id); // We'll be notified on avatar online status changes if (!ignore_status_changes && mAvatarId.notNull()) LLAvatarTracker::instance().addParticularFriendObserver(mAvatarId, this); - // Set avatar name. - gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2, _3)); + if (is_resident) + { + mAvatarIcon->setValue(id); + + // Set avatar name. + gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2, _3)); + } } void LLAvatarListItem::showLastInteractionTime(bool show) diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 2db6484a30..3ba2c7a3e3 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -100,7 +100,7 @@ public: void setName(const std::string& name); void setHighlight(const std::string& highlight); void setState(EItemState item_style); - void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false); + void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false, bool is_resident = true); void setLastInteractionTime(U32 secs_since); //Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly void setShowProfileBtn(bool show); diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 01a699506e..d1e99fbd61 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -451,8 +451,8 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void* LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); - // these are not results from our last request - if (query_id != floater->mQueryID) + // floater is closed or these are not results from our last request + if (NULL == floater || query_id != floater->mQueryID) { return; } diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index 97ebab3425..560cc29080 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -113,7 +113,6 @@ BOOL LLFloaterEvent::postBuild() mTBDuration = getChild<LLTextBox>("event_duration"); mTBDesc = getChild<LLExpandableTextBox>("event_desc"); - mTBDesc->setEnabled(FALSE); mTBRunBy = getChild<LLTextBox>("event_runby"); mTBLocation = getChild<LLTextBox>("event_location"); diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index eeea71cc4c..d6732a9d5c 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -104,6 +104,10 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: LLViewerObject* objectp = gObjectList.findObject(source_id); std::string floater_label; + // Handle /me messages. + std::string prefix = utf8mesg.substr(0, 4); + std::string message = (prefix == "/me " || prefix == "/me'") ? user_name + utf8mesg.substr(3) : utf8mesg; + if (objectp) { objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI)); @@ -121,14 +125,14 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: LLFloaterScriptDebugOutput* floaterp = LLFloaterReg::getTypedInstance<LLFloaterScriptDebugOutput>("script_debug_output", LLUUID::null); if (floaterp) { - floaterp->addLine(utf8mesg, user_name, color); + floaterp->addLine(message, user_name, color); } // add to specific script instance floater floaterp = LLFloaterReg::getTypedInstance<LLFloaterScriptDebugOutput>("script_debug_output", source_id); if (floaterp) { - floaterp->addLine(utf8mesg, floater_label, color); + floaterp->addLine(message, floater_label, color); } } diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 3ec8d11fb0..19dbc564d1 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -499,8 +499,8 @@ void LLIMFloater::setVisible(BOOL visible) { //only if floater was construced and initialized from xml updateMessages(); - //prevent steal focus when IM opened in multitab mode - if (!isChatMultiTab()) + //prevent stealing focus when opening a background IM tab (EXT-5387, checking focus for EXT-6781) + if (!isChatMultiTab() || hasFocus()) { mInputEditor->setFocus(TRUE); } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 0f22a50093..0ddc4efc81 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -200,7 +200,8 @@ void LLFloaterMove::setFlyingMode(BOOL fly) if (instance) { instance->setFlyingModeImpl(fly); - instance->showModeButtons(!fly); + BOOL is_sitting = isAgentAvatarValid() && gAgentAvatarp->isSitting(); + instance->showModeButtons(!fly && !is_sitting); } if (fly) { @@ -696,6 +697,7 @@ void LLPanelStandStopFlying::onStandButtonClick() gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); setFocus(FALSE); // EXT-482 + mStandButton->setVisible(FALSE); // force visibility changing to avoid seeing Stand & Move buttons at once. } void LLPanelStandStopFlying::onStopFlyingButtonClick() diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index ab2f9284f7..83244edb8e 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -31,7 +31,6 @@ #include "llviewerprecompiledheaders.h" -//LLPanelPrimMediaControls #include "llagent.h" #include "llagentcamera.h" #include "llparcel.h" @@ -65,9 +64,12 @@ #include "llvovolume.h" #include "llweb.h" #include "llwindow.h" - #include "llfloatertools.h" // to enable hide if build tools are up +#if defined(LL_DARWIN) || (defined(LL_WINDOW) && (! defined(LL_RELEASE_FOR_DOWNLOAD)) ) +#define PER_MEDIA_VOLUME +#endif + // Functions pulled from pipeline.cpp glh::matrix4f glh_get_current_modelview(); glh::matrix4f glh_get_current_projection(); @@ -464,11 +466,18 @@ void LLPanelPrimMediaControls::updateShape() mSkipBackCtrl->setVisible(FALSE); mSkipBackCtrl->setEnabled(FALSE); +#ifdef PER_MEDIA_VOLUME + mVolumeCtrl->setVisible(has_focus); + mVolumeCtrl->setEnabled(has_focus); + mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); + mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); +#else mVolumeCtrl->setVisible(FALSE); mVolumeSliderCtrl->setVisible(FALSE); mVolumeCtrl->setEnabled(FALSE); mVolumeSliderCtrl->setEnabled(FALSE); - +#endif + if (mMediaPanelScroll) { mMediaPanelScroll->setVisible(has_focus); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 026be882ed..53f92f7ad1 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -50,6 +50,145 @@ static const LLAvatarItemAgentOnTopComparator AGENT_ON_TOP_NAME_COMPARATOR; +// See EXT-4301. +/** + * class LLAvalineUpdater - observe the list of voice participants in session and check + * presence of Avaline Callers among them. + * + * LLAvalineUpdater is a LLVoiceClientParticipantObserver. It provides two kinds of validation: + * - whether Avaline caller presence among participants; + * - whether watched Avaline caller still exists in voice channel. + * Both validations have callbacks which will notify subscriber if any of event occur. + * + * @see findAvalineCaller() + * @see checkIfAvalineCallersExist() + */ +class LLAvalineUpdater : public LLVoiceClientParticipantObserver +{ +public: + typedef boost::function<void(const LLUUID& speaker_id)> process_avaline_callback_t; + + LLAvalineUpdater(process_avaline_callback_t found_cb, process_avaline_callback_t removed_cb) + : mAvalineFoundCallback(found_cb) + , mAvalineRemovedCallback(removed_cb) + { + LLVoiceClient::getInstance()->addObserver(this); + } + ~LLAvalineUpdater() + { + if (LLVoiceClient::instanceExists()) + { + LLVoiceClient::getInstance()->removeObserver(this); + } + } + + /** + * Adds UUID of Avaline caller to watch. + * + * @see checkIfAvalineCallersExist(). + */ + void watchAvalineCaller(const LLUUID& avaline_caller_id) + { + mAvalineCallers.insert(avaline_caller_id); + } + + void onChange() + { + uuid_set_t participant_uuids; + LLVoiceClient::getInstance()->getParticipantsUUIDSet(participant_uuids); + + + // check whether Avaline caller exists among voice participants + // and notify Participant List + findAvalineCaller(participant_uuids); + + // check whether watched Avaline callers still present among voice participant + // and remove if absents. + checkIfAvalineCallersExist(participant_uuids); + } + +private: + typedef std::set<LLUUID> uuid_set_t; + + /** + * Finds Avaline callers among voice participants and calls mAvalineFoundCallback. + * + * When Avatar is in group call with Avaline caller and then ends call Avaline caller stays + * in Group Chat floater (exists in LLSpeakerMgr). If Avatar starts call with that group again + * Avaline caller is added to voice channel AFTER Avatar is connected to group call. + * But Voice Control Panel (VCP) is filled from session LLSpeakerMgr and there is no information + * if a speaker is Avaline caller. + * + * In this case this speaker is created as avatar and will be recreated when it appears in + * Avatar's Voice session. + * + * @see LLParticipantList::onAvalineCallerFound() + */ + void findAvalineCaller(const uuid_set_t& participant_uuids) + { + uuid_set_t::const_iterator it = participant_uuids.begin(), it_end = participant_uuids.end(); + + for(; it != it_end; ++it) + { + const LLUUID& participant_id = *it; + if (!LLVoiceClient::getInstance()->isParticipantAvatar(participant_id)) + { + LL_DEBUGS("Avaline") << "Avaline caller found among voice participants: " << participant_id << LL_ENDL; + + if (mAvalineFoundCallback) + { + mAvalineFoundCallback(participant_id); + } + } + } + } + + /** + * Finds Avaline callers which are not anymore among voice participants and calls mAvalineRemovedCallback. + * + * The problem is when Avaline caller ends a call it is removed from Voice Client session but + * still exists in LLSpeakerMgr. Server does not send such information. + * This method implements a HUCK to notify subscribers that watched Avaline callers by class + * are not anymore in the call. + * + * @see LLParticipantList::onAvalineCallerRemoved() + */ + void checkIfAvalineCallersExist(const uuid_set_t& participant_uuids) + { + uuid_set_t::iterator it = mAvalineCallers.begin(); + uuid_set_t::const_iterator participants_it_end = participant_uuids.end(); + + while (it != mAvalineCallers.end()) + { + const LLUUID participant_id = *it; + LL_DEBUGS("Avaline") << "Check avaline caller: " << participant_id << LL_ENDL; + bool not_found = participant_uuids.find(participant_id) == participants_it_end; + if (not_found) + { + LL_DEBUGS("Avaline") << "Watched Avaline caller is not found among voice participants: " << participant_id << LL_ENDL; + + // notify Participant List + if (mAvalineRemovedCallback) + { + mAvalineRemovedCallback(participant_id); + } + + // remove from the watch list + mAvalineCallers.erase(it++); + } + else + { + ++it; + } + } + } + + process_avaline_callback_t mAvalineFoundCallback; + process_avaline_callback_t mAvalineRemovedCallback; + + uuid_set_t mAvalineCallers; +}; + LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list, bool use_context_menu/* = true*/, bool exclude_agent /*= true*/, bool can_toggle_icons /*= true*/): mSpeakerMgr(data_source), @@ -59,6 +198,9 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av , mExcludeAgent(exclude_agent) , mValidateSpeakerCallback(NULL) { + mAvalineUpdater = new LLAvalineUpdater(boost::bind(&LLParticipantList::onAvalineCallerFound, this, _1), + boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1)); + mSpeakerAddListener = new SpeakerAddListener(*this); mSpeakerRemoveListener = new SpeakerRemoveListener(*this); mSpeakerClearListener = new SpeakerClearListener(*this); @@ -137,6 +279,9 @@ LLParticipantList::~LLParticipantList() } mAvatarList->setContextMenu(NULL); + mAvatarList->setComparator(NULL); + + delete mAvalineUpdater; } void LLParticipantList::setSpeakingIndicatorsVisible(BOOL visible) @@ -210,6 +355,55 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param) } } +/* +Seems this method is not necessary after onAvalineCallerRemoved was implemented; + +It does nothing because list item is always created with correct class type for Avaline caller. +For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client +session. +This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call. + +Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself. +Asked in EXT-4301. +*/ +void LLParticipantList::onAvalineCallerFound(const LLUUID& participant_id) +{ + LLPanel* item = mAvatarList->getItemByValue(participant_id); + + if (NULL == item) + { + LL_WARNS("Avaline") << "Something wrong. Unable to find item for: " << participant_id << LL_ENDL; + return; + } + + if (typeid(*item) == typeid(LLAvalineListItem)) + { + LL_DEBUGS("Avaline") << "Avaline caller has already correct class type for: " << participant_id << LL_ENDL; + // item representing an Avaline caller has a correct type already. + return; + } + + LL_DEBUGS("Avaline") << "remove item from the list and re-add it: " << participant_id << LL_ENDL; + + // remove UUID from LLAvatarList::mIDs to be able add it again. + uuid_vec_t& ids = mAvatarList->getIDs(); + uuid_vec_t::iterator pos = std::find(ids.begin(), ids.end(), participant_id); + ids.erase(pos); + + // remove item directly + mAvatarList->removeItem(item); + + // re-add avaline caller with a correct class instance. + addAvatarIDExceptAgent(participant_id); +} + +void LLParticipantList::onAvalineCallerRemoved(const LLUUID& participant_id) +{ + LL_DEBUGS("Avaline") << "Removing avaline caller from the list: " << participant_id << LL_ENDL; + + mSpeakerMgr->removeAvalineSpeaker(participant_id); +} + void LLParticipantList::setSortOrder(EParticipantSortOrder order) { if ( mSortOrder != order ) @@ -355,8 +549,20 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id) if (mExcludeAgent && gAgent.getID() == avatar_id) return; if (mAvatarList->contains(avatar_id)) return; - mAvatarList->getIDs().push_back(avatar_id); - mAvatarList->setDirty(); + bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(avatar_id); + + if (is_avatar) + { + mAvatarList->getIDs().push_back(avatar_id); + mAvatarList->setDirty(); + } + else + { + LLVoiceClient::participantState *participant = LLVoiceClient::getInstance()->findParticipantByID(avatar_id); + + mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), participant ? participant->mAccountName : LLTrans::getString("AvatarNameWaiting")); + mAvalineUpdater->watchAvalineCaller(avatar_id); + } adjustParticipant(avatar_id); } diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 953dff4551..9e5a2cbc1f 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -38,6 +38,7 @@ class LLSpeakerMgr; class LLAvatarList; class LLUICtrl; +class LLAvalineUpdater; class LLParticipantList { @@ -235,6 +236,9 @@ class LLParticipantList void onAvatarListDoubleClicked(LLUICtrl* ctrl); void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param); + void onAvalineCallerFound(const LLUUID& participant_id); + void onAvalineCallerRemoved(const LLUUID& participant_id); + /** * Adjusts passed participant to work properly. * @@ -272,4 +276,5 @@ class LLParticipantList LLPointer<LLAvatarItemRecentSpeakerComparator> mSortByRecentSpeakers; validate_speaker_callback_t mValidateSpeakerCallback; + LLAvalineUpdater* mAvalineUpdater; }; diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 4573520647..ba6a44dff4 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -84,7 +84,7 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c bool LLSpeaker::isInVoiceChannel() { - return mStatus == LLSpeaker::STATUS_VOICE_ACTIVE || mStatus == LLSpeaker::STATUS_MUTED; + return mStatus <= LLSpeaker::STATUS_VOICE_ACTIVE || mStatus == LLSpeaker::STATUS_MUTED; } LLSpeakerUpdateModeratorEvent::LLSpeakerUpdateModeratorEvent(LLSpeaker* source) diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index b924fb2f2c..2bb160b7ce 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -234,6 +234,14 @@ public: LLVoiceChannel* getVoiceChannel() { return mVoiceChannel; } const LLUUID getSessionID(); + /** + * Removes avaline speaker. + * + * This is a HACK due to server does not send information that Avaline caller ends call. + * It can be removed when server is updated. See EXT-4301 for details + */ + bool removeAvalineSpeaker(const LLUUID& speaker_id) { return removeSpeaker(speaker_id); } + protected: virtual void updateSpeakerList(); void setSpeakerNotInChannel(LLSpeaker* speackerp); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index dd4192f270..58138d9917 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1286,7 +1286,30 @@ void LLViewerMedia::setOpenIDCookie() { if(!sOpenIDCookie.empty()) { - getCookieStore()->setCookiesFromHost(sOpenIDCookie, sOpenIDURL.mAuthority); + // The LLURL can give me the 'authority', which is of the form: [username[:password]@]hostname[:port] + // We want just the hostname for the cookie code, but LLURL doesn't seem to have a way to extract that. + // We therefore do it here. + std::string authority = sOpenIDURL.mAuthority; + std::string::size_type host_start = authority.find('@'); + if(host_start == std::string::npos) + { + // no username/password + host_start = 0; + } + else + { + // Hostname starts after the @. + // (If the hostname part is empty, this may put host_start at the end of the string. In that case, it will end up passing through an empty hostname, which is correct.) + ++host_start; + } + std::string::size_type host_end = authority.rfind(':'); + if((host_end == std::string::npos) || (host_end < host_start)) + { + // no port + host_end = authority.size(); + } + + getCookieStore()->setCookiesFromHost(sOpenIDCookie, authority.substr(host_start, host_end - host_start)); } } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 0488c9ae3b..832a6283ab 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -32,6 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "llviewermessage.h" +#include "boost/lexical_cast.hpp" #include "llanimationstates.h" #include "llaudioengine.h" @@ -115,6 +116,11 @@ #include "llnotificationmanager.h" // +#if LL_MSVC +// disable boost::lexical_cast warning +#pragma warning (disable:4702) +#endif + // // Constants // @@ -1856,6 +1862,53 @@ protected: } }; +static void parse_lure_bucket(const std::string& bucket, + U64& region_handle, + LLVector3& pos, + LLVector3& look_at, + U8& region_access) +{ + // tokenize the bucket + typedef boost::tokenizer<boost::char_separator<char> > tokenizer; + boost::char_separator<char> sep("|", "", boost::keep_empty_tokens); + tokenizer tokens(bucket, sep); + tokenizer::iterator iter = tokens.begin(); + + S32 gx = boost::lexical_cast<S32>((*(iter)).c_str()); + S32 gy = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 rx = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 ry = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 rz = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 lx = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 ly = boost::lexical_cast<S32>((*(++iter)).c_str()); + S32 lz = boost::lexical_cast<S32>((*(++iter)).c_str()); + + // Grab region access + region_access = SIM_ACCESS_MIN; + if (++iter != tokens.end()) + { + std::string access_str((*iter).c_str()); + LLStringUtil::trim(access_str); + if ( access_str == "A" ) + { + region_access = SIM_ACCESS_ADULT; + } + else if ( access_str == "M" ) + { + region_access = SIM_ACCESS_MATURE; + } + else if ( access_str == "PG" ) + { + region_access = SIM_ACCESS_PG; + } + } + + pos.setVec((F32)rx, (F32)ry, (F32)rz); + look_at.setVec((F32)lx, (F32)ly, (F32)lz); + + region_handle = to_region_handle(gx, gy); +} + void process_improved_im(LLMessageSystem *msg, void **user_data) { if (gNoRender) @@ -2487,10 +2540,19 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } else { + LLVector3 pos, look_at; + U64 region_handle; + U8 region_access; + std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size); + parse_lure_bucket(region_info, region_handle, pos, look_at, region_access); + + std::string region_access_str = LLViewerRegion::accessToString(region_access); + LLSD args; // *TODO: Translate -> [FIRST] [LAST] (maybe) args["NAME_SLURL"] = LLSLURL::buildCommand("agent", from_id, "about"); args["MESSAGE"] = message; + args["MATURITY"] = region_access_str; LLSD payload; payload["from_id"] = from_id; payload["lure_id"] = session_id; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 8bf4c0ab96..33ea0199b6 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -658,6 +658,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mNameMute(FALSE), mRenderGroupTitles(sRenderGroupTitles), mNameAppearance(FALSE), + mNameCloud(FALSE), mFirstTEMessageReceived( FALSE ), mFirstAppearanceMessageReceived( FALSE ), mCulled( FALSE ), @@ -2766,25 +2767,20 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) if (mNameText.notNull() && firstname && lastname) { - BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end(); - BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end(); - BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end(); - BOOL is_muted; - if (isSelf()) - { - is_muted = FALSE; - } - else - { - is_muted = LLMuteList::getInstance()->isMuted(getID()); - } + const BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end(); + const BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end(); + const BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end(); + const BOOL is_muted = isSelf() ? FALSE : LLMuteList::getInstance()->isMuted(getID()); + const BOOL is_cloud = getIsCloud(); if (mNameString.empty() || new_name || (!title && !mTitle.empty()) || (title && mTitle != title->getString()) || (is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute) - || is_appearance != mNameAppearance) + || is_appearance != mNameAppearance + || is_cloud != mNameCloud + ) { std::string line; if (!sRenderGroupTitles) @@ -2838,7 +2834,12 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) } line += ")"; } - if (is_appearance) + if (is_cloud) + { + line += "\n"; + line += "(" + LLTrans::getString("LoadingData") + ")"; + } + else if (is_appearance) { line += "\n"; line += LLTrans::getString("AvatarEditingAppearance"); @@ -2847,6 +2848,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) mNameBusy = is_busy; mNameMute = is_muted; mNameAppearance = is_appearance; + mNameCloud = is_cloud; mTitle = title ? title->getString() : ""; LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR); mNameString = utf8str_to_wstring(line); @@ -5939,27 +5941,29 @@ BOOL LLVOAvatar::isVisible() const && (mDrawable->isVisible() || mIsDummy); } -// call periodically to keep isFullyLoaded up to date. -// returns true if the value has changed. -BOOL LLVOAvatar::updateIsFullyLoaded() +// Determine if we have enough avatar data to render +BOOL LLVOAvatar::getIsCloud() { - // a "heuristic" to determine if we have enough avatar data to render - // (to avoid rendering a "Ruth" - DEV-3168) - BOOL loading = FALSE; - - // do we have a shape? + // Do we have a shape? if (visualParamWeightsAreDefault()) { - loading = TRUE; + return TRUE; } if (!isTextureDefined(TEX_LOWER_BAKED) || !isTextureDefined(TEX_UPPER_BAKED) || !isTextureDefined(TEX_HEAD_BAKED)) { - loading = TRUE; + return TRUE; } - + return FALSE; +} + +// call periodically to keep isFullyLoaded up to date. +// returns true if the value has changed. +BOOL LLVOAvatar::updateIsFullyLoaded() +{ + const BOOL loading = getIsCloud(); updateRuthTimer(loading); return processFullyLoadedChange(loading); } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index b0535a4a26..d0ad2b727b 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -247,7 +247,8 @@ public: public: BOOL isFullyLoaded() const; protected: - virtual BOOL updateIsFullyLoaded(); + virtual BOOL getIsCloud(); + BOOL updateIsFullyLoaded(); BOOL processFullyLoadedChange(bool loading); void updateRuthTimer(bool loading); F32 calcMorphAmount(); @@ -829,6 +830,7 @@ private: BOOL mNameBusy; BOOL mNameMute; BOOL mNameAppearance; + BOOL mNameCloud; BOOL mRenderGroupTitles; //-------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 8b87254f81..7473adda1f 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1697,22 +1697,20 @@ void LLVOAvatarSelf::dumpTotalLocalTextureByteCount() llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl; } -BOOL LLVOAvatarSelf::updateIsFullyLoaded() +BOOL LLVOAvatarSelf::getIsCloud() { - BOOL loading = FALSE; - // do we have our body parts? if (gAgentWearables.getWearableCount(WT_SHAPE) == 0 || gAgentWearables.getWearableCount(WT_HAIR) == 0 || gAgentWearables.getWearableCount(WT_EYES) == 0 || gAgentWearables.getWearableCount(WT_SKIN) == 0) { - loading = TRUE; + return TRUE; } if (!isTextureDefined(TEX_HAIR, 0)) { - loading = TRUE; + return TRUE; } if (!mPreviousFullyLoaded) @@ -1720,13 +1718,13 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded() if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_LOWER].mTexLayerSet) && (!isTextureDefined(TEX_LOWER_BAKED, 0))) { - loading = TRUE; + return TRUE; } if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_UPPER].mTexLayerSet) && (!isTextureDefined(TEX_UPPER_BAKED, 0))) { - loading = TRUE; + return TRUE; } for (U32 i = 0; i < mBakedTextureDatas.size(); i++) @@ -1734,23 +1732,23 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded() if (i == BAKED_SKIRT && !isWearingWearableType(WT_SKIRT)) continue; - BakedTextureData& texture_data = mBakedTextureDatas[i]; + const BakedTextureData& texture_data = mBakedTextureDatas[i]; if (!isTextureDefined(texture_data.mTextureIndex, 0)) continue; // Check for the case that texture is defined but not sufficiently loaded to display anything. - LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 ); + const LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 ); if (!baked_img || !baked_img->hasGLTexture()) { - loading = TRUE; + return TRUE; } - } } - return processFullyLoadedChange(loading); + return FALSE; } + const LLUUID& LLVOAvatarSelf::grabLocalTexture(ETextureIndex type, U32 index) const { if (canGrabLocalTexture(type, index)) diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 4856e82275..337d445eac 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -122,7 +122,7 @@ public: // Loading state //-------------------------------------------------------------------- public: - /*virtual*/ BOOL updateIsFullyLoaded(); + /*virtual*/ BOOL getIsCloud(); private: //-------------------------------------------------------------------- diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 0c37bb6eb1..151180aae7 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -900,14 +900,32 @@ void LLWorldMapView::drawFrustum() // fade out in distance. gGL.begin( LLRender::TRIANGLES ); { - LLVector2 cam_lookat(LLViewerCamera::instance().getAtAxis().mV[VX], LLViewerCamera::instance().getAtAxis().mV[VY]); - LLVector2 cam_left(LLViewerCamera::instance().getLeftAxis().mV[VX], LLViewerCamera::instance().getLeftAxis().mV[VY]); + // get camera look at and left axes + LLVector3 at_axis = LLViewerCamera::instance().getAtAxis(); + LLVector3 left_axis = LLViewerCamera::instance().getLeftAxis(); + + // grab components along XY plane + LLVector2 cam_lookat(at_axis.mV[VX], at_axis.mV[VY]); + LLVector2 cam_left(left_axis.mV[VX], left_axis.mV[VY]); + + // but, when looking near straight up or down... + if (is_approx_zero(cam_lookat.magVecSquared())) + { + //...just fall back to looking down the x axis + cam_lookat = LLVector2(1.f, 0.f); // x axis + cam_left = LLVector2(0.f, 1.f); // y axis + } + + // normalize to unit length + cam_lookat.normVec(); + cam_left.normVec(); gGL.color4f(1.f, 1.f, 1.f, 0.25f); gGL.vertex2f( 0, 0 ); gGL.color4f(1.f, 1.f, 1.f, 0.02f); + // use 2d camera vectors to render frustum triangle LLVector2 vert = cam_lookat * far_clip_pixels + cam_left * half_width_pixels; gGL.vertex2f(vert.mV[VX], vert.mV[VY]); diff --git a/indra/newview/res/resource.h b/indra/newview/res/resource.h index da27e47dfb..6cabd5e10b 100644 --- a/indra/newview/res/resource.h +++ b/indra/newview/res/resource.h @@ -170,14 +170,12 @@ #define IDC_COMBO1 1138 #define IDC_COMBO_FARM 1138 #define ID_TESTMENU_TEST 40001 -#define IDC_STATIC -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 159 -#define _APS_NEXT_RESOURCE_VALUE 167 +#define _APS_NEXT_RESOURCE_VALUE 173 #define _APS_NEXT_COMMAND_VALUE 40002 #define _APS_NEXT_CONTROL_VALUE 1139 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur Binary files differnew file mode 100644 index 0000000000..a1bc278116 --- /dev/null +++ b/indra/newview/res/toolbuy.cur diff --git a/indra/newview/res/toolopen.cur b/indra/newview/res/toolopen.cur Binary files differnew file mode 100644 index 0000000000..a72cdfe4c0 --- /dev/null +++ b/indra/newview/res/toolopen.cur diff --git a/indra/newview/res/toolsit.cur b/indra/newview/res/toolsit.cur Binary files differnew file mode 100644 index 0000000000..6327bdb281 --- /dev/null +++ b/indra/newview/res/toolsit.cur diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index 6a1c1cb377..12a09392f6 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -119,6 +119,9 @@ TOOLPIPETTE CURSOR "toolpipette.cur" TOOLPLAY CURSOR "toolplay.cur" TOOLPAUSE CURSOR "toolpause.cur" TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" +TOOLBUY CURSOR "toolbuy.cur" +TOOLOPEN CURSOR "toolopen.cur" +TOOLSIT CURSOR "toolsit.cur" ///////////////////////////////////////////////////////////////////////////// // diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index c2f25c84b8..97387e9e87 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -1725,7 +1725,7 @@ Inventarobjekt(e) verschieben? <notification name="ClickActionNotPayable"> Achtung: Die Klickaktion „Objekt bezahlen" wurde eingestellt. Diese funktioniert jedoch nicht, wenn ein Skript mit einer Geldtransaktion () hinzugefügt wird. <form name="form"> - <ignore name="ignore" text="I habe die Aktion „Objekt bezahlen" eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/> + <ignore name="ignore" text="Ich habe die Aktion „Objekt bezahlen" eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/> </form> </notification> <notification name="OpenObjectCannotCopy"> diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml index 803bd1b5ab..0e182fa417 100644 --- a/indra/newview/skins/default/xui/de/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml @@ -22,7 +22,7 @@ [AMT] L$ </panel.string> <button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand"/> - <button label=" " name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/> + <button label="Kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/> <text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)"> 24:00 H PST </text> diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index b8156a174d..6e1bb8fcd0 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -6,7 +6,7 @@ name="Joystick" help_topic="joystick" title="JOYSTICK CONFIGURATION" - width="550"> + width="569"> <floater.string name="NoDevice"> no device detected @@ -148,7 +148,7 @@ halign="right" height="10" layout="topleft" - left="12" + left="37" mouse_opaque="false" name="Control Modes:" top="110" @@ -161,7 +161,7 @@ halign="center" label="Avatar" layout="topleft" - left="125" + left="150" name="JoystickAvatarEnabled" width="60" /> <check_box @@ -170,7 +170,7 @@ halign="center" label="Build" layout="topleft" - left="194" + left="219" name="JoystickBuildEnabled" width="60" /> <check_box @@ -179,14 +179,14 @@ halign="center" label="Flycam" layout="topleft" - left="262" + left="289" name="JoystickFlycamEnabled" width="60" /> <stat_view height="250" label="Joystick Monitor" layout="topleft" - left="340" + left="359" name="axis_view" show_label="true" top="142" @@ -250,9 +250,9 @@ bottom="144" halign="right" layout="topleft" - left="20" + left="3" name="XScale" - width="94"> + width="140"> X Scale </text> <spinner @@ -261,7 +261,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="125" + left="150" max_val="50" min_val="-50" name="AvatarAxisScale1" @@ -272,7 +272,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale1" @@ -283,7 +283,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale1" @@ -294,9 +294,9 @@ bottom="164" halign="right" layout="topleft" - left="20" + left="3" name="YScale" - width="94"> + width="140"> Y Scale </text> <spinner @@ -305,7 +305,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="125" + left="150" max_val="50" min_val="-50" name="AvatarAxisScale2" @@ -316,7 +316,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale2" @@ -327,7 +327,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale2" @@ -338,9 +338,9 @@ bottom="184" halign="right" layout="topleft" - left="20" + left="3" name="ZScale" - width="94"> + width="140"> Z Scale </text> <spinner @@ -349,7 +349,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="125" + left="150" max_val="50" min_val="-50" name="AvatarAxisScale0" @@ -360,7 +360,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale0" @@ -371,7 +371,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale0" @@ -382,9 +382,9 @@ bottom="204" halign="right" layout="topleft" - left="20" + left="3" name="PitchScale" - width="94"> + width="140"> Pitch Scale </text> <spinner @@ -393,7 +393,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="125" + left="150" max_val="1024" min_val="-1024" name="AvatarAxisScale4" @@ -404,7 +404,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale4" @@ -415,7 +415,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale4" @@ -426,9 +426,9 @@ bottom="224" halign="right" layout="topleft" - left="20" + left="3" name="YawScale" - width="94"> + width="140"> Yaw Scale </text> <spinner @@ -437,7 +437,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="125" + left="150" max_val="1024" min_val="-1024" name="AvatarAxisScale5" @@ -448,7 +448,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale5" @@ -459,7 +459,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale5" @@ -470,9 +470,9 @@ bottom="244" halign="right" layout="topleft" - left="20" + left="3" name="RollScale" - width="94"> + width="140"> Roll Scale </text> <spinner @@ -481,7 +481,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="195" + left="220" max_val="1024" min_val="-1024" name="BuildAxisScale3" @@ -492,7 +492,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale3" @@ -503,9 +503,9 @@ bottom="274" halign="right" layout="topleft" - left="20" + left="3" name="XDeadZone" - width="94"> + width="140"> X Dead Zone </text> <spinner @@ -515,7 +515,7 @@ increment="0.01" label_width="0" layout="topleft" - left="125" + left="150" name="AvatarAxisDeadZone1" width="56" /> <spinner @@ -525,7 +525,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone1" width="56" /> <spinner @@ -535,7 +535,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone1" width="56" /> <text @@ -544,9 +544,9 @@ bottom="294" halign="right" layout="topleft" - left="20" + left="3" name="YDeadZone" - width="94"> + width="140"> Y Dead Zone </text> <spinner @@ -556,7 +556,7 @@ increment="0.01" label_width="0" layout="topleft" - left="125" + left="150" name="AvatarAxisDeadZone2" width="56" /> <spinner @@ -566,7 +566,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone2" width="56" /> <spinner @@ -576,7 +576,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone2" width="56" /> <text @@ -585,9 +585,9 @@ bottom="314" halign="right" layout="topleft" - left="20" + left="3" name="ZDeadZone" - width="94"> + width="140"> Z Dead Zone </text> <spinner @@ -597,7 +597,7 @@ increment="0.01" label_width="0" layout="topleft" - left="125" + left="150" name="AvatarAxisDeadZone0" width="56" /> <spinner @@ -607,7 +607,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone0" width="56" /> <spinner @@ -617,7 +617,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone0" width="56" /> <text @@ -626,9 +626,9 @@ bottom="334" halign="right" layout="topleft" - left="20" + left="2" name="PitchDeadZone" - width="94"> + width="140"> Pitch Dead Zone </text> <spinner @@ -638,7 +638,7 @@ increment="0.01" label_width="0" layout="topleft" - left="125" + left="150" name="AvatarAxisDeadZone4" width="56" /> <spinner @@ -648,7 +648,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone4" width="56" /> <spinner @@ -658,7 +658,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone4" width="56" /> <text @@ -667,9 +667,9 @@ bottom="354" halign="right" layout="topleft" - left="20" + left="3" name="YawDeadZone" - width="94"> + width="140"> Yaw Dead Zone </text> <spinner @@ -679,7 +679,7 @@ increment="0.01" label_width="0" layout="topleft" - left="125" + left="150" name="AvatarAxisDeadZone5" width="56" /> <spinner @@ -689,7 +689,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone5" width="56" /> <spinner @@ -699,7 +699,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone5" width="56" /> <text @@ -708,9 +708,9 @@ bottom="374" halign="right" layout="topleft" - left="20" + left="3" name="RollDeadZone" - width="94"> + width="140"> Roll Dead Zone </text> <spinner @@ -720,7 +720,7 @@ increment="0.01" label_width="0" layout="topleft" - left="195" + left="220" name="BuildAxisDeadZone3" width="56" /> <spinner @@ -730,7 +730,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone3" width="56" /> <text @@ -739,9 +739,9 @@ bottom="402" halign="right" layout="topleft" - left="20" + left="3" name="Feathering" - width="94"> + width="140"> Feathering </text> <slider @@ -752,7 +752,7 @@ increment="1" initial_value="0.7" layout="topleft" - left="116" + left="141" max_val="32" min_val="1" name="AvatarFeathering" @@ -795,9 +795,9 @@ bottom="430" halign="right" layout="topleft" - left="20" + left="3" name="ZoomScale2" - width="94"> + width="140"> Zoom Scale </text> <spinner @@ -806,7 +806,7 @@ decimal_digits="2" label_width="0" layout="topleft" - left="265" + left="290" max_val="1024" min_val="-1024" name="FlycamAxisScale6" @@ -817,9 +817,9 @@ bottom="450" halign="right" layout="topleft" - left="20" + left="3" name="ZoomDeadZone" - width="96"> + width="140"> Zoom Dead Zone </text> <spinner @@ -829,7 +829,7 @@ increment="0.01" label_width="0" layout="topleft" - left="265" + left="290" name="FlycamAxisDeadZone6" width="56" /> <button @@ -837,10 +837,10 @@ height="22" label="SpaceNavigator Defaults" layout="topleft" - left="340" + left="359" name="SpaceNavigatorDefaults" top="429" - width="184" /> + width="200" /> <button follows="right|bottom" height="20" @@ -850,7 +850,7 @@ left_delta="0" name="ok_btn" top_pad="9" - width="90" /> + width="98" /> <button follows="right|bottom" height="20" @@ -860,5 +860,5 @@ left_pad="4" name="cancel_btn" top_delta="0" - width="90" /> + width="98" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml index 4909b8988f..ff454e3ebf 100644 --- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml @@ -44,7 +44,7 @@ left_delta="0" name="NextOwnerLabel" top_pad="5" - width="150"> + width="200"> Next owner can: </text> <check_box diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index 291f8f6f51..233ab2c1b2 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -496,7 +496,7 @@ top_delta="-1" name="DoSearch" tool_tip="Search for region" - width="58"> + width="62"> <button.commit_callback function="WMap.Location" /> </button> diff --git a/indra/newview/skins/default/xui/en/menu_people_groups.xml b/indra/newview/skins/default/xui/en/menu_people_groups.xml index afa680139d..8f89d37dbb 100644 --- a/indra/newview/skins/default/xui/en/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/en/menu_people_groups.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <menu name="menu_group_plus" left="0" bottom="0" visible="false" - mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false"> + mouse_opaque="false" opaque="true" color="MenuDefaultBgColor"> <menu_item_call label="View Info" name="View Info"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 34d55caf3c..25e10114b0 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5165,7 +5165,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th type="offer"> [NAME_SLURL] has offered to teleport you to their location: -[MESSAGE] +[MESSAGE], ([MATURITY]) <form name="form"> <button index="0" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 7ec1ca2e2e..96c76576c0 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -119,7 +119,7 @@ commit_on_focus_lost="false" follows="right|top" halign="right" - height="22" + height="23" label="Search" layout="topleft" right="-10" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 233137a76b..8131b75b70 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -477,7 +477,7 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t label="Share" layout="topleft" name="share_btn" - width="85" /> + width="62" /> <button follows="bottom|left" left_pad="3" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index a43b244fa0..9725e9952a 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -321,6 +321,7 @@ follows="all" height="223" layout="topleft" + single_expansion="true" left="0" name="advanced_info_accordion" top_pad="10" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index eb2112c586..3ef16d2dec 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -342,7 +342,7 @@ layout="topleft" left="30" height="20" - width="120" + width="170" top_pad="20"> Show IMs in: </text> @@ -351,9 +351,9 @@ follows="left|top" layout="topleft" top_delta="0" - left="120" + left="170" height="20" - width="100" + width="130" text_color="White_25" > (requires restart) diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 70b280d7a5..76847e5af6 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -148,6 +148,8 @@ <!-- Group name: text shown for LLUUID::null --> <string name="GroupNameNone">(none)</string> + <string name="AvalineCaller">Avaline Caller [ORDER]</string> + <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. --> <string name="AssetErrorNone">No error</string> <string name="AssetErrorRequestFailed">Asset request: failed</string> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index 49bf2a7442..6118a63872 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -264,7 +264,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s [COUNT] </text> <text left="4" name="Autoreturn" width="412"> - Devolución automática de objetos de otros (en min., 0 para desactivarla): + Devolución automát. de objetos de otros (en min., 0 la desactiva): </text> <line_editor name="clean other time" right="-20"/> <text name="Object Owners:" width="150"> @@ -275,7 +275,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nombre" name="name"/> - <name_list.columns label="Número" name="count"/> + <name_list.columns label="Núm." name="count"/> <name_list.columns label="Más recientes" name="mostrecent"/> </name_list> </panel> diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml index dbd2e4f04e..2c1804bd90 100644 --- a/indra/newview/skins/default/xui/es/floater_joystick.xml +++ b/indra/newview/skins/default/xui/es/floater_joystick.xml @@ -16,7 +16,7 @@ Modos de control: </text> <check_box label="Avatar" name="JoystickAvatarEnabled"/> - <check_box label="Construir" left="192" name="JoystickBuildEnabled"/> + <check_box label="Construir" name="JoystickBuildEnabled"/> <check_box label="Flycam" name="JoystickFlycamEnabled"/> <text name="XScale"> Escala: X @@ -27,7 +27,7 @@ <text name="ZScale"> Escala: Z </text> - <text left="3" name="PitchScale" width="115"> + <text name="PitchScale"> Escala: arriba/abajo </text> <text name="YawScale"> @@ -45,10 +45,10 @@ <text name="ZDeadZone"> Zona muerta Z </text> - <text left="3" name="PitchDeadZone" width="115"> + <text name="PitchDeadZone"> Zona muerta arri./aba. </text> - <text left="3" name="YawDeadZone" width="115"> + <text name="YawDeadZone"> Zona muerta izq./der. </text> <text name="RollDeadZone"> @@ -63,7 +63,7 @@ <text name="ZoomDeadZone"> Zona muerta zoom </text> - <button font="SansSerifSmall" label="Por defecto del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/> + <button font="SansSerifSmall" label="Por defecto del SpaceNavigator" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" left="330" name="ok_btn"/> <button label="Cancelar" label_selected="Cancelar" left_delta="120" name="cancel_btn"/> <stat_view label="Monitor del joystick" name="axis_view"> diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml index 9ee7bef493..67800b2c6f 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -32,7 +32,7 @@ </text> <icons_combo_box label="'Mature'" name="access_combo"> <icons_combo_box.item label="'Adult'" name="Adult" value="42"/> - <icons_combo_box.item label="'Mature'" name="Mature" value="21"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> <icons_combo_box.item label="'PG'" name="PG" value="13"/> </icons_combo_box> <button label="Aplicar" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml index e00f9564e8..02ac21bf82 100644 --- a/indra/newview/skins/default/xui/fr/floater_joystick.xml +++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml @@ -26,7 +26,7 @@ <text name="ZScale"> Échelle des Z </text> - <text left="9" name="PitchScale" width="104"> + <text name="PitchScale"> Échelle du tangage </text> <text name="YawScale"> @@ -44,13 +44,13 @@ <text name="ZDeadZone"> Zone neutre Z </text> - <text left="4" name="PitchDeadZone" width="116"> + <text name="PitchDeadZone"> Zone neutre tangage </text> - <text name="YawDeadZone" left="10" width="104"> + <text name="YawDeadZone"> Zone neutre lacet </text> - <text name="RollDeadZone" left="10" width="104"> + <text name="RollDeadZone"> Zone neutre roulis </text> <text name="Feathering"> @@ -59,7 +59,7 @@ <text name="ZoomScale2"> Échelle du zoom </text> - <text left="6" name="ZoomDeadZone" width="120"> + <text name="ZoomDeadZone"> Zone neutre du zoom </text> <button label="Options par défaut du joystick" name="SpaceNavigatorDefaults"/> diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml index fd569a7f95..36bec80561 100644 --- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml @@ -4,7 +4,7 @@ <button label="?" label_selected="?" name="help"/> <check_box label="Partager avec le groupe" name="share_with_group"/> <check_box label="Autoriser tout le monde à copier" name="everyone_copy"/> - <text name="NextOwnerLabel" width="260"> + <text name="NextOwnerLabel"> Le prochain propriétaire pourra : </text> <check_box label="Modifier" name="next_owner_modify"/> diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml index 3eff0cfceb..3d60ded7ab 100644 --- a/indra/newview/skins/default/xui/it/floater_joystick.xml +++ b/indra/newview/skins/default/xui/it/floater_joystick.xml @@ -16,7 +16,7 @@ Modalità di controllo: </text> <check_box label="Avatar" name="JoystickAvatarEnabled"/> - <check_box label="Costruire" left="192" name="JoystickBuildEnabled"/> + <check_box label="Costruire" name="JoystickBuildEnabled"/> <check_box label="Camera dall'alto" name="JoystickFlycamEnabled"/> <text name="XScale"> Regolazione X @@ -27,13 +27,13 @@ <text name="ZScale"> Regolazione Z </text> - <text left="3" name="PitchScale" width="112"> + <text name="PitchScale"> Regolazione: Pitch </text> - <text left="3" name="YawScale" width="112"> + <text name="YawScale"> Regolazione: Yaw </text> - <text left="3" name="RollScale" width="112"> + <text name="RollScale"> Regolazione: Roll </text> <text name="XDeadZone"> @@ -45,22 +45,22 @@ <text name="ZDeadZone"> Angolo morto Z </text> - <text left="3" name="PitchDeadZone" width="112"> + <text name="PitchDeadZone"> Angolo morto: Pitch </text> - <text left="3" name="YawDeadZone" width="112"> + <text name="YawDeadZone"> Angolo morto: Yaw </text> - <text left="3" name="RollDeadZone" width="112"> + <text name="RollDeadZone"> Angolo morto: Roll </text> <text name="Feathering"> Smussamento </text> - <text left="6" name="ZoomScale2" width="135"> + <text name="ZoomScale2"> Regolazione dello zoom </text> - <text left="6" name="ZoomDeadZone" width="135"> + <text name="ZoomDeadZone" width="140"> Angolo morto dello zoom </text> <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/> diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml index ef6f85390a..1769ef748d 100644 --- a/indra/newview/skins/default/xui/it/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml @@ -6,23 +6,23 @@ <panel.string name="want_apply_text"> Vuoi salvare le modifiche? </panel.string> - <tab_container height="164" name="roles_tab_container"> - <panel height="148" label="MEMBRI" name="members_sub_tab" tool_tip="Membri"> + <tab_container name="roles_tab_container"> + <panel label="MEMBRI" name="members_sub_tab" tool_tip="Membri"> <panel.string name="help_text"> Puoi aggiungere o rimuovere i ruoli assegnati ai membri. Seleziona più membri tenendo premuto il tasto Ctrl e cliccando sui loro nomi. </panel.string> <filter_editor label="Filtra Membri" name="filter_input"/> - <name_list bottom_delta="-105" height="104" name="member_list"> + <name_list name="member_list"> <name_list.columns label="Socio" name="name"/> <name_list.columns label="Donazioni" name="donated"/> <name_list.columns label="Stato" name="online"/> </name_list> - <button label="Invita" name="member_invite" width="165"/> + <button label="Invita" name="member_invite"/> <button label="Espelli" name="member_eject"/> </panel> - <panel height="148" label="RUOLI" name="roles_sub_tab"> + <panel label="RUOLI" name="roles_sub_tab"> <panel.string name="help_text"> I ruoli hanno un titolo con un elenco di abilità permesse che i membri possono eseguire. I membri possono avere @@ -36,7 +36,7 @@ fra cui il ruolo base o "Tutti" e il ruolo del Proprietario, ovvero il Inv_FolderClosed </panel.string> <filter_editor label="Filtra i ruoli" name="filter_input"/> - <scroll_list bottom_delta="-104" height="104" name="role_list"> + <scroll_list name="role_list"> <scroll_list.columns label="Ruolo" name="name"/> <scroll_list.columns label="Titolo" name="title"/> <scroll_list.columns label="#" name="members"/> diff --git a/indra/newview/skins/default/xui/it/panel_side_tray.xml b/indra/newview/skins/default/xui/it/panel_side_tray.xml index 846dcb69f0..e0143088a5 100644 --- a/indra/newview/skins/default/xui/it/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/it/panel_side_tray.xml @@ -6,24 +6,24 @@ <sidetray_tab description="Casa." name="sidebar_home" tab_title="Home"> <panel label="casa" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Modifica il tuo profilo pubblico e i preferiti." name="sidebar_me" tab_title="My Profile"> + <sidetray_tab description="Modifica il tuo profilo pubblico e i preferiti." name="sidebar_me" tab_title="Il mio profilo"> <panel_container name="panel_container"> <panel label="Io" name="panel_me"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Trova amici, contatti e persone nelle vicinanze." name="sidebar_people" tab_title="People"> + <sidetray_tab description="Trova amici, contatti e persone nelle vicinanze." name="sidebar_people" tab_title="Persone"> <panel_container name="panel_container"> <panel label="Profilo del gruppo" name="panel_group_info_sidetray"/> <panel label="Residenti e oggetti bloccati" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places" tab_title="Places"> + <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places" tab_title="Luoghi"> <panel label="Luoghi" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Sfoglia il tuo inventario." name="sidebar_inventory" tab_title="My Inventory"> + <sidetray_tab description="Sfoglia il tuo inventario." name="sidebar_inventory" tab_title="Il mio inventario"> <panel label="Modifica inventario" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance" tab_title="My Appearance"> + <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance" tab_title="Il mio aspetto"> <panel label="Modifica aspetto fisico" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml index fe830d864f..abbd29286b 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml @@ -12,7 +12,7 @@ <slider label="ボイスチャット" name="Voice Volume"/> <check_box label="有効" name="enable_voice_check"/> <check_box label="メディアを自動再生する" name="media_auto_play_btn" tool_tip="ここにチェックを入れてメディアの自動再生を許可します" value="true"/> - <check_box label="他のアバターに取り付けられたメディアを再生します" name="media_show_on_others_btn" tool_tip="このチェックを外すと、近くにいる他のアバターに取り付けられたメディアを非表示にします。" value="true"/> + <check_box label="他のアバターに取り付けられたメディアを再生する" name="media_show_on_others_btn" tool_tip="このチェックを外すと、近くにいる他のアバターに取り付けられたメディアを非表示にします" value="true"/> <text name="voice_chat_settings"> ボイスチャットの設定 </text> diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml index 1fe6ad25ed..a9897c7ae4 100644 --- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml @@ -13,10 +13,10 @@ </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> - <button name="back_btn" tool_tip="Navigate back"/> + <button name="back_btn" tool_tip="前へ"/> </layout_panel> <layout_panel name="fwd"> - <button name="fwd_btn" tool_tip="Navigate forward"/> + <button name="fwd_btn" tool_tip="次へ"/> </layout_panel> <layout_panel name="home"> <button name="home_btn" tool_tip="ホームページ"/> @@ -51,10 +51,10 @@ <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="ムービー再生進行"/> </layout_panel> <layout_panel name="skip_back"> - <button name="skip_back_btn" tool_tip="Step back"/> + <button name="skip_back_btn" tool_tip="前にステップ"/> </layout_panel> <layout_panel name="skip_forward"> - <button name="skip_forward_btn" tool_tip="Step forward"/> + <button name="skip_forward_btn" tool_tip="次にステップ"/> </layout_panel> <layout_panel name="media_volume"> <button name="media_mute_button" tool_tip="ミュート"/> @@ -64,7 +64,7 @@ <button name="zoom_frame_btn" tool_tip="メディアにズームイン"/> </layout_panel> <layout_panel name="close"> - <button name="close_btn" tool_tip="Zoom Back"/> + <button name="close_btn" tool_tip="ズームバック"/> </layout_panel> <layout_panel name="new_window"> <button name="new_window_btn" tool_tip="URL をブラウザで開く"/> diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml index 505e3cd719..1d590dc1f3 100644 --- a/indra/newview/skins/default/xui/nl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml @@ -45,7 +45,7 @@ <text name="ZDeadZone"> Z dode zone </text> - <text name="PitchDeadZone" left="4" width="110"> + <text name="PitchDeadZone"> Stampen dode zone </text> <text name="YawDeadZone"> diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml index 78742c39d1..2b1e362b98 100644 --- a/indra/newview/skins/default/xui/pl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml @@ -1,108 +1,108 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="KONFIGURACJA JOYSTICKA" width="590"> +<floater name="Joystick" title="KONFIGURACJA JOYSTICKA"> <check_box label="Aktywuj Joystick:" name="enable_joystick"/> <text left="130" name="joystick_type" width="360"/> <spinner label="Kalibracja Osi X" label_width="130" left="20" name="JoystickAxis1" width="170"/> <spinner label="Kalibracja Osi Y" label_width="130" left="210" name="JoystickAxis2" width="170"/> - <spinner label="Kalibracja Osi Z" label_width="130" left="400" name="JoystickAxis0" width="170"/> + <spinner label="Kalibracja Osi Z" label_width="100" left="400" name="JoystickAxis0" width="140"/> <spinner label="Kalibracja wznoszenia" label_width="130" left="20" name="JoystickAxis4" width="170"/> <spinner label="Kalibracja wychylania" label_width="130" left="210" name="JoystickAxis5" width="170"/> - <spinner label="Kalibracja obrotu" label_width="130" left="400" name="JoystickAxis3" width="170"/> + <spinner label="Kalibracja obrotu" label_width="100" left="400" name="JoystickAxis3" width="140"/> <spinner label="Kalibracja powiększania" label_width="130" name="JoystickAxis6" width="170"/> <check_box label="Bezpośrednie" left="205" name="ZoomDirect"/> <check_box label="Kursor 3D" left="340" name="Cursor3D"/> <check_box label="Automatyczne" left="450" name="AutoLeveling"/> - <text left="22" name="Control Modes:"> + <text name="Control Modes:"> Kontroluj: </text> - <check_box label="Awatara" left="130" name="JoystickAvatarEnabled" width="90"/> - <check_box label="Budowanie" left="205" name="JoystickBuildEnabled" width="90"/> - <check_box label="Kamerę podczas latania" left="282" name="JoystickFlycamEnabled" width="90"/> - <text name="XScale" width="104"> + <check_box label="Awatara" name="JoystickAvatarEnabled" width="90"/> + <check_box label="Budowanie" name="JoystickBuildEnabled" width="90"/> + <check_box label="Kamerę podczas latania" left="300" name="JoystickFlycamEnabled" width="90"/> + <text name="XScale"> Skala X </text> - <spinner left="133" name="AvatarAxisScale1"/> - <spinner left="208" name="BuildAxisScale1"/> - <spinner left="283" name="FlycamAxisScale1"/> - <text name="YScale" width="104"> + <spinner name="AvatarAxisScale1"/> + <spinner name="BuildAxisScale1"/> + <spinner left="300" name="FlycamAxisScale1"/> + <text name="YScale"> Skala Y </text> - <spinner left="133" name="AvatarAxisScale2"/> - <spinner left="208" name="BuildAxisScale2"/> - <spinner left="283" name="FlycamAxisScale2"/> - <text name="ZScale" width="104"> + <spinner name="AvatarAxisScale2"/> + <spinner name="BuildAxisScale2"/> + <spinner left="300" name="FlycamAxisScale2"/> + <text name="ZScale"> Skala Z </text> - <spinner left="133" name="AvatarAxisScale0"/> - <spinner left="208" name="BuildAxisScale0"/> - <spinner left="283" name="FlycamAxisScale0"/> - <text name="PitchScale" width="104"> + <spinner name="AvatarAxisScale0"/> + <spinner name="BuildAxisScale0"/> + <spinner left="300" name="FlycamAxisScale0"/> + <text name="PitchScale"> Skala wznoszenia </text> - <spinner left="133" name="AvatarAxisScale4"/> - <spinner left="208" name="BuildAxisScale4"/> - <spinner left="283" name="FlycamAxisScale4"/> - <text name="YawScale" width="104"> + <spinner name="AvatarAxisScale4"/> + <spinner name="BuildAxisScale4"/> + <spinner left="300" name="FlycamAxisScale4"/> + <text name="YawScale"> Skala odchylania </text> - <spinner left="133" name="AvatarAxisScale5"/> - <spinner left="208" name="BuildAxisScale5"/> - <spinner left="283" name="FlycamAxisScale5"/> - <text name="RollScale" width="104"> + <spinner name="AvatarAxisScale5"/> + <spinner name="BuildAxisScale5"/> + <spinner left="300" name="FlycamAxisScale5"/> + <text name="RollScale"> Skala obrotu </text> - <spinner left="208" name="BuildAxisScale3"/> - <spinner left="283" name="FlycamAxisScale3"/> - <text name="XDeadZone" width="104"> + <spinner name="BuildAxisScale3"/> + <spinner left="300" name="FlycamAxisScale3"/> + <text name="XDeadZone"> Tolerancja osi X </text> - <spinner left="133" name="AvatarAxisDeadZone1"/> - <spinner left="208" name="BuildAxisDeadZone1"/> - <spinner left="283" name="FlycamAxisDeadZone1"/> - <text name="YDeadZone" width="104"> + <spinner name="AvatarAxisDeadZone1"/> + <spinner name="BuildAxisDeadZone1"/> + <spinner left="300" name="FlycamAxisDeadZone1"/> + <text name="YDeadZone"> Tolerancja osi Y </text> - <spinner left="133" name="AvatarAxisDeadZone2"/> - <spinner left="208" name="BuildAxisDeadZone2"/> - <spinner left="283" name="FlycamAxisDeadZone2"/> - <text name="ZDeadZone" width="104"> + <spinner name="AvatarAxisDeadZone2"/> + <spinner name="BuildAxisDeadZone2"/> + <spinner left="300" name="FlycamAxisDeadZone2"/> + <text name="ZDeadZone"> Tolerancja osi Z </text> - <spinner left="133" name="AvatarAxisDeadZone0"/> - <spinner left="208" name="BuildAxisDeadZone0"/> - <spinner left="283" name="FlycamAxisDeadZone0"/> - <text name="PitchDeadZone" width="104"> + <spinner name="AvatarAxisDeadZone0"/> + <spinner name="BuildAxisDeadZone0"/> + <spinner left="300" name="FlycamAxisDeadZone0"/> + <text name="PitchDeadZone"> Tolerancja wznoszenia </text> - <spinner left="133" name="AvatarAxisDeadZone4"/> - <spinner left="208" name="BuildAxisDeadZone4"/> - <spinner left="283" name="FlycamAxisDeadZone4"/> - <text name="YawDeadZone" width="104"> + <spinner name="AvatarAxisDeadZone4"/> + <spinner name="BuildAxisDeadZone4"/> + <spinner left="300" name="FlycamAxisDeadZone4"/> + <text name="YawDeadZone"> Tolerancja odchylania </text> - <spinner left="133" name="AvatarAxisDeadZone5"/> - <spinner left="208" name="BuildAxisDeadZone5"/> - <spinner left="283" name="FlycamAxisDeadZone5"/> - <text name="RollDeadZone" width="104"> + <spinner name="AvatarAxisDeadZone5"/> + <spinner name="BuildAxisDeadZone5"/> + <spinner left="300" name="FlycamAxisDeadZone5"/> + <text name="RollDeadZone"> Tolerancja obrotu </text> - <spinner left="208" name="BuildAxisDeadZone3"/> - <spinner left="283" name="FlycamAxisDeadZone3"/> - <text name="Feathering" width="104"> + <spinner name="BuildAxisDeadZone3"/> + <spinner left="300" name="FlycamAxisDeadZone3"/> + <text name="Feathering"> Przenikanie </text> - <slider label="" left="125" name="AvatarFeathering"/> - <slider label="" left="200" name="BuildFeathering"/> - <slider label="" left="275" name="FlycamFeathering"/> - <text name="ZoomScale2" width="104"> + <slider label="" name="AvatarFeathering"/> + <slider label="" name="BuildFeathering"/> + <slider label="" left_delta="81" name="FlycamFeathering"/> + <text name="ZoomScale2"> Skala powiększania </text> - <spinner label="" left="283" name="FlycamAxisScale6"/> - <text name="ZoomDeadZone" width="104"> + <spinner label="" left="300" name="FlycamAxisScale6"/> + <text name="ZoomDeadZone"> Tolerancja powiększania </text> - <spinner label="" left="283" name="FlycamAxisDeadZone6"/> - <button label="Ustawienia domyślne" left="366" name="SpaceNavigatorDefaults"/> + <spinner label="" left="300" name="FlycamAxisDeadZone6"/> + <button label="Ustawienia domyślne" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" left="366" name="ok_btn"/> <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/> <stat_view label="Monitor Joysticka" name="axis_view"> diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml index 5ea5356c60..09958c84d6 100644 --- a/indra/newview/skins/default/xui/pl/panel_people.xml +++ b/indra/newview/skins/default/xui/pl/panel_people.xml @@ -47,13 +47,13 @@ Jeżeli szukasz ludzi, z którymi można się spotkać, kliknij tutaj [secondlif </panel> </tab_container> <panel name="button_bar"> - <button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/> - <button label="IM" name="im_btn" tool_tip="Rozpocznij rozmowę prywatną (IM)"/> - <button label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/> - <button label="Podziel się" name="share_btn"/> - <button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację"/> - <button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/> - <button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę"/> - <button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie"/> + <button width="55" label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/> + <button width="35" label="IM" name="im_btn" tool_tip="Rozpocznij rozmowę prywatną (IM)"/> + <button width="62" label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/> + <button width="72" label="Podziel się" name="share_btn"/> + <button width="70" label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację"/> + <button width="69" label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/> + <button width="124" label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę"/> + <button width="108" label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml index ecc4fcc9e9..98d8c0e319 100644 --- a/indra/newview/skins/default/xui/pt/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml @@ -16,7 +16,7 @@ Modos de Controle: </text> <check_box label="Avatar" name="JoystickAvatarEnabled"/> - <check_box label="Construir" left="192" name="JoystickBuildEnabled"/> + <check_box label="Construir" name="JoystickBuildEnabled"/> <check_box label="Camera aérea" name="JoystickFlycamEnabled"/> <text name="XScale"> Escala X @@ -27,13 +27,13 @@ <text name="ZScale"> Escala Z </text> - <text left="3" name="PitchScale" width="115"> + <text name="PitchScale"> Escala de Elevação </text> - <text left="3" name="YawScale" width="115"> + <text name="YawScale"> Escala da Guinada </text> - <text left="3" name="RollScale" width="115"> + <text name="RollScale"> Escala de Rolagem </text> <text name="XDeadZone"> @@ -45,13 +45,13 @@ <text name="ZDeadZone"> Zona Morta Z </text> - <text left="3" name="PitchDeadZone" width="115"> + <text name="PitchDeadZone"> Zona Morta: Elevação </text> - <text left="3" name="YawDeadZone" width="115"> + <text name="YawDeadZone"> Zona Morta: Guinada </text> - <text left="3" name="RollDeadZone" width="115"> + <text name="RollDeadZone"> Zona Morta: Rolagem </text> <text name="Feathering"> @@ -60,7 +60,7 @@ <text name="ZoomScale2"> Escala de Zoom </text> - <text left="4" name="ZoomDeadZone" width="110"> + <text name="ZoomDeadZone"> Zona Morta de Zoom </text> <button font="SansSerifSmall" label="Padrões do SpaceNavigator" name="SpaceNavigatorDefaults"/> diff --git a/install.xml b/install.xml index 2010cae15c..fa00ff81f6 100644 --- a/install.xml +++ b/install.xml @@ -320,9 +320,9 @@ <key>windows</key> <map> <key>md5sum</key> - <string>53e5ab7affff7121a5af2f82b4d58b54</string> + <string>78ccac8aaf8ea5bec482dfbcdbeb1651</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20091016.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20100414.tar.bz2</uri> </map> </map> </map> @@ -1014,9 +1014,9 @@ anguage Infrstructure (CLI) international standard</string> <key>darwin</key> <map> <key>md5sum</key> - <string>7d75751cbd8786ea4d710b50b5931b9b</string> + <string>1956228a93537f250b92f2929fa4ea40</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100402.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100415.tar.bz2</uri> </map> <key>linux</key> <map> |